From eeafb59c31823a3eaf7e12a7bb61869819063cf0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:45:04 -0500 Subject: [PATCH 001/201] Add new class/functions - Create class Core\Acl - Add Contact::pruneUnavailable - Add mod_content --- mod/acl.php | 305 ++++++++++++++++++++++++++++++++- src/Core/Acl.php | 384 ++++++++++++++++++++++++++++++++++++++++++ src/Model/Contact.php | 23 +++ 3 files changed, 708 insertions(+), 4 deletions(-) create mode 100644 src/Core/Acl.php diff --git a/mod/acl.php b/mod/acl.php index e04a3fbc7..e325e4668 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -1,12 +1,309 @@ = `failure_update` + AND `notify` != '' $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + } elseif ($type == 'f') { + // autocomplete for editor mentions of forums + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` + AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND (`forum` OR `prv`) + AND `success_update` >= `failure_update` + AND `notify` != '' $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + } elseif ($type == 'm') { + // autocomplete for Private Messages + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` + AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `success_update` >= `failure_update` + AND `network` IN ('%s', '%s') $sql_extra2", + intval(local_user()), + dbesc(NETWORK_DFRN), + dbesc(NETWORK_DIASPORA) + ); + $contact_count = (int) $r[0]['c']; + } elseif ($type == 'a') { + // autocomplete for Contacts + $r = q("SELECT COUNT(*) AS c FROM `contact` + WHERE `uid` = %d AND NOT `self` + AND NOT `pending` $sql_extra2", + intval(local_user()) + ); + $contact_count = (int) $r[0]['c']; + } else { + $contact_count = 0; + } + + $tot = $group_count + $contact_count; + + $groups = []; + $contacts = []; + + if ($type == '' || $type == 'g') { + /// @todo We should cache this query. + // This can be done when we can delete cache entries via wildcard + $r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') AS uids + FROM `group` + INNER JOIN `group_member` ON `group_member`.`gid`=`group`.`id` + WHERE NOT `group`.`deleted` AND `group`.`uid` = %d + $sql_extra + GROUP BY `group`.`name`, `group`.`id` + ORDER BY `group`.`name` + LIMIT %d,%d", + intval(local_user()), + intval($start), + intval($count) + ); + + foreach ($r as $g) { + $groups[] = [ + 'type' => 'g', + 'photo' => 'images/twopeople.png', + 'name' => htmlentities($g['name']), + 'id' => intval($g['id']), + 'uids' => array_map('intval', explode(',', $g['uids'])), + 'link' => '', + 'forum' => '0' + ]; + } + if ((count($groups) > 0) && ($search == '')) { + $groups[] = ['separator' => true]; + } + } + + if ($type == '') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_OSTATUS), + dbesc(NETWORK_STATUSNET) + ); + } elseif ($type == 'c') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_STATUSNET) + ); + } elseif ($type == 'f') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + AND (`forum` OR `prv`) + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_STATUSNET) + ); + } elseif ($type == 'm') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()), + dbesc(NETWORK_DFRN), + dbesc(NETWORK_DIASPORA) + ); + } elseif ($type == 'a') { + $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` + WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` + $sql_extra2 + ORDER BY `name` ASC ", + intval(local_user()) + ); + } elseif ($type == 'x') { + // autocomplete for global contact search (e.g. navbar search) + $r = navbar_complete($a); + $contacts = []; + foreach ($r as $g) { + $contacts[] = [ + 'photo' => proxy_url($g['photo'], false, PROXY_SIZE_MICRO), + 'name' => $g['name'], + 'nick' => (x($g['addr']) ? $g['addr'] : $g['url']), + 'network' => $g['network'], + 'link' => $g['url'], + 'forum' => (x($g['community']) ? 1 : 0), + ]; + } + $o = [ + 'start' => $start, + 'count' => $count, + 'items' => $contacts, + ]; + echo json_encode($o); + killme(); + } else { + $r = []; + } + + if (DBM::is_result($r)) { + $forums = []; + foreach ($r as $g) { + $entry = [ + 'type' => 'c', + 'photo' => proxy_url($g['micro'], false, PROXY_SIZE_MICRO), + 'name' => htmlentities($g['name']), + 'id' => intval($g['id']), + 'network' => $g['network'], + 'link' => $g['url'], + 'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']), + 'addr' => htmlentities(($g['addr']) ? $g['addr'] : $g['url']), + 'forum' => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0), + ]; + if ($entry['forum']) { + $forums[] = $entry; + } else { + $contacts[] = $entry; + } + } + if (count($forums) > 0) { + if ($search == '') { + $forums[] = ['separator' => true]; + } + $contacts = array_merge($forums, $contacts); + } + } + + $items = array_merge($groups, $contacts); + + if ($conv_id) { + /* + * if $conv_id is set, get unknown contacts in thread + * but first get known contacts url to filter them out + */ + $known_contacts = array_map(function ($i) { + return dbesc($i['link']); + }, $contacts); + + $unknown_contacts = []; + $r = q("SELECT `author-link` + FROM `item` WHERE `parent` = %d + AND (`author-name` LIKE '%%%s%%' OR `author-link` LIKE '%%%s%%') + AND `author-link` NOT IN ('%s') + GROUP BY `author-link`, `author-avatar`, `author-name` + ORDER BY `author-name` ASC + ", + intval($conv_id), + dbesc($search), + dbesc($search), + implode("', '", $known_contacts) + ); + if (DBM::is_result($r)) { + foreach ($r as $row) { + $contact = Contact::getDetailsByURL($row['author-link']); + + if (count($contact) > 0) { + $unknown_contacts[] = [ + 'type' => 'c', + 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), + 'name' => htmlentities($contact['name']), + 'id' => intval($contact['cid']), + 'network' => $contact['network'], + 'link' => $contact['url'], + 'nick' => htmlentities($contact['nick'] ?: $contact['addr']), + 'addr' => htmlentities(($contact['addr']) ? $contact['addr'] : $contact['url']), + 'forum' => $contact['forum'] + ]; + } + } + } + + $items = array_merge($items, $unknown_contacts); + $tot += count($unknown_contacts); + } + + $results = [ + 'tot' => $tot, + 'start' => $start, + 'count' => $count, + 'groups' => $groups, + 'contacts' => $contacts, + 'items' => $items, + 'type' => $type, + 'search' => $search, + ]; + + Addon::callHooks('acl_lookup_end', $results); + + $o = [ + 'tot' => $results['tot'], + 'start' => $results['start'], + 'count' => $results['count'], + 'items' => $results['items'], + ]; + + echo json_encode($o); + + killme(); } - - diff --git a/src/Core/Acl.php b/src/Core/Acl.php new file mode 100644 index 000000000..67e2633a2 --- /dev/null +++ b/src/Core/Acl.php @@ -0,0 +1,384 @@ + + */ +class Acl extends BaseObject +{ + /** + * Returns a select input tag with all the contact of the local user + * + * @param string $selname Name attribute of the select input tag + * @param string $selclass Class attribute of the select input tag + * @param array $options Available options: + * - size: length of the select box + * - mutual_friends: Only used for the hook + * - single: Only used for the hook + * - exclude: Only used for the hook + * @param array $preselected Contact ID that should be already selected + * @return string + */ + public static function getSuggestContactSelectHTML($selname, $selclass, array $options = [], array $preselected = []) + { + $a = self::getApp(); + + $networks = null; + + $size = defaults($options, 'size', 4); + $mutual = !empty($options['mutual_friends']); + $single = !empty($options['single']) && empty($options['multiple']); + $exclude = defaults($options, 'exclude', false); + + switch (defaults($options, 'networks', Protocol::PHANTOM)) { + case 'DFRN_ONLY': + $networks = [NETWORK_DFRN]; + break; + case 'PRIVATE': + if (!empty($a->user['prvnets'])) { + $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; + } else { + $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA]; + } + break; + case 'TWO_WAY': + if (!empty($a->user['prvnets'])) { + $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; + } else { + $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA, NETWORK_OSTATUS]; + } + break; + default: /// @TODO Maybe log this call? + break; + } + + $x = ['options' => $options, 'size' => $size, 'single' => $single, 'mutual' => $mutual, 'exclude' => $exclude, 'networks' => $networks]; + + Addon::callHooks('contact_select_options', $x); + + $o = ''; + + $sql_extra = ''; + + if (!empty($x['mutual'])) { + $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); + } + + if (!empty($x['exclude'])) { + $sql_extra .= sprintf(" AND `id` != %d ", intval($x['exclude'])); + } + + if (!empty($x['networks'])) { + /// @TODO rewrite to foreach() + array_walk($x['networks'], function (&$value) { + $value = "'" . dbesc($value) . "'"; + }); + $str_nets = implode(',', $x['networks']); + $sql_extra .= " AND `network` IN ( $str_nets ) "; + } + + $tabindex = (!empty($options['tabindex']) ? 'tabindex="' . $options["tabindex"] . '"' : ''); + + if (!empty($x['single'])) { + $o .= "\r\n"; + } + + $stmt = dba::p("SELECT `id`, `name`, `url`, `network` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + $sql_extra + ORDER BY `name` ASC ", intval(local_user()) + ); + + $contacts = dba::inArray($stmt); + + $arr = ['contact' => $contacts, 'entry' => $o]; + + // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' + Addon::callHooks($a->module . '_pre_' . $selname, $arr); + + if (DBM::is_result($contacts)) { + foreach ($contacts as $contact) { + if (in_array($contact['id'], $preselected)) { + $selected = ' selected="selected" '; + } else { + $selected = ''; + } + + $trimmed = mb_substr($contact['name'], 0, 20); + + $o .= "\r\n"; + } + } + + $o .= '' . PHP_EOL; + + Addon::callHooks($a->module . '_post_' . $selname, $o); + + return $o; + } + + /** + * Returns a select input tag with all the contact of the local user + * + * @param string $selname Name attribute of the select input tag + * @param string $selclass Class attribute of the select input tag + * @param array $preselected Contact ID that should be already selected + * @param int $size Length of the select box + * @param bool $privmail + * @param bool $celeb + * @param bool $privatenet + * @param int $tabindex Select input tag tabindex attribute + * @return string + */ + public static function getMessageContactSelectHTML( + $selname, $selclass, array $preselected = [], $size = 4, $privmail = false, $celeb = false, $privatenet = false, + $tabindex = null) + { + $a = self::getApp(); + + $o = ''; + + // When used for private messages, we limit correspondence to mutual DFRN/Friendica friends and the selector + // to one recipient. By default our selector allows multiple selects amongst all contacts. + + $sql_extra = ''; + + if ($privmail || $celeb) { + $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); + } + + if ($privmail) { + $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", NETWORK_DFRN, NETWORK_DIASPORA); + } elseif ($privatenet) { + $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ", NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, + NETWORK_DIASPORA); + } + + $tabindex_attr = !empty($tabindex) ? ' tabindex="' . intval($tabindex) . '"' : ''; + + if ($privmail && $preselected) { + $sql_extra .= " AND `id` IN (" . implode(",", $preselected) . ")"; + $hidepreselected = ' style="display: none;"'; + } else { + $hidepreselected = ''; + } + + if ($privmail) { + $o .= "\r\n"; + } + + $stmt = dba::p("SELECT `id`, `name`, `url`, `network` FROM `contact` + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + $sql_extra + ORDER BY `name` ASC ", intval(local_user()) + ); + + $contacts = dba::inArray($stmt); + + $arr = ['contact' => $contacts, 'entry' => $o]; + + // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' + + Addon::callHooks($a->module . '_pre_' . $selname, $arr); + + $receiverlist = []; + + if (DBM::is_result($contacts)) { + foreach ($contacts as $contact) { + if (in_array($contact['id'], $preselected)) { + $selected = ' selected="selected"'; + } else { + $selected = ''; + } + + if ($privmail) { + $trimmed = Protocol::formatMention($contact['url'], $contact['name']); + } else { + $trimmed = mb_substr($contact['name'], 0, 20); + } + + $receiverlist[] = $trimmed; + + $o .= "\r\n"; + } + } + + $o .= '' . PHP_EOL; + + if ($privmail && $preselected) { + $o .= implode(', ', $receiverlist); + } + + Addon::callHooks($a->module . '_post_' . $selname, $o); + + return $o; + } + + /** + * Return the default permission of the provided user array + * + * @param array $user + * @return array Hash of contact id lists + */ + public static function getDefaultUserPermissions(array $user = null) + { + $matches = []; + + $acl_regex = '/<([0-9]+)>/i'; + + preg_match_all($acl_regex, defaults($user, 'allow_cid', ''), $matches); + $allow_cid = $matches[1]; + preg_match_all($acl_regex, defaults($user, 'allow_gid', ''), $matches); + $allow_gid = $matches[1]; + preg_match_all($acl_regex, defaults($user, 'deny_cid', ''), $matches); + $deny_cid = $matches[1]; + preg_match_all($acl_regex, defaults($user, 'deny_gid', ''), $matches); + $deny_gid = $matches[1]; + + Contact::pruneUnavailable($allow_cid); + + return [ + 'allow_cid' => $allow_cid, + 'allow_gid' => $allow_gid, + 'deny_cid' => $deny_cid, + 'deny_gid' => $deny_gid, + ]; + } + + /** + * Return the full jot ACL selector HTML + * + * @param array $user + * @param bool $show_jotnets + * @return string + */ + public static function getFullSelectorHTML(array $user = null, $show_jotnets = false) + { + $perms = self::getDefaultUserPermissions($user); + + $jotnets = ''; + if ($show_jotnets) { + $imap_disabled = !function_exists('imap_open') || Config::get('system', 'imap_disabled'); + + $mail_enabled = false; + $pubmail_enabled = false; + + if (!$imap_disabled) { + $mailacct = dba::selectFirst('mailacct', ['pubmail'], ['`uid` = ? AND `server` != ""', local_user()]); + if (DBM::is_result($mailacct)) { + $mail_enabled = true; + $pubmail_enabled = !empty($mailacct['pubmail']); + } + } + + if (empty($user['hidewall'])) { + if ($mail_enabled) { + $selected = $pubmail_enabled ? ' checked="checked"' : ''; + $jotnets .= '
' . L10n::t("Post to Email") . '
'; + } + + Addon::callHooks('jot_networks', $jotnets); + } else { + $jotnets .= L10n::t('Connectors disabled, since "%s" is enabled.', + L10n::t('Hide your profile details from unknown viewers?')); + } + } + + $tpl = get_markup_template('acl_selector.tpl'); + $o = replace_macros($tpl, [ + '$showall' => L10n::t('Visible to everybody'), + '$show' => L10n::t('show'), + '$hide' => L10n::t('don\'t show'), + '$allowcid' => json_encode($perms['allow_cid']), + '$allowgid' => json_encode($perms['allow_gid']), + '$denycid' => json_encode($perms['deny_cid']), + '$denygid' => json_encode($perms['deny_gid']), + '$networks' => $show_jotnets, + '$emailcc' => L10n::t('CC: email addresses'), + '$emtitle' => L10n::t('Example: bob@example.com, mary@example.com'), + '$jotnets' => $jotnets, + '$aclModalTitle' => L10n::t('Permissions'), + '$aclModalDismiss' => L10n::t('Close'), + '$features' => [ + 'aclautomention' => Feature::isEnabled($user['uid'], 'aclautomention') ? 'true' : 'false' + ], + ]); + + return $o; + } + + /** + * Searching for global contacts for autocompletion + * + * @brief Searching for global contacts for autocompletion + * @param string $search Name or part of a name or nick + * @param string $mode Search mode (e.g. "community") + * @return array with the search results + */ + public static function contactAutocomplete($search, $mode) + { + if ((Config::get('system', 'block_public')) && (!local_user()) && (!remote_user())) { + return []; + } + + // don't search if search term has less than 2 characters + if (!$search || mb_strlen($search) < 2) { + return []; + } + + if (substr($search, 0, 1) === '@') { + $search = substr($search, 1); + } + + // check if searching in the local global contact table is enabled + if (Config::get('system', 'poco_local_search')) { + $return = GContact::searchByName($search, $mode); + } else { + $a = self::getApp(); + $p = $a->pager['page'] != 1 ? '&p=' . $a->pager['page'] : ''; + + $response = Network::curl(get_server() . '/lsearch?f=' . $p . '&search=' . urlencode($search)); + if ($response['success']) { + $lsearch = json_decode($response['body'], true); + if (!empty($lsearch['results'])) { + $return = $lsearch['results']; + } + } + } + + return defaults($return, []); + } +} diff --git a/src/Model/Contact.php b/src/Model/Contact.php index fc27b0c41..85e71075a 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -1517,4 +1517,27 @@ class Contact extends BaseObject } } } + + /** + * Remove the unavailable contact ids from the provided list + * + * @param array $contact_ids Contact id list + */ + public static function pruneUnavailable(array &$contact_ids) + { + if (empty($contact_ids)) { + return; + } + + $str = dbesc(implode(',', $contact_ids)); + + $stmt = dba::p("SELECT `id` FROM `contact` WHERE `id` IN ( " . $str . ") AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0"); + + $return = []; + while($contact = dba::fetch($stmt)) { + $return[] = $contact['id']; + } + + $contact_ids = $return; + } } From e2de86de4654c7948a9bfeba564d08106f52383d Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:45:32 -0500 Subject: [PATCH 002/201] Update references in acl_selectors to new functions --- include/acl_selectors.php | 724 +------------------------------------- 1 file changed, 8 insertions(+), 716 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index e69ac36f6..37819fb56 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -4,744 +4,36 @@ */ use Friendica\App; -use Friendica\Content\Feature; -use Friendica\Content\Widget; -use Friendica\Core\Addon; -use Friendica\Core\Config; -use Friendica\Core\L10n; -use Friendica\Core\Protocol; -use Friendica\Database\DBM; +use Friendica\Core\Acl; use Friendica\Model\Contact; -use Friendica\Model\GContact; -use Friendica\Util\Network; require_once "mod/proxy.php"; -/** - * @package acl_selectors - */ -function group_select($selname,$selclass,$preselected = false,$size = 4) { - - $a = get_app(); - - $o = ''; - - $o .= "\r\n"; - - Addon::callHooks($a->module . '_post_' . $selname, $o); - - - return $o; -} - -/// @TODO find proper type-hints function contact_selector($selname, $selclass, $options, $preselected = false) { - $a = get_app(); - - $mutual = false; - $networks = null; - $single = false; - $exclude = false; - $size = 4; - - if (is_array($options)) { - if (x($options, 'size')) - $size = $options['size']; - - if (x($options, 'mutual_friends')) { - $mutual = true; - } - if (x($options, 'single')) { - $single = true; - } - if (x($options, 'multiple')) { - $single = false; - } - if (x($options, 'exclude')) { - $exclude = $options['exclude']; - } - - if (x($options, 'networks')) { - switch ($options['networks']) { - case 'DFRN_ONLY': - $networks = [NETWORK_DFRN]; - break; - case 'PRIVATE': - if (is_array($a->user) && $a->user['prvnets']) { - $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; - } else { - $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA]; - } - break; - case 'TWO_WAY': - if (is_array($a->user) && $a->user['prvnets']) { - $networks = [NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA]; - } else { - $networks = [NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA, NETWORK_OSTATUS]; - } - break; - default: /// @TODO Maybe log this call? - break; - } - } - } - - $x = ['options' => $options, 'size' => $size, 'single' => $single, 'mutual' => $mutual, 'exclude' => $exclude, 'networks' => $networks]; - - Addon::callHooks('contact_select_options', $x); - - $o = ''; - - $sql_extra = ''; - - if (x($x, 'mutual')) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); - } - - if (x($x, 'exclude')) { - $sql_extra .= sprintf(" AND `id` != %d ", intval($x['exclude'])); - } - - if (is_array($x['networks']) && count($x['networks'])) { - /// @TODO rewrite to foreach() - for ($y = 0; $y < count($x['networks']) ; $y ++) { - $x['networks'][$y] = "'" . dbesc($x['networks'][$y]) . "'"; - } - $str_nets = implode(',', $x['networks']); - $sql_extra .= " AND `network` IN ( $str_nets ) "; - } - - $tabindex = (x($options, 'tabindex') ? "tabindex=\"" . $options["tabindex"] . "\"" : ""); - - if ($x['single']) { - $o .= "\r\n"; - } - - $r = q("SELECT `id`, `name`, `url`, `network` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - $sql_extra - ORDER BY `name` ASC ", - intval(local_user()) - ); - - - $arr = ['contact' => $r, 'entry' => $o]; - - // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' - - Addon::callHooks($a->module . '_pre_' . $selname, $arr); - - if (DBM::is_result($r)) { - foreach ($r as $rr) { - if ((is_array($preselected)) && in_array($rr['id'], $preselected)) { - $selected = " selected=\"selected\" "; - } else { - $selected = ''; - } - - $trimmed = mb_substr($rr['name'],0,20); - - $o .= "\r\n"; - } - - } - - $o .= "\r\n"; - - Addon::callHooks($a->module . '_post_' . $selname, $o); - - return $o; + return Acl::getSuggestContactSelectHTML($selname, $selclass, $options, defaults($preselected, [])); } - - function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) { - $a = get_app(); - - $o = ''; - - // When used for private messages, we limit correspondence to mutual DFRN/Friendica friends and the selector - // to one recipient. By default our selector allows multiple selects amongst all contacts. - - $sql_extra = ''; - - if ($privmail || $celeb) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); - } - - if ($privmail) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", - NETWORK_DFRN, NETWORK_DIASPORA); - } elseif ($privatenet) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ", - NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, NETWORK_DIASPORA); - } - - $tabindex = ($tabindex > 0 ? "tabindex=\"$tabindex\"" : ""); - - if ($privmail && $preselected) { - $sql_extra .= " AND `id` IN (".implode(",", $preselected).")"; - $hidepreselected = ' style="display: none;"'; - } else { - $hidepreselected = ""; - } - - if ($privmail) { - $o .= "\r\n"; - } - - $r = q("SELECT `id`, `name`, `url`, `network` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - $sql_extra - ORDER BY `name` ASC ", - intval(local_user()) - ); - - - $arr = ['contact' => $r, 'entry' => $o]; - - // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' - - Addon::callHooks($a->module . '_pre_' . $selname, $arr); - - $receiverlist = []; - - if (DBM::is_result($r)) { - foreach ($r as $rr) { - if ((is_array($preselected)) && in_array($rr['id'], $preselected)) { - $selected = " selected=\"selected\" "; - } else { - $selected = ''; - } - - if ($privmail) { - $trimmed = Protocol::formatMention($rr['url'], $rr['name']); - } else { - $trimmed = mb_substr($rr['name'],0,20); - } - - $receiverlist[] = $trimmed; - - $o .= "\r\n"; - } - - } - - $o .= "\r\n"; - - if ($privmail && $preselected) { - $o .= implode(", ", $receiverlist); - } - - Addon::callHooks($a->module . '_post_' . $selname, $o); - - return $o; -} - - -function fixacl(&$item) { - $item = intval(str_replace(['<', '>'], ['', ''], $item)); + return Acl::getMessageContactSelectHTML($selname, $selclass, defaults($preselected, []), $size, $privmail, $celeb, $privatenet, $tabindex); } function prune_deadguys($arr) { - - if (! $arr) { - return $arr; - } - - $str = dbesc(implode(',', $arr)); - - $r = q("SELECT `id` FROM `contact` WHERE `id` IN ( " . $str . ") AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 "); - - if (DBM::is_result($r)) { - $ret = []; - foreach ($r as $rr) { - $ret[] = intval($rr['id']); - } - return $ret; - } - - return []; + Contact::pruneUnavailable($arr); + return $arr; } - function get_acl_permissions($user = null) { - $allow_cid = $allow_gid = $deny_cid = $deny_gid = false; - - if (is_array($user)) { - $allow_cid = ((strlen($user['allow_cid'])) - ? explode('><', $user['allow_cid']) : [] ); - $allow_gid = ((strlen($user['allow_gid'])) - ? explode('><', $user['allow_gid']) : [] ); - $deny_cid = ((strlen($user['deny_cid'])) - ? explode('><', $user['deny_cid']) : [] ); - $deny_gid = ((strlen($user['deny_gid'])) - ? explode('><', $user['deny_gid']) : [] ); - array_walk($allow_cid,'fixacl'); - array_walk($allow_gid,'fixacl'); - array_walk($deny_cid,'fixacl'); - array_walk($deny_gid,'fixacl'); - } - - $allow_cid = prune_deadguys($allow_cid); - - return [ - 'allow_cid' => $allow_cid, - 'allow_gid' => $allow_gid, - 'deny_cid' => $deny_cid, - 'deny_gid' => $deny_gid, - ]; + return Acl::getDefaultUserPermissions($user); } - function populate_acl($user = null, $show_jotnets = false) { - - $perms = get_acl_permissions($user); - - $jotnets = ''; - if ($show_jotnets) { - $mail_disabled = ((function_exists('imap_open') && (! Config::get('system','imap_disabled'))) ? 0 : 1); - - $mail_enabled = false; - $pubmail_enabled = false; - - if (! $mail_disabled) { - $r = q("SELECT `pubmail` FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", - intval(local_user()) - ); - if (DBM::is_result($r)) { - $mail_enabled = true; - if (intval($r[0]['pubmail'])) { - $pubmail_enabled = true; - } - } - } - - if (!$user['hidewall']) { - if ($mail_enabled) { - $selected = (($pubmail_enabled) ? ' checked="checked" ' : ''); - $jotnets .= '
' . L10n::t("Post to Email") . '
'; - } - - Addon::callHooks('jot_networks', $jotnets); - } else { - $jotnets .= L10n::t('Connectors disabled, since "%s" is enabled.', L10n::t('Hide your profile details from unknown viewers?')); - } - } - - $tpl = get_markup_template("acl_selector.tpl"); - $o = replace_macros($tpl, [ - '$showall'=> L10n::t("Visible to everybody"), - '$show' => L10n::t("show"), - '$hide' => L10n::t("don't show"), - '$allowcid' => json_encode($perms['allow_cid']), - '$allowgid' => json_encode($perms['allow_gid']), - '$denycid' => json_encode($perms['deny_cid']), - '$denygid' => json_encode($perms['deny_gid']), - '$networks' => $show_jotnets, - '$emailcc' => L10n::t('CC: email addresses'), - '$emtitle' => L10n::t('Example: bob@example.com, mary@example.com'), - '$jotnets' => $jotnets, - '$aclModalTitle' => L10n::t('Permissions'), - '$aclModalDismiss' => L10n::t('Close'), - '$features' => [ - 'aclautomention' => (Feature::isEnabled($user['uid'], "aclautomention") ? "true" : "false") - ], - ]); - - - return $o; - + return Acl::getFullSelectorHTML($user, $show_jotnets); } -function acl_lookup(App $a, $out_type = 'json') -{ - if (!local_user()) { - return ''; - } - - $start = defaults($_REQUEST, 'start' , 0); - $count = defaults($_REQUEST, 'count' , 100); - $search = defaults($_REQUEST, 'search' , ''); - $type = defaults($_REQUEST, 'type' , ''); - $conv_id = defaults($_REQUEST, 'conversation', null); - - // For use with jquery.textcomplete for private mail completion - if (x($_REQUEST, 'query')) { - if (! $type) { - $type = 'm'; - } - $search = $_REQUEST['query']; - } - - logger("Searching for ".$search." - type ".$type, LOGGER_DEBUG); - - if ($search != '') { - $sql_extra = "AND `name` LIKE '%%".dbesc($search)."%%'"; - $sql_extra2 = "AND (`attag` LIKE '%%".dbesc($search)."%%' OR `name` LIKE '%%".dbesc($search)."%%' OR `nick` LIKE '%%".dbesc($search)."%%')"; - } else { - /// @TODO Avoid these needless else blocks by putting variable-initialization atop of if() - $sql_extra = $sql_extra2 = ""; - } - - // count groups and contacts - if ($type == '' || $type == 'g') { - $r = q("SELECT COUNT(*) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra", - intval(local_user()) - ); - $group_count = (int)$r[0]['g']; - } else { - $group_count = 0; - } - - $sql_extra2 .= " ".Widget::unavailableNetworks(); - - if ($type == '' || $type == 'c') { - // autocomplete for editor mentions - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` - AND `notify` != '' $sql_extra2" , - intval(local_user()) - ); - $contact_count = (int)$r[0]['c']; - } elseif ($type == 'f') { - // autocomplete for editor mentions of forums - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND (`forum` OR `prv`) - AND `success_update` >= `failure_update` - AND `notify` != '' $sql_extra2" , - intval(local_user()) - ); - $contact_count = (int)$r[0]['c']; - } elseif ($type == 'm') { - // autocomplete for Private Messages - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` - AND `network` IN ('%s', '%s') $sql_extra2" , - intval(local_user()), - dbesc(NETWORK_DFRN), - dbesc(NETWORK_DIASPORA) - ); - $contact_count = (int)$r[0]['c']; - - } elseif ($type == 'a') { - // autocomplete for Contacts - $r = q("SELECT COUNT(*) AS c FROM `contact` - WHERE `uid` = %d AND NOT `self` - AND NOT `pending` $sql_extra2" , - intval(local_user()) - ); - $contact_count = (int)$r[0]['c']; - } else { - $contact_count = 0; - } - - $tot = $group_count + $contact_count; - - $groups = []; - $contacts = []; - - if ($type == '' || $type == 'g') { - /// @todo We should cache this query. - // This can be done when we can delete cache entries via wildcard - $r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') AS uids - FROM `group` - INNER JOIN `group_member` ON `group_member`.`gid`=`group`.`id` - WHERE NOT `group`.`deleted` AND `group`.`uid` = %d - $sql_extra - GROUP BY `group`.`name`, `group`.`id` - ORDER BY `group`.`name` - LIMIT %d,%d", - intval(local_user()), - intval($start), - intval($count) - ); - - foreach ($r as $g) { - $groups[] = [ - "type" => "g", - "photo" => "images/twopeople.png", - "name" => htmlentities($g['name']), - "id" => intval($g['id']), - "uids" => array_map("intval", explode(",",$g['uids'])), - "link" => '', - "forum" => '0' - ]; - } - if ((count($groups) > 0) && ($search == "")) { - $groups[] = ["separator" => true]; - } - } - - if ($type == '') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET) - ); - } elseif ($type == 'c') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_STATUSNET) - ); - } elseif ($type == 'f') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - AND (`forum` OR `prv`) - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_STATUSNET) - ); - } elseif ($type == 'm') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()), - dbesc(NETWORK_DFRN), - dbesc(NETWORK_DIASPORA) - ); - } elseif ($type == 'a') { - $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` - $sql_extra2 - ORDER BY `name` ASC ", - intval(local_user()) - ); - } elseif ($type == 'x') { - // autocomplete for global contact search (e.g. navbar search) - $r = navbar_complete($a); - $contacts = []; - if ($r) { - foreach ($r as $g) { - $contacts[] = [ - 'photo' => proxy_url($g['photo'], false, PROXY_SIZE_MICRO), - 'name' => $g['name'], - 'nick' => (x($g['addr']) ? $g['addr'] : $g['url']), - 'network' => $g['network'], - 'link' => $g['url'], - 'forum' => (x($g['community']) ? 1 : 0), - ]; - } - } - $o = [ - 'start' => $start, - 'count' => $count, - 'items' => $contacts, - ]; - echo json_encode($o); - killme(); - } else { - $r = []; - } - - if (DBM::is_result($r)) { - $forums = []; - foreach ($r as $g) { - $entry = [ - 'type' => 'c', - 'photo' => proxy_url($g['micro'], false, PROXY_SIZE_MICRO), - 'name' => htmlentities($g['name']), - 'id' => intval($g['id']), - 'network' => $g['network'], - 'link' => $g['url'], - 'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']), - 'addr' => htmlentities(($g['addr']) ? $g['addr'] : $g['url']), - 'forum' => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0), - ]; - if ($entry['forum']) { - $forums[] = $entry; - } else { - $contacts[] = $entry; - } - } - if (count($forums) > 0) { - if ($search == "") { - $forums[] = ["separator" => true]; - } - $contacts = array_merge($forums, $contacts); - } - } - - $items = array_merge($groups, $contacts); - - if ($conv_id) { - /* - * if $conv_id is set, get unknown contacts in thread - * but first get known contacts url to filter them out - */ - $known_contacts = array_map( - function ($i) { - return dbesc($i['link']); - } - , $contacts); - - $unknown_contacts = []; - $r = q("SELECT `author-link` - FROM `item` WHERE `parent` = %d - AND (`author-name` LIKE '%%%s%%' OR `author-link` LIKE '%%%s%%') - AND `author-link` NOT IN ('%s') - GROUP BY `author-link`, `author-avatar`, `author-name` - ORDER BY `author-name` ASC - ", - intval($conv_id), - dbesc($search), - dbesc($search), - implode("', '", $known_contacts) - ); - if (DBM::is_result($r)) { - foreach ($r as $row) { - $contact = Contact::getDetailsByURL($row['author-link']); - - if (count($contact) > 0) { - $unknown_contacts[] = [ - 'type' => 'c', - 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), - 'name' => htmlentities($contact['name']), - 'id' => intval($contact['cid']), - 'network' => $contact['network'], - 'link' => $contact['url'], - 'nick' => htmlentities($contact['nick'] ? : $contact['addr']), - 'addr' => htmlentities(($contact['addr']) ? $contact['addr'] : $contact['url']), - 'forum' => $contact['forum'] - ]; - } - } - } - - $items = array_merge($items, $unknown_contacts); - $tot += count($unknown_contacts); - } - - $results = [ - 'tot' => $tot, - 'start' => $start, - 'count' => $count, - 'groups' => $groups, - 'contacts' => $contacts, - 'items' => $items, - 'type' => $type, - 'search' => $search, - ]; - - Addon::callHooks('acl_lookup_end', $results); - - if ($out_type === 'html') { - $o = [ - 'tot' => $results['tot'], - 'start' => $results['start'], - 'count' => $results['count'], - 'groups' => $results['groups'], - 'contacts' => $results['contacts'], - ]; - return $o; - } - - $o = [ - 'tot' => $results['tot'], - 'start' => $results['start'], - 'count' => $results['count'], - 'items' => $results['items'], - ]; - - echo json_encode($o); - - killme(); -} -/** - * @brief Searching for global contacts for autocompletion - * - * @param App $a - * @return array with the search results - */ function navbar_complete(App $a) { - -// logger('navbar_complete'); - - if ((Config::get('system','block_public')) && (! local_user()) && (! remote_user())) { - return; - } - - // check if searching in the local global contact table is enabled - $localsearch = Config::get('system','poco_local_search'); - $search = notags(trim($_REQUEST['search'])); $mode = $_REQUEST['smode']; - // don't search if search term has less than 2 characters - if (! $search || mb_strlen($search) < 2) { - return []; - } - - if (substr($search,0,1) === '@') { - $search = substr($search,1); - } - - if ($localsearch) { - $x = GContact::searchByName($search, $mode); - return $x; - } - - if (! $localsearch) { - $p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : ''); - - $x = Network::curl(get_server() . '/lsearch?f=' . $p . '&search=' . urlencode($search)); - if ($x['success']) { - $j = json_decode($x['body'],true); - if ($j && isset($j['results'])) { - return $j['results']; - } - } - } - - /// @TODO Not needed here? - return; + return Acl::contactAutocomplete($search, $mode); } From eef25a32593a58432029c71497ee77a24f04bf1e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:47:10 -0500 Subject: [PATCH 003/201] Move contact_selector() --- include/acl_selectors.php | 5 ----- mod/fsuggest.php | 6 +++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 37819fb56..b4eed7dd4 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,11 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function contact_selector($selname, $selclass, $options, $preselected = false) -{ - return Acl::getSuggestContactSelectHTML($selname, $selclass, $options, defaults($preselected, [])); -} - function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) { return Acl::getMessageContactSelectHTML($selname, $selclass, defaults($preselected, []), $size, $privmail, $celeb, $privatenet, $tabindex); } diff --git a/mod/fsuggest.php b/mod/fsuggest.php index 86878a529..b0abeb220 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -4,6 +4,7 @@ */ use Friendica\App; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\Worker; use Friendica\Database\DBM; @@ -105,11 +106,10 @@ function fsuggest_content(App $a) $o .= '
'; - $o .= contact_selector( + $o .= Acl::getSuggestContactSelectHTML( 'suggest', 'suggest-select', - ['size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true], - false + ['size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true] ); From 113ea38d502e0ca90ec87b3cbaf4d8656f733022 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:56:53 -0500 Subject: [PATCH 004/201] Move contact_select to Acl - Simplify Acl::getMessageContactSelectHTML parameters --- include/acl_selectors.php | 4 ---- mod/message.php | 5 +++-- src/Core/Acl.php | 44 ++++++++------------------------------- 3 files changed, 12 insertions(+), 41 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index b4eed7dd4..b965c2ca6 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,10 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) { - return Acl::getMessageContactSelectHTML($selname, $selclass, defaults($preselected, []), $size, $privmail, $celeb, $privatenet, $tabindex); -} - function prune_deadguys($arr) { Contact::pruneUnavailable($arr); return $arr; diff --git a/mod/message.php b/mod/message.php index 40f1dd08c..d2980aaea 100644 --- a/mod/message.php +++ b/mod/message.php @@ -7,6 +7,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Smilies; use Friendica\Content\Text\BBCode; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Database\DBM; @@ -236,14 +237,14 @@ function message_content(App $a) $preid = $r[0]['id']; $preselect = [$preid]; } else { - $preselect = false; + $preselect = []; } } $prefill = $preselect ? $prename : ''; // the ugly select box - $select = contact_select('messageto', 'message-to-select', $preselect, 4, true, false, false, 10); + $select = Acl::getMessageContactSelectHTML('messageto', 'message-to-select', $preselect, 4, 10); $tpl = get_markup_template('prv_message.tpl'); $o .= replace_macros($tpl, [ diff --git a/src/Core/Acl.php b/src/Core/Acl.php index 67e2633a2..1c72d23cb 100644 --- a/src/Core/Acl.php +++ b/src/Core/Acl.php @@ -153,17 +153,12 @@ class Acl extends BaseObject * * @param string $selname Name attribute of the select input tag * @param string $selclass Class attribute of the select input tag - * @param array $preselected Contact ID that should be already selected + * @param array $preselected Contact IDs that should be already selected * @param int $size Length of the select box - * @param bool $privmail - * @param bool $celeb - * @param bool $privatenet * @param int $tabindex Select input tag tabindex attribute * @return string */ - public static function getMessageContactSelectHTML( - $selname, $selclass, array $preselected = [], $size = 4, $privmail = false, $celeb = false, $privatenet = false, - $tabindex = null) + public static function getMessageContactSelectHTML($selname, $selclass, array $preselected = [], $size = 4, $tabindex = null) { $a = self::getApp(); @@ -171,34 +166,18 @@ class Acl extends BaseObject // When used for private messages, we limit correspondence to mutual DFRN/Friendica friends and the selector // to one recipient. By default our selector allows multiple selects amongst all contacts. - - $sql_extra = ''; - - if ($privmail || $celeb) { - $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); - } - - if ($privmail) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", NETWORK_DFRN, NETWORK_DIASPORA); - } elseif ($privatenet) { - $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ", NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, - NETWORK_DIASPORA); - } + $sql_extra = sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); + $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", NETWORK_DFRN, NETWORK_DIASPORA); $tabindex_attr = !empty($tabindex) ? ' tabindex="' . intval($tabindex) . '"' : ''; - if ($privmail && $preselected) { + $hidepreselected = ''; + if ($preselected) { $sql_extra .= " AND `id` IN (" . implode(",", $preselected) . ")"; $hidepreselected = ' style="display: none;"'; - } else { - $hidepreselected = ''; } - if ($privmail) { - $o .= "\r\n"; - } + $o .= "' . PHP_EOL; - if ($privmail && $preselected) { + if ($preselected) { $o .= implode(', ', $receiverlist); } From ce9e0f3649d89c7acdc1290ffb3175ff84eab664 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 19:58:23 -0500 Subject: [PATCH 005/201] Move prune_deadguys to Contact --- include/acl_selectors.php | 5 ----- src/Model/Group.php | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index b965c2ca6..9eab2ffd7 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,11 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function prune_deadguys($arr) { - Contact::pruneUnavailable($arr); - return $arr; -} - function get_acl_permissions($user = null) { return Acl::getDefaultUserPermissions($user); } diff --git a/src/Model/Group.php b/src/Model/Group.php index 9e472a7ad..c1430642d 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -4,8 +4,8 @@ */ namespace Friendica\Model; -use Friendica\Core\L10n; use Friendica\BaseObject; +use Friendica\Core\L10n; use Friendica\Database\DBM; use dba; @@ -290,7 +290,7 @@ class Group extends BaseObject if ($check_dead && !$use_gcontact) { require_once 'include/acl_selectors.php'; - $return = prune_deadguys($return); + Contact::pruneUnavailable($return); } return $return; } From 2b35938e34da9327d32f0883eae525b85ccce88a Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:00:05 -0500 Subject: [PATCH 006/201] Move get_acl_permissions to Acl --- include/acl_selectors.php | 4 ---- mod/bookmarklet.php | 4 +++- mod/events.php | 3 ++- mod/network.php | 5 +++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 9eab2ffd7..ef7eef108 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,10 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function get_acl_permissions($user = null) { - return Acl::getDefaultUserPermissions($user); -} - function populate_acl($user = null, $show_jotnets = false) { return Acl::getFullSelectorHTML($user, $show_jotnets); } diff --git a/mod/bookmarklet.php b/mod/bookmarklet.php index 7a6a3ee21..45c3d3190 100644 --- a/mod/bookmarklet.php +++ b/mod/bookmarklet.php @@ -2,7 +2,9 @@ /** * @file mod/bookmarklet.php */ + use Friendica\App; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Module\Login; @@ -35,7 +37,7 @@ function bookmarklet_content(App $a) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => ((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))) ? 'lock' : 'unlock'), - 'default_perms' => get_acl_permissions($a->user), + 'default_perms' => Acl::getDefaultUserPermissions($a->user), 'acl' => populate_acl($a->user, true), 'bang' => '', 'visitor' => 'block', diff --git a/mod/events.php b/mod/events.php index 695dbb290..cf84dc7ba 100644 --- a/mod/events.php +++ b/mod/events.php @@ -6,6 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; +use Friendica\Core\Acl; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Core\Worker; @@ -480,7 +481,7 @@ function events_content(App $a) { require_once 'include/acl_selectors.php' ; - $perms = get_acl_permissions($orig_event); + $perms = Acl::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { $acl = (($cid) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $a->user))); diff --git a/mod/network.php b/mod/network.php index c2cb8e03f..9ab476004 100644 --- a/mod/network.php +++ b/mod/network.php @@ -9,6 +9,7 @@ use Friendica\Content\Feature; use Friendica\Content\ForumManager; use Friendica\Content\Nav; use Friendica\Content\Widget; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -427,7 +428,7 @@ function networkFlatView(App $a, $update = 0) 'lockstate' => (((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => get_acl_permissions($a->user), + 'default_perms' => Acl::getDefaultUserPermissions($a->user), 'acl' => populate_acl($a->user, true), 'bang' => '', 'visitor' => 'block', @@ -576,7 +577,7 @@ function networkThreadedView(App $a, $update, $parent) 'lockstate' => ((($gid) || ($cid) || ($nets) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => get_acl_permissions($a->user), + 'default_perms' => Acl::getDefaultUserPermissions($a->user), 'acl' => populate_acl((($gid || $cid || $nets) ? $def_acl : $a->user), true), 'bang' => (($gid || $cid || $nets) ? '!' : ''), 'visitor' => 'block', From 824262b8248701b9f0bd33168e73108eb457c464 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:03:03 -0500 Subject: [PATCH 007/201] Move populate_acl to Acl --- include/acl_selectors.php | 4 ---- mod/bookmarklet.php | 2 +- mod/community.php | 4 +++- mod/display.php | 3 ++- mod/events.php | 2 +- mod/network.php | 4 ++-- mod/photos.php | 5 +++-- mod/profile.php | 3 ++- mod/settings.php | 3 ++- 9 files changed, 16 insertions(+), 14 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index ef7eef108..2c9770f9b 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,10 +9,6 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function populate_acl($user = null, $show_jotnets = false) { - return Acl::getFullSelectorHTML($user, $show_jotnets); -} - function navbar_complete(App $a) { $search = notags(trim($_REQUEST['search'])); $mode = $_REQUEST['smode']; diff --git a/mod/bookmarklet.php b/mod/bookmarklet.php index 45c3d3190..5d8d02c47 100644 --- a/mod/bookmarklet.php +++ b/mod/bookmarklet.php @@ -38,7 +38,7 @@ function bookmarklet_content(App $a) 'nickname' => $a->user['nickname'], 'lockstate' => ((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))) ? 'lock' : 'unlock'), 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/community.php b/mod/community.php index 88fc6168b..5f0bd34a1 100644 --- a/mod/community.php +++ b/mod/community.php @@ -2,8 +2,10 @@ /** * @file mod/community.php */ + use Friendica\App; use Friendica\Content\Nav; +use Friendica\Core\Acl; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; @@ -104,7 +106,7 @@ function community_content(App $a, $update = 0) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/display.php b/mod/display.php index 42aad736c..d543535aa 100644 --- a/mod/display.php +++ b/mod/display.php @@ -5,6 +5,7 @@ use Friendica\App; use Friendica\Content\Text\BBCode; +use Friendica\Core\Acl; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\Protocol; @@ -317,7 +318,7 @@ function display_content(App $a, $update = false, $update_uid = 0) { 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/events.php b/mod/events.php index cf84dc7ba..7a54056b5 100644 --- a/mod/events.php +++ b/mod/events.php @@ -484,7 +484,7 @@ function events_content(App $a) { $perms = Acl::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { - $acl = (($cid) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $a->user))); + $acl = (($cid) ? '' : Acl::getFullSelectorHTML(((x($orig_event)) ? $orig_event : $a->user))); } // If we copy an old event, we need to remove the ID and URI diff --git a/mod/network.php b/mod/network.php index 9ab476004..f7cc16764 100644 --- a/mod/network.php +++ b/mod/network.php @@ -429,7 +429,7 @@ function networkFlatView(App $a, $update = 0) ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => populate_acl($a->user, true), + 'acl' => Acl::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), @@ -578,7 +578,7 @@ function networkThreadedView(App $a, $update, $parent) ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => populate_acl((($gid || $cid || $nets) ? $def_acl : $a->user), true), + 'acl' => Acl::getFullSelectorHTML((($gid || $cid || $nets) ? $def_acl : $a->user), true), 'bang' => (($gid || $cid || $nets) ? '!' : ''), 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/photos.php b/mod/photos.php index 3cd8b7528..fd8f1c84c 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -7,6 +7,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; use Friendica\Content\Text\BBCode; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1084,7 +1085,7 @@ function photos_content(App $a) $tpl = get_markup_template('photos_upload.tpl'); - $aclselect_e = ($visitor ? '' : populate_acl($a->user)); + $aclselect_e = ($visitor ? '' : Acl::getFullSelectorHTML($a->user)); $o .= replace_macros($tpl,[ '$pagename' => L10n::t('Upload Photos'), @@ -1425,7 +1426,7 @@ function photos_content(App $a) $album_e = $ph[0]['album']; $caption_e = $ph[0]['desc']; - $aclselect_e = populate_acl($ph[0]); + $aclselect_e = Acl::getFullSelectorHTML($ph[0]); $edit = replace_macros($edit_tpl, [ '$id' => $ph[0]['id'], diff --git a/mod/profile.php b/mod/profile.php index 5e5988994..6e8de3527 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -6,6 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Widget; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -213,7 +214,7 @@ function profile_content(App $a, $update = 0) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid']) ) ? 'lock' : 'unlock', - 'acl' => $is_owner ? populate_acl($a->user, true) : '', + 'acl' => $is_owner ? Acl::getFullSelectorHTML($a->user, true) : '', 'bang' => '', 'visitor' => $is_owner || $commvisitor ? 'block' : 'none', 'profile_uid' => $a->profile['profile_uid'], diff --git a/mod/settings.php b/mod/settings.php index 6fcbe4d11..6646f1559 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -6,6 +6,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1224,7 +1225,7 @@ function settings_content(App $a) '$permissions' => L10n::t('Default Post Permissions'), '$permdesc' => L10n::t("\x28click to open/close\x29"), '$visibility' => $profile['net-publish'], - '$aclselect' => populate_acl($a->user), + '$aclselect' => Acl::getFullSelectorHTML($a->user), '$suggestme' => $suggestme, '$blockwall'=> $blockwall, // array('blockwall', L10n::t('Allow friends to post to your profile page:'), !$blockwall, ''), '$blocktags'=> $blocktags, // array('blocktags', L10n::t('Allow friends to tag your posts:'), !$blocktags, ''), From 207eac4a1694e41a0f80a867d2af4bfdecbc0fb0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:04:30 -0500 Subject: [PATCH 008/201] Move navbar_complete to Acl --- include/acl_selectors.php | 6 ------ mod/acl.php | 7 ++++++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 2c9770f9b..e6d1a8a92 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -9,9 +9,3 @@ use Friendica\Model\Contact; require_once "mod/proxy.php"; -function navbar_complete(App $a) { - $search = notags(trim($_REQUEST['search'])); - $mode = $_REQUEST['smode']; - - return Acl::contactAutocomplete($search, $mode); -} diff --git a/mod/acl.php b/mod/acl.php index e325e4668..a178a6922 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -4,6 +4,7 @@ use Friendica\App; use Friendica\Content\Widget; +use Friendica\Core\Acl; use Friendica\Core\Addon; use Friendica\Database\DBM; use Friendica\Model\Contact; @@ -184,7 +185,11 @@ function acl_content(App $a) ); } elseif ($type == 'x') { // autocomplete for global contact search (e.g. navbar search) - $r = navbar_complete($a); + $search = notags(trim($_REQUEST['search'])); + $mode = $_REQUEST['smode']; + + $r = Acl::contactAutocomplete($search, $mode); + $contacts = []; foreach ($r as $g) { $contacts[] = [ From 09c717d7519ef871a6f3ce0a73f7e24466bd50f0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:08:33 -0500 Subject: [PATCH 009/201] Remove references to include/acl_selectors --- include/conversation.php | 2 -- mod/acl.php | 1 - mod/display.php | 1 - mod/editpost.php | 2 -- mod/events.php | 2 -- mod/fsuggest.php | 2 -- mod/group.php | 1 - mod/message.php | 1 - mod/network.php | 1 - mod/notes.php | 1 - mod/photos.php | 1 - mod/profile.php | 1 - mod/settings.php | 2 -- mod/videos.php | 1 - src/Model/Group.php | 1 - 15 files changed, 20 deletions(-) diff --git a/include/conversation.php b/include/conversation.php index c7a2379d5..ba7b7315b 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -21,8 +21,6 @@ use Friendica\Util\DateTimeFormat; use Friendica\Util\Temporal; use Friendica\Util\XML; -require_once "include/acl_selectors.php"; - function item_extract_images($body) { $saved_image = []; diff --git a/mod/acl.php b/mod/acl.php index a178a6922..a3cc335b1 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -9,7 +9,6 @@ use Friendica\Core\Addon; use Friendica\Database\DBM; use Friendica\Model\Contact; -require_once 'include/acl_selectors.php'; require_once 'include/dba.php'; require_once 'mod/proxy.php'; diff --git a/mod/display.php b/mod/display.php index d543535aa..59e8aa277 100644 --- a/mod/display.php +++ b/mod/display.php @@ -205,7 +205,6 @@ function display_content(App $a, $update = false, $update_uid = 0) { require_once 'include/security.php'; require_once 'include/conversation.php'; - require_once 'include/acl_selectors.php'; $o = ''; diff --git a/mod/editpost.php b/mod/editpost.php index 3081b6729..aa2c29684 100644 --- a/mod/editpost.php +++ b/mod/editpost.php @@ -10,8 +10,6 @@ use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Database\DBM; -require_once 'include/acl_selectors.php'; - function editpost_content(App $a) { $o = ''; diff --git a/mod/events.php b/mod/events.php index 7a54056b5..3cc2ae2b4 100644 --- a/mod/events.php +++ b/mod/events.php @@ -479,8 +479,6 @@ function events_content(App $a) { $fhour = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'H') : '00'); $fminute = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'i') : '00'); - require_once 'include/acl_selectors.php' ; - $perms = Acl::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { diff --git a/mod/fsuggest.php b/mod/fsuggest.php index b0abeb220..55f9c3231 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -76,8 +76,6 @@ function fsuggest_post(App $a) function fsuggest_content(App $a) { - require_once 'include/acl_selectors.php'; - if (! local_user()) { notice(L10n::t('Permission denied.') . EOL); return; diff --git a/mod/group.php b/mod/group.php index 0473e2af9..870025074 100644 --- a/mod/group.php +++ b/mod/group.php @@ -146,7 +146,6 @@ function group_content(App $a) { } if (($a->argc > 1) && (intval($a->argv[1]))) { - require_once 'include/acl_selectors.php'; require_once 'mod/contacts.php'; $r = q("SELECT * FROM `group` WHERE `id` = %d AND `uid` = %d AND `deleted` = 0 LIMIT 1", diff --git a/mod/message.php b/mod/message.php index d2980aaea..e7d8a2080 100644 --- a/mod/message.php +++ b/mod/message.php @@ -16,7 +16,6 @@ use Friendica\Model\Mail; use Friendica\Util\DateTimeFormat; use Friendica\Util\Temporal; -require_once 'include/acl_selectors.php'; require_once 'include/conversation.php'; function message_init(App $a) diff --git a/mod/network.php b/mod/network.php index f7cc16764..9e1a05a11 100644 --- a/mod/network.php +++ b/mod/network.php @@ -25,7 +25,6 @@ use Friendica\Util\DateTimeFormat; require_once 'include/conversation.php'; require_once 'include/items.php'; -require_once 'include/acl_selectors.php'; function network_init(App $a) { diff --git a/mod/notes.php b/mod/notes.php index 3b46df07d..aa239fb0e 100644 --- a/mod/notes.php +++ b/mod/notes.php @@ -33,7 +33,6 @@ function notes_content(App $a, $update = false) require_once 'include/security.php'; require_once 'include/conversation.php'; - require_once 'include/acl_selectors.php'; $groups = []; diff --git a/mod/photos.php b/mod/photos.php index fd8f1c84c..a34a28fc1 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -27,7 +27,6 @@ use Friendica\Util\Map; use Friendica\Util\Temporal; require_once 'include/items.php'; -require_once 'include/acl_selectors.php'; require_once 'include/security.php'; function photos_init(App $a) { diff --git a/mod/profile.php b/mod/profile.php index 6e8de3527..830fc04c7 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -119,7 +119,6 @@ function profile_content(App $a, $update = 0) require_once 'include/security.php'; require_once 'include/conversation.php'; - require_once 'include/acl_selectors.php'; require_once 'include/items.php'; $groups = []; diff --git a/mod/settings.php b/mod/settings.php index 6646f1559..1ac3f434b 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -1000,8 +1000,6 @@ function settings_content(App $a) * ACCOUNT SETTINGS */ - require_once('include/acl_selectors.php'); - $profile = dba::selectFirst('profile', [], ['is-default' => true, 'uid' => local_user()]); if (!DBM::is_result($profile)) { notice(L10n::t('Unable to find your profile. Please contact your admin.') . EOL); diff --git a/mod/videos.php b/mod/videos.php index 75a4d031f..f4b8c46b1 100644 --- a/mod/videos.php +++ b/mod/videos.php @@ -19,7 +19,6 @@ use Friendica\Protocol\DFRN; use Friendica\Util\DateTimeFormat; require_once 'include/items.php'; -require_once 'include/acl_selectors.php'; require_once 'include/security.php'; function videos_init(App $a) { diff --git a/src/Model/Group.php b/src/Model/Group.php index c1430642d..f48dd5043 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -289,7 +289,6 @@ class Group extends BaseObject } if ($check_dead && !$use_gcontact) { - require_once 'include/acl_selectors.php'; Contact::pruneUnavailable($return); } return $return; From 2f463dfb17ac1ca554bd935c2a6529c577a1c21f Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 25 Feb 2018 20:08:51 -0500 Subject: [PATCH 010/201] Remove include/acl_selectors --- include/acl_selectors.php | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 include/acl_selectors.php diff --git a/include/acl_selectors.php b/include/acl_selectors.php deleted file mode 100644 index e6d1a8a92..000000000 --- a/include/acl_selectors.php +++ /dev/null @@ -1,11 +0,0 @@ - Date: Sun, 25 Feb 2018 20:24:46 -0500 Subject: [PATCH 011/201] Prettify mod/acl - Replace obsolete x() and killme() calls - Simplify ternary operators with defaults() - Restore list alignment - Extract variable initialization from else conditions --- mod/acl.php | 102 +++++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 53 deletions(-) diff --git a/mod/acl.php b/mod/acl.php index a3cc335b1..23875b683 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -18,14 +18,14 @@ function acl_content(App $a) return ''; } - $start = defaults($_REQUEST, 'start', 0); - $count = defaults($_REQUEST, 'count', 100); - $search = defaults($_REQUEST, 'search', ''); - $type = defaults($_REQUEST, 'type', ''); + $start = defaults($_REQUEST, 'start' , 0); + $count = defaults($_REQUEST, 'count' , 100); + $search = defaults($_REQUEST, 'search' , ''); + $type = defaults($_REQUEST, 'type' , ''); $conv_id = defaults($_REQUEST, 'conversation', null); // For use with jquery.textcomplete for private mail completion - if (x($_REQUEST, 'query')) { + if (!empty($_REQUEST['query'])) { if (!$type) { $type = 'm'; } @@ -43,17 +43,17 @@ function acl_content(App $a) } // count groups and contacts + $group_count = 0; if ($type == '' || $type == 'g') { $r = q("SELECT COUNT(*) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra", intval(local_user()) ); $group_count = (int) $r[0]['g']; - } else { - $group_count = 0; } $sql_extra2 .= ' ' . Widget::unavailableNetworks(); + $contact_count = 0; if ($type == '' || $type == 'c') { // autocomplete for editor mentions $r = q("SELECT COUNT(*) AS c FROM `contact` @@ -95,8 +95,6 @@ function acl_content(App $a) intval(local_user()) ); $contact_count = (int) $r[0]['c']; - } else { - $contact_count = 0; } $tot = $group_count + $contact_count; @@ -122,12 +120,12 @@ function acl_content(App $a) foreach ($r as $g) { $groups[] = [ - 'type' => 'g', + 'type' => 'g', 'photo' => 'images/twopeople.png', - 'name' => htmlentities($g['name']), - 'id' => intval($g['id']), - 'uids' => array_map('intval', explode(',', $g['uids'])), - 'link' => '', + 'name' => htmlentities($g['name']), + 'id' => intval($g['id']), + 'uids' => array_map('intval', explode(',', $g['uids'])), + 'link' => '', 'forum' => '0' ]; } @@ -136,50 +134,51 @@ function acl_content(App $a) } } + $r = []; if ($type == '') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s')) + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET) ); } elseif ($type == 'c') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_STATUSNET) ); } elseif ($type == 'f') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' - AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) - AND (`forum` OR `prv`) - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s')) + AND (`forum` OR `prv`) + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_STATUSNET) ); } elseif ($type == 'm') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` - AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` + AND `success_update` >= `failure_update` AND `network` IN ('%s', '%s') + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()), dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA) ); } elseif ($type == 'a') { $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact` - WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` - $sql_extra2 - ORDER BY `name` ASC ", + WHERE `uid` = %d AND `pending` = 0 AND `success_update` >= `failure_update` + $sql_extra2 + ORDER BY `name` ASC ", intval(local_user()) ); } elseif ($type == 'x') { @@ -194,10 +193,10 @@ function acl_content(App $a) $contacts[] = [ 'photo' => proxy_url($g['photo'], false, PROXY_SIZE_MICRO), 'name' => $g['name'], - 'nick' => (x($g['addr']) ? $g['addr'] : $g['url']), + 'nick' => defaults($g, 'addr', $g['url']), 'network' => $g['network'], 'link' => $g['url'], - 'forum' => (x($g['community']) ? 1 : 0), + 'forum' => !empty($g['community']) ? 1 : 0, ]; } $o = [ @@ -206,9 +205,7 @@ function acl_content(App $a) 'items' => $contacts, ]; echo json_encode($o); - killme(); - } else { - $r = []; + exit; } if (DBM::is_result($r)) { @@ -221,9 +218,9 @@ function acl_content(App $a) 'id' => intval($g['id']), 'network' => $g['network'], 'link' => $g['url'], - 'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']), - 'addr' => htmlentities(($g['addr']) ? $g['addr'] : $g['url']), - 'forum' => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0), + 'nick' => htmlentities(defaults($g, 'attag', $g['nick'])), + 'addr' => htmlentities(defaults($g, 'addr', $g['url'])), + 'forum' => !empty($g['forum']) || !empty($g['prv']) ? 1 : 0, ]; if ($entry['forum']) { $forums[] = $entry; @@ -269,15 +266,15 @@ function acl_content(App $a) if (count($contact) > 0) { $unknown_contacts[] = [ - 'type' => 'c', - 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), - 'name' => htmlentities($contact['name']), - 'id' => intval($contact['cid']), + 'type' => 'c', + 'photo' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), + 'name' => htmlentities($contact['name']), + 'id' => intval($contact['cid']), 'network' => $contact['network'], - 'link' => $contact['url'], - 'nick' => htmlentities($contact['nick'] ?: $contact['addr']), - 'addr' => htmlentities(($contact['addr']) ? $contact['addr'] : $contact['url']), - 'forum' => $contact['forum'] + 'link' => $contact['url'], + 'nick' => htmlentities(defaults($contact, 'nick', $contact['addr'])), + 'addr' => htmlentities(defaults($contact, 'addr', $contact['url'])), + 'forum' => $contact['forum'] ]; } } @@ -301,13 +298,12 @@ function acl_content(App $a) Addon::callHooks('acl_lookup_end', $results); $o = [ - 'tot' => $results['tot'], + 'tot' => $results['tot'], 'start' => $results['start'], 'count' => $results['count'], 'items' => $results['items'], ]; echo json_encode($o); - - killme(); + exit; } From dca0fa3f1d48ad8c63c8b7210ea7cb550baddb6d Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 20:08:59 -0500 Subject: [PATCH 012/201] Fix wrong variable type in mod/message --- mod/message.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/message.php b/mod/message.php index e7d8a2080..27ba765d0 100644 --- a/mod/message.php +++ b/mod/message.php @@ -207,7 +207,7 @@ function message_content(App $a) '$linkurl' => L10n::t('Please enter a link URL:') ]); - $preselect = isset($a->argv[2]) ? [$a->argv[2]] : false; + $preselect = isset($a->argv[2]) ? [$a->argv[2]] : []; $prename = $preurl = $preid = ''; From 35d09fdad1af0ff64ab1f1e3cab8c1befeef711f Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 20:09:19 -0500 Subject: [PATCH 013/201] Fix query mistake in Acl::getSuggestContactSelectHTML --- src/Core/Acl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/Acl.php b/src/Core/Acl.php index 1c72d23cb..1bc150aca 100644 --- a/src/Core/Acl.php +++ b/src/Core/Acl.php @@ -115,7 +115,7 @@ class Acl extends BaseObject } $stmt = dba::p("SELECT `id`, `name`, `url`, `network` FROM `contact` - WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' + WHERE `uid` = ? AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' $sql_extra ORDER BY `name` ASC ", intval(local_user()) ); From a7db21c8fd8d1584bbc77566c830e26d9ea3519b Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 2 Mar 2018 18:41:24 -0500 Subject: [PATCH 014/201] Rename Core\Acl to Core\ACL --- mod/acl.php | 4 ++-- mod/bookmarklet.php | 6 +++--- mod/community.php | 4 ++-- mod/display.php | 4 ++-- mod/events.php | 6 +++--- mod/fsuggest.php | 4 ++-- mod/message.php | 4 ++-- mod/network.php | 10 +++++----- mod/photos.php | 6 +++--- mod/profile.php | 4 ++-- mod/settings.php | 4 ++-- 11 files changed, 28 insertions(+), 28 deletions(-) diff --git a/mod/acl.php b/mod/acl.php index 23875b683..11d9e5683 100644 --- a/mod/acl.php +++ b/mod/acl.php @@ -4,7 +4,7 @@ use Friendica\App; use Friendica\Content\Widget; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Database\DBM; use Friendica\Model\Contact; @@ -186,7 +186,7 @@ function acl_content(App $a) $search = notags(trim($_REQUEST['search'])); $mode = $_REQUEST['smode']; - $r = Acl::contactAutocomplete($search, $mode); + $r = ACL::contactAutocomplete($search, $mode); $contacts = []; foreach ($r as $g) { diff --git a/mod/bookmarklet.php b/mod/bookmarklet.php index 5d8d02c47..9ae3e28f0 100644 --- a/mod/bookmarklet.php +++ b/mod/bookmarklet.php @@ -4,7 +4,7 @@ */ use Friendica\App; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Module\Login; @@ -37,8 +37,8 @@ function bookmarklet_content(App $a) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => ((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))) ? 'lock' : 'unlock'), - 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'default_perms' => ACL::getDefaultUserPermissions($a->user), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/community.php b/mod/community.php index 5f0bd34a1..40ebdbb6e 100644 --- a/mod/community.php +++ b/mod/community.php @@ -5,7 +5,7 @@ use Friendica\App; use Friendica\Content\Nav; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\PConfig; @@ -106,7 +106,7 @@ function community_content(App $a, $update = 0) 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/display.php b/mod/display.php index 59e8aa277..ab27b283b 100644 --- a/mod/display.php +++ b/mod/display.php @@ -5,7 +5,7 @@ use Friendica\App; use Friendica\Content\Text\BBCode; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\Protocol; @@ -317,7 +317,7 @@ function display_content(App $a, $update = false, $update_uid = 0) { 'default_location' => $a->user['default-location'], 'nickname' => $a->user['nickname'], 'lockstate' => (is_array($a->user) && (strlen($a->user['allow_cid']) || strlen($a->user['allow_gid']) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid'])) ? 'lock' : 'unlock'), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/events.php b/mod/events.php index 3cc2ae2b4..8dab59b03 100644 --- a/mod/events.php +++ b/mod/events.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Core\Worker; @@ -479,10 +479,10 @@ function events_content(App $a) { $fhour = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'H') : '00'); $fminute = ((x($orig_event)) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'i') : '00'); - $perms = Acl::getDefaultUserPermissions($orig_event); + $perms = ACL::getDefaultUserPermissions($orig_event); if ($mode === 'new' || $mode === 'copy') { - $acl = (($cid) ? '' : Acl::getFullSelectorHTML(((x($orig_event)) ? $orig_event : $a->user))); + $acl = (($cid) ? '' : ACL::getFullSelectorHTML(((x($orig_event)) ? $orig_event : $a->user))); } // If we copy an old event, we need to remove the ID and URI diff --git a/mod/fsuggest.php b/mod/fsuggest.php index 55f9c3231..4f432d840 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -4,7 +4,7 @@ */ use Friendica\App; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\Worker; use Friendica\Database\DBM; @@ -104,7 +104,7 @@ function fsuggest_content(App $a) $o .= ''; - $o .= Acl::getSuggestContactSelectHTML( + $o .= ACL::getSuggestContactSelectHTML( 'suggest', 'suggest-select', ['size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true] diff --git a/mod/message.php b/mod/message.php index 27ba765d0..e9bfc076b 100644 --- a/mod/message.php +++ b/mod/message.php @@ -7,7 +7,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Smilies; use Friendica\Content\Text\BBCode; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Database\DBM; @@ -243,7 +243,7 @@ function message_content(App $a) $prefill = $preselect ? $prename : ''; // the ugly select box - $select = Acl::getMessageContactSelectHTML('messageto', 'message-to-select', $preselect, 4, 10); + $select = ACL::getMessageContactSelectHTML('messageto', 'message-to-select', $preselect, 4, 10); $tpl = get_markup_template('prv_message.tpl'); $o .= replace_macros($tpl, [ diff --git a/mod/network.php b/mod/network.php index 9e1a05a11..4ab773bd3 100644 --- a/mod/network.php +++ b/mod/network.php @@ -9,7 +9,7 @@ use Friendica\Content\Feature; use Friendica\Content\ForumManager; use Friendica\Content\Nav; use Friendica\Content\Widget; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -427,8 +427,8 @@ function networkFlatView(App $a, $update = 0) 'lockstate' => (((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => Acl::getFullSelectorHTML($a->user, true), + 'default_perms' => ACL::getDefaultUserPermissions($a->user), + 'acl' => ACL::getFullSelectorHTML($a->user, true), 'bang' => '', 'visitor' => 'block', 'profile_uid' => local_user(), @@ -576,8 +576,8 @@ function networkThreadedView(App $a, $update, $parent) 'lockstate' => ((($gid) || ($cid) || ($nets) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), - 'default_perms' => Acl::getDefaultUserPermissions($a->user), - 'acl' => Acl::getFullSelectorHTML((($gid || $cid || $nets) ? $def_acl : $a->user), true), + 'default_perms' => ACL::getDefaultUserPermissions($a->user), + 'acl' => ACL::getFullSelectorHTML((($gid || $cid || $nets) ? $def_acl : $a->user), true), 'bang' => (($gid || $cid || $nets) ? '!' : ''), 'visitor' => 'block', 'profile_uid' => local_user(), diff --git a/mod/photos.php b/mod/photos.php index a34a28fc1..c8dad750d 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -7,7 +7,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; use Friendica\Content\Text\BBCode; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1084,7 +1084,7 @@ function photos_content(App $a) $tpl = get_markup_template('photos_upload.tpl'); - $aclselect_e = ($visitor ? '' : Acl::getFullSelectorHTML($a->user)); + $aclselect_e = ($visitor ? '' : ACL::getFullSelectorHTML($a->user)); $o .= replace_macros($tpl,[ '$pagename' => L10n::t('Upload Photos'), @@ -1425,7 +1425,7 @@ function photos_content(App $a) $album_e = $ph[0]['album']; $caption_e = $ph[0]['desc']; - $aclselect_e = Acl::getFullSelectorHTML($ph[0]); + $aclselect_e = ACL::getFullSelectorHTML($ph[0]); $edit = replace_macros($edit_tpl, [ '$id' => $ph[0]['id'], diff --git a/mod/profile.php b/mod/profile.php index 830fc04c7..ab11b4d5f 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Widget; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -213,7 +213,7 @@ function profile_content(App $a, $update = 0) || strlen($a->user['deny_cid']) || strlen($a->user['deny_gid']) ) ? 'lock' : 'unlock', - 'acl' => $is_owner ? Acl::getFullSelectorHTML($a->user, true) : '', + 'acl' => $is_owner ? ACL::getFullSelectorHTML($a->user, true) : '', 'bang' => '', 'visitor' => $is_owner || $commvisitor ? 'block' : 'none', 'profile_uid' => $a->profile['profile_uid'], diff --git a/mod/settings.php b/mod/settings.php index 1ac3f434b..46c3d2ec9 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\Content\Feature; use Friendica\Content\Nav; -use Friendica\Core\Acl; +use Friendica\Core\ACL; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1223,7 +1223,7 @@ function settings_content(App $a) '$permissions' => L10n::t('Default Post Permissions'), '$permdesc' => L10n::t("\x28click to open/close\x29"), '$visibility' => $profile['net-publish'], - '$aclselect' => Acl::getFullSelectorHTML($a->user), + '$aclselect' => ACL::getFullSelectorHTML($a->user), '$suggestme' => $suggestme, '$blockwall'=> $blockwall, // array('blockwall', L10n::t('Allow friends to post to your profile page:'), !$blockwall, ''), '$blocktags'=> $blocktags, // array('blocktags', L10n::t('Allow friends to tag your posts:'), !$blocktags, ''), From 5bda6c7f6de8b766a612880636c7030a98db5efe Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 3 Mar 2018 08:47:13 +0000 Subject: [PATCH 015/201] We now accept array as condition parameters --- include/dba.php | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/include/dba.php b/include/dba.php index 9ac26aaa1..247e6ac83 100644 --- a/include/dba.php +++ b/include/dba.php @@ -950,13 +950,7 @@ class dba { foreach ($commands AS $command) { $conditions = $command['conditions']; - $array_element = each($conditions); - $array_key = $array_element['key']; - if (is_int($array_key)) { - $condition_string = " WHERE " . array_shift($conditions); - } else { - $condition_string = " WHERE `" . implode("` = ? AND `", array_keys($conditions)) . "` = ?"; - } + $condition_string = self::buildCondition($conditions); if ((count($command['conditions']) > 1) || is_int($array_key)) { $sql = "DELETE FROM `" . $command['table'] . "`" . $condition_string; @@ -1047,13 +1041,7 @@ class dba { $table = self::escape($table); - $array_element = each($condition); - $array_key = $array_element['key']; - if (is_int($array_key)) { - $condition_string = " WHERE ".array_shift($condition); - } else { - $condition_string = " WHERE `".implode("` = ? AND `", array_keys($condition))."` = ?"; - } + $condition_string = self::buildCondition($condition); if (is_bool($old_fields)) { $do_insert = $old_fields; @@ -1148,6 +1136,8 @@ class dba { return false; } + $table = self::escape($table); + if (count($fields) > 0) { $select_fields = "`" . implode("`, `", array_values($fields)) . "`"; } else { @@ -1235,16 +1225,32 @@ class dba { * @param array $condition * @return string */ - private static function buildCondition(array &$condition = []) + private static function buildCondition(&$condition = []) { $condition_string = ''; - if (count($condition) > 0) { + if (is_array($condition) && (count($condition) > 0)) { $array_element = each($condition); $array_key = $array_element['key']; if (is_int($array_key)) { $condition_string = " WHERE ".array_shift($condition); } else { - $condition_string = " WHERE `".implode("` = ? AND `", array_keys($condition))."` = ?"; + $new_values = []; + $condition_string = ""; + foreach ($condition as $field => $value) { + if ($condition_string != "") { + $condition_string .= " AND "; + } + if (is_array($value)) { + $new_values = array_merge($new_values, array_values($value)); + $placeholders = substr(str_repeat("?, ", count($value)), 0, -2); + $condition_string .= "`" . $field . "` IN (" . $placeholders . ")"; + } else { + $new_values[] = $value; + $condition_string .= "`" . $field . "` = ?"; + } + } + $condition_string = " WHERE " . $condition_string; + $condition = $new_values; } } From cd3ff100ab1e6935a4d3acc28e0acf5f0f3ff77e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 07:38:15 -0500 Subject: [PATCH 016/201] Rename Acl.php to ACL.php --- src/Core/Acl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/Acl.php b/src/Core/Acl.php index 1bc150aca..ae05fd136 100644 --- a/src/Core/Acl.php +++ b/src/Core/Acl.php @@ -33,7 +33,7 @@ use function replace_macros; * * @author Hypolite Petovan */ -class Acl extends BaseObject +class ACL extends BaseObject { /** * Returns a select input tag with all the contact of the local user From 1907a5dbe762dc287167cd3d33feafb12ad04c1b Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 07:40:18 -0500 Subject: [PATCH 017/201] Rename Acl.php to ACL.php --- src/Core/{Acl.php => ACL.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/Core/{Acl.php => ACL.php} (100%) diff --git a/src/Core/Acl.php b/src/Core/ACL.php similarity index 100% rename from src/Core/Acl.php rename to src/Core/ACL.php From ab544e1e9f1ad56205c80facc220d6e7856d9a19 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 07:41:49 -0500 Subject: [PATCH 018/201] Add missing dba::close() call in Contact::pruneUnavailable --- src/Model/Contact.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 85e71075a..b4d20586a 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -1538,6 +1538,8 @@ class Contact extends BaseObject $return[] = $contact['id']; } + dba::close($stmt); + $contact_ids = $return; } } From 194da423e0c9c02eb9a0a55cfd2e75f2cac5936a Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 3 Mar 2018 13:26:23 +0000 Subject: [PATCH 019/201] An array with fieldnames as keys is important for the "insert" in the "update" function --- include/dba.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/dba.php b/include/dba.php index 247e6ac83..4f7ca4da3 100644 --- a/include/dba.php +++ b/include/dba.php @@ -1245,7 +1245,7 @@ class dba { $placeholders = substr(str_repeat("?, ", count($value)), 0, -2); $condition_string .= "`" . $field . "` IN (" . $placeholders . ")"; } else { - $new_values[] = $value; + $new_values[$field] = $value; $condition_string .= "`" . $field . "` = ?"; } } From 74f6dc5373f91adc59960807ff9870aa07c59b57 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 3 Mar 2018 23:02:45 +0000 Subject: [PATCH 020/201] Renamed functions / each is replaced --- include/dba.php | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/include/dba.php b/include/dba.php index 4f7ca4da3..af571f245 100644 --- a/include/dba.php +++ b/include/dba.php @@ -145,7 +145,7 @@ class dba { * * @param string $query The database query that will be analyzed */ - private static function log_index($query) { + private static function logIndex($query) { $a = get_app(); if (empty($a->config["system"]["db_log_index"])) { @@ -272,7 +272,7 @@ class dba { * @param array $args The parameters that are to replace the ? placeholders * @return string The replaced SQL query */ - private static function replace_parameters($sql, $args) { + private static function replaceParameters($sql, $args) { $offset = 0; foreach ($args AS $param => $value) { if (is_int($args[$param]) || is_float($args[$param])) { @@ -413,7 +413,7 @@ class dba { // The fallback routine is called as well when there are no arguments if (!$can_be_prepared || (count($args) == 0)) { - $retval = self::$db->query(self::replace_parameters($sql, $args)); + $retval = self::$db->query(self::replaceParameters($sql, $args)); if (self::$db->errno) { self::$error = self::$db->error; self::$errorno = self::$db->errno; @@ -476,7 +476,7 @@ class dba { $errorno = self::$errorno; logger('DB Error '.self::$errorno.': '.self::$error."\n". - System::callstack(8)."\n".self::replace_parameters($sql, $params)); + System::callstack(8)."\n".self::replaceParameters($sql, $params)); self::$error = $error; self::$errorno = $errorno; @@ -496,7 +496,7 @@ class dba { @file_put_contents($a->config["system"]["db_log"], DateTimeFormat::utcNow()."\t".$duration."\t". basename($backtrace[1]["file"])."\t". $backtrace[1]["line"]."\t".$backtrace[2]["function"]."\t". - substr(self::replace_parameters($sql, $args), 0, 2000)."\n", FILE_APPEND); + substr(self::replaceParameters($sql, $args), 0, 2000)."\n", FILE_APPEND); } } return $retval; @@ -541,7 +541,7 @@ class dba { $errorno = self::$errorno; logger('DB Error '.self::$errorno.': '.self::$error."\n". - System::callstack(8)."\n".self::replace_parameters($sql, $params)); + System::callstack(8)."\n".self::replaceParameters($sql, $params)); self::$error = $error; self::$errorno = $errorno; @@ -567,10 +567,10 @@ class dba { $fields = []; - $array_element = each($condition); - $array_key = $array_element['key']; - if (!is_int($array_key)) { - $fields = [$array_key]; + reset($condition); + $first_key = key($condition); + if (!is_int($first_key)) { + $fields = [$first_key]; } $stmt = self::select($table, $fields, $condition, ['limit' => 1]); @@ -846,7 +846,7 @@ class dba { * * This process must only be started once, since the value is cached. */ - private static function build_relation_data() { + private static function buildRelationData() { $definition = DBStructure::definition(); foreach ($definition AS $table => $structure) { @@ -895,7 +895,7 @@ class dba { // To speed up the whole process we cache the table relations if (count(self::$relation) == 0) { - self::build_relation_data(); + self::buildRelationData(); } // Is there a relation entry for the table? @@ -950,11 +950,14 @@ class dba { foreach ($commands AS $command) { $conditions = $command['conditions']; + reset($conditions); + $first_key = key($conditions); + $condition_string = self::buildCondition($conditions); - if ((count($command['conditions']) > 1) || is_int($array_key)) { + if ((count($command['conditions']) > 1) || is_int($first_key)) { $sql = "DELETE FROM `" . $command['table'] . "`" . $condition_string; - logger(self::replace_parameters($sql, $conditions), LOGGER_DATA); + logger(self::replaceParameters($sql, $conditions), LOGGER_DATA); if (!self::e($sql, $conditions)) { if ($do_transaction) { @@ -984,7 +987,7 @@ class dba { $sql = "DELETE FROM `" . $table . "` WHERE `" . $field . "` IN (" . substr(str_repeat("?, ", count($field_values)), 0, -2) . ");"; - logger(self::replace_parameters($sql, $field_values), LOGGER_DATA); + logger(self::replaceParameters($sql, $field_values), LOGGER_DATA); if (!self::e($sql, $field_values)) { if ($do_transaction) { @@ -1225,13 +1228,13 @@ class dba { * @param array $condition * @return string */ - private static function buildCondition(&$condition = []) + private static function buildCondition(array &$condition = []) { $condition_string = ''; - if (is_array($condition) && (count($condition) > 0)) { - $array_element = each($condition); - $array_key = $array_element['key']; - if (is_int($array_key)) { + if (count($condition) > 0) { + reset($condition); + $first_key = key($condition); + if (is_int($first_key)) { $condition_string = " WHERE ".array_shift($condition); } else { $new_values = []; From a233ce16588add49b593f60959c7943eecdfed69 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 08:31:05 -0500 Subject: [PATCH 021/201] Create Markdown::toBBCode() method - Create private callback Markdown::diasporaMention2BBCodeCallback --- src/Content/Text/Markdown.php | 80 +++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/src/Content/Text/Markdown.php b/src/Content/Text/Markdown.php index 1d2f68bc7..0e6846ebf 100644 --- a/src/Content/Text/Markdown.php +++ b/src/Content/Text/Markdown.php @@ -7,8 +7,11 @@ namespace Friendica\Content\Text; use Friendica\BaseObject; +use Friendica\Model\Contact; use Michelf\MarkdownExtra; +require_once 'include/html2bbcode.php'; + /** * Friendica-specific usage of Markdown * @@ -36,4 +39,81 @@ class Markdown extends BaseObject return $html; } + + /** + * @brief Callback function to replace a Diaspora style mention in a mention for Friendica + * + * @param array $match Matching values for the callback + * @return string Replaced mention + */ + private static function diasporaMention2BBCodeCallback($match) + { + if ($match[2] == '') { + return; + } + + $data = Contact::getDetailsByAddr($match[2]); + + $name = $match[1]; + + if ($name == '') { + $name = $data['name']; + } + + return '@[url=' . $data['url'] . ']' . $name . '[/url]'; + } + + /* + * we don't want to support a bbcode specific markdown interpreter + * and the markdown library we have is pretty good, but provides HTML output. + * So we'll use that to convert to HTML, then convert the HTML back to bbcode, + * and then clean up a few Diaspora specific constructs. + */ + public static function toBBCode($s) + { + $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8'); + + // Handles single newlines + $s = str_replace("\r\n", "\n", $s); + $s = str_replace("\n", " \n", $s); + $s = str_replace("\r", " \n", $s); + + // Replace lonely stars in lines not starting with it with literal stars + $s = preg_replace('/^([^\*]+)\*([^\*]*)$/im', '$1\*$2', $s); + + // The parser cannot handle paragraphs correctly + $s = str_replace(['

', '

', '

'], ['
', '
', '
'], $s); + + // Escaping the hash tags + $s = preg_replace('/\#([^\s\#])/', '#$1', $s); + + $s = Markdown::convert($s); + + $regexp = "/@\{(?:([^\}]+?); )?([^\} ]+)\}/"; + $s = preg_replace_callback($regexp, ['self', 'diasporaMention2BBCodeCallback'], $s); + + $s = str_replace('#', '#', $s); + + $s = html2bbcode($s); + + // protect the recycle symbol from turning into a tag, but without unescaping angles and naked ampersands + $s = str_replace('♲', html_entity_decode('♲', ENT_QUOTES, 'UTF-8'), $s); + + // Convert everything that looks like a link to a link + $s = preg_replace('/([^\]=]|^)(https?\:\/\/)([a-zA-Z0-9:\/\-?&;.=_~#%$!+,@]+(? Date: Sun, 4 Mar 2018 08:31:40 -0500 Subject: [PATCH 022/201] Replace disapora2bb function content with Markdown::toBBCode call --- include/bb2diaspora.php | 74 +---------------------------------------- 1 file changed, 1 insertion(+), 73 deletions(-) diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index bea15e3d4..7f942be14 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -13,80 +13,8 @@ use League\HTMLToMarkdown\HtmlConverter; require_once 'include/event.php'; require_once 'include/html2bbcode.php'; -/** - * @brief Callback function to replace a Diaspora style mention in a mention for Friendica - * - * @param array $match Matching values for the callback - * @return string Replaced mention - */ -function diaspora_mention2bb($match) { - if ($match[2] == '') { - return; - } - - $data = Contact::getDetailsByAddr($match[2]); - - $name = $match[1]; - - if ($name == '') { - $name = $data['name']; - } - - return '@[url=' . $data['url'] . ']' . $name . '[/url]'; -} - -/* - * we don't want to support a bbcode specific markdown interpreter - * and the markdown library we have is pretty good, but provides HTML output. - * So we'll use that to convert to HTML, then convert the HTML back to bbcode, - * and then clean up a few Diaspora specific constructs. - */ function diaspora2bb($s) { - - $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8'); - - // Handles single newlines - $s = str_replace("\r\n", "\n", $s); - $s = str_replace("\n", " \n", $s); - $s = str_replace("\r", " \n", $s); - - // Replace lonely stars in lines not starting with it with literal stars - $s = preg_replace('/^([^\*]+)\*([^\*]*)$/im', '$1\*$2', $s); - - // The parser cannot handle paragraphs correctly - $s = str_replace(['

', '

', '

'], ['
', '
', '
'], $s); - - // Escaping the hash tags - $s = preg_replace('/\#([^\s\#])/', '#$1', $s); - - $s = Markdown::convert($s); - - $regexp = "/@\{(?:([^\}]+?); )?([^\} ]+)\}/"; - $s = preg_replace_callback($regexp, 'diaspora_mention2bb', $s); - - $s = str_replace('#', '#', $s); - - $s = html2bbcode($s); - - // protect the recycle symbol from turning into a tag, but without unescaping angles and naked ampersands - $s = str_replace('♲', html_entity_decode('♲', ENT_QUOTES, 'UTF-8'), $s); - - // Convert everything that looks like a link to a link - $s = preg_replace('/([^\]=]|^)(https?\:\/\/)([a-zA-Z0-9:\/\-?&;.=_~#%$!+,@]+(? Date: Sun, 4 Mar 2018 17:34:59 -0500 Subject: [PATCH 023/201] Move bb2diaspora() content to Content\Text\BBCode::toMarkdown - Use self where appropriate - Add BaseObject extension --- include/bb2diaspora.php | 182 +--------------------------------- src/Content/Text/BBCode.php | 168 +++++++++++++++++++++++++++++-- src/Content/Text/Markdown.php | 2 +- 3 files changed, 160 insertions(+), 192 deletions(-) diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index 7f942be14..932d543db 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -2,191 +2,11 @@ use Friendica\Content\Text\BBCode; use Friendica\Content\Text\Markdown; -use Friendica\Core\Addon; -use Friendica\Core\L10n; -use Friendica\Core\System; -use Friendica\Model\Contact; -use Friendica\Network\Probe; -use Friendica\Util\DateTimeFormat; -use League\HTMLToMarkdown\HtmlConverter; - -require_once 'include/event.php'; -require_once 'include/html2bbcode.php'; function diaspora2bb($s) { return Markdown::toBBCode($s); } -/** - * @brief Callback function to replace a Friendica style mention in a mention for Diaspora - * - * @param array $match Matching values for the callback - * @return string Replaced mention - */ -function diaspora_mentions($match) { - - $contact = Contact::getDetailsByURL($match[3]); - - if (!x($contact, 'addr')) { - $contact = Probe::uri($match[3]); - } - - if (!x($contact, 'addr')) { - return $match[0]; - } - - $mention = '@{' . $match[2] . '; ' . $contact['addr'] . '}'; - return $mention; -} - -/** - * @brief Converts a BBCode text into Markdown - * - * This function converts a BBCode item body to be sent to Markdown-enabled - * systems like Diaspora and Libertree - * - * @param string $Text - * @param bool $fordiaspora Diaspora requires more changes than Libertree - * @return string - */ function bb2diaspora($Text, $fordiaspora = true) { - $a = get_app(); - - $OriginalText = $Text; - - // Since Diaspora is creating a summary for links, this function removes them before posting - if ($fordiaspora) { - $Text = BBCode::removeShareInformation($Text); - } - - /** - * Transform #tags, strip off the [url] and replace spaces with underscore - */ - $URLSearchString = "^\[\]"; - $Text = preg_replace_callback("/#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/i", - function ($matches) { - return '#' . str_replace(' ', '_', $matches[2]); - } - , $Text); - - // Converting images with size parameters to simple images. Markdown doesn't know it. - $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $Text); - - // Extracting multi-line code blocks before the whitespace processing/code highlighter in BBCode::convert() - $codeblocks = []; - - $Text = preg_replace_callback("#\[code(?:=([^\]]*))?\](.*?)\[\/code\]#is", - function ($matches) use (&$codeblocks) { - $return = $matches[0]; - if (strpos($matches[2], "\n") !== false) { - $return = '#codeblock-' . count($codeblocks) . '#'; - - $prefix = '````' . $matches[1] . PHP_EOL; - $codeblocks[] = $prefix . trim($matches[2]) . PHP_EOL . '````'; - } - return $return; - } - , $Text); - - // Convert it to HTML - don't try oembed - if ($fordiaspora) { - $Text = BBCode::convert($Text, false, 3); - - // Add all tags that maybe were removed - if (preg_match_all("/#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", $OriginalText, $tags)) { - $tagline = ""; - foreach ($tags[2] as $tag) { - $tag = html_entity_decode($tag, ENT_QUOTES, 'UTF-8'); - if (!strpos(html_entity_decode($Text, ENT_QUOTES, 'UTF-8'), '#' . $tag)) { - $tagline .= '#' . $tag . ' '; - } - } - $Text = $Text." ".$tagline; - } - } else { - $Text = BBCode::convert($Text, false, 4); - } - - // mask some special HTML chars from conversation to markdown - $Text = str_replace(['<', '>', '&'], ['&_lt_;', '&_gt_;', '&_amp_;'], $Text); - - // If a link is followed by a quote then there should be a newline before it - // Maybe we should make this newline at every time before a quote. - $Text = str_replace(["

"], ["
"], $Text); - - $stamp1 = microtime(true); - - // Now convert HTML to Markdown - $converter = new HtmlConverter(); - $Text = $converter->convert($Text); - - // unmask the special chars back to HTML - $Text = str_replace(['&\_lt\_;', '&\_gt\_;', '&\_amp\_;'], ['<', '>', '&'], $Text); - - $a->save_timestamp($stamp1, "parser"); - - // Libertree has a problem with escaped hashtags. - $Text = str_replace(['\#'], ['#'], $Text); - - // Remove any leading or trailing whitespace, as this will mess up - // the Diaspora signature verification and cause the item to disappear - $Text = trim($Text); - - if ($fordiaspora) { - $URLSearchString = "^\[\]"; - $Text = preg_replace_callback("/([@]\[(.*?)\])\(([$URLSearchString]*?)\)/ism", 'diaspora_mentions', $Text); - } - - // Restore code blocks - $Text = preg_replace_callback('/#codeblock-([0-9]+)#/iU', - function ($matches) use ($codeblocks) { - $return = ''; - if (isset($codeblocks[intval($matches[1])])) { - $return = $codeblocks[$matches[1]]; - } - return $return; - } - , $Text); - - Addon::callHooks('bb2diaspora',$Text); - - return $Text; -} - -function unescape_underscores_in_links($m) { - $y = str_replace('\\_', '_', $m[2]); - return('[' . $m[1] . '](' . $y . ')'); -} - -function format_event_diaspora($ev) { - if (! ((is_array($ev)) && count($ev))) { - return ''; - } - - $bd_format = L10n::t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM - - $o = 'Friendica event notification:' . "\n"; - - $o .= '**' . (($ev['summary']) ? bb2diaspora($ev['summary']) : bb2diaspora($ev['desc'])) . '**' . "\n"; - - // @todo What. Is. Going. On. With. This. Useless. Ternary. Operator? - mrpetovan - $o .= L10n::t('Starts:') . ' ' . '[' . day_translate( - $ev['adjust'] ? DateTimeFormat::utc($ev['start'], $bd_format) : DateTimeFormat::utc($ev['start'], $bd_format) - ) - . '](' . System::baseUrl() . '/localtime/?f=&time=' . urlencode(DateTimeFormat::utc($ev['start'])) . ")\n"; - - if (! $ev['nofinish']) { - $o .= L10n::t('Finishes:') . ' ' . '[' . day_translate( - $ev['adjust'] ? DateTimeFormat::utc($ev['finish'], $bd_format) : DateTimeFormat::utc($ev['finish'], $bd_format) - ) - . '](' . System::baseUrl() . '/localtime/?f=&time=' . urlencode(DateTimeFormat::utc($ev['finish'])) . ")\n"; - } - - if (strlen($ev['location'])) { - $o .= L10n::t('Location:') . bb2diaspora($ev['location']) - . "\n"; - } - - $o .= "\n"; - return $o; + return BBCode::toMarkdown($Text, $fordiaspora); } diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 8dd9305ca..9c7dac260 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1,33 +1,37 @@ %s
', trim(BBCode::convert($data["description"]))); + $return .= sprintf('
%s
', trim(self::convert($data["description"]))); } if ($data["type"] == "link") { @@ -1202,7 +1206,7 @@ class BBCode $text = Cache::get($match[1]); if (is_null($text)) { - $a = get_app(); + $a = self::getApp(); $stamp1 = microtime(true); @@ -1261,7 +1265,7 @@ class BBCode $text = Cache::get($match[1]); if (is_null($text)) { - $a = get_app(); + $a = self::getApp(); $stamp1 = microtime(true); @@ -1285,7 +1289,7 @@ class BBCode $doc = new DOMDocument(); @$doc->loadHTML($body); - $xpath = new DomXPath($doc); + $xpath = new DOMXPath($doc); $list = $xpath->query("//meta[@name]"); foreach ($list as $node) { $attr = []; @@ -1348,7 +1352,7 @@ class BBCode */ public static function convert($text, $try_oembed = true, $simple_html = false, $for_plaintext = false) { - $a = get_app(); + $a = self::getApp(); /* * preg_match_callback function to replace potential Oembed tags with Oembed content @@ -1978,4 +1982,148 @@ class BBCode return $abstract; } + + /** + * @brief Callback function to replace a Friendica style mention in a mention for Diaspora + * + * @param array $match Matching values for the callback + * @return string Replaced mention + */ + private static function bbCodeMention2DiasporaCallback($match) + { + $contact = Contact::getDetailsByURL($match[3]); + + if (empty($contact['addr'])) { + $contact = Probe::uri($match[3]); + } + + if (empty($contact['addr'])) { + return $match[0]; + } + + $mention = '@{' . $match[2] . '; ' . $contact['addr'] . '}'; + return $mention; + } + + /** + * @brief Converts a BBCode text into Markdown + * + * This function converts a BBCode item body to be sent to Markdown-enabled + * systems like Diaspora and Libertree + * + * @param string $text + * @param bool $for_diaspora Diaspora requires more changes than Libertree + * @return string + */ + public static function toMarkdown($text, $for_diaspora = true) + { + $a = self::getApp(); + + $original_text = $text; + + // Since Diaspora is creating a summary for links, this function removes them before posting + if ($for_diaspora) { + $text = self::removeShareInformation($text); + } + + /** + * Transform #tags, strip off the [url] and replace spaces with underscore + */ + $url_search_string = "^\[\]"; + $text = preg_replace_callback("/#\[url\=([$url_search_string]*)\](.*?)\[\/url\]/i", + function ($matches) { + return '#' . str_replace(' ', '_', $matches[2]); + }, + $text + ); + + // Converting images with size parameters to simple images. Markdown doesn't know it. + $text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $text); + + // Extracting multi-line code blocks before the whitespace processing/code highlighter in self::convert() + $codeblocks = []; + + $text = preg_replace_callback("#\[code(?:=([^\]]*))?\](.*?)\[\/code\]#is", + function ($matches) use (&$codeblocks) { + $return = $matches[0]; + if (strpos($matches[2], "\n") !== false) { + $return = '#codeblock-' . count($codeblocks) . '#'; + + $prefix = '````' . $matches[1] . PHP_EOL; + $codeblocks[] = $prefix . trim($matches[2]) . PHP_EOL . '````'; + } + return $return; + }, + $text + ); + + // Convert it to HTML - don't try oembed + if ($for_diaspora) { + $text = self::convert($text, false, 3); + + // Add all tags that maybe were removed + if (preg_match_all("/#\[url\=([$url_search_string]*)\](.*?)\[\/url\]/ism", $original_text, $tags)) { + $tagline = ""; + foreach ($tags[2] as $tag) { + $tag = html_entity_decode($tag, ENT_QUOTES, 'UTF-8'); + if (!strpos(html_entity_decode($text, ENT_QUOTES, 'UTF-8'), '#' . $tag)) { + $tagline .= '#' . $tag . ' '; + } + } + $text = $text . " " . $tagline; + } + } else { + $text = self::convert($text, false, 4); + } + + // mask some special HTML chars from conversation to markdown + $text = str_replace(['<', '>', '&'], ['&_lt_;', '&_gt_;', '&_amp_;'], $text); + + // If a link is followed by a quote then there should be a newline before it + // Maybe we should make this newline at every time before a quote. + $text = str_replace(["
"], ["
"], $text); + + $stamp1 = microtime(true); + + // Now convert HTML to Markdown + $converter = new HtmlConverter(); + $text = $converter->convert($text); + + // unmask the special chars back to HTML + $text = str_replace(['&\_lt\_;', '&\_gt\_;', '&\_amp\_;'], ['<', '>', '&'], $text); + + $a->save_timestamp($stamp1, "parser"); + + // Libertree has a problem with escaped hashtags. + $text = str_replace(['\#'], ['#'], $text); + + // Remove any leading or trailing whitespace, as this will mess up + // the Diaspora signature verification and cause the item to disappear + $text = trim($text); + + if ($for_diaspora) { + $url_search_string = "^\[\]"; + $text = preg_replace_callback( + "/([@]\[(.*?)\])\(([$url_search_string]*?)\)/ism", + ['self', 'bbCodeMention2DiasporaCallback'], + $text + ); + } + + // Restore code blocks + $text = preg_replace_callback('/#codeblock-([0-9]+)#/iU', + function ($matches) use ($codeblocks) { + $return = ''; + if (isset($codeblocks[intval($matches[1])])) { + $return = $codeblocks[$matches[1]]; + } + return $return; + }, + $text + ); + + Addon::callHooks('bb2diaspora', $text); + + return $text; + } } diff --git a/src/Content/Text/Markdown.php b/src/Content/Text/Markdown.php index 0e6846ebf..e7383a3fd 100644 --- a/src/Content/Text/Markdown.php +++ b/src/Content/Text/Markdown.php @@ -87,7 +87,7 @@ class Markdown extends BaseObject // Escaping the hash tags $s = preg_replace('/\#([^\s\#])/', '#$1', $s); - $s = Markdown::convert($s); + $s = self::convert($s); $regexp = "/@\{(?:([^\}]+?); )?([^\} ]+)\}/"; $s = preg_replace_callback($regexp, ['self', 'diasporaMention2BBCodeCallback'], $s); From 26ea6f69d726a0a9ff87e5db2f42126ec56708f3 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 17:39:41 -0500 Subject: [PATCH 024/201] Update references to bb2diaspora and diaspora2bb --- mod/babel.php | 6 +++--- src/Protocol/Diaspora.php | 30 ++++++++++++++++-------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/mod/babel.php b/mod/babel.php index 43b5c4e80..ac2e1342e 100644 --- a/mod/babel.php +++ b/mod/babel.php @@ -49,7 +49,7 @@ function babel_content() $o .= '

' . L10n::t('bbcode => html2bbcode: ') . '

' . EOL . EOL; $o .= visible_lf($bbcode) . EOL . EOL; - $diaspora = bb2diaspora($text); + $diaspora = BBCode::toMarkdown($text); $o .= '

' . L10n::t('bb2diaspora: ') . '

' . EOL . EOL; $o .= visible_lf($diaspora) . EOL . EOL; @@ -57,7 +57,7 @@ function babel_content() $o .= '

' . L10n::t('bb2diaspora => Markdown: ') . '

' . EOL . EOL; $o .= $html . EOL . EOL; - $bbcode = diaspora2bb($diaspora); + $bbcode = Markdown::toBBCode($diaspora); $o .= '

' . L10n::t('bb2diaspora => diaspora2bb: ') . '

' . EOL . EOL; $o .= visible_lf($bbcode) . EOL . EOL; @@ -71,7 +71,7 @@ function babel_content() $o .= '

' . L10n::t("Source input \x28Diaspora format\x29: ") . '

' . EOL . EOL; $o .= '
' . $d2bbtext . '
' . EOL . EOL; - $bb = diaspora2bb($d2bbtext); + $bb = Markdown::toBBCode($d2bbtext); $o .= '

' . L10n::t('diaspora2bb: ') . '

' . EOL . EOL; $o .= '
' . $bb . '
' . EOL . EOL; } diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 1578edb92..a2a4f3603 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -7,9 +7,11 @@ * This implementation here interprets the old and the new protocol and sends the new one. * In the future we will remove most stuff from "validPosting" and interpret only the new protocol. */ + namespace Friendica\Protocol; use Friendica\Content\Text\BBCode; +use Friendica\Content\Text\Markdown; use Friendica\Core\Cache; use Friendica\Core\Config; use Friendica\Core\L10n; @@ -1729,7 +1731,7 @@ class Diaspora $datarray["plink"] = self::plink($author, $guid, $parent_item['guid']); - $body = diaspora2bb($text); + $body = Markdown::toBBCode($text); $datarray["body"] = self::replacePeopleGuid($body, $person["url"]); @@ -1796,7 +1798,7 @@ class Diaspora return false; } - $body = diaspora2bb($msg_text); + $body = Markdown::toBBCode($msg_text); $message_uri = $msg_author.":".$msg_guid; $person = self::personByHandle($msg_author); @@ -2130,7 +2132,7 @@ class Diaspora return false; } - $body = diaspora2bb($text); + $body = Markdown::toBBCode($text); $body = self::replacePeopleGuid($body, $person["url"]); @@ -2282,8 +2284,8 @@ class Diaspora $image_url = unxmlify($data->image_url); $birthday = unxmlify($data->birthday); $gender = unxmlify($data->gender); - $about = diaspora2bb(unxmlify($data->bio)); - $location = diaspora2bb(unxmlify($data->location)); + $about = Markdown::toBBCode(unxmlify($data->bio)); + $location = Markdown::toBBCode(unxmlify($data->location)); $searchable = (unxmlify($data->searchable) == "true"); $nsfw = (unxmlify($data->nsfw) == "true"); $tags = unxmlify($data->tag_string); @@ -2660,7 +2662,7 @@ class Diaspora if (self::isReshare($r[0]["body"], true)) { $r = []; } elseif (self::isReshare($r[0]["body"], false) || strstr($r[0]["body"], "[share")) { - $r[0]["body"] = diaspora2bb(bb2diaspora($r[0]["body"])); + $r[0]["body"] = Markdown::toBBCode(BBCode::toMarkdown($r[0]["body"])); $r[0]["body"] = self::replacePeopleGuid($r[0]["body"], $r[0]["author-link"]); @@ -2695,7 +2697,7 @@ class Diaspora if (DBM::is_result($r)) { // If it is a reshared post from another network then reformat to avoid display problems with two share elements if (self::isReshare($r[0]["body"], false)) { - $r[0]["body"] = diaspora2bb(bb2diaspora($r[0]["body"])); + $r[0]["body"] = Markdown::toBBCode(BBCode::toMarkdown($r[0]["body"])); $r[0]["body"] = self::replacePeopleGuid($r[0]["body"], $r[0]["author-link"]); } @@ -2939,7 +2941,7 @@ class Diaspora } } - $body = diaspora2bb($text); + $body = Markdown::toBBCode($text); $datarray = []; @@ -3590,14 +3592,14 @@ class Diaspora $eventdata['end'] = DateTimeFormat::convert($event['finish'], "UTC", $eventdata['timezone'], $mask); } if ($event['summary']) { - $eventdata['summary'] = html_entity_decode(bb2diaspora($event['summary'])); + $eventdata['summary'] = html_entity_decode(BBCode::toMarkdown($event['summary'])); } if ($event['desc']) { - $eventdata['description'] = html_entity_decode(bb2diaspora($event['desc'])); + $eventdata['description'] = html_entity_decode(BBCode::toMarkdown($event['desc'])); } if ($event['location']) { $location = []; - $location["address"] = html_entity_decode(bb2diaspora($event['location'])); + $location["address"] = html_entity_decode(BBCode::toMarkdown($event['location'])); $location["lat"] = 0; $location["lng"] = 0; $eventdata['location'] = $location; @@ -3647,7 +3649,7 @@ class Diaspora $body = $item["body"]; // convert to markdown - $body = html_entity_decode(bb2diaspora($body)); + $body = html_entity_decode(BBCode::toMarkdown($body)); // Adding the title if (strlen($title)) { @@ -3832,7 +3834,7 @@ class Diaspora $parent = $p[0]; - $text = html_entity_decode(bb2diaspora($item["body"])); + $text = html_entity_decode(BBCode::toMarkdown($item["body"])); $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM); $comment = ["author" => self::myHandle($owner), @@ -4068,7 +4070,7 @@ class Diaspora "participants" => $cnv["recips"] ]; - $body = bb2diaspora($item["body"]); + $body = BBCode::toMarkdown($item["body"]); $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM); $msg = [ From bb7f459b47aa6647bedd136da27ee1f47e5c7ee6 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 17:43:41 -0500 Subject: [PATCH 025/201] Remove references to include/bb2diaspora.php --- mod/babel.php | 7 +++---- src/Protocol/Diaspora.php | 1 - 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/mod/babel.php b/mod/babel.php index ac2e1342e..99e6f4078 100644 --- a/mod/babel.php +++ b/mod/babel.php @@ -7,7 +7,6 @@ use Friendica\Content\Text\BBCode; use Friendica\Content\Text\Markdown; use Friendica\Core\L10n; -require_once 'include/bb2diaspora.php'; require_once 'include/html2bbcode.php'; function visible_lf($s) @@ -50,15 +49,15 @@ function babel_content() $o .= visible_lf($bbcode) . EOL . EOL; $diaspora = BBCode::toMarkdown($text); - $o .= '

' . L10n::t('bb2diaspora: ') . '

' . EOL . EOL; + $o .= '

' . L10n::t('BBCode::toMarkdown: ') . '

' . EOL . EOL; $o .= visible_lf($diaspora) . EOL . EOL; $html = Markdown::convert($diaspora); - $o .= '

' . L10n::t('bb2diaspora => Markdown: ') . '

' . EOL . EOL; + $o .= '

' . L10n::t('BBCode::toMarkdown => Markdown::convert: ') . '

' . EOL . EOL; $o .= $html . EOL . EOL; $bbcode = Markdown::toBBCode($diaspora); - $o .= '

' . L10n::t('bb2diaspora => diaspora2bb: ') . '

' . EOL . EOL; + $o .= '

' . L10n::t('BBCode::toMarkdown => Markdown::toBBCode: ') . '

' . EOL . EOL; $o .= visible_lf($bbcode) . EOL . EOL; $bbcode = html2bbcode($html); diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index a2a4f3603..0055f8d9b 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -36,7 +36,6 @@ use SimpleXMLElement; require_once 'include/dba.php'; require_once 'include/items.php'; -require_once 'include/bb2diaspora.php'; /** * @brief This class contain functions to create and send Diaspora XML files From 6447a45a060d345d8c9b1c2425b7e42305020546 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 17:43:51 -0500 Subject: [PATCH 026/201] Remove include/bb2diaspora.php --- include/bb2diaspora.php | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 include/bb2diaspora.php diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php deleted file mode 100644 index 932d543db..000000000 --- a/include/bb2diaspora.php +++ /dev/null @@ -1,12 +0,0 @@ - Date: Wed, 28 Feb 2018 23:48:09 -0500 Subject: [PATCH 027/201] Add support for Memcached/Improve database cache - Create Cache Driver interface - Update cache table fields - Add CacheSessionHandler --- boot.php | 2 +- src/Core/Cache.php | 210 +++++------------- src/Core/Cache/DatabaseCacheDriver.php | 56 +++++ src/Core/Cache/ICacheDriver.php | 50 +++++ src/Core/Cache/MemcacheCacheDriver.php | 77 +++++++ src/Core/Cache/MemcachedCacheDriver.php | 66 ++++++ src/Core/Session.php | 10 +- ...ionHandler.php => CacheSessionHandler.php} | 35 +-- src/Database/DBStructure.php | 12 +- 9 files changed, 326 insertions(+), 192 deletions(-) create mode 100644 src/Core/Cache/DatabaseCacheDriver.php create mode 100644 src/Core/Cache/ICacheDriver.php create mode 100644 src/Core/Cache/MemcacheCacheDriver.php create mode 100644 src/Core/Cache/MemcachedCacheDriver.php rename src/Core/Session/{MemcacheSessionHandler.php => CacheSessionHandler.php} (65%) diff --git a/boot.php b/boot.php index 4ba8c1ad8..5dc7ce1e9 100644 --- a/boot.php +++ b/boot.php @@ -39,7 +39,7 @@ define('FRIENDICA_PLATFORM', 'Friendica'); define('FRIENDICA_CODENAME', 'Asparagus'); define('FRIENDICA_VERSION', '3.6-dev'); define('DFRN_PROTOCOL_VERSION', '2.23'); -define('DB_UPDATE_VERSION', 1255); +define('DB_UPDATE_VERSION', 1256); define('NEW_UPDATE_ROUTINE_VERSION', 1170); /** diff --git a/src/Core/Cache.php b/src/Core/Cache.php index 5ceb97676..58969f081 100644 --- a/src/Core/Cache.php +++ b/src/Core/Cache.php @@ -4,44 +4,46 @@ */ namespace Friendica\Core; +use Friendica\Core\Cache; use Friendica\Core\Config; -use Friendica\Database\DBM; -use Friendica\Util\DateTimeFormat; -use dba; -use Memcache; - -require_once 'include/dba.php'; /** * @brief Class for storing data for a short time */ class Cache { + const MONTH = 0; + const WEEK = 1; + const DAY = 2; + const HOUR = 3; + const HALF_HOUR = 4; + const QUARTER_HOUR = 5; + const FIVE_MINUTES = 6; + const MINUTE = 7; + /** - * @brief Check for Memcache and open a connection if configured - * - * @return Memcache|boolean The Memcache object - or "false" if not successful + * @var Cache\ICacheDriver */ - public static function memcache() + static $driver = null; + + public static function init() { - if (!class_exists('Memcache', false)) { - return false; + switch(Config::get('system', 'cache_driver', 'database')) { + case 'memcache': + $memcache_host = Config::get('system', 'memcache_host', '127.0.0.1'); + $memcache_port = Config::get('system', 'memcache_port', 11211); + + self::$driver = new Cache\MemcacheCacheDriver($memcache_host, $memcache_port); + break; + case 'memcached': + $memcached_host = Config::get('system', 'memcached_host', '127.0.0.1'); + $memcached_port = Config::get('system', 'memcached_port', 11211); + + self::$driver = new Cache\MemcachedCacheDriver($memcached_host, $memcached_port); + break; + default: + self::$driver = new Cache\DatabaseCacheDriver(); } - - if (!Config::get('system', 'memcache')) { - return false; - } - - $memcache_host = Config::get('system', 'memcache_host', '127.0.0.1'); - $memcache_port = Config::get('system', 'memcache_port', 11211); - - $memcache = new Memcache(); - - if (!$memcache->connect($memcache_host, $memcache_port)) { - return false; - } - - return $memcache; } /** @@ -51,31 +53,31 @@ class Cache * * @return integer The cache duration in seconds */ - private static function duration($level) + public static function duration($level) { switch ($level) { - case CACHE_MONTH: + case self::MONTH: $seconds = 2592000; break; - case CACHE_WEEK: + case self::WEEK: $seconds = 604800; break; - case CACHE_DAY: + case self::DAY: $seconds = 86400; break; - case CACHE_HOUR: + case self::HOUR: $seconds = 3600; break; - case CACHE_HALF_HOUR: + case self::HALF_HOUR: $seconds = 1800; break; - case CACHE_QUARTER_HOUR: + case self::QUARTER_HOUR: $seconds = 900; break; - case CACHE_FIVE_MINUTES: + case self::FIVE_MINUTES: $seconds = 300; break; - case CACHE_MINUTE: + case self::MINUTE: default: $seconds = 60; break; @@ -83,6 +85,20 @@ class Cache return $seconds; } + /** + * Returns the current cache driver + * + * @return Cache\ICacheDriver + */ + private static function getDriver() + { + if (self::$driver === null) { + self::init(); + } + + return self::$driver; + } + /** * @brief Fetch cached data according to the key * @@ -92,40 +108,7 @@ class Cache */ public static function get($key) { - $memcache = self::memcache(); - if (is_object($memcache)) { - // We fetch with the hostname as key to avoid problems with other applications - $cached = $memcache->get(get_app()->get_hostname().":".$key); - $value = @unserialize($cached); - - // Only return a value if the serialized value is valid. - // We also check if the db entry is a serialized - // boolean 'false' value (which we want to return). - if ($cached === serialize(false) || $value !== false) { - return $value; - } - - return null; - } - - // Frequently clear cache - self::clear(); - - $cache = dba::selectFirst('cache', ['v'], ['k' => $key]); - - if (DBM::is_result($cache)) { - $cached = $cache['v']; - $value = @unserialize($cached); - - // Only return a value if the serialized value is valid. - // We also check if the db entry is a serialized - // boolean 'false' value (which we want to return). - if ($cached === serialize(false) || $value !== false) { - return $value; - } - } - - return null; + return self::getDriver()->get($key); } /** @@ -137,20 +120,11 @@ class Cache * @param mixed $value The value that is about to be stored * @param integer $duration The cache lifespan * - * @return void + * @return bool */ - public static function set($key, $value, $duration = CACHE_MONTH) + public static function set($key, $value, $duration = self::MONTH) { - // Do we have an installed memcache? Use it instead. - $memcache = self::memcache(); - if (is_object($memcache)) { - // We store with the hostname as key to avoid problems with other applications - $memcache->set(get_app()->get_hostname().":".$key, serialize($value), MEMCACHE_COMPRESSED, self::duration($duration)); - return; - } - $fields = ['v' => serialize($value), 'expire_mode' => $duration, 'updated' => DateTimeFormat::utcNow()]; - $condition = ['k' => $key]; - dba::update('cache', $fields, $condition, true); + return self::getDriver()->set($key, $value, $duration); } /** @@ -160,76 +134,8 @@ class Cache * * @return void */ - public static function clear($max_level = CACHE_MONTH) + public static function clear() { - // Clear long lasting cache entries only once a day - if (Config::get("system", "cache_cleared_day") < time() - self::duration(CACHE_DAY)) { - if ($max_level == CACHE_MONTH) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 30 days"), - CACHE_MONTH]; - dba::delete('cache', $condition); - } - - if ($max_level <= CACHE_WEEK) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 7 days"), - CACHE_WEEK]; - dba::delete('cache', $condition); - } - - if ($max_level <= CACHE_DAY) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 1 days"), - CACHE_DAY]; - dba::delete('cache', $condition); - } - Config::set("system", "cache_cleared_day", time()); - } - - if (($max_level <= CACHE_HOUR) && (Config::get("system", "cache_cleared_hour")) < time() - self::duration(CACHE_HOUR)) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 1 hours"), - CACHE_HOUR]; - dba::delete('cache', $condition); - - Config::set("system", "cache_cleared_hour", time()); - } - - if (($max_level <= CACHE_HALF_HOUR) && (Config::get("system", "cache_cleared_half_hour")) < time() - self::duration(CACHE_HALF_HOUR)) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 30 minutes"), - CACHE_HALF_HOUR]; - dba::delete('cache', $condition); - - Config::set("system", "cache_cleared_half_hour", time()); - } - - if (($max_level <= CACHE_QUARTER_HOUR) && (Config::get("system", "cache_cleared_quarter_hour")) < time() - self::duration(CACHE_QUARTER_HOUR)) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 15 minutes"), - CACHE_QUARTER_HOUR]; - dba::delete('cache', $condition); - - Config::set("system", "cache_cleared_quarter_hour", time()); - } - - if (($max_level <= CACHE_FIVE_MINUTES) && (Config::get("system", "cache_cleared_five_minute")) < time() - self::duration(CACHE_FIVE_MINUTES)) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 5 minutes"), - CACHE_FIVE_MINUTES]; - dba::delete('cache', $condition); - - Config::set("system", "cache_cleared_five_minute", time()); - } - - if (($max_level <= CACHE_MINUTE) && (Config::get("system", "cache_cleared_minute")) < time() - self::duration(CACHE_MINUTE)) { - $condition = ["`updated` < ? AND `expire_mode` = ?", - DateTimeFormat::utc("now - 1 minutes"), - CACHE_MINUTE]; - dba::delete('cache', $condition); - - Config::set("system", "cache_cleared_minute", time()); - } + return self::getDriver()->clear(); } } diff --git a/src/Core/Cache/DatabaseCacheDriver.php b/src/Core/Cache/DatabaseCacheDriver.php new file mode 100644 index 000000000..0aefc812b --- /dev/null +++ b/src/Core/Cache/DatabaseCacheDriver.php @@ -0,0 +1,56 @@ + + */ +class DatabaseCacheDriver implements ICacheDriver +{ + public function get($key) + { + $cache = dba::selectFirst('cache', ['v'], ['`k` = ? AND `expires` >= NOW()`', $key]); + + if (DBM::is_result($cache)) { + $cached = $cache['v']; + $value = @unserialize($cached); + + // Only return a value if the serialized value is valid. + // We also check if the db entry is a serialized + // boolean 'false' value (which we want to return). + if ($cached === serialize(false) || $value !== false) { + return $value; + } + } + + return null; + } + + public function set($key, $value, $duration = Cache::MONTH) + { + $fields = [ + 'v' => serialize($value), + 'expires' => DateTimeFormat::utc('now + ' . Cache::duration($duration) . ' seconds'), + 'updated' => DateTimeFormat::utcNow() + ]; + + return dba::update('cache', $fields, ['k' => $key], true); + } + + public function delete($key) + { + return dba::delete('cache', ['k' => $key]); + } + + public function clear() + { + return dba::delete('cache', ['`expires` < NOW()']); + } +} diff --git a/src/Core/Cache/ICacheDriver.php b/src/Core/Cache/ICacheDriver.php new file mode 100644 index 000000000..9ed622693 --- /dev/null +++ b/src/Core/Cache/ICacheDriver.php @@ -0,0 +1,50 @@ + + */ +interface ICacheDriver +{ + /** + * Fetches cached data according to the key + * + * @param string $key The key to the cached data + * + * @return mixed Cached $value or "null" if not found + */ + public function get($key); + + /** + * Stores data in the cache identified by the key. The input $value can have multiple formats. + * + * @param string $key The cache key + * @param mixed $value The value to store + * @param integer $duration The cache lifespan, must be one of the Cache constants + * + * @return bool + */ + public function set($key, $value, $duration = Cache::MONTH); + + + /** + * Delete a key from the cache + * + * @param string $key + * + * @return bool + */ + public function delete($key); + + /** + * Remove outdated data from the cache + * + * @return bool + */ + public function clear(); +} diff --git a/src/Core/Cache/MemcacheCacheDriver.php b/src/Core/Cache/MemcacheCacheDriver.php new file mode 100644 index 000000000..03fc075f4 --- /dev/null +++ b/src/Core/Cache/MemcacheCacheDriver.php @@ -0,0 +1,77 @@ + + */ +class MemcacheCacheDriver extends BaseObject implements ICacheDriver +{ + /** + * @var Memcache + */ + private $memcache; + + public function __construct($memcache_host, $memcache_port) + { + if (!class_exists('Memcache', false)) { + throw new \Exception('Memcache class isn\'t available'); + } + + $this->memcache = new \Memcache(); + + if (!$this->memcache->connect($memcache_host, $memcache_port)) { + throw new \Exception('Expected Memcache server at ' . $memcache_host . ':' . $memcache_port . ' isn\'t available'); + } + } + + public function get($key) + { + $return = null; + + // We fetch with the hostname as key to avoid problems with other applications + $cached = $this->memcache->get(self::getApp()->get_hostname() . ':' . $key); + + // @see http://php.net/manual/en/memcache.get.php#84275 + if (is_bool($cached) || is_double($cached) || is_long($cached)) { + return $return; + } + + $value = @unserialize($cached); + + // Only return a value if the serialized value is valid. + // We also check if the db entry is a serialized + // boolean 'false' value (which we want to return). + if ($cached === serialize(false) || $value !== false) { + $return = $value; + } + + return $return; + } + + public function set($key, $value, $duration = Cache::MONTH) + { + // We store with the hostname as key to avoid problems with other applications + return $this->memcache->set( + self::getApp()->get_hostname() . ":" . $key, + serialize($value), + MEMCACHE_COMPRESSED, + Cache::duration($duration) + ); + } + + public function delete($key) + { + return $this->memcache->delete($key); + } + + public function clear() + { + return true; + } +} diff --git a/src/Core/Cache/MemcachedCacheDriver.php b/src/Core/Cache/MemcachedCacheDriver.php new file mode 100644 index 000000000..9101c7919 --- /dev/null +++ b/src/Core/Cache/MemcachedCacheDriver.php @@ -0,0 +1,66 @@ + + */ +class MemcachedCacheDriver extends BaseObject implements ICacheDriver +{ + /** + * @var Memcached + */ + private $memcached; + + public function __construct($memcached_host, $memcached_port) + { + if (!class_exists('Memcached', false)) { + throw new \Exception('Memcached class isn\'t available'); + } + + $this->memcached = new \Memcached(); + + if (!$this->memcached->addServer($memcached_host, $memcached_port)) { + throw new \Exception('Expected Memcached server at ' . $memcached_host . ':' . $memcached_port . ' isn\'t available'); + } + } + + public function get($key) + { + $return = null; + + // We fetch with the hostname as key to avoid problems with other applications + $value = $this->memcached->get(self::getApp()->get_hostname() . ':' . $key); + + if ($this->memcached->getResultCode() === \Memcached::RES_SUCCESS) { + $return = $value; + } + + return $return; + } + + public function set($key, $value, $duration = Cache::MONTH) + { + // We store with the hostname as key to avoid problems with other applications + return $this->memcached->set( + self::getApp()->get_hostname() . ":" . $key, + $value, + Cache::duration($duration) + ); + } + + public function delete($key) + { + return $this->memcached->delete($key); + } + + public function clear() + { + return true; + } +} diff --git a/src/Core/Session.php b/src/Core/Session.php index 20d1e9ef7..b245c675b 100644 --- a/src/Core/Session.php +++ b/src/Core/Session.php @@ -5,8 +5,8 @@ */ namespace Friendica\Core; +use Friendica\Core\Session\CacheSessionHandler; use Friendica\Core\Session\DatabaseSessionHandler; -use Friendica\Core\Session\MemcacheSessionHandler; /** * High-level Session service class @@ -28,10 +28,10 @@ class Session ini_set('session.cookie_secure', 1); } - if (!Config::get('system', 'disable_database_session')) { - $memcache = Cache::memcache(); - if (is_object($memcache)) { - $SessionHandler = new MemcacheSessionHandler($memcache); + $session_handler = Config::get('system', 'session_handler', 'database'); + if ($session_handler != 'native') { + if ($session_handler == 'cache' && Config::get('system', 'cache_driver', 'database') != 'database') { + $SessionHandler = new CacheSessionHandler(); } else { $SessionHandler = new DatabaseSessionHandler(); } diff --git a/src/Core/Session/MemcacheSessionHandler.php b/src/Core/Session/CacheSessionHandler.php similarity index 65% rename from src/Core/Session/MemcacheSessionHandler.php rename to src/Core/Session/CacheSessionHandler.php index 0bc5e8bfe..463fd33d3 100644 --- a/src/Core/Session/MemcacheSessionHandler.php +++ b/src/Core/Session/CacheSessionHandler.php @@ -3,34 +3,20 @@ namespace Friendica\Core\Session; use Friendica\BaseObject; +use Friendica\Core\Cache; use Friendica\Core\Session; use SessionHandlerInterface; -use Memcache; require_once 'boot.php'; require_once 'include/text.php'; /** - * SessionHandler using Memcache + * SessionHandler using Friendica Cache * * @author Hypolite Petovan */ -class MemcacheSessionHandler extends BaseObject implements SessionHandlerInterface +class CacheSessionHandler extends BaseObject implements SessionHandlerInterface { - /** - * @var Memcache - */ - private $memcache = null; - - /** - * - * @param Memcache $memcache - */ - public function __construct(Memcache $memcache) - { - $this->memcache = $memcache; - } - public function open($save_path, $session_name) { return true; @@ -42,8 +28,8 @@ class MemcacheSessionHandler extends BaseObject implements SessionHandlerInterfa return ''; } - $data = $this->memcache->get(self::getApp()->get_hostname() . ":session:" . $session_id); - if (!is_bool($data)) { + $data = Cache::get('session:' . $session_id); + if (!empty($data)) { Session::$exists = true; return $data; } @@ -72,14 +58,7 @@ class MemcacheSessionHandler extends BaseObject implements SessionHandlerInterfa return true; } - $expire = time() + Session::$expire; - - $this->memcache->set( - self::getApp()->get_hostname() . ":session:" . $session_id, - $session_data, - MEMCACHE_COMPRESSED, - $expire - ); + Cache::set('session:' . $session_id, $session_data, Session::$expire); return true; } @@ -91,7 +70,7 @@ class MemcacheSessionHandler extends BaseObject implements SessionHandlerInterfa public function destroy($id) { - $this->memcache->delete(self::getApp()->get_hostname() . ":session:" . $id); + Cache::delete('session:' . $id); return true; } diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index f4a88871d..d2d0bd703 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -712,16 +712,16 @@ class DBStructure ] ]; $database["cache"] = [ - "comment" => "Used to store different data that doesn't to be stored for a long time", + "comment" => "Stores temporary data", "fields" => [ - "k" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => ""], - "v" => ["type" => "mediumtext", "comment" => ""], - "expire_mode" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], - "updated" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], + "k" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "cache key"], + "v" => ["type" => "mediumtext", "comment" => "cached serialized value"], + "expires" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "datetime of cache expiration"], + "updated" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "datetime of cache insertion"], ], "indexes" => [ "PRIMARY" => ["k"], - "expire_mode_updated" => ["expire_mode", "updated"], + "k_expires" => ["k", "expires"], ] ]; $database["challenge"] = [ From 4b361747a093121e1fb26b03911e2dcc9380487d Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 23:48:28 -0500 Subject: [PATCH 028/201] Update SQL scripts for cache table --- database.sql | 16 ++++++++-------- friendica_test_data.sql | 31 +++++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/database.sql b/database.sql index 4275c3831..7c4acc29f 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 3.6-dev (Asparagus) --- DB_UPDATE_VERSION 1255 +-- DB_UPDATE_VERSION 1256 -- ------------------------------------------ @@ -55,13 +55,13 @@ CREATE TABLE IF NOT EXISTS `auth_codes` ( -- TABLE cache -- CREATE TABLE IF NOT EXISTS `cache` ( - `k` varbinary(255) NOT NULL COMMENT '', - `v` mediumtext COMMENT '', - `expire_mode` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', - `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', - PRIMARY KEY(`k`), - INDEX `expire_mode_updated` (`expire_mode`,`updated`) -) DEFAULT COLLATE utf8mb4_general_ci; + `k` varbinary(255) NOT NULL COMMENT 'cache key', + `v` mediumtext COMMENT 'cached serialized value', + `expires` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache expiration', + `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache insertion', + PRIMARY KEY (`k`), + KEY `k_expires` (`k`,`expires`) USING BTREE +) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Stores temporary data'; -- -- TABLE challenge diff --git a/friendica_test_data.sql b/friendica_test_data.sql index 97d3788d9..019dc4c49 100644 --- a/friendica_test_data.sql +++ b/friendica_test_data.sql @@ -112,13 +112,13 @@ DROP TABLE IF EXISTS `cache`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `cache` ( - `k` varbinary(255) NOT NULL, - `v` mediumtext, - `expire_mode` int(11) NOT NULL DEFAULT '0', - `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `k` varbinary(255) NOT NULL COMMENT 'cache key', + `v` mediumtext COMMENT 'cached serialized value', + `expires` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache expiration', + `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache insertion', PRIMARY KEY (`k`), - KEY `expire_mode_updated` (`expire_mode`,`updated`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + KEY `k_expires` (`k`,`expires`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Used to store different data that doesn''t to be stored for a long time'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -127,7 +127,22 @@ CREATE TABLE `cache` ( LOCK TABLES `cache` WRITE; /*!40000 ALTER TABLE `cache` DISABLE KEYS */; -INSERT INTO `cache` VALUES ('about::http://friendica.dev/profile/friendica1','s:0:\"\";',0,'2017-09-07 09:09:50'),('about::http://friendica.dev/profile/friendica2','s:0:\"\";',0,'2017-09-07 09:09:50'),('about::http://friendica.dev/profile/friendica4','s:0:\"\";',0,'2017-09-07 09:13:25'),('app:proc_run:started','i:1504775968;',7,'2017-09-07 09:19:28'),('diaspora:construct_comment:758d682b1059b10ee096f38798595234','a:6:{s:6:\"author\";s:24:\"friendica3@friendica.dev\";s:4:\"guid\";s:32:\"758d682b1059b10ee096f38798595234\";s:10:\"created_at\";s:20:\"2017-09-07T09:18:24Z\";s:11:\"parent_guid\";s:32:\"758d682b1859b10ebd6abab685903735\";s:4:\"text\";s:5:\"Cool!\";s:16:\"author_signature\";s:0:\"\";}',5,'2017-09-07 09:18:24'),('diaspora:construct_comment:758d682b2059b10f204f9c2684001373','a:6:{s:6:\"author\";s:24:\"friendica2@friendica.dev\";s:4:\"guid\";s:32:\"758d682b2059b10f204f9c2684001373\";s:10:\"created_at\";s:20:\"2017-09-07T09:19:28Z\";s:11:\"parent_guid\";s:32:\"758d682b1459b10f0be17c3206121357\";s:4:\"text\";s:4:\"Yay!\";s:16:\"author_signature\";s:0:\"\";}',5,'2017-09-07 09:19:28'),('probe_url::friendica2@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica2\";s:4:\"nick\";s:10:\"friendica2\";s:4:\"guid\";s:32:\"758d682b1359b10a3a54a8c301503194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica2\";s:4:\"addr\";s:24:\"friendica2@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/3.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica2\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica2\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica2\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica2\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica2\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzOHCS/TBWB72tguU5RWu\nG4KnESmdXWGSHHrCm0iWP88Xl17lkEw58o4yt+bQS3c8U46OwP8z9EyCxFyDyHPU\noVgii+jMmT4hhKw5TeDPWwHSUZM07OP2d0J0Kktr6wC16DfGLWqo+EnJcLxyjFGn\nV6KzYR2d/73m0bj26QWM4w2ZCfBZvEEZsreF0XsZuBOWVRlTB4GzDlsRwRt05kUi\nevFnrth0fq+aeEnZA/8eFY9X8F1LB+mZLRdmWX77pMDtzzxTJUBoQPCkOJ0BvdXi\nyAYybmcxFzR/x1u+kpsgxeDOOPDAQAPnbBQcNNwWtl+emd8wmqXcbmM3XeIa1HPb\nDi0CHXJ5Lr95JYP2brAZu4dEwUNeTzkVkvB8DlviOSFmlg6CWmSKXdaF8trK6j4d\nlv7nxGBvmrbx1CmeA3RblvHR1aRyoQdNhBh1eLJrkDcaTgtzhycrjqdz+vVVV/xi\n4yMY9x+voxENfurEo/XsbzGfPSigTIHImzBcMtG0RTgxTMke6CoqRZW1pXFxZast\ncpsO02JRdPrXt+DHpYzDf8oEMTa4TNKBvczcT8ar82RZYY0srVV0uxH77xhx1bvm\nVAPf40FA2qbHZzCAv64YU9LdIT4iPEUga+Y5m9t2LvS+RiA8Zw/mmOdMFp4hI6+K\nELuO8hQc3Ot0moqfpYCnSl0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:03:39'),('probe_url::friendica3@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica3\";s:4:\"nick\";s:10:\"friendica3\";s:4:\"guid\";s:32:\"758d682b1359b10a642ef08222820194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica3\";s:4:\"addr\";s:24:\"friendica3@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/4.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica3\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica3\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica3\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica3\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica3\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwIuhjeg03GoOuSYqulsa\nvd/spvniwjaYZhCJYTHgOM4ak9qG8SwPhguSBMqZS3baHEcZtYcYsu5vSQAO/zCB\niK8yefV8LguBhoNw36p/hoQ4TdApOH3cjKAJoaxZSJw0oa50ebCSbh23chRHESbv\nlvfGXq0Pmk060VcLf6h00Iivg/BFNmDfEqrVmgpl0G1PIOatNJ5QdEpCP0E5Bg/H\nvnqvBgpkVAZkKA4xY5rw6pB2NofK74gaeNklnVFqAwaQZUrBv+z1C7h3NQ5YRees\nuspiwZVyFy95xm+kGlKq6GJ7WPQi1mKSJisHLxh9uI7ylgIyRWi/GRA2NBLb15tJ\nL9PpyWEbKhEX/zCUQbos6cFC3+jgiJoYIIa5pOYU0Ekf5AcyF3dFsbcWGObn++wv\nk+5dIK/un+1KOv7X3e/bAnkVCHHjzWAzURQkvb0fwFVzw80ioP4L4V+mvw4jxh+x\ndpPBQmqgCglqE2cpCB4gAcYPlXICBC18YcUYOkYIlgz2WuslcJCnrHO6K5q6lAn3\nNqEI/LmJDrq3hbu96k8d/0zCMNO+u3xPIhDcQ6ZzyhZmVDTpVGFiJ7Yhtfih3ASC\nZqWowoSq5onVWLCsj4QquNCIvJK1NLrkrr6rxD4DbCzW7XbZkenuHumh3HoFb5Lc\nRN6UJNHe/4FNNUzcAVBgEe0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:04:34'),('probe_url::friendica4@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica4\";s:4:\"nick\";s:10:\"friendica4\";s:4:\"guid\";s:32:\"758d682b1359b10a89ad697631454583\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica4\";s:4:\"addr\";s:24:\"friendica4@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/5.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica4\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica4\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica4\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica4\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica4\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxAJ+t/FrD0sHO2ecwsoH\nmOst2aPHca5n4UEIpr2ZTl26WN1AbcNo9wahDHXG7pE50GQwvmnnTIlVDLAsBC23\n8sTSpGXrIC8L7YiyDeu3piBp/w4jy8JQrbXn4L8IQbnmi6nDCSr1szXjBcvdPPKK\nrCFgYJ4hjEkSp/wJcKZ1mlRTwtofWZHUMu3NsP2146wRj0roydFVkWGrfsH8grUO\nqMktmpCUOQNsOIAN8b6vQiYQQoamGWjV8wXO3W0fRhQ5Yjko19j1t+O1Jvy2CMhn\nRY2wiGZ91ZSfl8VNLrz38JyeR0cz7YJeNYzOggB1AjEzLhKtqw7zkyW8Qg1Kfo85\ndagFPZ5sQZ8R4nus7xabICMG/qJPL23/1tyenxqkVP0iDIhLo/f0uuG4riNOJZtf\nPYPT6sxSlqxbznuLQr1fYnjFyEnFtJpzuAuvybshT5QLyKntcGap67fWoj/7SrA4\n8T5RCdYHDacMdKEC1SDwpokpgWhWaRkUxJ5F0Q5Jpyvhui/UkxkevDWv5373pgVz\ngaZlxRKYKABWiJkQH9FPAdsr4nUVErl/zvI0+9GuzK/EJ5ToVs8bF98Jb4Y3o2pm\nNtPL1ao9r0ug/3F7RHTLs1tp0Bdm/Gxk/RJf4j6gKgAw9WcdHzkxcvikhAY43zMe\n5qExQo663i3hzw4v3p94i+sCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:04:51'),('probe_url::friendica5@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica5\";s:4:\"nick\";s:10:\"friendica5\";s:4:\"guid\";s:32:\"758d682b1959b10ab0768ff699049903\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica5\";s:4:\"addr\";s:24:\"friendica5@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/6.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica5\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica5\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica5\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica5\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica5\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmtBUbN/07wWbcUvp9QvR\nKLoM+WjC0K0rFsx6L/Mktk6Go5+DqofuHSQgfJZGBI3vbTlbwW76peX/0aqiZPGF\nrrhX1FMhU23AxYE9TixRR+oqIKETNzU8NuahpK/ZBokoPL7mzrY4o5dNcnG4S57O\nir4VfEpuYB99K7Uo4yVc6a50ZQfDoBy6nnCPbVmh+gokc28paK7Av0vnMwwD6TWQ\nrgXyrPsa+Af5YeDC7GOmhppeN+e5zycRTddfXWR8QFp+he43b7z54pB+ajAu3J+C\nTAagIp5UWrBmwclF2gmLWvyYYpwTF3kNz+Waf0s3khiZXcJZKxGKVqXoTkqEKV/i\nvHryaBlvvAkQKR1mfJpNasJfHrqhOlHigWi3ISlPJQB4h+85W+YAXj+3j26OnMpb\nCmjf0BXLnjuC+w9rXFW/kj3Q1PxNaAfx/BoV62unWBKnZAkkzHOkQ5yyATdXQaEY\nlDsFbc0itSm3zjsPa1gXtn9e9z8Mqn5MwKk5I9k7TIr6/FdgbX7gxl6mn59OQ0v+\ne8o7HECSQvT8c+WmvBk3tjQHDgw3FeiJ54w0IGiha530vPCk5Z840d/jVUL7Qc6j\nrNi7hLOBvx4jdxk+5tq6fZMG4Sbu+Iibc4b+f2QyVW7Pcxt3CM/ADh0kzfGJ7wQd\nzl4w/9+s8DPT43Tbn98QK+MCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:05:05'),('probe_url::http://friendica.dev/profile/friendica1','a:21:{s:4:\"name\";s:10:\"friendica1\";s:4:\"nick\";s:10:\"friendica1\";s:4:\"guid\";s:32:\"758d682b8559b109d5ad831494500945\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica1\";s:4:\"addr\";s:24:\"friendica1@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/2.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica1\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica1\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica1\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica1\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica1\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzNeTX2GGZAqTecUeOPNq\n+uFCfBuN4g6xKTkBlUDeVCLp2N3uVJq+TSjmoau8MpY3jCD2Nqn5KsMPh8XJV2s6\nb1kSjmVdpr4EeBXPyvi3asCcgmqi2IeoK/ihVGP9IrrYh8zwzVY9wW1/TPcC4N4W\nCcmeFTO08CSJh2P8ROq6irU0ndbmqfmFSs5uZ7UcEKUzkgSSPTxq5x3O7xSfTbOZ\nPNhSn3r5buSOd46KyWaBIJ2KgFNoY2AGJqbzZTZmJZB/qelrONtJ6XDnDI9GNQBI\nyL9935Scmo9WrXeZcqXNW3yI97s1tH27pCxhsyy5xqzEYfAPwPFry4gbO+wSGcNm\nFYfbCM19uPvJyN6TEgFNZD5401Pl8LQaVkSAnV9LQPzn/54CJYQb6KlE0rymROyQ\nvKPUZmEkw6ZnVJIF5pjxu6bGGPdv3xmBH6Xnmi0hhNA2AEDbv6wDrLZYLUCTSSqq\nhW8WK3HylsP9dqNT+a3X9l9dG7vqmRevGcbBQDDZPOKjkJkAa8IgIlk3UIWs3bYY\nST0VUtjRpsoLo3XmdYtY5qXxjGjtEy7NjRErlT31WoMzxcLhLwxKGWQz/xMC9OXe\np+uoyVUOd3U/Jvz6vpW9k5ua417IrF9XaxtcKvhp69m16br8JkMuKWvdGomWDXxA\nG1cAbsHJN6JJEU/3Vo35sh0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:02:28'),('probe_url::http://friendica.dev/profile/friendica2','a:21:{s:4:\"name\";s:10:\"friendica2\";s:4:\"nick\";s:10:\"friendica2\";s:4:\"guid\";s:32:\"758d682b1359b10a3a54a8c301503194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica2\";s:4:\"addr\";s:24:\"friendica2@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/3.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica2\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica2\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica2\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica2\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica2\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzOHCS/TBWB72tguU5RWu\nG4KnESmdXWGSHHrCm0iWP88Xl17lkEw58o4yt+bQS3c8U46OwP8z9EyCxFyDyHPU\noVgii+jMmT4hhKw5TeDPWwHSUZM07OP2d0J0Kktr6wC16DfGLWqo+EnJcLxyjFGn\nV6KzYR2d/73m0bj26QWM4w2ZCfBZvEEZsreF0XsZuBOWVRlTB4GzDlsRwRt05kUi\nevFnrth0fq+aeEnZA/8eFY9X8F1LB+mZLRdmWX77pMDtzzxTJUBoQPCkOJ0BvdXi\nyAYybmcxFzR/x1u+kpsgxeDOOPDAQAPnbBQcNNwWtl+emd8wmqXcbmM3XeIa1HPb\nDi0CHXJ5Lr95JYP2brAZu4dEwUNeTzkVkvB8DlviOSFmlg6CWmSKXdaF8trK6j4d\nlv7nxGBvmrbx1CmeA3RblvHR1aRyoQdNhBh1eLJrkDcaTgtzhycrjqdz+vVVV/xi\n4yMY9x+voxENfurEo/XsbzGfPSigTIHImzBcMtG0RTgxTMke6CoqRZW1pXFxZast\ncpsO02JRdPrXt+DHpYzDf8oEMTa4TNKBvczcT8ar82RZYY0srVV0uxH77xhx1bvm\nVAPf40FA2qbHZzCAv64YU9LdIT4iPEUga+Y5m9t2LvS+RiA8Zw/mmOdMFp4hI6+K\nELuO8hQc3Ot0moqfpYCnSl0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:06:02'),('probe_url::http://friendica.dev/profile/friendica3','a:21:{s:4:\"name\";s:10:\"friendica3\";s:4:\"nick\";s:10:\"friendica3\";s:4:\"guid\";s:32:\"758d682b1359b10a642ef08222820194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica3\";s:4:\"addr\";s:24:\"friendica3@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/4.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica3\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica3\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica3\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica3\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica3\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwIuhjeg03GoOuSYqulsa\nvd/spvniwjaYZhCJYTHgOM4ak9qG8SwPhguSBMqZS3baHEcZtYcYsu5vSQAO/zCB\niK8yefV8LguBhoNw36p/hoQ4TdApOH3cjKAJoaxZSJw0oa50ebCSbh23chRHESbv\nlvfGXq0Pmk060VcLf6h00Iivg/BFNmDfEqrVmgpl0G1PIOatNJ5QdEpCP0E5Bg/H\nvnqvBgpkVAZkKA4xY5rw6pB2NofK74gaeNklnVFqAwaQZUrBv+z1C7h3NQ5YRees\nuspiwZVyFy95xm+kGlKq6GJ7WPQi1mKSJisHLxh9uI7ylgIyRWi/GRA2NBLb15tJ\nL9PpyWEbKhEX/zCUQbos6cFC3+jgiJoYIIa5pOYU0Ekf5AcyF3dFsbcWGObn++wv\nk+5dIK/un+1KOv7X3e/bAnkVCHHjzWAzURQkvb0fwFVzw80ioP4L4V+mvw4jxh+x\ndpPBQmqgCglqE2cpCB4gAcYPlXICBC18YcUYOkYIlgz2WuslcJCnrHO6K5q6lAn3\nNqEI/LmJDrq3hbu96k8d/0zCMNO+u3xPIhDcQ6ZzyhZmVDTpVGFiJ7Yhtfih3ASC\nZqWowoSq5onVWLCsj4QquNCIvJK1NLrkrr6rxD4DbCzW7XbZkenuHumh3HoFb5Lc\nRN6UJNHe/4FNNUzcAVBgEe0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:09:50'),('probe_url::http://friendica.dev/profile/friendica4','a:21:{s:4:\"name\";s:10:\"friendica4\";s:4:\"nick\";s:10:\"friendica4\";s:4:\"guid\";s:32:\"758d682b1359b10a89ad697631454583\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica4\";s:4:\"addr\";s:24:\"friendica4@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/5.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica4\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica4\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica4\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica4\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica4\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxAJ+t/FrD0sHO2ecwsoH\nmOst2aPHca5n4UEIpr2ZTl26WN1AbcNo9wahDHXG7pE50GQwvmnnTIlVDLAsBC23\n8sTSpGXrIC8L7YiyDeu3piBp/w4jy8JQrbXn4L8IQbnmi6nDCSr1szXjBcvdPPKK\nrCFgYJ4hjEkSp/wJcKZ1mlRTwtofWZHUMu3NsP2146wRj0roydFVkWGrfsH8grUO\nqMktmpCUOQNsOIAN8b6vQiYQQoamGWjV8wXO3W0fRhQ5Yjko19j1t+O1Jvy2CMhn\nRY2wiGZ91ZSfl8VNLrz38JyeR0cz7YJeNYzOggB1AjEzLhKtqw7zkyW8Qg1Kfo85\ndagFPZ5sQZ8R4nus7xabICMG/qJPL23/1tyenxqkVP0iDIhLo/f0uuG4riNOJZtf\nPYPT6sxSlqxbznuLQr1fYnjFyEnFtJpzuAuvybshT5QLyKntcGap67fWoj/7SrA4\n8T5RCdYHDacMdKEC1SDwpokpgWhWaRkUxJ5F0Q5Jpyvhui/UkxkevDWv5373pgVz\ngaZlxRKYKABWiJkQH9FPAdsr4nUVErl/zvI0+9GuzK/EJ5ToVs8bF98Jb4Y3o2pm\nNtPL1ao9r0ug/3F7RHTLs1tp0Bdm/Gxk/RJf4j6gKgAw9WcdHzkxcvikhAY43zMe\n5qExQo663i3hzw4v3p94i+sCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:11:41'),('probe_url::http://friendica.dev/profile/friendica5','a:21:{s:4:\"name\";s:10:\"friendica5\";s:4:\"nick\";s:10:\"friendica5\";s:4:\"guid\";s:32:\"758d682b1959b10ab0768ff699049903\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica5\";s:4:\"addr\";s:24:\"friendica5@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/6.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica5\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica5\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica5\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica5\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica5\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmtBUbN/07wWbcUvp9QvR\nKLoM+WjC0K0rFsx6L/Mktk6Go5+DqofuHSQgfJZGBI3vbTlbwW76peX/0aqiZPGF\nrrhX1FMhU23AxYE9TixRR+oqIKETNzU8NuahpK/ZBokoPL7mzrY4o5dNcnG4S57O\nir4VfEpuYB99K7Uo4yVc6a50ZQfDoBy6nnCPbVmh+gokc28paK7Av0vnMwwD6TWQ\nrgXyrPsa+Af5YeDC7GOmhppeN+e5zycRTddfXWR8QFp+he43b7z54pB+ajAu3J+C\nTAagIp5UWrBmwclF2gmLWvyYYpwTF3kNz+Waf0s3khiZXcJZKxGKVqXoTkqEKV/i\nvHryaBlvvAkQKR1mfJpNasJfHrqhOlHigWi3ISlPJQB4h+85W+YAXj+3j26OnMpb\nCmjf0BXLnjuC+w9rXFW/kj3Q1PxNaAfx/BoV62unWBKnZAkkzHOkQ5yyATdXQaEY\nlDsFbc0itSm3zjsPa1gXtn9e9z8Mqn5MwKk5I9k7TIr6/FdgbX7gxl6mn59OQ0v+\ne8o7HECSQvT8c+WmvBk3tjQHDgw3FeiJ54w0IGiha530vPCk5Z840d/jVUL7Qc6j\nrNi7hLOBvx4jdxk+5tq6fZMG4Sbu+Iibc4b+f2QyVW7Pcxt3CM/ADh0kzfGJ7wQd\nzl4w/9+s8DPT43Tbn98QK+MCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',2,'2017-09-07 09:13:25'); +INSERT INTO `cache` VALUES +('about::http://friendica.dev/profile/friendica1','s:0:\"\";',DATE_ADD(NOW(), INTERVAL 2 MONTH), +('about::http://friendica.dev/profile/friendica2','s:0:\"\";',DATE_ADD(NOW(), INTERVAL 2 MONTH)), +('about::http://friendica.dev/profile/friendica4','s:0:\"\";',DATE_ADD(NOW(), INTERVAL 2 MONTH)), +('app:proc_run:started','i:1504775968;',DATE_ADD(NOW(), INTERVAL 1 MINUTE)), +('diaspora:construct_comment:758d682b1059b10ee096f38798595234','a:6:{s:6:\"author\";s:24:\"friendica3@friendica.dev\";s:4:\"guid\";s:32:\"758d682b1059b10ee096f38798595234\";s:10:\"created_at\";s:20:\"2017-09-07T09:18:24Z\";s:11:\"parent_guid\";s:32:\"758d682b1859b10ebd6abab685903735\";s:4:\"text\";s:5:\"Cool!\";s:16:\"author_signature\";s:0:\"\";}',DATE_ADD(NOW(), INTERVAL 15 MINUTE)), +('diaspora:construct_comment:758d682b2059b10f204f9c2684001373','a:6:{s:6:\"author\";s:24:\"friendica2@friendica.dev\";s:4:\"guid\";s:32:\"758d682b2059b10f204f9c2684001373\";s:10:\"created_at\";s:20:\"2017-09-07T09:19:28Z\";s:11:\"parent_guid\";s:32:\"758d682b1459b10f0be17c3206121357\";s:4:\"text\";s:4:\"Yay!\";s:16:\"author_signature\";s:0:\"\";}',DATE_ADD(NOW(), INTERVAL 15 MINUTE)), +('probe_url::friendica2@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica2\";s:4:\"nick\";s:10:\"friendica2\";s:4:\"guid\";s:32:\"758d682b1359b10a3a54a8c301503194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica2\";s:4:\"addr\";s:24:\"friendica2@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/3.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica2\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica2\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica2\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica2\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica2\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzOHCS/TBWB72tguU5RWu\nG4KnESmdXWGSHHrCm0iWP88Xl17lkEw58o4yt+bQS3c8U46OwP8z9EyCxFyDyHPU\noVgii+jMmT4hhKw5TeDPWwHSUZM07OP2d0J0Kktr6wC16DfGLWqo+EnJcLxyjFGn\nV6KzYR2d/73m0bj26QWM4w2ZCfBZvEEZsreF0XsZuBOWVRlTB4GzDlsRwRt05kUi\nevFnrth0fq+aeEnZA/8eFY9X8F1LB+mZLRdmWX77pMDtzzxTJUBoQPCkOJ0BvdXi\nyAYybmcxFzR/x1u+kpsgxeDOOPDAQAPnbBQcNNwWtl+emd8wmqXcbmM3XeIa1HPb\nDi0CHXJ5Lr95JYP2brAZu4dEwUNeTzkVkvB8DlviOSFmlg6CWmSKXdaF8trK6j4d\nlv7nxGBvmrbx1CmeA3RblvHR1aRyoQdNhBh1eLJrkDcaTgtzhycrjqdz+vVVV/xi\n4yMY9x+voxENfurEo/XsbzGfPSigTIHImzBcMtG0RTgxTMke6CoqRZW1pXFxZast\ncpsO02JRdPrXt+DHpYzDf8oEMTa4TNKBvczcT8ar82RZYY0srVV0uxH77xhx1bvm\nVAPf40FA2qbHZzCAv64YU9LdIT4iPEUga+Y5m9t2LvS+RiA8Zw/mmOdMFp4hI6+K\nELuO8hQc3Ot0moqfpYCnSl0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::friendica3@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica3\";s:4:\"nick\";s:10:\"friendica3\";s:4:\"guid\";s:32:\"758d682b1359b10a642ef08222820194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica3\";s:4:\"addr\";s:24:\"friendica3@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/4.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica3\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica3\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica3\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica3\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica3\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwIuhjeg03GoOuSYqulsa\nvd/spvniwjaYZhCJYTHgOM4ak9qG8SwPhguSBMqZS3baHEcZtYcYsu5vSQAO/zCB\niK8yefV8LguBhoNw36p/hoQ4TdApOH3cjKAJoaxZSJw0oa50ebCSbh23chRHESbv\nlvfGXq0Pmk060VcLf6h00Iivg/BFNmDfEqrVmgpl0G1PIOatNJ5QdEpCP0E5Bg/H\nvnqvBgpkVAZkKA4xY5rw6pB2NofK74gaeNklnVFqAwaQZUrBv+z1C7h3NQ5YRees\nuspiwZVyFy95xm+kGlKq6GJ7WPQi1mKSJisHLxh9uI7ylgIyRWi/GRA2NBLb15tJ\nL9PpyWEbKhEX/zCUQbos6cFC3+jgiJoYIIa5pOYU0Ekf5AcyF3dFsbcWGObn++wv\nk+5dIK/un+1KOv7X3e/bAnkVCHHjzWAzURQkvb0fwFVzw80ioP4L4V+mvw4jxh+x\ndpPBQmqgCglqE2cpCB4gAcYPlXICBC18YcUYOkYIlgz2WuslcJCnrHO6K5q6lAn3\nNqEI/LmJDrq3hbu96k8d/0zCMNO+u3xPIhDcQ6ZzyhZmVDTpVGFiJ7Yhtfih3ASC\nZqWowoSq5onVWLCsj4QquNCIvJK1NLrkrr6rxD4DbCzW7XbZkenuHumh3HoFb5Lc\nRN6UJNHe/4FNNUzcAVBgEe0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::friendica4@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica4\";s:4:\"nick\";s:10:\"friendica4\";s:4:\"guid\";s:32:\"758d682b1359b10a89ad697631454583\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica4\";s:4:\"addr\";s:24:\"friendica4@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/5.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica4\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica4\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica4\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica4\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica4\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxAJ+t/FrD0sHO2ecwsoH\nmOst2aPHca5n4UEIpr2ZTl26WN1AbcNo9wahDHXG7pE50GQwvmnnTIlVDLAsBC23\n8sTSpGXrIC8L7YiyDeu3piBp/w4jy8JQrbXn4L8IQbnmi6nDCSr1szXjBcvdPPKK\nrCFgYJ4hjEkSp/wJcKZ1mlRTwtofWZHUMu3NsP2146wRj0roydFVkWGrfsH8grUO\nqMktmpCUOQNsOIAN8b6vQiYQQoamGWjV8wXO3W0fRhQ5Yjko19j1t+O1Jvy2CMhn\nRY2wiGZ91ZSfl8VNLrz38JyeR0cz7YJeNYzOggB1AjEzLhKtqw7zkyW8Qg1Kfo85\ndagFPZ5sQZ8R4nus7xabICMG/qJPL23/1tyenxqkVP0iDIhLo/f0uuG4riNOJZtf\nPYPT6sxSlqxbznuLQr1fYnjFyEnFtJpzuAuvybshT5QLyKntcGap67fWoj/7SrA4\n8T5RCdYHDacMdKEC1SDwpokpgWhWaRkUxJ5F0Q5Jpyvhui/UkxkevDWv5373pgVz\ngaZlxRKYKABWiJkQH9FPAdsr4nUVErl/zvI0+9GuzK/EJ5ToVs8bF98Jb4Y3o2pm\nNtPL1ao9r0ug/3F7RHTLs1tp0Bdm/Gxk/RJf4j6gKgAw9WcdHzkxcvikhAY43zMe\n5qExQo663i3hzw4v3p94i+sCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::friendica5@friendica.dev','a:21:{s:4:\"name\";s:10:\"friendica5\";s:4:\"nick\";s:10:\"friendica5\";s:4:\"guid\";s:32:\"758d682b1959b10ab0768ff699049903\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica5\";s:4:\"addr\";s:24:\"friendica5@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/6.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica5\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica5\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica5\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica5\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica5\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmtBUbN/07wWbcUvp9QvR\nKLoM+WjC0K0rFsx6L/Mktk6Go5+DqofuHSQgfJZGBI3vbTlbwW76peX/0aqiZPGF\nrrhX1FMhU23AxYE9TixRR+oqIKETNzU8NuahpK/ZBokoPL7mzrY4o5dNcnG4S57O\nir4VfEpuYB99K7Uo4yVc6a50ZQfDoBy6nnCPbVmh+gokc28paK7Av0vnMwwD6TWQ\nrgXyrPsa+Af5YeDC7GOmhppeN+e5zycRTddfXWR8QFp+he43b7z54pB+ajAu3J+C\nTAagIp5UWrBmwclF2gmLWvyYYpwTF3kNz+Waf0s3khiZXcJZKxGKVqXoTkqEKV/i\nvHryaBlvvAkQKR1mfJpNasJfHrqhOlHigWi3ISlPJQB4h+85W+YAXj+3j26OnMpb\nCmjf0BXLnjuC+w9rXFW/kj3Q1PxNaAfx/BoV62unWBKnZAkkzHOkQ5yyATdXQaEY\nlDsFbc0itSm3zjsPa1gXtn9e9z8Mqn5MwKk5I9k7TIr6/FdgbX7gxl6mn59OQ0v+\ne8o7HECSQvT8c+WmvBk3tjQHDgw3FeiJ54w0IGiha530vPCk5Z840d/jVUL7Qc6j\nrNi7hLOBvx4jdxk+5tq6fZMG4Sbu+Iibc4b+f2QyVW7Pcxt3CM/ADh0kzfGJ7wQd\nzl4w/9+s8DPT43Tbn98QK+MCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::http://friendica.dev/profile/friendica1','a:21:{s:4:\"name\";s:10:\"friendica1\";s:4:\"nick\";s:10:\"friendica1\";s:4:\"guid\";s:32:\"758d682b8559b109d5ad831494500945\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica1\";s:4:\"addr\";s:24:\"friendica1@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/2.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica1\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica1\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica1\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica1\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica1\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzNeTX2GGZAqTecUeOPNq\n+uFCfBuN4g6xKTkBlUDeVCLp2N3uVJq+TSjmoau8MpY3jCD2Nqn5KsMPh8XJV2s6\nb1kSjmVdpr4EeBXPyvi3asCcgmqi2IeoK/ihVGP9IrrYh8zwzVY9wW1/TPcC4N4W\nCcmeFTO08CSJh2P8ROq6irU0ndbmqfmFSs5uZ7UcEKUzkgSSPTxq5x3O7xSfTbOZ\nPNhSn3r5buSOd46KyWaBIJ2KgFNoY2AGJqbzZTZmJZB/qelrONtJ6XDnDI9GNQBI\nyL9935Scmo9WrXeZcqXNW3yI97s1tH27pCxhsyy5xqzEYfAPwPFry4gbO+wSGcNm\nFYfbCM19uPvJyN6TEgFNZD5401Pl8LQaVkSAnV9LQPzn/54CJYQb6KlE0rymROyQ\nvKPUZmEkw6ZnVJIF5pjxu6bGGPdv3xmBH6Xnmi0hhNA2AEDbv6wDrLZYLUCTSSqq\nhW8WK3HylsP9dqNT+a3X9l9dG7vqmRevGcbBQDDZPOKjkJkAa8IgIlk3UIWs3bYY\nST0VUtjRpsoLo3XmdYtY5qXxjGjtEy7NjRErlT31WoMzxcLhLwxKGWQz/xMC9OXe\np+uoyVUOd3U/Jvz6vpW9k5ua417IrF9XaxtcKvhp69m16br8JkMuKWvdGomWDXxA\nG1cAbsHJN6JJEU/3Vo35sh0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::http://friendica.dev/profile/friendica2','a:21:{s:4:\"name\";s:10:\"friendica2\";s:4:\"nick\";s:10:\"friendica2\";s:4:\"guid\";s:32:\"758d682b1359b10a3a54a8c301503194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica2\";s:4:\"addr\";s:24:\"friendica2@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/3.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica2\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica2\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica2\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica2\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica2\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzOHCS/TBWB72tguU5RWu\nG4KnESmdXWGSHHrCm0iWP88Xl17lkEw58o4yt+bQS3c8U46OwP8z9EyCxFyDyHPU\noVgii+jMmT4hhKw5TeDPWwHSUZM07OP2d0J0Kktr6wC16DfGLWqo+EnJcLxyjFGn\nV6KzYR2d/73m0bj26QWM4w2ZCfBZvEEZsreF0XsZuBOWVRlTB4GzDlsRwRt05kUi\nevFnrth0fq+aeEnZA/8eFY9X8F1LB+mZLRdmWX77pMDtzzxTJUBoQPCkOJ0BvdXi\nyAYybmcxFzR/x1u+kpsgxeDOOPDAQAPnbBQcNNwWtl+emd8wmqXcbmM3XeIa1HPb\nDi0CHXJ5Lr95JYP2brAZu4dEwUNeTzkVkvB8DlviOSFmlg6CWmSKXdaF8trK6j4d\nlv7nxGBvmrbx1CmeA3RblvHR1aRyoQdNhBh1eLJrkDcaTgtzhycrjqdz+vVVV/xi\n4yMY9x+voxENfurEo/XsbzGfPSigTIHImzBcMtG0RTgxTMke6CoqRZW1pXFxZast\ncpsO02JRdPrXt+DHpYzDf8oEMTa4TNKBvczcT8ar82RZYY0srVV0uxH77xhx1bvm\nVAPf40FA2qbHZzCAv64YU9LdIT4iPEUga+Y5m9t2LvS+RiA8Zw/mmOdMFp4hI6+K\nELuO8hQc3Ot0moqfpYCnSl0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::http://friendica.dev/profile/friendica3','a:21:{s:4:\"name\";s:10:\"friendica3\";s:4:\"nick\";s:10:\"friendica3\";s:4:\"guid\";s:32:\"758d682b1359b10a642ef08222820194\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica3\";s:4:\"addr\";s:24:\"friendica3@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/4.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica3\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica3\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica3\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica3\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica3\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwIuhjeg03GoOuSYqulsa\nvd/spvniwjaYZhCJYTHgOM4ak9qG8SwPhguSBMqZS3baHEcZtYcYsu5vSQAO/zCB\niK8yefV8LguBhoNw36p/hoQ4TdApOH3cjKAJoaxZSJw0oa50ebCSbh23chRHESbv\nlvfGXq0Pmk060VcLf6h00Iivg/BFNmDfEqrVmgpl0G1PIOatNJ5QdEpCP0E5Bg/H\nvnqvBgpkVAZkKA4xY5rw6pB2NofK74gaeNklnVFqAwaQZUrBv+z1C7h3NQ5YRees\nuspiwZVyFy95xm+kGlKq6GJ7WPQi1mKSJisHLxh9uI7ylgIyRWi/GRA2NBLb15tJ\nL9PpyWEbKhEX/zCUQbos6cFC3+jgiJoYIIa5pOYU0Ekf5AcyF3dFsbcWGObn++wv\nk+5dIK/un+1KOv7X3e/bAnkVCHHjzWAzURQkvb0fwFVzw80ioP4L4V+mvw4jxh+x\ndpPBQmqgCglqE2cpCB4gAcYPlXICBC18YcUYOkYIlgz2WuslcJCnrHO6K5q6lAn3\nNqEI/LmJDrq3hbu96k8d/0zCMNO+u3xPIhDcQ6ZzyhZmVDTpVGFiJ7Yhtfih3ASC\nZqWowoSq5onVWLCsj4QquNCIvJK1NLrkrr6rxD4DbCzW7XbZkenuHumh3HoFb5Lc\nRN6UJNHe/4FNNUzcAVBgEe0CAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::http://friendica.dev/profile/friendica4','a:21:{s:4:\"name\";s:10:\"friendica4\";s:4:\"nick\";s:10:\"friendica4\";s:4:\"guid\";s:32:\"758d682b1359b10a89ad697631454583\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica4\";s:4:\"addr\";s:24:\"friendica4@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/5.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica4\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica4\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica4\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica4\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica4\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxAJ+t/FrD0sHO2ecwsoH\nmOst2aPHca5n4UEIpr2ZTl26WN1AbcNo9wahDHXG7pE50GQwvmnnTIlVDLAsBC23\n8sTSpGXrIC8L7YiyDeu3piBp/w4jy8JQrbXn4L8IQbnmi6nDCSr1szXjBcvdPPKK\nrCFgYJ4hjEkSp/wJcKZ1mlRTwtofWZHUMu3NsP2146wRj0roydFVkWGrfsH8grUO\nqMktmpCUOQNsOIAN8b6vQiYQQoamGWjV8wXO3W0fRhQ5Yjko19j1t+O1Jvy2CMhn\nRY2wiGZ91ZSfl8VNLrz38JyeR0cz7YJeNYzOggB1AjEzLhKtqw7zkyW8Qg1Kfo85\ndagFPZ5sQZ8R4nus7xabICMG/qJPL23/1tyenxqkVP0iDIhLo/f0uuG4riNOJZtf\nPYPT6sxSlqxbznuLQr1fYnjFyEnFtJpzuAuvybshT5QLyKntcGap67fWoj/7SrA4\n8T5RCdYHDacMdKEC1SDwpokpgWhWaRkUxJ5F0Q5Jpyvhui/UkxkevDWv5373pgVz\ngaZlxRKYKABWiJkQH9FPAdsr4nUVErl/zvI0+9GuzK/EJ5ToVs8bF98Jb4Y3o2pm\nNtPL1ao9r0ug/3F7RHTLs1tp0Bdm/Gxk/RJf4j6gKgAw9WcdHzkxcvikhAY43zMe\n5qExQo663i3hzw4v3p94i+sCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)), +('probe_url::http://friendica.dev/profile/friendica5','a:21:{s:4:\"name\";s:10:\"friendica5\";s:4:\"nick\";s:10:\"friendica5\";s:4:\"guid\";s:32:\"758d682b1959b10ab0768ff699049903\";s:3:\"url\";s:39:\"http://friendica.dev/profile/friendica5\";s:4:\"addr\";s:24:\"friendica5@friendica.dev\";s:5:\"alias\";s:0:\"\";s:5:\"photo\";s:40:\"http://friendica.dev/photo/profile/6.jpg\";s:9:\"community\";s:0:\"\";s:8:\"keywords\";s:0:\"\";s:8:\"location\";s:0:\"\";s:5:\"about\";s:0:\"\";s:5:\"batch\";s:0:\"\";s:6:\"notify\";s:43:\"http://friendica.dev/dfrn_notify/friendica5\";s:4:\"poll\";s:41:\"http://friendica.dev/dfrn_poll/friendica5\";s:7:\"request\";s:44:\"http://friendica.dev/dfrn_request/friendica5\";s:7:\"confirm\";s:44:\"http://friendica.dev/dfrn_confirm/friendica5\";s:4:\"poco\";s:36:\"http://friendica.dev/poco/friendica5\";s:8:\"priority\";i:0;s:7:\"network\";s:4:\"dfrn\";s:6:\"pubkey\";s:800:\"-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmtBUbN/07wWbcUvp9QvR\nKLoM+WjC0K0rFsx6L/Mktk6Go5+DqofuHSQgfJZGBI3vbTlbwW76peX/0aqiZPGF\nrrhX1FMhU23AxYE9TixRR+oqIKETNzU8NuahpK/ZBokoPL7mzrY4o5dNcnG4S57O\nir4VfEpuYB99K7Uo4yVc6a50ZQfDoBy6nnCPbVmh+gokc28paK7Av0vnMwwD6TWQ\nrgXyrPsa+Af5YeDC7GOmhppeN+e5zycRTddfXWR8QFp+he43b7z54pB+ajAu3J+C\nTAagIp5UWrBmwclF2gmLWvyYYpwTF3kNz+Waf0s3khiZXcJZKxGKVqXoTkqEKV/i\nvHryaBlvvAkQKR1mfJpNasJfHrqhOlHigWi3ISlPJQB4h+85W+YAXj+3j26OnMpb\nCmjf0BXLnjuC+w9rXFW/kj3Q1PxNaAfx/BoV62unWBKnZAkkzHOkQ5yyATdXQaEY\nlDsFbc0itSm3zjsPa1gXtn9e9z8Mqn5MwKk5I9k7TIr6/FdgbX7gxl6mn59OQ0v+\ne8o7HECSQvT8c+WmvBk3tjQHDgw3FeiJ54w0IGiha530vPCk5Z840d/jVUL7Qc6j\nrNi7hLOBvx4jdxk+5tq6fZMG4Sbu+Iibc4b+f2QyVW7Pcxt3CM/ADh0kzfGJ7wQd\nzl4w/9+s8DPT43Tbn98QK+MCAwEAAQ==\n-----END PUBLIC KEY-----\n\";s:7:\"baseurl\";s:20:\"http://friendica.dev\";}',DATE_ADD(NOW(), INTERVAL 1 DAY)); /*!40000 ALTER TABLE `cache` ENABLE KEYS */; UNLOCK TABLES; @@ -1268,7 +1283,7 @@ CREATE TABLE `photo` ( LOCK TABLES `photo` WRITE; /*!40000 ALTER TABLE `photo` DISABLE KEYS */; -INSERT INTO `photo` VALUES (1,1,0,'75859b1098e38271','676c41a6030639fa07634741242d99de','2017-09-07 08:55:42','2017-09-07 08:55:42','','','Profile photos','person-175.jpg','image/jpeg',175,175,5476,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0A\0\0\0\0\0\0\0 !\n1A\"Q2aqÁ#%3‘¡Ñ$&5BR±áEs’ðÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡XgºµÎp|LÅsNìšÛœ}ªY%ZR|ö1(ƒJ*I&+Ûr$0Gªò¥)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχoSмI¡¥¡‹$ÈDj.TÈ\n1PÈŒö4’‡?Û{eúôÈÓ¦x®)ж}t^x\\~ßs˜ç2ç{õžÉml&øÿ\0‹T2#3¤˜Ú–_ÚØŒå™Ã»UÜYõfÛ$Õö€1.”`wÅí)rrÏÇ’ŽÁ$g¹boqd•\Z7\"ßi,š0gÓá#ê}¤G—×ò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÝœ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k¡)^ç2-gQ~ESA’jûÆ´SëÚ<¾¿‘0\0\0\0\0\0\0\0vãSÄ™›†>†\'9âßØ®ó ¢è±†Ž8$ŒòŒ©µ×ÂœÝUÞY)»O¥&DH]6B‹&¢KMeN¶DÈSL³8˜d¬“#z˜ä9ËÛ”šg,Ü®õòG w¿7GggU)F£]Es­i-‘¿DRdŠ{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i)iæ©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!‘kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%’#åŠÇèÓF÷Œ ʧJÞµZT}¢©$¿³™–懙|÷ùü„7¸¤öu»Ã§(\'Iø]_À˜ï®/ËYk1¦SÈíèQ¬Ý\"îx¾Øf®\\rþ¿áZ\\kp¯qÒ¾.oUÓu½Îö“²âZ¦n†”—)¬ §XÍFd”•5Q1e·cã@¬ø‡JÍ{LX(žGÔ½åô3\\Ü[—ˆ´a,|îM.êkQ­&_¤,¢ÔíR±\ZKžœ6>i#2Y*h@Wu+¥Ì«œ-.Óþ£q´\'c)ÃZ­]Xžì‰\'fäI©Q±â0ïJ‘<±H–j÷RCZ$1•‘.šËŸ”ê4ã?¿ ð¤Õ£Æ\"t]äƒN­Ü&z}Ȩ¶4¿•ÿ\0*ÚÝ÷æAMqòŒ˜%Ôé™%[1ÊPTéÉ©¤¹Ã†3žRÓÖRˆæl14zÇY\"÷dû—G®NÉÁžý JËéÓÙm\'Ê¢S-BU5!j/…IÜ­òà§Å1Å/FQ\\É^…‹.h„]P0æäohÏYì)’^\Z)ŸT°äU¢GQ¦’ö,fJ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õû$ÎÌ2ó.ƒ˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžXìèZ6áŒ;Ç<ö‰$¢òú%jhvs2RÖf§÷´:>-DdJZù‰)%³ \0#[Ú‹Ñ“N¨øVe¼…Mž…|‘¤«Ë<óqEºŽø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¯ä&7ØÇÔ ¼;_™¯Ou®ë[7éùÆQáÊ?ì…0ÄRv‡Vg#Û”ÐÃ+––äE·1™Ävl€\0\0\0\0\0¥ûŽÖ?¼Æœ^ø0ÜR¯lwúŒ˜Î­ˆèlFÝ’RבšÌ‹¡rK“3=÷2###Øh¦“,­õI§Ç7_çŒCku齒笩Yü;ïóüa{`\0\0Ñ\'uXhðä×ÕY\'qàE£IxŸ´}žRÓI_/_#ÛqGÍOO¯ä%¿ØçÄÏ3.\'ó\\™mßû¿‡ôÓ>»t¹å2²7 †ëˆ36(”FffJw_C4™4yZ*\0\0\0\0\0³ÞÙ\\ñž¶1.°Û·‡êCØÃå6öü­öyCþÈ2t2$–ò3¬KúóæäµÅÈ\\¦ö.‹Kì\r^\'“GäÍÆEÐï);S/ýÒŸ®ÂöüE’˜s,ÆÙf/qBö5”qÜC\"Ç®mÌ•gxÃ/Œµ¾6l£5|*¦ê“Io¹$Œ•¹‘}X\0]ûUzäaÒ× ù†jv¥C0ë)Å8ž.Íop”¸ÚcÖ‡6‡¬¹\'R (W‚¥ÂàJç\"ÙSf>‰ØÒUKS¤ª«*TÈΦý=72óü?‡§Ô[ ÙŽáŒÿ\0 íÖÈÙu¢³&|Õ5ì\"Ì-Uhõ Ç­\nV#9MÔ—”³;¼Hå$i5\"¤Ì¢•:ÆÔg&À\0\0\0\0\0–ãÃÙƒ‰†…òžžFÎÇ&7‘ä<!»E4¥Ÿ/ÅRëàé5U*†–©\n*:Ç$êNü±·µÔ$\ZÒŽî›lƒ¦˜ªk/ÆÙ …Ö)=ƒ¾9Æ&Q·«eؽÆä\r>êÒè•1\ZºT|ÊJmˆÒF¥ÚÙJ×ón¨øw²iÎNýo[/èÂõ8åÊÂîå&àï‡ Þq,˜©ó™“K\r5<ãÝÐGݢʥ¯ûÀ”*T¼å÷ÿ\0/ê<À|{9eØ.Ÿ°æLÎy-Ø™ ˜‚\r\"ȳ.§ìQè“jÞ[oæ†ÃOBêgËÑ&f)†âeÄ+/ñ4Õ\\ïQùjþµ£…Ñ°âœ~wh½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[¸\"Å3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„©´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸü|úŒ\0\0\0\0\0…÷ÿ\0/è!3Ú•à£\Z˘ç ñ.Óõ¥œs.bˆ¢Ÿµµ´U“~TÇÑ22TøÍ<ˆ)¾»º¬ï•Èqv¹s\'‰¶\ZPHª¦GzjY¨|ÄF£2¨¯´€Ž?jj|ÿ\0໩\nLK¯cïÄ×A_.(\ZìãÎÙJ ìëñ§¢ÒÎLjæÜȪ\Zyˆ¶\"©}™ªõáݽžÄεã½Õƒe±S5:™$‹n»\Zúõè[ùù δ‹‚\"ÚdÒöÓìF­(ÞÅ(YÚÛ\ZQvL±¶¶§GM”¥Ÿy!z\'GêǾƷu(„‘%;<\0\0\0\0\0?ÍÕµ–ÂéÍÒòÎÁ®ÂÔînÜn®\nÊÆÒÇmù–²3\"\"\"=·Ø¼ˆ•¹¥\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©Eò=4k_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW)%Æ/y}\'·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¦zLKZª%lŸ¤¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0Òã´’»MÊ®ù%y‹2=·ÞŸÚ$ºµ{ò„;—SØ”I-ÏÓm‡zâѸôU†)h±cŒÅÛ,X˜Û­ÊѹžÂ›C;ccg)¥-TZSÝÓBV®^S2%lí@roŽ‘ßõ·ÃW8&اiÛÆ;÷ë6Û{{¼ûIYò\\J6Ú’\"øäµ\"JŽ|ÌÞw\"-Ö)—`t¼‹JÝÓKºq¾·:½}ö7§4ÔäQoÓ•Ië±ô4žÆ{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰k$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ>EÖÅ{殸Êg]hÑ£\"3i¦_0µ€ã¼MEí¦KÔ[…EmFI• •tÒ¦ežÏ¨€WˆÛ§Ú¥§Z­%.œ¢¸/ök0¶…Ùc÷UŒÑ\\ñ¬JÖÖr [GKUkFæf§‰Œ½¹®¦J[ÄD÷=ˆ¼(º‘l\'¨\0\0\0\0\0\0= ý××ó1Wή1…n\ZݪLV÷,ÔÉÈÚ«ÁùV0ÞÜ^Ã`q-O»52df¦³Jy|ße9\r€¶äO*±´ºúþd=à\09µÅæ.sŽ\Zÿ\0Ž&‘Vöý çó [u;æ˜ ÛºKæ_Q(Œ¿Òd^£‡ýx™³pµÈÒ:”ëL5“®¨\\+Î幞ˆYÒ{äC¦ÅøžÛ§¤¹@\0\0\0\0\0\0@´‹RûÚ:áXŠ¹RȤû{¯fé·ºz¶™\Z¾¦Ê{ôùžÝ7ñG™x\0\reÕÜKßÍ)êZš4.=ïÓþb‹µÆÆWfóyi=úùl¯‘ù¤þñÄ>ÉìL£œpÅÿ\0pt=ñÉùÆUrG×Úù\'®ÐýÌúzÅR/áÖJÀ\0\0\0\0\0\0\"CÆ?\ZQ“ñúàýSþã(ÉöÝmÍ]q£6HÜ·=Ïü[¡zyíæ%·Oì\'ð`1Æ@þBWaAþ1#h«CÚ(»±9µû?M®üQµHÛñ\"3-¶ë±ïòìøcßÑ·= DêZW·¯l×”îmîLIS¾wÉ.ûíоʈö2ü ÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ/§F ø·é±´™zmèI\"Æ\0\0Š”»Þ»ôôÿ\0cèd5C˜Î®Ò¦Æ5l«ØÖ‹ÇÜ-NÖçmí R‡‡~¿wíBØþí¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdéõ.›ú™Ÿ Ü\0\0\0è¢T‹õ^G÷ÿ\0]ÿ\0?/.„2\0\0\0\0\0\0\0`Tµ£V¥*ÕhÑ:ÖýmLöÜŒËÐ÷úß Ï\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,1,'','','',''),(2,1,0,'75859b1098e38271','676c41a6030639fa07634741242d99de','2017-09-07 08:55:42','2017-09-07 08:55:42','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\01\0\0\0\0\0\0\0\0 !1\n\"QqA#‘ð3¡ÿÚ\0\0\0?\0ÏãM5Aq\0ýöÕÚù4ÓM5·Ý¸t¶™³=ÎîXÈ\"éÆ™!D³p< úÁ_xæµ·rò›ûËYœ¼€˜«‰C¸†µôÀÚÕê×T,QŠrdÜå…¶aÉ–­¸+zÏ4Óêd2¯ïù:AY1.ÞZÐFî`H—ïk7>ÉÁCúb¹¢—Mªãê­r—I¯ÅU*UXzÝnµÍøh6FÄCÅ°jR6g\ZÁº Ú6@…IM4À\nPÔ)ê\'Óà õÁ’¸c-É^j묃Šeû[¦«JE‘t\0ŒæÒlÆA¼5•š*žº¿ga\'ý°2¦Ñ×ù\rjXŸ¨OR_‡ß·]·d©sÊ8ûä$+ù\' Û¬ó–L%hòÅAuõî(VH­€ÀþVW&8\'÷zr¯È \naÖÑpã€ã°p~¿·oñ \0\">À?ï:Õ;ñpMT.½cר%\'gÀØ>xk—ªx½íá¬3±Š Ôª*¼±j*sr¢Rs&vmÀŸa\rŽ½00¥·n];ö_ƒo©¸owÆ[sÅ•‹s\'_÷ÆXÚÕcÕ™ˆ7?ÄD‚ëÆ°} Ûùݦškªùª/™¹dá\\7v‰Û¸ná0UÐX¢šÈ¬‘¾ÕRU#57%9L%0 D@u•o\'l9á·ë5‡·±ëRsû1ÈY2Á3T<$oKD½µ~Ã.`WÞz‰$¦¡_š\'@õê‘„ìk\Zܼ3¸Ûx½’¸,Ð3®1¡fWdaqÇ*¥u¥Zc ¡˜ÎW,,‘‹~‰V\"N[.O=³”PtÑÀ*ÑÚºEd“]D7@¾Ë¶G¹ÝѱBfc\náûuʹìUVÆìEœ\"tÕùZögÑ)Ê\nj¤rÇш¡N`Ýð¹ìM·QÑòœ¹Ì6Œi–š)Kú°xÖøYò%tÈSLü¢³Wþ?Šw_\n„!Rù; )ÖÎÙ´hz¬IؼR@\n€=µËM5à[œÜÎÚ¿n?Ü£èx¯©1bŸ~cE e\nÞ>‚@.¦,S¯Õo ÀŠ=““tÙ«tÄêrÚþàú¦õ ÍŽ§žôÈéÍ ùrã»$eB¯tÞ6â«íÜ*Ïâ$¯qÖ:+©É$‰•Ž.©&í7\")Aº¸Çfš]ÆÉÓKiyF£W¨n6/»†uKÊD<Ý}ÂÓžBuÛahöÀÖõ+#Q„–tØÊ72•šÌD*£Vm59‘—E¢SñN½C V`)”ª”;\nõV§Vˆe]®@Å FÑ°ð±É¢Æ:9‹dȃfQM“!JB\0ÝöÜj›»ÛwÛ-ÙÛˆêÖoÅ·rþU¢$pî[$3–q¶mÔ1Spö½(,¦Ù ¡Ê’Θ$š£å˜ÚÄ#áÛ»Úú@ç=ÂtŸê–¶dì †QÛVO²‚ÑXŸ7Éüž>;\rD¾È•¬ªÓñ0uIº{,ÞIW†›­J5µ¢Ò Æpe9L_¾Ï!ÇãßÛ¸û~{~uÏüéªð?€ÿ\0\ZÄ«BkªWY—t¡u ]Á8äw¡»h†.6kkðËHEUj2¾™dN%Uš0\rUMT–jÓ+LH `wË*\n\"±\\¯Æ0„Žg \rѼ|dLTstÚGÆÇ0hšM0bÕ›3fÕ$›5l’H ši&B‡Û馿!tÇô|zö@¨UïõMe`mõø{4*Ë%âòÕV.m“æ*(˜àC1ÚZf\r3;ï¹ÖÆÒUƒÍsÙ†©Ó\"íôÃ-“.á9îJ>tL~ÓüHƒ,¾¤“$·~Ú¨våáf“âUFYVEqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÝœ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k¡)^ç2-gQ~ESA’jûÆ´SëÚ<¾¿‘0\0\0\0\0\0\0\0vãSÄ™›†>†\'9âßØ®ó ¢è±†Ž8$ŒòŒ©µ×ÂœÝUÞY)»O¥&DH]6B‹&¢KMeN¶DÈSL³8˜d¬“#z˜ä9ËÛ”šg,Ü®õòG w¿7GggU)F£]Es­i-‘¿DRdŠ{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i)iæ©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!‘kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%’#åŠÇèÓF÷Œ ʧJÞµZT}¢©$¿³™–懙|÷ùü„7¸¤öu»Ã§(\'Iø]_À˜ï®/ËYk1¦SÈíèQ¬Ý\"îx¾Øf®\\rþ¿áZ\\kp¯qÒ¾.oUÓu½Îö“²âZ¦n†”—)¬ §XÍFd”•5Q1e·cã@¬ø‡JÍ{LX(žGÔ½åô3\\Ü[—ˆ´a,|îM.êkQ­&_¤,¢ÔíR±\ZKžœ6>i#2Y*h@Wu+¥Ì«œ-.Óþ£q´\'c)ÃZ­]Xžì‰\'fäI©Q±â0ïJ‘<±H–j÷RCZ$1•‘.šËŸ”ê4ã?¿ ð¤Õ£Æ\"t]äƒN­Ü&z}Ȩ¶4¿•ÿ\0*ÚÝ÷æAMqòŒ˜%Ôé™%[1ÊPTéÉ©¤¹Ã†3žRÓÖRˆæl14zÇY\"÷dû—G®NÉÁžý JËéÓÙm\'Ê¢S-BU5!j/…IÜ­òà§Å1Å/FQ\\É^…‹.h„]P0æäohÏYì)’^\Z)ŸT°äU¢GQ¦’ö,fJ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õû$ÎÌ2ó.ƒ˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžXìèZ6áŒ;Ç<ö‰$¢òú%jhvs2RÖf§÷´:>-DdJZù‰)%³ \0#[Ú‹Ñ“N¨øVe¼…Mž…|‘¤«Ë<óqEºŽø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¯ä&7ØÇÔ ¼;_™¯Ou®ë[7éùÆQáÊ?ì…0ÄRv‡Vg#Û”ÐÃ+––äE·1™Ävl€\0\0\0\0\0¥ûŽÖ?¼Æœ^ø0ÜR¯lwúŒ˜Î­ˆèlFÝ’RבšÌ‹¡rK“3=÷2###Øh¦“,­õI§Ç7_çŒCku齒笩Yü;ïóüa{`\0\0Ñ\'uXhðä×ÕY\'qàE£IxŸ´}žRÓI_/_#ÛqGÍOO¯ä%¿ØçÄÏ3.\'ó\\™mßû¿‡ôÓ>»t¹å2²7 †ëˆ36(”FffJw_C4™4yZ*\0\0\0\0\0³ÞÙ\\ñž¶1.°Û·‡êCØÃå6öü­öyCþÈ2t2$–ò3¬KúóæäµÅÈ\\¦ö.‹Kì\r^\'“GäÍÆEÐï);S/ýÒŸ®ÂöüE’˜s,ÆÙf/qBö5”qÜC\"Ç®mÌ•gxÃ/Œµ¾6l£5|*¦ê“Io¹$Œ•¹‘}X\0]ûUzäaÒ× ù†jv¥C0ë)Å8ž.Íop”¸ÚcÖ‡6‡¬¹\'R (W‚¥ÂàJç\"ÙSf>‰ØÒUKS¤ª«*TÈΦý=72óü?‡§Ô[ ÙŽáŒÿ\0 íÖÈÙu¢³&|Õ5ì\"Ì-Uhõ Ç­\nV#9MÔ—”³;¼Hå$i5\"¤Ì¢•:ÆÔg&À\0\0\0\0\0–ãÃÙƒ‰†…òžžFÎÇ&7‘ä<!»E4¥Ÿ/ÅRëàé5U*†–©\n*:Ç$êNü±·µÔ$\ZÒŽî›lƒ¦˜ªk/ÆÙ …Ö)=ƒ¾9Æ&Q·«eؽÆä\r>êÒè•1\ZºT|ÊJmˆÒF¥ÚÙJ×ón¨øw²iÎNýo[/èÂõ8åÊÂîå&àï‡ Þq,˜©ó™“K\r5<ãÝÐGݢʥ¯ûÀ”*T¼å÷ÿ\0/ê<À|{9eØ.Ÿ°æLÎy-Ø™ ˜‚\r\"ȳ.§ìQè“jÞ[oæ†ÃOBêgËÑ&f)†âeÄ+/ñ4Õ\\ïQùjþµ£…Ñ°âœ~wh½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[¸\"Å3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„©´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸü|úŒ\0\0\0\0\0…÷ÿ\0/è!3Ú•à£\Z˘ç ñ.Óõ¥œs.bˆ¢Ÿµµ´U“~TÇÑ22TøÍ<ˆ)¾»º¬ï•Èqv¹s\'‰¶\ZPHª¦GzjY¨|ÄF£2¨¯´€Ž?jj|ÿ\0໩\nLK¯cïÄ×A_.(\ZìãÎÙJ ìëñ§¢ÒÎLjæÜȪ\Zyˆ¶\"©}™ªõáݽžÄεã½Õƒe±S5:™$‹n»\Zúõè[ùù δ‹‚\"ÚdÒöÓìF­(ÞÅ(YÚÛ\ZQvL±¶¶§GM”¥Ÿy!z\'GêǾƷu(„‘%;<\0\0\0\0\0?ÍÕµ–ÂéÍÒòÎÁ®ÂÔînÜn®\nÊÆÒÇmù–²3\"\"\"=·Ø¼ˆ•¹¥\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©Eò=4k_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW)%Æ/y}\'·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¦zLKZª%lŸ¤¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0Òã´’»MÊ®ù%y‹2=·ÞŸÚ$ºµ{ò„;—SØ”I-ÏÓm‡zâѸôU†)h±cŒÅÛ,X˜Û­ÊѹžÂ›C;ccg)¥-TZSÝÓBV®^S2%lí@roŽ‘ßõ·ÃW8&اiÛÆ;÷ë6Û{{¼ûIYò\\J6Ú’\"øäµ\"JŽ|ÌÞw\"-Ö)—`t¼‹JÝÓKºq¾·:½}ö7§4ÔäQoÓ•Ië±ô4žÆ{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰k$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ>EÖÅ{殸Êg]hÑ£\"3i¦_0µ€ã¼MEí¦KÔ[…EmFI• •tÒ¦ežÏ¨€WˆÛ§Ú¥§Z­%.œ¢¸/ök0¶…Ùc÷UŒÑ\\ñ¬JÖÖr [GKUkFæf§‰Œ½¹®¦J[ÄD÷=ˆ¼(º‘l\'¨\0\0\0\0\0\0= ý××ó1Wή1…n\ZݪLV÷,ÔÉÈÚ«ÁùV0ÞÜ^Ã`q-O»52df¦³Jy|ße9\r€¶äO*±´ºúþd=à\09µÅæ.sŽ\Zÿ\0Ž&‘Vöý çó [u;æ˜ ÛºKæ_Q(Œ¿Òd^£‡ýx™³pµÈÒ:”ëL5“®¨\\+Î幞ˆYÒ{äC¦ÅøžÛ§¤¹@\0\0\0\0\0\0@´‹RûÚ:áXŠ¹RȤû{¯fé·ºz¶™\Z¾¦Ê{ôùžÝ7ñG™x\0\reÕÜKßÍ)êZš4.=ïÓþb‹µÆÆWfóyi=úùl¯‘ù¤þñÄ>ÉìL£œpÅÿ\0pt=ñÉùÆUrG×Úù\'®ÐýÌúzÅR/áÖJÀ\0\0\0\0\0\0\"CÆ?\ZQ“ñúàýSþã(ÉöÝmÍ]q£6HÜ·=Ïü[¡zyíæ%·Oì\'ð`1Æ@þBWaAþ1#h«CÚ(»±9µû?M®üQµHÛñ\"3-¶ë±ïòìøcßÑ·= DêZW·¯l×”îmîLIS¾wÉ.ûíоʈö2ü ÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ/§F ø·é±´™zmèI\"Æ\0\0Š”»Þ»ôôÿ\0cèd5C˜Î®Ò¦Æ5l«ØÖ‹ÇÜ-NÖçmí R‡‡~¿wíBØþí¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdéõ.›ú™Ÿ Ü\0\0\0è¢T‹õ^G÷ÿ\0]ÿ\0?/.„2\0\0\0\0\0\0\0`Tµ£V¥*ÕhÑ:ÖýmLöÜŒËÐ÷úß Ï\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,1,'','','',''),(5,2,0,'75859b109d5b24c8','a78adc969a71bfd985d769baa2d51c78','2017-09-07 08:56:53','2017-09-07 08:56:53','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\01\0\0\0\0\0\0\0\0 !1\n\"QqA#‘ð3¡ÿÚ\0\0\0?\0ÏãM5Aq\0ýöÕÚù4ÓM5·Ý¸t¶™³=ÎîXÈ\"éÆ™!D³p< úÁ_xæµ·rò›ûËYœ¼€˜«‰C¸†µôÀÚÕê×T,QŠrdÜå…¶aÉ–­¸+zÏ4Óêd2¯ïù:AY1.ÞZÐFî`H—ïk7>ÉÁCúb¹¢—Mªãê­r—I¯ÅU*UXzÝnµÍøh6FÄCÅ°jR6g\ZÁº Ú6@…IM4À\nPÔ)ê\'Óà õÁ’¸c-É^j묃Šeû[¦«JE‘t\0ŒæÒlÆA¼5•š*žº¿ga\'ý°2¦Ñ×ù\rjXŸ¨OR_‡ß·]·d©sÊ8ûä$+ù\' Û¬ó–L%hòÅAuõî(VH­€ÀþVW&8\'÷zr¯È \naÖÑpã€ã°p~¿·oñ \0\">À?ï:Õ;ñpMT.½cר%\'gÀØ>xk—ªx½íá¬3±Š Ôª*¼±j*sr¢Rs&vmÀŸa\rŽ½00¥·n];ö_ƒo©¸owÆ[sÅ•‹s\'_÷ÆXÚÕcÕ™ˆ7?ÄD‚ëÆ°} Ûùݦškªùª/™¹dá\\7v‰Û¸ná0UÐX¢šÈ¬‘¾ÕRU#57%9L%0 D@u•o\'l9á·ë5‡·±ëRsû1ÈY2Á3T<$oKD½µ~Ã.`WÞz‰$¦¡_š\'@õê‘„ìk\Zܼ3¸Ûx½’¸,Ð3®1¡fWdaqÇ*¥u¥Zc ¡˜ÎW,,‘‹~‰V\"N[.O=³”PtÑÀ*ÑÚºEd“]D7@¾Ë¶G¹ÝѱBfc\náûuʹìUVÆìEœ\"tÕùZögÑ)Ê\nj¤rÇш¡N`Ýð¹ìM·QÑòœ¹Ì6Œi–š)Kú°xÖøYò%tÈSLü¢³Wþ?Šw_\n„!Rù; )ÖÎÙ´hz¬IؼR@\n€=µËM5à[œÜÎÚ¿n?Ü£èx¯©1bŸ~cE e\nÞ>‚@.¦,S¯Õo ÀŠ=““tÙ«tÄêrÚþàú¦õ ÍŽ§žôÈéÍ ùrã»$eB¯tÞ6â«íÜ*Ïâ$¯qÖ:+©É$‰•Ž.©&í7\")Aº¸Çfš]ÆÉÓKiyF£W¨n6/»†uKÊD<Ý}ÂÓžBuÛahöÀÖõ+#Q„–tØÊ72•šÌD*£Vm59‘—E¢SñN½C V`)”ª”;\nõV§Vˆe]®@Å FÑ°ð±É¢Æ:9‹dȃfQM“!JB\0ÝöÜj›»ÛwÛ-ÙÛˆêÖoÅ·rþU¢$pî[$3–q¶mÔ1Spö½(,¦Ù ¡Ê’Θ$š£å˜ÚÄ#áÛ»Úú@ç=ÂtŸê–¶dì †QÛVO²‚ÑXŸ7Éüž>;\rD¾È•¬ªÓñ0uIº{,ÞIW†›­J5µ¢Ò Æpe9L_¾Ï!ÇãßÛ¸û~{~uÏüéªð?€ÿ\0\ZÄ«BkªWY—t¡u ]Á8äw¡»h†.6kkðËHEUj2¾™dN%Uš0\rUMT–jÓ+LH `wË*\n\"±\\¯Æ0„Žg \rѼ|dLTstÚGÆÇ0hšM0bÕ›3fÕ$›5l’H ši&B‡Û馿!tÇô|zö@¨UïõMe`mõø{4*Ë%âòÕV.m“æ*(˜àC1ÚZf\r3;ï¹ÖÆÒUƒÍsÙ†©Ó\"íôÃ-“.á9îJ>tL~ÓüHƒ,¾¤“$·~Ú¨våáf“âUFYVEqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÝœ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k¡)^ç2-gQ~ESA’jûÆ´SëÚ<¾¿‘0\0\0\0\0\0\0\0vãSÄ™›†>†\'9âßØ®ó ¢è±†Ž8$ŒòŒ©µ×ÂœÝUÞY)»O¥&DH]6B‹&¢KMeN¶DÈSL³8˜d¬“#z˜ä9ËÛ”šg,Ü®õòG w¿7GggU)F£]Es­i-‘¿DRdŠ{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i)iæ©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!‘kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%’#åŠÇèÓF÷Œ ʧJÞµZT}¢©$¿³™–懙|÷ùü„7¸¤öu»Ã§(\'Iø]_À˜ï®/ËYk1¦SÈíèQ¬Ý\"îx¾Øf®\\rþ¿áZ\\kp¯qÒ¾.oUÓu½Îö“²âZ¦n†”—)¬ §XÍFd”•5Q1e·cã@¬ø‡JÍ{LX(žGÔ½åô3\\Ü[—ˆ´a,|îM.êkQ­&_¤,¢ÔíR±\ZKžœ6>i#2Y*h@Wu+¥Ì«œ-.Óþ£q´\'c)ÃZ­]Xžì‰\'fäI©Q±â0ïJ‘<±H–j÷RCZ$1•‘.šËŸ”ê4ã?¿ ð¤Õ£Æ\"t]äƒN­Ü&z}Ȩ¶4¿•ÿ\0*ÚÝ÷æAMqòŒ˜%Ôé™%[1ÊPTéÉ©¤¹Ã†3žRÓÖRˆæl14zÇY\"÷dû—G®NÉÁžý JËéÓÙm\'Ê¢S-BU5!j/…IÜ­òà§Å1Å/FQ\\É^…‹.h„]P0æäohÏYì)’^\Z)ŸT°äU¢GQ¦’ö,fJ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õû$ÎÌ2ó.ƒ˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžXìèZ6áŒ;Ç<ö‰$¢òú%jhvs2RÖf§÷´:>-DdJZù‰)%³ \0#[Ú‹Ñ“N¨øVe¼…Mž…|‘¤«Ë<óqEºŽø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¯ä&7ØÇÔ ¼;_™¯Ou®ë[7éùÆQáÊ?ì…0ÄRv‡Vg#Û”ÐÃ+––äE·1™Ävl€\0\0\0\0\0¥ûŽÖ?¼Æœ^ø0ÜR¯lwúŒ˜Î­ˆèlFÝ’RבšÌ‹¡rK“3=÷2###Øh¦“,­õI§Ç7_çŒCku齒笩Yü;ïóüa{`\0\0Ñ\'uXhðä×ÕY\'qàE£IxŸ´}žRÓI_/_#ÛqGÍOO¯ä%¿ØçÄÏ3.\'ó\\™mßû¿‡ôÓ>»t¹å2²7 †ëˆ36(”FffJw_C4™4yZ*\0\0\0\0\0³ÞÙ\\ñž¶1.°Û·‡êCØÃå6öü­öyCþÈ2t2$–ò3¬KúóæäµÅÈ\\¦ö.‹Kì\r^\'“GäÍÆEÐï);S/ýÒŸ®ÂöüE’˜s,ÆÙf/qBö5”qÜC\"Ç®mÌ•gxÃ/Œµ¾6l£5|*¦ê“Io¹$Œ•¹‘}X\0]ûUzäaÒ× ù†jv¥C0ë)Å8ž.Íop”¸ÚcÖ‡6‡¬¹\'R (W‚¥ÂàJç\"ÙSf>‰ØÒUKS¤ª«*TÈΦý=72óü?‡§Ô[ ÙŽáŒÿ\0 íÖÈÙu¢³&|Õ5ì\"Ì-Uhõ Ç­\nV#9MÔ—”³;¼Hå$i5\"¤Ì¢•:ÆÔg&À\0\0\0\0\0–ãÃÙƒ‰†…òžžFÎÇ&7‘ä<!»E4¥Ÿ/ÅRëàé5U*†–©\n*:Ç$êNü±·µÔ$\ZÒŽî›lƒ¦˜ªk/ÆÙ …Ö)=ƒ¾9Æ&Q·«eؽÆä\r>êÒè•1\ZºT|ÊJmˆÒF¥ÚÙJ×ón¨øw²iÎNýo[/èÂõ8åÊÂîå&àï‡ Þq,˜©ó™“K\r5<ãÝÐGݢʥ¯ûÀ”*T¼å÷ÿ\0/ê<À|{9eØ.Ÿ°æLÎy-Ø™ ˜‚\r\"ȳ.§ìQè“jÞ[oæ†ÃOBêgËÑ&f)†âeÄ+/ñ4Õ\\ïQùjþµ£…Ñ°âœ~wh½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[¸\"Å3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„©´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸü|úŒ\0\0\0\0\0…÷ÿ\0/è!3Ú•à£\Z˘ç ñ.Óõ¥œs.bˆ¢Ÿµµ´U“~TÇÑ22TøÍ<ˆ)¾»º¬ï•Èqv¹s\'‰¶\ZPHª¦GzjY¨|ÄF£2¨¯´€Ž?jj|ÿ\0໩\nLK¯cïÄ×A_.(\ZìãÎÙJ ìëñ§¢ÒÎLjæÜȪ\Zyˆ¶\"©}™ªõáݽžÄεã½Õƒe±S5:™$‹n»\Zúõè[ùù δ‹‚\"ÚdÒöÓìF­(ÞÅ(YÚÛ\ZQvL±¶¶§GM”¥Ÿy!z\'GêǾƷu(„‘%;<\0\0\0\0\0?ÍÕµ–ÂéÍÒòÎÁ®ÂÔînÜn®\nÊÆÒÇmù–²3\"\"\"=·Ø¼ˆ•¹¥\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©Eò=4k_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW)%Æ/y}\'·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¦zLKZª%lŸ¤¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0Òã´’»MÊ®ù%y‹2=·ÞŸÚ$ºµ{ò„;—SØ”I-ÏÓm‡zâѸôU†)h±cŒÅÛ,X˜Û­ÊѹžÂ›C;ccg)¥-TZSÝÓBV®^S2%lí@roŽ‘ßõ·ÃW8&اiÛÆ;÷ë6Û{{¼ûIYò\\J6Ú’\"øäµ\"JŽ|ÌÞw\"-Ö)—`t¼‹JÝÓKºq¾·:½}ö7§4ÔäQoÓ•Ië±ô4žÆ{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰k$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ>EÖÅ{殸Êg]hÑ£\"3i¦_0µ€ã¼MEí¦KÔ[…EmFI• •tÒ¦ežÏ¨€WˆÛ§Ú¥§Z­%.œ¢¸/ök0¶…Ùc÷UŒÑ\\ñ¬JÖÖr [GKUkFæf§‰Œ½¹®¦J[ÄD÷=ˆ¼(º‘l\'¨\0\0\0\0\0\0= ý××ó1Wή1…n\ZݪLV÷,ÔÉÈÚ«ÁùV0ÞÜ^Ã`q-O»52df¦³Jy|ße9\r€¶äO*±´ºúþd=à\09µÅæ.sŽ\Zÿ\0Ž&‘Vöý çó [u;æ˜ ÛºKæ_Q(Œ¿Òd^£‡ýx™³pµÈÒ:”ëL5“®¨\\+Î幞ˆYÒ{äC¦ÅøžÛ§¤¹@\0\0\0\0\0\0@´‹RûÚ:áXŠ¹RȤû{¯fé·ºz¶™\Z¾¦Ê{ôùžÝ7ñG™x\0\reÕÜKßÍ)êZš4.=ïÓþb‹µÆÆWfóyi=úùl¯‘ù¤þñÄ>ÉìL£œpÅÿ\0pt=ñÉùÆUrG×Úù\'®ÐýÌúzÅR/áÖJÀ\0\0\0\0\0\0\"CÆ?\ZQ“ñúàýSþã(ÉöÝmÍ]q£6HÜ·=Ïü[¡zyíæ%·Oì\'ð`1Æ@þBWaAþ1#h«CÚ(»±9µû?M®üQµHÛñ\"3-¶ë±ïòìøcßÑ·= DêZW·¯l×”îmîLIS¾wÉ.ûíоʈö2ü ÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ/§F ø·é±´™zmèI\"Æ\0\0Š”»Þ»ôôÿ\0cèd5C˜Î®Ò¦Æ5l«ØÖ‹ÇÜ-NÖçmí R‡‡~¿wíBØþí¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdéõ.›ú™Ÿ Ü\0\0\0è¢T‹õ^G÷ÿ\0]ÿ\0?/.„2\0\0\0\0\0\0\0`Tµ£V¥*ÕhÑ:ÖýmLöÜŒËÐ÷úß Ï\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,1,'','','',''),(8,3,0,'75859b10a3a57734','cde8bd4c269d017826b5c163d04134ae','2017-09-07 08:58:34','2017-09-07 08:58:34','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\01\0\0\0\0\0\0\0\0 !1\n\"QqA#‘ð3¡ÿÚ\0\0\0?\0ÏãM5Aq\0ýöÕÚù4ÓM5·Ý¸t¶™³=ÎîXÈ\"éÆ™!D³p< úÁ_xæµ·rò›ûËYœ¼€˜«‰C¸†µôÀÚÕê×T,QŠrdÜå…¶aÉ–­¸+zÏ4Óêd2¯ïù:AY1.ÞZÐFî`H—ïk7>ÉÁCúb¹¢—Mªãê­r—I¯ÅU*UXzÝnµÍøh6FÄCÅ°jR6g\ZÁº Ú6@…IM4À\nPÔ)ê\'Óà õÁ’¸c-É^j묃Šeû[¦«JE‘t\0ŒæÒlÆA¼5•š*žº¿ga\'ý°2¦Ñ×ù\rjXŸ¨OR_‡ß·]·d©sÊ8ûä$+ù\' Û¬ó–L%hòÅAuõî(VH­€ÀþVW&8\'÷zr¯È \naÖÑpã€ã°p~¿·oñ \0\">À?ï:Õ;ñpMT.½cר%\'gÀØ>xk—ªx½íá¬3±Š Ôª*¼±j*sr¢Rs&vmÀŸa\rŽ½00¥·n];ö_ƒo©¸owÆ[sÅ•‹s\'_÷ÆXÚÕcÕ™ˆ7?ÄD‚ëÆ°} Ûùݦškªùª/™¹dá\\7v‰Û¸ná0UÐX¢šÈ¬‘¾ÕRU#57%9L%0 D@u•o\'l9á·ë5‡·±ëRsû1ÈY2Á3T<$oKD½µ~Ã.`WÞz‰$¦¡_š\'@õê‘„ìk\Zܼ3¸Ûx½’¸,Ð3®1¡fWdaqÇ*¥u¥Zc ¡˜ÎW,,‘‹~‰V\"N[.O=³”PtÑÀ*ÑÚºEd“]D7@¾Ë¶G¹ÝѱBfc\náûuʹìUVÆìEœ\"tÕùZögÑ)Ê\nj¤rÇш¡N`Ýð¹ìM·QÑòœ¹Ì6Œi–š)Kú°xÖøYò%tÈSLü¢³Wþ?Šw_\n„!Rù; )ÖÎÙ´hz¬IؼR@\n€=µËM5à[œÜÎÚ¿n?Ü£èx¯©1bŸ~cE e\nÞ>‚@.¦,S¯Õo ÀŠ=““tÙ«tÄêrÚþàú¦õ ÍŽ§žôÈéÍ ùrã»$eB¯tÞ6â«íÜ*Ïâ$¯qÖ:+©É$‰•Ž.©&í7\")Aº¸Çfš]ÆÉÓKiyF£W¨n6/»†uKÊD<Ý}ÂÓžBuÛahöÀÖõ+#Q„–tØÊ72•šÌD*£Vm59‘—E¢SñN½C V`)”ª”;\nõV§Vˆe]®@Å FÑ°ð±É¢Æ:9‹dȃfQM“!JB\0ÝöÜj›»ÛwÛ-ÙÛˆêÖoÅ·rþU¢$pî[$3–q¶mÔ1Spö½(,¦Ù ¡Ê’Θ$š£å˜ÚÄ#áÛ»Úú@ç=ÂtŸê–¶dì †QÛVO²‚ÑXŸ7Éüž>;\rD¾È•¬ªÓñ0uIº{,ÞIW†›­J5µ¢Ò Æpe9L_¾Ï!ÇãßÛ¸û~{~uÏüéªð?€ÿ\0\ZÄ«BkªWY—t¡u ]Á8äw¡»h†.6kkðËHEUj2¾™dN%Uš0\rUMT–jÓ+LH `wË*\n\"±\\¯Æ0„Žg \rѼ|dLTstÚGÆÇ0hšM0bÕ›3fÕ$›5l’H ši&B‡Û馿!tÇô|zö@¨UïõMe`mõø{4*Ë%âòÕV.m“æ*(˜àC1ÚZf\r3;ï¹ÖÆÒUƒÍsÙ†©Ó\"íôÃ-“.á9îJ>tL~ÓüHƒ,¾¤“$·~Ú¨våáf“âUFYVEqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÝœ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k¡)^ç2-gQ~ESA’jûÆ´SëÚ<¾¿‘0\0\0\0\0\0\0\0vãSÄ™›†>†\'9âßØ®ó ¢è±†Ž8$ŒòŒ©µ×ÂœÝUÞY)»O¥&DH]6B‹&¢KMeN¶DÈSL³8˜d¬“#z˜ä9ËÛ”šg,Ü®õòG w¿7GggU)F£]Es­i-‘¿DRdŠ{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i)iæ©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!‘kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%’#åŠÇèÓF÷Œ ʧJÞµZT}¢©$¿³™–懙|÷ùü„7¸¤öu»Ã§(\'Iø]_À˜ï®/ËYk1¦SÈíèQ¬Ý\"îx¾Øf®\\rþ¿áZ\\kp¯qÒ¾.oUÓu½Îö“²âZ¦n†”—)¬ §XÍFd”•5Q1e·cã@¬ø‡JÍ{LX(žGÔ½åô3\\Ü[—ˆ´a,|îM.êkQ­&_¤,¢ÔíR±\ZKžœ6>i#2Y*h@Wu+¥Ì«œ-.Óþ£q´\'c)ÃZ­]Xžì‰\'fäI©Q±â0ïJ‘<±H–j÷RCZ$1•‘.šËŸ”ê4ã?¿ ð¤Õ£Æ\"t]äƒN­Ü&z}Ȩ¶4¿•ÿ\0*ÚÝ÷æAMqòŒ˜%Ôé™%[1ÊPTéÉ©¤¹Ã†3žRÓÖRˆæl14zÇY\"÷dû—G®NÉÁžý JËéÓÙm\'Ê¢S-BU5!j/…IÜ­òà§Å1Å/FQ\\É^…‹.h„]P0æäohÏYì)’^\Z)ŸT°äU¢GQ¦’ö,fJ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õû$ÎÌ2ó.ƒ˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžXìèZ6áŒ;Ç<ö‰$¢òú%jhvs2RÖf§÷´:>-DdJZù‰)%³ \0#[Ú‹Ñ“N¨øVe¼…Mž…|‘¤«Ë<óqEºŽø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¯ä&7ØÇÔ ¼;_™¯Ou®ë[7éùÆQáÊ?ì…0ÄRv‡Vg#Û”ÐÃ+––äE·1™Ävl€\0\0\0\0\0¥ûŽÖ?¼Æœ^ø0ÜR¯lwúŒ˜Î­ˆèlFÝ’RבšÌ‹¡rK“3=÷2###Øh¦“,­õI§Ç7_çŒCku齒笩Yü;ïóüa{`\0\0Ñ\'uXhðä×ÕY\'qàE£IxŸ´}žRÓI_/_#ÛqGÍOO¯ä%¿ØçÄÏ3.\'ó\\™mßû¿‡ôÓ>»t¹å2²7 †ëˆ36(”FffJw_C4™4yZ*\0\0\0\0\0³ÞÙ\\ñž¶1.°Û·‡êCØÃå6öü­öyCþÈ2t2$–ò3¬KúóæäµÅÈ\\¦ö.‹Kì\r^\'“GäÍÆEÐï);S/ýÒŸ®ÂöüE’˜s,ÆÙf/qBö5”qÜC\"Ç®mÌ•gxÃ/Œµ¾6l£5|*¦ê“Io¹$Œ•¹‘}X\0]ûUzäaÒ× ù†jv¥C0ë)Å8ž.Íop”¸ÚcÖ‡6‡¬¹\'R (W‚¥ÂàJç\"ÙSf>‰ØÒUKS¤ª«*TÈΦý=72óü?‡§Ô[ ÙŽáŒÿ\0 íÖÈÙu¢³&|Õ5ì\"Ì-Uhõ Ç­\nV#9MÔ—”³;¼Hå$i5\"¤Ì¢•:ÆÔg&À\0\0\0\0\0–ãÃÙƒ‰†…òžžFÎÇ&7‘ä<!»E4¥Ÿ/ÅRëàé5U*†–©\n*:Ç$êNü±·µÔ$\ZÒŽî›lƒ¦˜ªk/ÆÙ …Ö)=ƒ¾9Æ&Q·«eؽÆä\r>êÒè•1\ZºT|ÊJmˆÒF¥ÚÙJ×ón¨øw²iÎNýo[/èÂõ8åÊÂîå&àï‡ Þq,˜©ó™“K\r5<ãÝÐGݢʥ¯ûÀ”*T¼å÷ÿ\0/ê<À|{9eØ.Ÿ°æLÎy-Ø™ ˜‚\r\"ȳ.§ìQè“jÞ[oæ†ÃOBêgËÑ&f)†âeÄ+/ñ4Õ\\ïQùjþµ£…Ñ°âœ~wh½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[¸\"Å3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„©´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸü|úŒ\0\0\0\0\0…÷ÿ\0/è!3Ú•à£\Z˘ç ñ.Óõ¥œs.bˆ¢Ÿµµ´U“~TÇÑ22TøÍ<ˆ)¾»º¬ï•Èqv¹s\'‰¶\ZPHª¦GzjY¨|ÄF£2¨¯´€Ž?jj|ÿ\0໩\nLK¯cïÄ×A_.(\ZìãÎÙJ ìëñ§¢ÒÎLjæÜȪ\Zyˆ¶\"©}™ªõáݽžÄεã½Õƒe±S5:™$‹n»\Zúõè[ùù δ‹‚\"ÚdÒöÓìF­(ÞÅ(YÚÛ\ZQvL±¶¶§GM”¥Ÿy!z\'GêǾƷu(„‘%;<\0\0\0\0\0?ÍÕµ–ÂéÍÒòÎÁ®ÂÔînÜn®\nÊÆÒÇmù–²3\"\"\"=·Ø¼ˆ•¹¥\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©Eò=4k_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW)%Æ/y}\'·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¦zLKZª%lŸ¤¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0Òã´’»MÊ®ù%y‹2=·ÞŸÚ$ºµ{ò„;—SØ”I-ÏÓm‡zâѸôU†)h±cŒÅÛ,X˜Û­ÊѹžÂ›C;ccg)¥-TZSÝÓBV®^S2%lí@roŽ‘ßõ·ÃW8&اiÛÆ;÷ë6Û{{¼ûIYò\\J6Ú’\"øäµ\"JŽ|ÌÞw\"-Ö)—`t¼‹JÝÓKºq¾·:½}ö7§4ÔäQoÓ•Ië±ô4žÆ{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰k$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ>EÖÅ{殸Êg]hÑ£\"3i¦_0µ€ã¼MEí¦KÔ[…EmFI• •tÒ¦ežÏ¨€WˆÛ§Ú¥§Z­%.œ¢¸/ök0¶…Ùc÷UŒÑ\\ñ¬JÖÖr [GKUkFæf§‰Œ½¹®¦J[ÄD÷=ˆ¼(º‘l\'¨\0\0\0\0\0\0= ý××ó1Wή1…n\ZݪLV÷,ÔÉÈÚ«ÁùV0ÞÜ^Ã`q-O»52df¦³Jy|ße9\r€¶äO*±´ºúþd=à\09µÅæ.sŽ\Zÿ\0Ž&‘Vöý çó [u;æ˜ ÛºKæ_Q(Œ¿Òd^£‡ýx™³pµÈÒ:”ëL5“®¨\\+Î幞ˆYÒ{äC¦ÅøžÛ§¤¹@\0\0\0\0\0\0@´‹RûÚ:áXŠ¹RȤû{¯fé·ºz¶™\Z¾¦Ê{ôùžÝ7ñG™x\0\reÕÜKßÍ)êZš4.=ïÓþb‹µÆÆWfóyi=úùl¯‘ù¤þñÄ>ÉìL£œpÅÿ\0pt=ñÉùÆUrG×Úù\'®ÐýÌúzÅR/áÖJÀ\0\0\0\0\0\0\"CÆ?\ZQ“ñúàýSþã(ÉöÝmÍ]q£6HÜ·=Ïü[¡zyíæ%·Oì\'ð`1Æ@þBWaAþ1#h«CÚ(»±9µû?M®üQµHÛñ\"3-¶ë±ïòìøcßÑ·= DêZW·¯l×”îmîLIS¾wÉ.ûíоʈö2ü ÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ/§F ø·é±´™zmèI\"Æ\0\0Š”»Þ»ôôÿ\0cèd5C˜Î®Ò¦Æ5l«ØÖ‹ÇÜ-NÖçmí R‡‡~¿wíBØþí¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdéõ.›ú™Ÿ Ü\0\0\0è¢T‹õ^G÷ÿ\0]ÿ\0?/.„2\0\0\0\0\0\0\0`Tµ£V¥*ÕhÑ:ÖýmLöÜŒËÐ÷úß Ï\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,1,'','','',''),(11,4,0,'75859b10a64380c7','97611ba91637997e24ea7ad58fb9cb2e','2017-09-07 08:59:16','2017-09-07 08:59:16','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\01\0\0\0\0\0\0\0\0 !1\n\"QqA#‘ð3¡ÿÚ\0\0\0?\0ÏãM5Aq\0ýöÕÚù4ÓM5·Ý¸t¶™³=ÎîXÈ\"éÆ™!D³p< úÁ_xæµ·rò›ûËYœ¼€˜«‰C¸†µôÀÚÕê×T,QŠrdÜå…¶aÉ–­¸+zÏ4Óêd2¯ïù:AY1.ÞZÐFî`H—ïk7>ÉÁCúb¹¢—Mªãê­r—I¯ÅU*UXzÝnµÍøh6FÄCÅ°jR6g\ZÁº Ú6@…IM4À\nPÔ)ê\'Óà õÁ’¸c-É^j묃Šeû[¦«JE‘t\0ŒæÒlÆA¼5•š*žº¿ga\'ý°2¦Ñ×ù\rjXŸ¨OR_‡ß·]·d©sÊ8ûä$+ù\' Û¬ó–L%hòÅAuõî(VH­€ÀþVW&8\'÷zr¯È \naÖÑpã€ã°p~¿·oñ \0\">À?ï:Õ;ñpMT.½cר%\'gÀØ>xk—ªx½íá¬3±Š Ôª*¼±j*sr¢Rs&vmÀŸa\rŽ½00¥·n];ö_ƒo©¸owÆ[sÅ•‹s\'_÷ÆXÚÕcÕ™ˆ7?ÄD‚ëÆ°} Ûùݦškªùª/™¹dá\\7v‰Û¸ná0UÐX¢šÈ¬‘¾ÕRU#57%9L%0 D@u•o\'l9á·ë5‡·±ëRsû1ÈY2Á3T<$oKD½µ~Ã.`WÞz‰$¦¡_š\'@õê‘„ìk\Zܼ3¸Ûx½’¸,Ð3®1¡fWdaqÇ*¥u¥Zc ¡˜ÎW,,‘‹~‰V\"N[.O=³”PtÑÀ*ÑÚºEd“]D7@¾Ë¶G¹ÝѱBfc\náûuʹìUVÆìEœ\"tÕùZögÑ)Ê\nj¤rÇш¡N`Ýð¹ìM·QÑòœ¹Ì6Œi–š)Kú°xÖøYò%tÈSLü¢³Wþ?Šw_\n„!Rù; )ÖÎÙ´hz¬IؼR@\n€=µËM5à[œÜÎÚ¿n?Ü£èx¯©1bŸ~cE e\nÞ>‚@.¦,S¯Õo ÀŠ=““tÙ«tÄêrÚþàú¦õ ÍŽ§žôÈéÍ ùrã»$eB¯tÞ6â«íÜ*Ïâ$¯qÖ:+©É$‰•Ž.©&í7\")Aº¸Çfš]ÆÉÓKiyF£W¨n6/»†uKÊD<Ý}ÂÓžBuÛahöÀÖõ+#Q„–tØÊ72•šÌD*£Vm59‘—E¢SñN½C V`)”ª”;\nõV§Vˆe]®@Å FÑ°ð±É¢Æ:9‹dȃfQM“!JB\0ÝöÜj›»ÛwÛ-ÙÛˆêÖoÅ·rþU¢$pî[$3–q¶mÔ1Spö½(,¦Ù ¡Ê’Θ$š£å˜ÚÄ#áÛ»Úú@ç=ÂtŸê–¶dì †QÛVO²‚ÑXŸ7Éüž>;\rD¾È•¬ªÓñ0uIº{,ÞIW†›­J5µ¢Ò Æpe9L_¾Ï!ÇãßÛ¸û~{~uÏüéªð?€ÿ\0\ZÄ«BkªWY—t¡u ]Á8äw¡»h†.6kkðËHEUj2¾™dN%Uš0\rUMT–jÓ+LH `wË*\n\"±\\¯Æ0„Žg \rѼ|dLTstÚGÆÇ0hšM0bÕ›3fÕ$›5l’H ši&B‡Û馿!tÇô|zö@¨UïõMe`mõø{4*Ë%âòÕV.m“æ*(˜àC1ÚZf\r3;ï¹ÖÆÒUƒÍsÙ†©Ó\"íôÃ-“.á9îJ>tL~ÓüHƒ,¾¤“$·~Ú¨våáf“âUFYVEqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÝœ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k¡)^ç2-gQ~ESA’jûÆ´SëÚ<¾¿‘0\0\0\0\0\0\0\0vãSÄ™›†>†\'9âßØ®ó ¢è±†Ž8$ŒòŒ©µ×ÂœÝUÞY)»O¥&DH]6B‹&¢KMeN¶DÈSL³8˜d¬“#z˜ä9ËÛ”šg,Ü®õòG w¿7GggU)F£]Es­i-‘¿DRdŠ{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i)iæ©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!‘kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%’#åŠÇèÓF÷Œ ʧJÞµZT}¢©$¿³™–懙|÷ùü„7¸¤öu»Ã§(\'Iø]_À˜ï®/ËYk1¦SÈíèQ¬Ý\"îx¾Øf®\\rþ¿áZ\\kp¯qÒ¾.oUÓu½Îö“²âZ¦n†”—)¬ §XÍFd”•5Q1e·cã@¬ø‡JÍ{LX(žGÔ½åô3\\Ü[—ˆ´a,|îM.êkQ­&_¤,¢ÔíR±\ZKžœ6>i#2Y*h@Wu+¥Ì«œ-.Óþ£q´\'c)ÃZ­]Xžì‰\'fäI©Q±â0ïJ‘<±H–j÷RCZ$1•‘.šËŸ”ê4ã?¿ ð¤Õ£Æ\"t]äƒN­Ü&z}Ȩ¶4¿•ÿ\0*ÚÝ÷æAMqòŒ˜%Ôé™%[1ÊPTéÉ©¤¹Ã†3žRÓÖRˆæl14zÇY\"÷dû—G®NÉÁžý JËéÓÙm\'Ê¢S-BU5!j/…IÜ­òà§Å1Å/FQ\\É^…‹.h„]P0æäohÏYì)’^\Z)ŸT°äU¢GQ¦’ö,fJ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õû$ÎÌ2ó.ƒ˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžXìèZ6áŒ;Ç<ö‰$¢òú%jhvs2RÖf§÷´:>-DdJZù‰)%³ \0#[Ú‹Ñ“N¨øVe¼…Mž…|‘¤«Ë<óqEºŽø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¯ä&7ØÇÔ ¼;_™¯Ou®ë[7éùÆQáÊ?ì…0ÄRv‡Vg#Û”ÐÃ+––äE·1™Ävl€\0\0\0\0\0¥ûŽÖ?¼Æœ^ø0ÜR¯lwúŒ˜Î­ˆèlFÝ’RבšÌ‹¡rK“3=÷2###Øh¦“,­õI§Ç7_çŒCku齒笩Yü;ïóüa{`\0\0Ñ\'uXhðä×ÕY\'qàE£IxŸ´}žRÓI_/_#ÛqGÍOO¯ä%¿ØçÄÏ3.\'ó\\™mßû¿‡ôÓ>»t¹å2²7 †ëˆ36(”FffJw_C4™4yZ*\0\0\0\0\0³ÞÙ\\ñž¶1.°Û·‡êCØÃå6öü­öyCþÈ2t2$–ò3¬KúóæäµÅÈ\\¦ö.‹Kì\r^\'“GäÍÆEÐï);S/ýÒŸ®ÂöüE’˜s,ÆÙf/qBö5”qÜC\"Ç®mÌ•gxÃ/Œµ¾6l£5|*¦ê“Io¹$Œ•¹‘}X\0]ûUzäaÒ× ù†jv¥C0ë)Å8ž.Íop”¸ÚcÖ‡6‡¬¹\'R (W‚¥ÂàJç\"ÙSf>‰ØÒUKS¤ª«*TÈΦý=72óü?‡§Ô[ ÙŽáŒÿ\0 íÖÈÙu¢³&|Õ5ì\"Ì-Uhõ Ç­\nV#9MÔ—”³;¼Hå$i5\"¤Ì¢•:ÆÔg&À\0\0\0\0\0–ãÃÙƒ‰†…òžžFÎÇ&7‘ä<!»E4¥Ÿ/ÅRëàé5U*†–©\n*:Ç$êNü±·µÔ$\ZÒŽî›lƒ¦˜ªk/ÆÙ …Ö)=ƒ¾9Æ&Q·«eؽÆä\r>êÒè•1\ZºT|ÊJmˆÒF¥ÚÙJ×ón¨øw²iÎNýo[/èÂõ8åÊÂîå&àï‡ Þq,˜©ó™“K\r5<ãÝÐGݢʥ¯ûÀ”*T¼å÷ÿ\0/ê<À|{9eØ.Ÿ°æLÎy-Ø™ ˜‚\r\"ȳ.§ìQè“jÞ[oæ†ÃOBêgËÑ&f)†âeÄ+/ñ4Õ\\ïQùjþµ£…Ñ°âœ~wh½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[¸\"Å3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„©´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸü|úŒ\0\0\0\0\0…÷ÿ\0/è!3Ú•à£\Z˘ç ñ.Óõ¥œs.bˆ¢Ÿµµ´U“~TÇÑ22TøÍ<ˆ)¾»º¬ï•Èqv¹s\'‰¶\ZPHª¦GzjY¨|ÄF£2¨¯´€Ž?jj|ÿ\0໩\nLK¯cïÄ×A_.(\ZìãÎÙJ ìëñ§¢ÒÎLjæÜȪ\Zyˆ¶\"©}™ªõáݽžÄεã½Õƒe±S5:™$‹n»\Zúõè[ùù δ‹‚\"ÚdÒöÓìF­(ÞÅ(YÚÛ\ZQvL±¶¶§GM”¥Ÿy!z\'GêǾƷu(„‘%;<\0\0\0\0\0?ÍÕµ–ÂéÍÒòÎÁ®ÂÔînÜn®\nÊÆÒÇmù–²3\"\"\"=·Ø¼ˆ•¹¥\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©Eò=4k_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW)%Æ/y}\'·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¦zLKZª%lŸ¤¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0Òã´’»MÊ®ù%y‹2=·ÞŸÚ$ºµ{ò„;—SØ”I-ÏÓm‡zâѸôU†)h±cŒÅÛ,X˜Û­ÊѹžÂ›C;ccg)¥-TZSÝÓBV®^S2%lí@roŽ‘ßõ·ÃW8&اiÛÆ;÷ë6Û{{¼ûIYò\\J6Ú’\"øäµ\"JŽ|ÌÞw\"-Ö)—`t¼‹JÝÓKºq¾·:½}ö7§4ÔäQoÓ•Ië±ô4žÆ{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰k$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ>EÖÅ{殸Êg]hÑ£\"3i¦_0µ€ã¼MEí¦KÔ[…EmFI• •tÒ¦ežÏ¨€WˆÛ§Ú¥§Z­%.œ¢¸/ök0¶…Ùc÷UŒÑ\\ñ¬JÖÖr [GKUkFæf§‰Œ½¹®¦J[ÄD÷=ˆ¼(º‘l\'¨\0\0\0\0\0\0= ý××ó1Wή1…n\ZݪLV÷,ÔÉÈÚ«ÁùV0ÞÜ^Ã`q-O»52df¦³Jy|ße9\r€¶äO*±´ºúþd=à\09µÅæ.sŽ\Zÿ\0Ž&‘Vöý çó [u;æ˜ ÛºKæ_Q(Œ¿Òd^£‡ýx™³pµÈÒ:”ëL5“®¨\\+Î幞ˆYÒ{äC¦ÅøžÛ§¤¹@\0\0\0\0\0\0@´‹RûÚ:áXŠ¹RȤû{¯fé·ºz¶™\Z¾¦Ê{ôùžÝ7ñG™x\0\reÕÜKßÍ)êZš4.=ïÓþb‹µÆÆWfóyi=úùl¯‘ù¤þñÄ>ÉìL£œpÅÿ\0pt=ñÉùÆUrG×Úù\'®ÐýÌúzÅR/áÖJÀ\0\0\0\0\0\0\"CÆ?\ZQ“ñúàýSþã(ÉöÝmÍ]q£6HÜ·=Ïü[¡zyíæ%·Oì\'ð`1Æ@þBWaAþ1#h«CÚ(»±9µû?M®üQµHÛñ\"3-¶ë±ïòìøcßÑ·= DêZW·¯l×”îmîLIS¾wÉ.ûíоʈö2ü ÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ/§F ø·é±´™zmèI\"Æ\0\0Š”»Þ»ôôÿ\0cèd5C˜Î®Ò¦Æ5l«ØÖ‹ÇÜ-NÖçmí R‡‡~¿wíBØþí¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdéõ.›ú™Ÿ Ü\0\0\0è¢T‹õ^G÷ÿ\0]ÿ\0?/.„2\0\0\0\0\0\0\0`Tµ£V¥*ÕhÑ:ÖýmLöÜŒËÐ÷úß Ï\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,1,'','','',''),(14,5,0,'75859b10a89b26b7','1e6e86cff989b84650c44bf8f408250a','2017-09-07 08:59:53','2017-09-07 08:59:53','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\01\0\0\0\0\0\0\0\0 !1\n\"QqA#‘ð3¡ÿÚ\0\0\0?\0ÏãM5Aq\0ýöÕÚù4ÓM5·Ý¸t¶™³=ÎîXÈ\"éÆ™!D³p< úÁ_xæµ·rò›ûËYœ¼€˜«‰C¸†µôÀÚÕê×T,QŠrdÜå…¶aÉ–­¸+zÏ4Óêd2¯ïù:AY1.ÞZÐFî`H—ïk7>ÉÁCúb¹¢—Mªãê­r—I¯ÅU*UXzÝnµÍøh6FÄCÅ°jR6g\ZÁº Ú6@…IM4À\nPÔ)ê\'Óà õÁ’¸c-É^j묃Šeû[¦«JE‘t\0ŒæÒlÆA¼5•š*žº¿ga\'ý°2¦Ñ×ù\rjXŸ¨OR_‡ß·]·d©sÊ8ûä$+ù\' Û¬ó–L%hòÅAuõî(VH­€ÀþVW&8\'÷zr¯È \naÖÑpã€ã°p~¿·oñ \0\">À?ï:Õ;ñpMT.½cר%\'gÀØ>xk—ªx½íá¬3±Š Ôª*¼±j*sr¢Rs&vmÀŸa\rŽ½00¥·n];ö_ƒo©¸owÆ[sÅ•‹s\'_÷ÆXÚÕcÕ™ˆ7?ÄD‚ëÆ°} Ûùݦškªùª/™¹dá\\7v‰Û¸ná0UÐX¢šÈ¬‘¾ÕRU#57%9L%0 D@u•o\'l9á·ë5‡·±ëRsû1ÈY2Á3T<$oKD½µ~Ã.`WÞz‰$¦¡_š\'@õê‘„ìk\Zܼ3¸Ûx½’¸,Ð3®1¡fWdaqÇ*¥u¥Zc ¡˜ÎW,,‘‹~‰V\"N[.O=³”PtÑÀ*ÑÚºEd“]D7@¾Ë¶G¹ÝѱBfc\náûuʹìUVÆìEœ\"tÕùZögÑ)Ê\nj¤rÇш¡N`Ýð¹ìM·QÑòœ¹Ì6Œi–š)Kú°xÖøYò%tÈSLü¢³Wþ?Šw_\n„!Rù; )ÖÎÙ´hz¬IؼR@\n€=µËM5à[œÜÎÚ¿n?Ü£èx¯©1bŸ~cE e\nÞ>‚@.¦,S¯Õo ÀŠ=““tÙ«tÄêrÚþàú¦õ ÍŽ§žôÈéÍ ùrã»$eB¯tÞ6â«íÜ*Ïâ$¯qÖ:+©É$‰•Ž.©&í7\")Aº¸Çfš]ÆÉÓKiyF£W¨n6/»†uKÊD<Ý}ÂÓžBuÛahöÀÖõ+#Q„–tØÊ72•šÌD*£Vm59‘—E¢SñN½C V`)”ª”;\nõV§Vˆe]®@Å FÑ°ð±É¢Æ:9‹dȃfQM“!JB\0ÝöÜj›»ÛwÛ-ÙÛˆêÖoÅ·rþU¢$pî[$3–q¶mÔ1Spö½(,¦Ù ¡Ê’Θ$š£å˜ÚÄ#áÛ»Úú@ç=ÂtŸê–¶dì †QÛVO²‚ÑXŸ7Éüž>;\rD¾È•¬ªÓñ0uIº{,ÞIW†›­J5µ¢Ò Æpe9L_¾Ï!ÇãßÛ¸û~{~uÏüéªð?€ÿ\0\ZÄ«BkªWY—t¡u ]Á8äw¡»h†.6kkðËHEUj2¾™dN%Uš0\rUMT–jÓ+LH `wË*\n\"±\\¯Æ0„Žg \rѼ|dLTstÚGÆÇ0hšM0bÕ›3fÕ$›5l’H ši&B‡Û馿!tÇô|zö@¨UïõMe`mõø{4*Ë%âòÕV.m“æ*(˜àC1ÚZf\r3;ï¹ÖÆÒUƒÍsÙ†©Ó\"íôÃ-“.á9îJ>tL~ÓüHƒ,¾¤“$·~Ú¨våáf“âUFYVEqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÝœ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k¡)^ç2-gQ~ESA’jûÆ´SëÚ<¾¿‘0\0\0\0\0\0\0\0vãSÄ™›†>†\'9âßØ®ó ¢è±†Ž8$ŒòŒ©µ×ÂœÝUÞY)»O¥&DH]6B‹&¢KMeN¶DÈSL³8˜d¬“#z˜ä9ËÛ”šg,Ü®õòG w¿7GggU)F£]Es­i-‘¿DRdŠ{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i)iæ©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!‘kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%’#åŠÇèÓF÷Œ ʧJÞµZT}¢©$¿³™–懙|÷ùü„7¸¤öu»Ã§(\'Iø]_À˜ï®/ËYk1¦SÈíèQ¬Ý\"îx¾Øf®\\rþ¿áZ\\kp¯qÒ¾.oUÓu½Îö“²âZ¦n†”—)¬ §XÍFd”•5Q1e·cã@¬ø‡JÍ{LX(žGÔ½åô3\\Ü[—ˆ´a,|îM.êkQ­&_¤,¢ÔíR±\ZKžœ6>i#2Y*h@Wu+¥Ì«œ-.Óþ£q´\'c)ÃZ­]Xžì‰\'fäI©Q±â0ïJ‘<±H–j÷RCZ$1•‘.šËŸ”ê4ã?¿ ð¤Õ£Æ\"t]äƒN­Ü&z}Ȩ¶4¿•ÿ\0*ÚÝ÷æAMqòŒ˜%Ôé™%[1ÊPTéÉ©¤¹Ã†3žRÓÖRˆæl14zÇY\"÷dû—G®NÉÁžý JËéÓÙm\'Ê¢S-BU5!j/…IÜ­òà§Å1Å/FQ\\É^…‹.h„]P0æäohÏYì)’^\Z)ŸT°äU¢GQ¦’ö,fJ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õû$ÎÌ2ó.ƒ˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžXìèZ6áŒ;Ç<ö‰$¢òú%jhvs2RÖf§÷´:>-DdJZù‰)%³ \0#[Ú‹Ñ“N¨øVe¼…Mž…|‘¤«Ë<óqEºŽø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¯ä&7ØÇÔ ¼;_™¯Ou®ë[7éùÆQáÊ?ì…0ÄRv‡Vg#Û”ÐÃ+––äE·1™Ävl€\0\0\0\0\0¥ûŽÖ?¼Æœ^ø0ÜR¯lwúŒ˜Î­ˆèlFÝ’RבšÌ‹¡rK“3=÷2###Øh¦“,­õI§Ç7_çŒCku齒笩Yü;ïóüa{`\0\0Ñ\'uXhðä×ÕY\'qàE£IxŸ´}žRÓI_/_#ÛqGÍOO¯ä%¿ØçÄÏ3.\'ó\\™mßû¿‡ôÓ>»t¹å2²7 †ëˆ36(”FffJw_C4™4yZ*\0\0\0\0\0³ÞÙ\\ñž¶1.°Û·‡êCØÃå6öü­öyCþÈ2t2$–ò3¬KúóæäµÅÈ\\¦ö.‹Kì\r^\'“GäÍÆEÐï);S/ýÒŸ®ÂöüE’˜s,ÆÙf/qBö5”qÜC\"Ç®mÌ•gxÃ/Œµ¾6l£5|*¦ê“Io¹$Œ•¹‘}X\0]ûUzäaÒ× ù†jv¥C0ë)Å8ž.Íop”¸ÚcÖ‡6‡¬¹\'R (W‚¥ÂàJç\"ÙSf>‰ØÒUKS¤ª«*TÈΦý=72óü?‡§Ô[ ÙŽáŒÿ\0 íÖÈÙu¢³&|Õ5ì\"Ì-Uhõ Ç­\nV#9MÔ—”³;¼Hå$i5\"¤Ì¢•:ÆÔg&À\0\0\0\0\0–ãÃÙƒ‰†…òžžFÎÇ&7‘ä<!»E4¥Ÿ/ÅRëàé5U*†–©\n*:Ç$êNü±·µÔ$\ZÒŽî›lƒ¦˜ªk/ÆÙ …Ö)=ƒ¾9Æ&Q·«eؽÆä\r>êÒè•1\ZºT|ÊJmˆÒF¥ÚÙJ×ón¨øw²iÎNýo[/èÂõ8åÊÂîå&àï‡ Þq,˜©ó™“K\r5<ãÝÐGݢʥ¯ûÀ”*T¼å÷ÿ\0/ê<À|{9eØ.Ÿ°æLÎy-Ø™ ˜‚\r\"ȳ.§ìQè“jÞ[oæ†ÃOBêgËÑ&f)†âeÄ+/ñ4Õ\\ïQùjþµ£…Ñ°âœ~wh½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[¸\"Å3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„©´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸü|úŒ\0\0\0\0\0…÷ÿ\0/è!3Ú•à£\Z˘ç ñ.Óõ¥œs.bˆ¢Ÿµµ´U“~TÇÑ22TøÍ<ˆ)¾»º¬ï•Èqv¹s\'‰¶\ZPHª¦GzjY¨|ÄF£2¨¯´€Ž?jj|ÿ\0໩\nLK¯cïÄ×A_.(\ZìãÎÙJ ìëñ§¢ÒÎLjæÜȪ\Zyˆ¶\"©}™ªõáݽžÄεã½Õƒe±S5:™$‹n»\Zúõè[ùù δ‹‚\"ÚdÒöÓìF­(ÞÅ(YÚÛ\ZQvL±¶¶§GM”¥Ÿy!z\'GêǾƷu(„‘%;<\0\0\0\0\0?ÍÕµ–ÂéÍÒòÎÁ®ÂÔînÜn®\nÊÆÒÇmù–²3\"\"\"=·Ø¼ˆ•¹¥\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©Eò=4k_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW)%Æ/y}\'·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¦zLKZª%lŸ¤¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0Òã´’»MÊ®ù%y‹2=·ÞŸÚ$ºµ{ò„;—SØ”I-ÏÓm‡zâѸôU†)h±cŒÅÛ,X˜Û­ÊѹžÂ›C;ccg)¥-TZSÝÓBV®^S2%lí@roŽ‘ßõ·ÃW8&اiÛÆ;÷ë6Û{{¼ûIYò\\J6Ú’\"øäµ\"JŽ|ÌÞw\"-Ö)—`t¼‹JÝÓKºq¾·:½}ö7§4ÔäQoÓ•Ië±ô4žÆ{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰k$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ>EÖÅ{殸Êg]hÑ£\"3i¦_0µ€ã¼MEí¦KÔ[…EmFI• •tÒ¦ežÏ¨€WˆÛ§Ú¥§Z­%.œ¢¸/ök0¶…Ùc÷UŒÑ\\ñ¬JÖÖr [GKUkFæf§‰Œ½¹®¦J[ÄD÷=ˆ¼(º‘l\'¨\0\0\0\0\0\0= ý××ó1Wή1…n\ZݪLV÷,ÔÉÈÚ«ÁùV0ÞÜ^Ã`q-O»52df¦³Jy|ße9\r€¶äO*±´ºúþd=à\09µÅæ.sŽ\Zÿ\0Ž&‘Vöý çó [u;æ˜ ÛºKæ_Q(Œ¿Òd^£‡ýx™³pµÈÒ:”ëL5“®¨\\+Î幞ˆYÒ{äC¦ÅøžÛ§¤¹@\0\0\0\0\0\0@´‹RûÚ:áXŠ¹RȤû{¯fé·ºz¶™\Z¾¦Ê{ôùžÝ7ñG™x\0\reÕÜKßÍ)êZš4.=ïÓþb‹µÆÆWfóyi=úùl¯‘ù¤þñÄ>ÉìL£œpÅÿ\0pt=ñÉùÆUrG×Úù\'®ÐýÌúzÅR/áÖJÀ\0\0\0\0\0\0\"CÆ?\ZQ“ñúàýSþã(ÉöÝmÍ]q£6HÜ·=Ïü[¡zyíæ%·Oì\'ð`1Æ@þBWaAþ1#h«CÚ(»±9µû?M®üQµHÛñ\"3-¶ë±ïòìøcßÑ·= DêZW·¯l×”îmîLIS¾wÉ.ûíоʈö2ü ÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ/§F ø·é±´™zmèI\"Æ\0\0Š”»Þ»ôôÿ\0cèd5C˜Î®Ò¦Æ5l«ØÖ‹ÇÜ-NÖçmí R‡‡~¿wíBØþí¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdéõ.›ú™Ÿ Ü\0\0\0è¢T‹õ^G÷ÿ\0]ÿ\0?/.„2\0\0\0\0\0\0\0`Tµ£V¥*ÕhÑ:ÖýmLöÜŒËÐ÷úß Ï\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,1,'','','',''),(17,6,0,'75859b10ab07f500','240eef737fb1a7e5d0bf2425f9f4030e','2017-09-07 09:00:32','2017-09-07 09:00:32','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\01\0\0\0\0\0\0\0\0 !1\n\"QqA#‘ð3¡ÿÚ\0\0\0?\0ÏãM5Aq\0ýöÕÚù4ÓM5·Ý¸t¶™³=ÎîXÈ\"éÆ™!D³p< úÁ_xæµ·rò›ûËYœ¼€˜«‰C¸†µôÀÚÕê×T,QŠrdÜå…¶aÉ–­¸+zÏ4Óêd2¯ïù:AY1.ÞZÐFî`H—ïk7>ÉÁCúb¹¢—Mªãê­r—I¯ÅU*UXzÝnµÍøh6FÄCÅ°jR6g\ZÁº Ú6@…IM4À\nPÔ)ê\'Óà õÁ’¸c-É^j묃Šeû[¦«JE‘t\0ŒæÒlÆA¼5•š*žº¿ga\'ý°2¦Ñ×ù\rjXŸ¨OR_‡ß·]·d©sÊ8ûä$+ù\' Û¬ó–L%hòÅAuõî(VH­€ÀþVW&8\'÷zr¯È \naÖÑpã€ã°p~¿·oñ \0\">À?ï:Õ;ñpMT.½cר%\'gÀØ>xk—ªx½íá¬3±Š Ôª*¼±j*sr¢Rs&vmÀŸa\rŽ½00¥·n];ö_ƒo©¸owÆ[sÅ•‹s\'_÷ÆXÚÕcÕ™ˆ7?ÄD‚ëÆ°} Ûùݦškªùª/™¹dá\\7v‰Û¸ná0UÐX¢šÈ¬‘¾ÕRU#57%9L%0 D@u•o\'l9á·ë5‡·±ëRsû1ÈY2Á3T<$oKD½µ~Ã.`WÞz‰$¦¡_š\'@õê‘„ìk\Zܼ3¸Ûx½’¸,Ð3®1¡fWdaqÇ*¥u¥Zc ¡˜ÎW,,‘‹~‰V\"N[.O=³”PtÑÀ*ÑÚºEd“]D7@¾Ë¶G¹ÝѱBfc\náûuʹìUVÆìEœ\"tÕùZögÑ)Ê\nj¤rÇш¡N`Ýð¹ìM·QÑòœ¹Ì6Œi–š)Kú°xÖøYò%tÈSLü¢³Wþ?Šw_\n„!Rù; )ÖÎÙ´hz¬IؼR@\n€=µËM5à[œÜÎÚ¿n?Ü£èx¯©1bŸ~cE e\nÞ>‚@.¦,S¯Õo ÀŠ=““tÙ«tÄêrÚþàú¦õ ÍŽ§žôÈéÍ ùrã»$eB¯tÞ6â«íÜ*Ïâ$¯qÖ:+©É$‰•Ž.©&í7\")Aº¸Çfš]ÆÉÓKiyF£W¨n6/»†uKÊD<Ý}ÂÓžBuÛahöÀÖõ+#Q„–tØÊ72•šÌD*£Vm59‘—E¢SñN½C V`)”ª”;\nõV§Vˆe]®@Å FÑ°ð±É¢Æ:9‹dȃfQM“!JB\0ÝöÜj›»ÛwÛ-ÙÛˆêÖoÅ·rþU¢$pî[$3–q¶mÔ1Spö½(,¦Ù ¡Ê’Θ$š£å˜ÚÄ#áÛ»Úú@ç=ÂtŸê–¶dì †QÛVO²‚ÑXŸ7Éüž>;\rD¾È•¬ªÓñ0uIº{,ÞIW†›­J5µ¢Ò Æpe9L_¾Ï!ÇãßÛ¸û~{~uÏüéªð?€ÿ\0\ZÄ«BkªWY—t¡u ]Á8äw¡»h†.6kkðËHEUj2¾™dN%Uš0\rUMT–jÓ+LH `wË*\n\"±\\¯Æ0„Žg \rѼ|dLTstÚGÆÇ0hšM0bÕ›3fÕ$›5l’H ši&B‡Û馿!tÇô|zö@¨UïõMe`mõø{4*Ë%âòÕV.m“æ*(˜àC1ÚZf\r3;ï¹ÖÆÒUƒÍsÙ†©Ó\"íôÃ-“.á9îJ>tL~ÓüHƒ,¾¤“$·~Ú¨våáf“âUFYVEqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfn\Zœç‹b»ÌR‹¢Æ9~’2wʦ×o\nstMTóx=d¦í>”šHºl…MT’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(20,3,7,'75859b10b87ebc39','18a7495723879503dac64b352e245508','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©b~¡=I~}þÝvÝr¥Ï(ãìC¯äœ/m³ÎXñ¶HÇrN*ߎÛÙ\\==ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(21,3,7,'75859b10b87ebc39','18a7495723879503dac64b352e245508','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(22,0,2,'75859b10b87f222d','4b7db531ad1920a7cb8fb76aed46ddd9','2017-09-07 09:12:55','2017-09-07 09:12:55','','','Contact Photos','f958f83dd2af4c30b30045dfc6ff0718-4.jpg?ts=1504775108','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfn\Zœç‹b»ÌR‹¢Æ9~’2wʦ×o\nstMTóx=d¦í>”šHºl…MT’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(23,0,2,'75859b10b87f222d','4b7db531ad1920a7cb8fb76aed46ddd9','2017-09-07 09:12:55','2017-09-07 09:12:55','','','Contact Photos','f958f83dd2af4c30b30045dfc6ff0718-4.jpg?ts=1504775108','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©b~¡=I~}þÝvÝr¥Ï(ãìC¯äœ/m³ÎXñ¶HÇrN*ߎÛÙ\\==ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(24,0,2,'75859b10b87f222d','4b7db531ad1920a7cb8fb76aed46ddd9','2017-09-07 09:12:55','2017-09-07 09:12:55','','','Contact Photos','f958f83dd2af4c30b30045dfc6ff0718-4.jpg?ts=1504775108','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(25,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23R‘¡Ñð#$&5B±Es’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\ZgºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“Ñ>$ÐÒÐÅ’d \"5Éb¡‘o±¤”9þÛÛ/צF3ÅqN…°;뤂óÂãðÖûœÇ9—;߬öKka0¿ÇüZ¡‘$ÆÔ²ø¿Ob3–gíWqgÔU›l“Wº\0ĺQß´¥ÉË<;J;‘žå‰½Å’ThÜ‹}¤²hÁžÅð‘õ>Ò#Ëëøó\0\0\0\0\0\0\0>=]¡Xwg-8i®æ9‘u ö×íN†æ¢¿†éé½Ý±^ñ-l$$Þç5RtŸ\"¸þ¢ûŠeÉ)—:GŒË+3ÏšŠÍºÈÒ,¹žò¬£-d©5ÙܾÊæn~5SeW$76sS$³4SME¦›¦Š‰ä\"\"O.îðÃá_©Ž)YÂŽ1Â\r´X!M\nm½ËyºKlãR‹#Îk«M&å^šo|ML}Ij’Ê×O½æD>œ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k§2½ÎdZŽ¢ü8Š(¦ƒ$Õ÷h:§×´y}`\0\0\0\0\0\0\08íÆ£‰37 } NsÅ¿±]æEÑc pJLò„©µÛÂœÝU<ÞY)»O¥&’$.›!E“Q%¦±N¶CÈSL³8˜d¬“#z˜ä9Ë㔚g,Ü®õòG w¿7GggU)F£]Es©I-‘¿DSµ:{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i\ZÒj©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!±kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%Ž#劰Q¦ï•N•½j´¨ûERI‡3-Ïéæ_=þ#Þâ“Ú=Öœq\'áuc¾¸¼L-e¬Æ™L#·¡F³t‹¹âøñGù”–¦ä““ÒBˆåeEk2=ö¹‹ZZêC‘»èíÁìèõ‡3«åŽû‘xdRhÅ#\'£5ldE(nF­ÔˆK/‡·\rñ9c»½Ó^QG¾Œí4Ý&NjP¬·³#=–ë:•)<2šȧè܆M\Zæ3Jª‘—\"z•N¯{Ónž¿ò]Hÿ\0¯!ï\0\0\0\0\0Xl3W9_ð­.5¸W¸‚é_7ªéºÞçvôä츖©ƒã¡¥%Êk()ãÖ3Q™%%MJ#ê\",¶ì|hŸéB{¯i‹Èú—½¾†c+›‹rñŒ%É¥ÝMj5¤Ëò…”ZªV#IsÓ†ÇÍ$fK%M\0jî¥t¹‚5s…¥ÚÔn6äìe8kU««Ý‘$ì܉5*6ÅåÑ듲pg¿BÒ²ä:tö[I줩–¡*šµ¤îVùpSâ‰â—£(®d¯BÅ—4B.Š ¨su=íò =…4¥á¢™õKAeZ$qu餣}‹óFÔ£ìÈ\0\0\0\0\0\nY¸ßNo²þ!®Nºèj{\"F-zy·c×?s\Z úôI3³#̼˧Q̶úî×ö\r¶”k\\]ßÜØ6ÚÛPê««×Ur$·ê]MINÄ^|»™$Œ^u¤,ݦ=0éëO,Vt,ÛpÆ€ã’]¢I(½¾‰F\ZšœÌ”µ™©ýí‹Q–¾bJID„lè\0Öö¢ôdÓª>™o!Sg¡[$i*òÏ<Á\\Qng|QÆu¥Ÿ,µî­,§tu‘-<ª#«\rbQ\Z‰&£©v§§×ðìcêÞ¯ÌÙ§º×uŽ-›ôüã\'ðåøB˜b);C«3‰‘íÊha•ËKr\"Û˜‹r-ˆìÙ\0\0\0\0\0K÷¬y8½qa¸¥^Øïõ1[ÐØ»$¥¯#5šK¡Á,JLÌ÷ÜÈŒŒa¢šL²´sÕ&œ[dÝž1\r­×¦öKž²¦¡þɧ¿î=…í€\0DxÕa£Ã“_UdÇŽ5%â~Ñú<¥‡&’ýܾ^¾G¶âšžŸ_ÀK±Ï‰žf\\Oæ¹2Ø«û¿‡ôÓ=»t¹å2²7 ˆëˆ36¨”FffJw©ÐÍ&M^DDVŠ€\0\0\0\0\0¬÷¶A£×¼ÆÆù¹-GÖ¹Mì:]—Ø\Z¼N/&É›Œ‹¡Þ3:Rv¦_ù¥?]…íø‹%0æ¢Ø^Ìw gýh†¶FË­™3橯cù`Èáj«G¨f=h°R± Ȫn¤¼¥™ÝâG)#I©&e©Ö6£96\0\0\0\0\0\0ä·þÌL4/”ôðš6v91¼!à©\rÚ)¥,ù~*—Rg#UR¨ij‘\"£¬rN¤™òÆÞ×PkJ;ºm²>šb©¬¿d&X¤öøç™FÞ­—b÷48øK«K¢T\\Äh^èQ̶#I\Z—hWe+_ͺ£áÞɧI;õ\nÙF©Ç.Vw)7|<èfó‰dÅOœÌšXi©çî‚>íÆU-æ¡R¥ç/·ø1æãÙË.Átý‡2fsÉnÄÍÄiE˜¹u?bD›Vðè¢2#óCa§¡u3åè“3Ãq2â—øšjªw¨üµZÆÑÂèØqN?;Ä^±âœXÒâíR#g3ªDjÙÖ£ì­õ&“”ÊÞ¥\nI*¢)›;-ü¢™óÙxŽj’7AëÄ%Gi¥èÅ¢VÃ8˜ÄTNùBVÚER›Ëeñ*ÄØÌûº²¦WÃZMQºi;iR*h¥ó-·ûÏÿ\0Ÿ>£$\0\0\0\0\0‡!}¿ÃùLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¢zL+Zª%lŸ”¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0eÇi%v›•]òJód{o½?Ò$ºµ{ò„;—SØ”I-þ[l;×Ç¢±ö¤e¢ÅŽ3l±b`cn·öFæv6{\nm 톓JZ¨´§»¦„­\\¼¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ûMçr\"Ýb™vKÈ´¡Ý4»§ûës¡Û×܈Ü\ZœÓS‘E¿NU\'®ÇÐÒ|¦{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰s$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ3Bë\râ½ÆóW\\e3®4hÑ‘´Ó/˜ZÀqÞ&‰¢öÓ%ê-¢¶£$ʄʺiS2ÏgÔ@ +ŒÄmÓíRÓ­V’—NQ\\û5˜[B챌ûªÆh®xÖ%kk9­£¥ªž1&rQ%Hjˆ³ÅpæºÕ—·ÀhÇÜïÛt×–f·ØØ,¬žÈêa©ó»±\"““ÚªAú@d„&¢b\n4šcI+\0-î¨ÝR£V^úëè_g¯ÚGÓ<\0\0\0\0WcÚîâ’÷3ÉM214–V9&æ¥n›®ö)ýмsc73MB/ǬDÓ<”%ePªJXˆûº‘„™õ‹³Á¥«G¸‡Zùâ!m_Uº†ŒX:Ã,mˆœ0®y#𖦳U2SDÏ\"²9 ­I^þì)Š#²\r2”®]€\0\0\0<;´~Ébj»„\rmk;^I5£Œ]2š8ó)Ò~ÉjéŽ2K¿!‘¼d dõ‘½šFI) Š¡—]º_ÝÀü8q†•¡ô :jÎ:±Å±EÚ±F¯³³¶n`·¥=Z¢qmL°æèä}œ÷$ £ñêJÜ÷J¾Zi«øwühã“tK¨->ë)…ªØîîtï¨ì%\ZÇy&îÁ\"$År0~ƱكÑò™)23ÆT¹‰[\Z–­•¢:íLáL“—*é{ˆf{Ð^|m|D5ÉÎWtä¬R©y)d¦©zŸXã’.óQD’å“&G\"$¯Þýª#–Y·T/¨R¼µ­B½¥rMŵź¾”ì­¶ß}÷>†{™žÝvò¤\0\0>_”ò;.&ƹ *HëÞ6‡L\'R “$ïjÅhuzuQývCQüüþEÒ¦î:y}ãÆšÆUš,kJ!ïY>}«íFк/no¼ˆ3ÊNZQw35›šrï€+Ëü´òd’JRDvéе¥mO¹£F\n\'Ók~|ýH¿ö3þ8\0\0\0\0\0c÷GT¿½/]ö/Ÿ§žþ_?ÝöF´9Á2ÄGIµ…áöMZØÃ1—\'(³…ºl3ÔA¥½KuÅ’¤ÒRMíñ4é‘âwå$Ô™!¦(³÷RH¥\'š½“~.3,™âÜ3u (¿s’@#.m1HäwK[Úáñ:…ïvtG\'9&2“D‚$¥šÕN0‰Yu\nœn4‘:J_íúþ# \0+øÔË®¡ü&8„H\ZëW·¼·Ò¾Si´¹·êdr¨ÒØe¾þdì}KÐöõ{ìLàë:1\rqjNúËó›Ä›á(»™óZ735ž±Tžþ_»s’°\0\0\0\0\0\0ñÆ”dü~ø?Tÿ\0¨Ê2}±ïnj눲Få¹îêÝ ÓÏo1-º Ÿ¸y€Çù ]…øÄ¢­h¢îÄæÖvý9nüQµHåûÈŒËmºì{ü‡û>÷òm H:–•íëÛ5å;›{“#RTïòK¾ûy~Šˆö2ûŒÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ±§F Ù[ôØÚL½6ô$‘ã\0\0EJ]ï]úzÁô2þ¼Æ£èsÕÃzTÃ8Æ­•{\ZÑxû…©ÚÜí½¡*Pðïñ}Ÿ còé·Ûð\0\0\0\0\0\0\ZšñÉIõ7£IçwDÿ\0& áq¹ùï-ÃŽì>©é¿¡™™ú\rÀ\0\0ŽŠ%H¿ºò?·ùïøùyt!\0\0\0\0\0\0¥­\Zµ)V«F‰Ö·ëjg¶äf^D{ý o´ü†x\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(26,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{KÙžçw,dRtç aKþB‰f¸ðƒë }ãšÔzÞaÊoì-fr€€˜«‰@@D5¨¦Ö®Vº¡bœS“&æì-³L°åmÁ[Öx¡¦ŸS!•¿äédÌ\"á¼µ ÜÀ1‘/ÞÒn}“‚—ìŽæŠU2«ªµÊe&½T©Õ`aëUºÔ4#á ``Ø!\rÅ©lÎ>5ƒt´l\n’(\"ši”\nPÔ)ê\'Óà õÁr˜c-É^jë´ƒŠe÷[¦«ZE‘t\0ŒæÒlÆA¼-•š\'!õ~ÎÂN.A·m2¦Ñ×pù\rjX£¨OR_‡ß·]·d©rÊ8ûä$+ù\' Û¬ó–. š…Ó¬[Úõ¤ìð8Óo\rbñO½¼5†b61T\Z•EW–%BÃNnTJS®dÎ͸ì\"a±Û¦¶í˧~Ëðmõ7\rîøËnx²±ndëýxËZ¬z³1çñ ºñ„ò±¡|¿#;´ÓMu_5Ió7,œ\"‹†îÑ;w8Lª º SY’7ÚªJ¤cDÏÉS LQe[ÉÛDømúÍaýìcúÜœþÌrL°LÕ ›ÂÑ/m_°Ë˜÷~t’FÓP¯Í?“ |ÁR0c[’†wco²WåšuÆ4,ÊìŒ.8ã%T ®´«La”3Êå…‚21oÑ*ÄIÂB«eÉ߶rŠš8Z;AH¬’q먆èÙvÈ÷;º61¨ÌÌa\\?n¹W\"Š¾JØݘ1¨³’N’¿+^Ìú%9A\"©±ætb(CGX7|.{mÔGt{„ꧼ—s\r£\Ze¦jRþ¬ž5°î|‰]\'rÓ1H­þÅ»¯…F ¨ü™„”ëglÚ45V%4¶/ P\0\0àØ8ÿ\0ÍrÓMxç73†vƒ„¯ÛƒÏ÷(ú+Ç0ªLX§ß˜ÇQCB·…†` ©‹ëõ[ÅÀÃ0\"däÝ6jÝ1:œ…„¶¿¸>©½cä3c©ç½2:sH>p\\udŒ¨V.›ÆÜU}»…QùüL•î>ÇCÅu9$‘í2±ÅÕ$ݦà”»ŒqÆi¥Ül4¶—”j5z†ãhòû¸gQt¼¤CÍ×Ü-9áT\']¶l\raïR²5IgMŒ£s)Y¬Á4A²ª5fѳS™™tZ%?ÔëÔ:f™J¨Ã°¯Ujuh†P5Úä Zm š,££˜·!lѪ)¢Šd)H@\0×nûn5MÝí‡;í–ìíÄuk8bÛŽ9*Ñ8w­’Ë8Û 6꩸{^•SlPåMgLISwg8!ÝÞ×Ò9î¤ÿ\0PÄ°…³\'e2ŽÚ²}”ŠÄù¾OäñôéØj%öD­`¥VŸ‰ƒªMÓØfòJ¼4ÝjQ¬}­N3ƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(27,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>IÛXãž£í¥¦`Ó3¾ûlHm%X8×=˜j2.ÝK2Ù1$îó¾ä£çÄÀ7íîˆ2Á)êI1Á²Cwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›%n|á¿´KQi\ZßWK¥”y÷#X0 6ØÛ6£&,SÓMPªÏô;Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(28,0,8,'75859b10b8813eeb','db4dd6c60ea3b83171c94ae1c492fa8c','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','22875ea1ab42e09a2f1d3869cd6edfe7-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfn\Zœç‹b»ÌR‹¢Æ9~’2wʦ×o\nstETóx”šHºl…MT’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(29,0,8,'75859b10b8813eeb','db4dd6c60ea3b83171c94ae1c492fa8c','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','22875ea1ab42e09a2f1d3869cd6edfe7-4.jpg?ts=1504775234','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©b~¡=I~}þÝvÝr¥Ï(ãìC¯äœ/m³ÎXñ¶HÇrN*ߎÛÙ\\==ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(30,0,8,'75859b10b8813eeb','db4dd6c60ea3b83171c94ae1c492fa8c','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','22875ea1ab42e09a2f1d3869cd6edfe7-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(31,4,9,'75859b10ba668548','adef541d0f334352940ad40251e15158','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfn\Zœç‹b»ÌR‹¢Æ9~’2wʦ×o\nstMTóx=d¦í>”šHºl…MT’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(32,4,9,'75859b10ba668548','adef541d0f334352940ad40251e15158','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©b~¡=I~}þÝvÝr¥Ï(ãìC¯äœ/m³ÎXñ¶HÇrN*ߎÛÙ\\==ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(33,4,9,'75859b10ba668548','adef541d0f334352940ad40251e15158','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(34,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',175,175,5486,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23R‘¡Ñð#$&5B±Es’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\ZgºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“Ñ>$ÐÒÐÅ’d \"5Éb¡‘o±¤”9þÛÛ/צF3ÅqN…°;뤂óÂãðÖûœÇ9—;߬öKka0¿ÇüZ¡‘$ÆÔ²ø¿Ob3–gíWqgÔU›l“Wº\0ĺQß´¥ÉË<;J;‘žå‰½Å’ThÜ‹}¤²hÁžÅð‘õ>Ò#Ëëøó\0\0\0\0\0\0\0>=]¡Xwg-8i®æ9‘u ö×íN†æ¢¿†éé½Ý±^ñ-l$$Þç5RtŸ\"¸þ¢ûŠeÉ)—:GŒË+3ÏšŠÍºÈÒ,¹žò¬£-d©5ÙܾÊæn~5SeW$76sS$³4SME¦›¦Š‰ä\"\"O.îðÃá_©Ž)YÂŽ1Â\r´X!M\nm½ËyºKlãR‹#Îk«M&å^šo|ML}Ij’Ê×O½æD>œ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k§2½ÎdZŽ¢ü8Š(¦ƒ$Õ÷h:§×´y}`\0\0\0\0\0\0\08íÆ£‰37 } NsÅ¿±]æEÑc pJLò„©µÛÂœÝU<ÞY)»O¥&’$.›!E“Q%¦±N¶CÈSL³8˜d¬“#z˜ä9Ë㔚g,Ü®õòG w¿7GggU)F£]Es©I-‘¿DSµ:{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i\ZÒj©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!±kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%Ž#劰Q¦ï•N•½j´¨ûERI‡3-Ïéæ_=þ#Þâ“Ú=Öœq\'áuc¾¸¼L-e¬Æ™L#·¡F³t‹¹âøñGù”–¦ä““ÒBˆåeEk2=ö¹‹ZZêC‘»èíÁìèõ‡3«åŽû‘xdRhÅ#\'£5ldE(nF­ÔˆK/‡·\rñ9c»½Ó^QG¾Œí4Ý&NjP¬·³#=–ë:•)<2šȧè܆M\Zæ3Jª‘—\"z•N¯{Ónž¿ò]Hÿ\0¯!ï\0\0\0\0\0Xl3W9_ð­.5¸W¸‚é_7ªéºÞçvôä츖©ƒã¡¥%Êk()ãÖ3Q™%%MJ#ê\",¶ì|hŸéB{¯i‹Èú—½¾†c+›‹rñŒ%É¥ÝMj5¤Ëò…”ZªV#IsÓ†ÇÍ$fK%M\0jî¥t¹‚5s…¥ÚÔn6äìe8kU««Ý‘$ì܉5*6ÅåÑ듲pg¿BÒ²ä:tö[I줩–¡*šµ¤îVùpSâ‰â—£(®d¯BÅ—4B.Š ¨su=íò =…4¥á¢™õKAeZ$qu餣}‹óFÔ£ìÈ\0\0\0\0\0\nY¸ßNo²þ!®Nºèj{\"F-zy·c×?s\Z úôI3³#̼˧Q̶úî×ö\r¶”k\\]ßÜØ6ÚÛPê««×Ur$·ê]MINÄ^|»™$Œ^u¤,ݦ=0éëO,Vt,ÛpÆ€ã’]¢I(½¾‰F\ZšœÌ”µ™©ýí‹Q–¾bJID„lè\0Öö¢ôdÓª>™o!Sg¡[$i*òÏ<Á\\Qng|QÆu¥Ÿ,µî­,§tu‘-<ª#«\rbQ\Z‰&£©v§§×ðìcêÞ¯ÌÙ§º×uŽ-›ôüã\'ðåøB˜b);C«3‰‘íÊha•ËKr\"Û˜‹r-ˆìÙ\0\0\0\0\0K÷¬y8½qa¸¥^Øïõ1[ÐØ»$¥¯#5šK¡Á,JLÌ÷ÜÈŒŒa¢šL²´sÕ&œ[dÝž1\r­×¦öKž²¦¡þɧ¿î=…í€\0DxÕa£Ã“_UdÇŽ5%â~Ñú<¥‡&’ýܾ^¾G¶âšžŸ_ÀK±Ï‰žf\\Oæ¹2Ø«û¿‡ôÓ=»t¹å2²7 ˆëˆ36¨”FffJw©ÐÍ&M^DDVŠ€\0\0\0\0\0¬÷¶A£×¼ÆÆù¹-GÖ¹Mì:]—Ø\Z¼N/&É›Œ‹¡Þ3:Rv¦_ù¥?]…íø‹%0æ¢Ø^Ìw gýh†¶FË­™3橯cù`Èáj«G¨f=h°R± Ȫn¤¼¥™ÝâG)#I©&e©Ö6£96\0\0\0\0\0\0ä·þÌL4/”ôðš6v91¼!à©\rÚ)¥,ù~*—Rg#UR¨ij‘\"£¬rN¤™òÆÞ×PkJ;ºm²>šb©¬¿d&X¤öøç™FÞ­—b÷48øK«K¢T\\Äh^èQ̶#I\Z—hWe+_ͺ£áÞɧI;õ\nÙF©Ç.Vw)7|<èfó‰dÅOœÌšXi©çî‚>íÆU-æ¡R¥ç/·ø1æãÙË.Átý‡2fsÉnÄÍÄiE˜¹u?bD›Vðè¢2#óCa§¡u3åè“3Ãq2â—øšjªw¨üµZÆÑÂèØqN?;Ä^±âœXÒâíR#g3ªDjÙÖ£ì­õ&“”ÊÞ¥\nI*¢)›;-ü¢™óÙxŽj’7AëÄ%Gi¥èÅ¢VÃ8˜ÄTNùBVÚER›Ëeñ*ÄØÌûº²¦WÃZMQºi;iR*h¥ó-·ûÏÿ\0Ÿ>£$\0\0\0\0\0‡!}¿ÃùLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¢zL+Zª%lŸ”¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0eÇi%v›•]òJód{o½?Ò$ºµ{ò„;—SØ”I-þ[l;×Ç¢±ö¤e¢ÅŽ3l±b`cn·öFæv6{\nm 톓JZ¨´§»¦„­\\¼¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ûMçr\"Ýb™vKÈ´¡Ý4»§ûës¡Û×܈Ü\ZœÓS‘E¿NU\'®ÇÐÒ|¦{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰s$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ3Bë\râ½ÆóW\\e3®4hÑ‘´Ó/˜ZÀqÞ&‰¢öÓ%ê-¢¶£$ʄʺiS2ÏgÔ@ +ŒÄmÓíRÓ­V’—NQ\\û5˜[B챌ûªÆh®xÖ%kk9­£¥ªž1&rQ%Hjˆ³ÅpæºÕ—·ÀhÇÜïÛt×–f·ØØ,¬žÈêa©ó»±\"““ÚªAú@d„&¢b\n4šcI+\0-î¨ÝR£V^úëè_g¯ÚGÓ<\0\0\0\0WcÚîâ’÷3ÉM214–V9&æ¥n›®ö)ýмsc73MB/ǬDÓ<”%ePªJXˆûº‘„™õ‹³Á¥«G¸‡Zùâ!m_Uº†ŒX:Ã,mˆœ0®y#𖦳U2SDÏ\"²9 ­I^þì)Š#²\r2”®]€\0\0\0<;´~Ébj»„\rmk;^I5£Œ]2š8ó)Ò~ÉjéŽ2K¿!‘¼d dõ‘½šFI) Š¡—]º_ÝÀü8q†•¡ô :jÎ:±Å±EÚ±F¯³³¶n`·¥=Z¢qmL°æèä}œ÷$ £ñêJÜ÷J¾Zi«øwühã“tK¨->ë)…ªØîîtï¨ì%\ZÇy&îÁ\"$År0~ƱكÑò™)23ÆT¹‰[\Z–­•¢:íLáL“—*é{ˆf{Ð^|m|D5ÉÎWtä¬R©y)d¦©zŸXã’.óQD’å“&G\"$¯Þýª#–Y·T/¨R¼µ­B½¥rMŵź¾”ì­¶ß}÷>†{™žÝvò¤\0\0>_”ò;.&ƹ *HëÞ6‡L\'R “$ïjÅhuzuQývCQüüþEÒ¦î:y}ãÆšÆUš,kJ!ïY>}«íFк/no¼ˆ3ÊNZQw35›šrï€+Ëü´òd’JRDvéе¥mO¹£F\n\'Ók~|ýH¿ö3þ8\0\0\0\0\0c÷GT¿½/]ö/Ÿ§žþ_?ÝöF´9Á2ÄGIµ…áöMZØÃ1—\'(³…ºl3ÔA¥½KuÅ’¤ÒRMíñ4é‘âwå$Ô™!¦(³÷RH¥\'š½“~.3,™âÜ3u (¿s’@#.m1HäwK[Úáñ:…ïvtG\'9&2“D‚$¥šÕN0‰Yu\nœn4‘:J_íúþ# \0+øÔË®¡ü&8„H\ZëW·¼·Ò¾Si´¹·êdr¨ÒØe¾þdì}KÐöõ{ìLàë:1\rqjNúËó›Ä›á(»™óZ735ž±Tžþ_»s’°\0\0\0\0\0\0ñÆ”dü~ø?Tÿ\0¨Ê2}±ïnj눲Få¹îêÝ ÓÏo1-º Ÿ¸y€Çù ]…øÄ¢­h¢îÄæÖvý9nüQµHåûÈŒËmºì{ü‡û>÷òm H:–•íëÛ5å;›{“#RTïòK¾ûy~Šˆö2ûŒÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ±§F Ù[ôØÚL½6ô$‘ã\0\0EJ]ï]úzÁô2þ¼Æ£èsÕÃzTÃ8Æ­•{\ZÑxû…©ÚÜí½¡*Pðïñ}Ÿ còé·Ûð\0\0\0\0\0\0\ZšñÉIõ7£IçwDÿ\0& áq¹ùï-ÃŽì>©é¿¡™™ú\rÀ\0\0ŽŠ%H¿ºò?·ùïøùyt!\0\0\0\0\0\0¥­\Zµ)V«F‰Ö·ëjg¶äf^D{ý o´ü†x\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(35,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{KÙžçw,dRtç aKþB‰f¸ðƒë }ãšÔzÞaÊoì-fr€€˜«‰@@D5¨¦Ö®Vº¡bœS“&æì-³L°åmÁ[Öx¡¦ŸS!•¿äédÌ\"á¼µ ÜÀ1‘/ÞÒn}“‚—ìŽæŠU2«ªµÊe&½T©Õ`aëUºÔ4#á ``Ø!\rÅ©lÎ>5ƒt´l\n’(\"ši”\nPÔ)ê\'Óà õÁr˜c-É^jë´ƒŠe÷[¦«ZE‘t\0ŒæÒlÆA¼-•š\'!õ~ÎÂN.A·m2¦Ñ×pù\rjX£¨OR_‡ß·]·d©rÊ8ûä$+ù\' Û¬ó–. š…Ó¬[Úõ¤ìð8Óo\rbñO½¼5†b61T\Z•EW–%BÃNnTJS®dÎ͸ì\"a±Û¦¶í˧~Ëðmõ7\rîøËnx²±ndëýxËZ¬z³1çñ ºñ„ò±¡|¿#;´ÓMu_5Ió7,œ\"‹†îÑ;w8Lª º SY’7ÚªJ¤cDÏÉS LQe[ÉÛDømúÍaýìcúÜœþÌrL°LÕ ›ÂÑ/m_°Ë˜÷~t’FÓP¯Í?“ |ÁR0c[’†wco²WåšuÆ4,ÊìŒ.8ã%T ®´«La”3Êå…‚21oÑ*ÄIÂB«eÉ߶rŠš8Z;AH¬’q먆èÙvÈ÷;º61¨ÌÌa\\?n¹W\"Š¾JØݘ1¨³’N’¿+^Ìú%9A\"©±ætb(CGX7|.{mÔGt{„ꧼ—s\r£\Ze¦jRþ¬ž5°î|‰]\'rÓ1H­þÅ»¯…F ¨ü™„”ëglÚ45V%4¶/ P\0\0àØ8ÿ\0ÍrÓMxç73†vƒ„¯ÛƒÏ÷(ú+Ç0ªLX§ß˜ÇQCB·…†` ©‹ëõ[ÅÀÃ0\"däÝ6jÝ1:œ…„¶¿¸>©½cä3c©ç½2:sH>p\\udŒ¨V.›ÆÜU}»…QùüL•î>ÇCÅu9$‘í2±ÅÕ$ݦà”»ŒqÆi¥Ül4¶—”j5z†ãhòû¸gQt¼¤CÍ×Ü-9áT\']¶l\raïR²5IgMŒ£s)Y¬Á4A²ª5fѳS™™tZ%?ÔëÔ:f™J¨Ã°¯Ujuh†P5Úä Zm š,££˜·!lѪ)¢Šd)H@\0×nûn5MÝí‡;í–ìíÄuk8bÛŽ9*Ñ8w­’Ë8Û 6꩸{^•SlPåMgLISwg8!ÝÞ×Ò9î¤ÿ\0PÄ°…³\'e2ŽÚ²}”ŠÄù¾OäñôéØj%öD­`¥VŸ‰ƒªMÓØfòJ¼4ÝjQ¬}­N3ƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(36,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>IÛXãž£í¥¦`Ó3¾ûlHm%X8×=˜j2.ÝK2Ù1$îó¾ä£çÄÀ7íîˆ2Á)êI1Á²Cwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›%n|á¿´KQi\ZßWK¥”y÷#X0 6ØÛ6£&,SÓMPªÏô;Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(37,0,10,'75859b10ba6852dd','de20aa50472d9b54f292966d1cf693c4','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfn\Zœç‹b»ÌR‹¢Æ9~’2wʦ×o\nstETóx”šHºl…MT’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(38,0,10,'75859b10ba6852dd','de20aa50472d9b54f292966d1cf693c4','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©b~¡=I~}þÝvÝr¥Ï(ãìC¯äœ/m³ÎXñ¶HÇrN*ߎÛÙ\\==ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(39,0,10,'75859b10ba6852dd','de20aa50472d9b54f292966d1cf693c4','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(40,5,11,'75859b10bb574e2e','01ebf2eb957e5aef5463ba5ae6510ef5','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfn\Zœç‹b»ÌR‹¢Æ9~’2wʦ×o\nstMTóx=d¦í>”šHºl…MT’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(41,5,11,'75859b10bb574e2e','01ebf2eb957e5aef5463ba5ae6510ef5','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©b~¡=I~}þÝvÝr¥Ï(ãìC¯äœ/m³ÎXñ¶HÇrN*ߎÛÙ\\==ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(42,5,11,'75859b10bb574e2e','01ebf2eb957e5aef5463ba5ae6510ef5','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(43,2,12,'75859b10bb588dfc','b32d851ca091305b4cf5d115070cedbd','2017-09-07 09:11:20','2017-09-07 09:11:20','','','Contact Photos','777ac66400f3fef5ff42189840387ede-4.jpg?ts=1504775093','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfnúœç‹b»ÌR‹¢Æ8à’2wʦ×o\nstETóx=d¦í>”šHºl…MD’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(44,2,12,'75859b10bb588dfc','b32d851ca091305b4cf5d115070cedbd','2017-09-07 09:11:20','2017-09-07 09:11:20','','','Contact Photos','777ac66400f3fef5ff42189840387ede-4.jpg?ts=1504775093','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©bŽ¡=I~}þÝvÝr¥Ë(ãìC¯äœ/n³ÎXñ¶HÇrN*ߎÛY½=ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(45,2,12,'75859b10bb588dfc','b32d851ca091305b4cf5d115070cedbd','2017-09-07 09:11:20','2017-09-07 09:11:20','','','Contact Photos','777ac66400f3fef5ff42189840387ede-4.jpg?ts=1504775093','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(46,0,12,'75859b10bb58e506','777ac66400f3fef5ff42189840387ede','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfn\Zœç‹b»ÌR‹¢Æ9~’2wʦ×o\nstETóx”šHºl…MT’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(47,0,12,'75859b10bb58e506','777ac66400f3fef5ff42189840387ede','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©b~¡=I~}þÝvÝr¥Ï(ãìC¯äœ/m³ÎXñ¶HÇrN*ߎÛÙ\\==ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(48,0,12,'75859b10bb58e506','777ac66400f3fef5ff42189840387ede','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(49,6,13,'75859b10bc4f03c7','f958f83dd2af4c30b30045dfc6ff0718','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfn\Zœç‹b»ÌR‹¢Æ9~’2wʦ×o\nstMTóx=d¦í>”šHºl…MT’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(50,6,13,'75859b10bc4f03c7','f958f83dd2af4c30b30045dfc6ff0718','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©b~¡=I~}þÝvÝr¥Ï(ãìC¯äœ/m³ÎXñ¶HÇrN*ߎÛÙ\\==ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(51,6,13,'75859b10bc4f03c7','f958f83dd2af4c30b30045dfc6ff0718','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(52,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23R‘¡Ñð#$&5B±Es’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\ZgºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“Ñ>$ÐÒÐÅ’d \"5Éb¡‘o±¤”9þÛÛ/צF3ÅqN…°;뤂óÂãðÖûœÇ9—;߬öKka0¿ÇüZ¡‘$ÆÔ²ø¿Ob3–gíWqgÔU›l“Wº\0ĺQß´¥ÉË<;J;‘žå‰½Å’ThÜ‹}¤²hÁžÅð‘õ>Ò#Ëëøó\0\0\0\0\0\0\0>=]¡Xwg-8i®æ9‘u ö×íN†æ¢¿†éé½Ý±^ñ-l$$Þç5RtŸ\"¸þ¢ûŠeÉ)—:GŒË+3ÏšŠÍºÈÒ,¹žò¬£-d©5ÙܾÊæn~5SeW$76sS$³4SME¦›¦Š‰ä\"\"O.îðÃá_©Ž)YÂŽ1Â\r´X!M\nm½ËyºKlãR‹#Îk«M&å^šo|ML}Ij’Ê×O½æD>œ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k§2½ÎdZŽ¢ü8Š(¦ƒ$Õ÷h:§×´y}`\0\0\0\0\0\0\08íÆ£‰37 } NsÅ¿±]æEÑc pJLò„©µÛÂœÝU<ÞY)»O¥&’$.›!E“Q%¦±N¶CÈSL³8˜d¬“#z˜ä9Ë㔚g,Ü®õòG w¿7GggU)F£]Es©I-‘¿DSµ:{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i\ZÒj©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!±kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%Ž#劰Q¦ï•N•½j´¨ûERI‡3-Ïéæ_=þ#Þâ“Ú=Öœq\'áuc¾¸¼L-e¬Æ™L#·¡F³t‹¹âøñGù”–¦ä““ÒBˆåeEk2=ö¹‹ZZêC‘»èíÁìèõ‡3«åŽû‘xdRhÅ#\'£5ldE(nF­ÔˆK/‡·\rñ9c»½Ó^QG¾Œí4Ý&NjP¬·³#=–ë:•)<2šȧè܆M\Zæ3Jª‘—\"z•N¯{Ónž¿ò]Hÿ\0¯!ï\0\0\0\0\0Xl3W9_ð­.5¸W¸‚é_7ªéºÞçvôä츖©ƒã¡¥%Êk()ãÖ3Q™%%MJ#ê\",¶ì|hŸéB{¯i‹Èú—½¾†c+›‹rñŒ%É¥ÝMj5¤Ëò…”ZªV#IsÓ†ÇÍ$fK%M\0jî¥t¹‚5s…¥ÚÔn6äìe8kU««Ý‘$ì܉5*6ÅåÑ듲pg¿BÒ²ä:tö[I줩–¡*šµ¤îVùpSâ‰â—£(®d¯BÅ—4B.Š ¨su=íò =…4¥á¢™õKAeZ$qu餣}‹óFÔ£ìÈ\0\0\0\0\0\nY¸ßNo²þ!®Nºèj{\"F-zy·c×?s\Z úôI3³#̼˧Q̶úî×ö\r¶”k\\]ßÜØ6ÚÛPê««×Ur$·ê]MINÄ^|»™$Œ^u¤,ݦ=0éëO,Vt,ÛpÆ€ã’]¢I(½¾‰F\ZšœÌ”µ™©ýí‹Q–¾bJID„lè\0Öö¢ôdÓª>™o!Sg¡[$i*òÏ<Á\\Qng|QÆu¥Ÿ,µî­,§tu‘-<ª#«\rbQ\Z‰&£©v§§×ðìcêÞ¯ÌÙ§º×uŽ-›ôüã\'ðåøB˜b);C«3‰‘íÊha•ËKr\"Û˜‹r-ˆìÙ\0\0\0\0\0K÷¬y8½qa¸¥^Øïõ1[ÐØ»$¥¯#5šK¡Á,JLÌ÷ÜÈŒŒa¢šL²´sÕ&œ[dÝž1\r­×¦öKž²¦¡þɧ¿î=…í€\0DxÕa£Ã“_UdÇŽ5%â~Ñú<¥‡&’ýܾ^¾G¶âšžŸ_ÀK±Ï‰žf\\Oæ¹2Ø«û¿‡ôÓ=»t¹å2²7 ˆëˆ36¨”FffJw©ÐÍ&M^DDVŠ€\0\0\0\0\0¬÷¶A£×¼ÆÆù¹-GÖ¹Mì:]—Ø\Z¼N/&É›Œ‹¡Þ3:Rv¦_ù¥?]…íø‹%0æ¢Ø^Ìw gýh†¶FË­™3橯cù`Èáj«G¨f=h°R± Ȫn¤¼¥™ÝâG)#I©&e©Ö6£96\0\0\0\0\0\0ä·þÌL4/”ôðš6v91¼!à©\rÚ)¥,ù~*—Rg#UR¨ij‘\"£¬rN¤™òÆÞ×PkJ;ºm²>šb©¬¿d&X¤öøç™FÞ­—b÷48øK«K¢T\\Äh^èQ̶#I\Z—hWe+_ͺ£áÞɧI;õ\nÙF©Ç.Vw)7|<èfó‰dÅOœÌšXi©çî‚>íÆU-æ¡R¥ç/·ø1æãÙË.Átý‡2fsÉnÄÍÄiE˜¹u?bD›Vðè¢2#óCa§¡u3åè“3Ãq2â—øšjªw¨üµZÆÑÂèØqN?;Ä^±âœXÒâíR#g3ªDjÙÖ£ì­õ&“”ÊÞ¥\nI*¢)›;-ü¢™óÙxŽj’7AëÄ%Gi¥èÅ¢VÃ8˜ÄTNùBVÚER›Ëeñ*ÄØÌûº²¦WÃZMQºi;iR*h¥ó-·ûÏÿ\0Ÿ>£$\0\0\0\0\0‡!}¿ÃùLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¢zL+Zª%lŸ”¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0eÇi%v›•]òJód{o½?Ò$ºµ{ò„;—SØ”I-þ[l;×Ç¢±ö¤e¢ÅŽ3l±b`cn·öFæv6{\nm 톓JZ¨´§»¦„­\\¼¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ûMçr\"Ýb™vKÈ´¡Ý4»§ûës¡Û×܈Ü\ZœÓS‘E¿NU\'®ÇÐÒ|¦{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰s$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ3Bë\râ½ÆóW\\e3®4hÑ‘´Ó/˜ZÀqÞ&‰¢öÓ%ê-¢¶£$ʄʺiS2ÏgÔ@ +ŒÄmÓíRÓ­V’—NQ\\û5˜[B챌ûªÆh®xÖ%kk9­£¥ªž1&rQ%Hjˆ³ÅpæºÕ—·ÀhÇÜïÛt×–f·ØØ,¬žÈêa©ó»±\"““ÚªAú@d„&¢b\n4šcI+\0-î¨ÝR£V^úëè_g¯ÚGÓ<\0\0\0\0WcÚîâ’÷3ÉM214–V9&æ¥n›®ö)ýмsc73MB/ǬDÓ<”%ePªJXˆûº‘„™õ‹³Á¥«G¸‡Zùâ!m_Uº†ŒX:Ã,mˆœ0®y#𖦳U2SDÏ\"²9 ­I^þì)Š#²\r2”®]€\0\0\0<;´~Ébj»„\rmk;^I5£Œ]2š8ó)Ò~ÉjéŽ2K¿!‘¼d dõ‘½šFI) Š¡—]º_ÝÀü8q†•¡ô :jÎ:±Å±EÚ±F¯³³¶n`·¥=Z¢qmL°æèä}œ÷$ £ñêJÜ÷J¾Zi«øwühã“tK¨->ë)…ªØîîtï¨ì%\ZÇy&îÁ\"$År0~ƱكÑò™)23ÆT¹‰[\Z–­•¢:íLáL“—*é{ˆf{Ð^|m|D5ÉÎWtä¬R©y)d¦©zŸXã’.óQD’å“&G\"$¯Þýª#–Y·T/¨R¼µ­B½¥rMŵź¾”ì­¶ß}÷>†{™žÝvò¤\0\0>_”ò;.&ƹ *HëÞ6‡L\'R “$ïjÅhuzuQývCQüüþEÒ¦î:y}ãÆšÆUš,kJ!ïY>}«íFк/no¼ˆ3ÊNZQw35›šrï€+Ëü´òd’JRDvéе¥mO¹£F\n\'Ók~|ýH¿ö3þ8\0\0\0\0\0c÷GT¿½/]ö/Ÿ§žþ_?ÝöF´9Á2ÄGIµ…áöMZØÃ1—\'(³…ºl3ÔA¥½KuÅ’¤ÒRMíñ4é‘âwå$Ô™!¦(³÷RH¥\'š½“~.3,™âÜ3u (¿s’@#.m1HäwK[Úáñ:…ïvtG\'9&2“D‚$¥šÕN0‰Yu\nœn4‘:J_íúþ# \0+øÔË®¡ü&8„H\ZëW·¼·Ò¾Si´¹·êdr¨ÒØe¾þdì}KÐöõ{ìLàë:1\rqjNúËó›Ä›á(»™óZ735ž±Tžþ_»s’°\0\0\0\0\0\0ñÆ”dü~ø?Tÿ\0¨Ê2}±ïnj눲Få¹îêÝ ÓÏo1-º Ÿ¸y€Çù ]…øÄ¢­h¢îÄæÖvý9nüQµHåûÈŒËmºì{ü‡û>÷òm H:–•íëÛ5å;›{“#RTïòK¾ûy~Šˆö2ûŒÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ±§F Ù[ôØÚL½6ô$‘ã\0\0EJ]ï]úzÁô2þ¼Æ£èsÕÃzTÃ8Æ­•{\ZÑxû…©ÚÜí½¡*Pðïñ}Ÿ còé·Ûð\0\0\0\0\0\0\ZšñÉIõ7£IçwDÿ\0& áq¹ùï-ÃŽì>©é¿¡™™ú\rÀ\0\0ŽŠ%H¿ºò?·ùïøùyt!\0\0\0\0\0\0¥­\Zµ)V«F‰Ö·ëjg¶äf^D{ý o´ü†x\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(53,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{KÙžçw,dRtç aKþB‰f¸ðƒë }ãšÔzÞaÊoì-fr€€˜«‰@@D5¨¦Ö®Vº¡bœS“&æì-³L°åmÁ[Öx¡¦ŸS!•¿äédÌ\"á¼µ ÜÀ1‘/ÞÒn}“‚—ìŽæŠU2«ªµÊe&½T©Õ`aëUºÔ4#á ``Ø!\rÅ©lÎ>5ƒt´l\n’(\"ši”\nPÔ)ê\'Óà õÁr˜c-É^jë´ƒŠe÷[¦«ZE‘t\0ŒæÒlÆA¼-•š\'!õ~ÎÂN.A·m2¦Ñ×pù\rjX£¨OR_‡ß·]·d©rÊ8ûä$+ù\' Û¬ó–. š…Ó¬[Úõ¤ìð8Óo\rbñO½¼5†b61T\Z•EW–%BÃNnTJS®dÎ͸ì\"a±Û¦¶í˧~Ëðmõ7\rîøËnx²±ndëýxËZ¬z³1çñ ºñ„ò±¡|¿#;´ÓMu_5Ió7,œ\"‹†îÑ;w8Lª º SY’7ÚªJ¤cDÏÉS LQe[ÉÛDømúÍaýìcúÜœþÌrL°LÕ ›ÂÑ/m_°Ë˜÷~t’FÓP¯Í?“ |ÁR0c[’†wco²WåšuÆ4,ÊìŒ.8ã%T ®´«La”3Êå…‚21oÑ*ÄIÂB«eÉ߶rŠš8Z;AH¬’q먆èÙvÈ÷;º61¨ÌÌa\\?n¹W\"Š¾JØݘ1¨³’N’¿+^Ìú%9A\"©±ætb(CGX7|.{mÔGt{„ꧼ—s\r£\Ze¦jRþ¬ž5°î|‰]\'rÓ1H­þÅ»¯…F ¨ü™„”ëglÚ45V%4¶/ P\0\0àØ8ÿ\0ÍrÓMxç73†vƒ„¯ÛƒÏ÷(ú+Ç0ªLX§ß˜ÇQCB·…†` ©‹ëõ[ÅÀÃ0\"däÝ6jÝ1:œ…„¶¿¸>©½cä3c©ç½2:sH>p\\udŒ¨V.›ÆÜU}»…QùüL•î>ÇCÅu9$‘í2±ÅÕ$ݦà”»ŒqÆi¥Ül4¶—”j5z†ãhòû¸gQt¼¤CÍ×Ü-9áT\']¶l\raïR²5IgMŒ£s)Y¬Á4A²ª5fѳS™™tZ%?ÔëÔ:f™J¨Ã°¯Ujuh†P5Úä Zm š,££˜·!lѪ)¢Šd)H@\0×nûn5MÝí‡;í–ìíÄuk8bÛŽ9*Ñ8w­’Ë8Û 6꩸{^•SlPåMgLISwg8!ÝÞ×Ò9î¤ÿ\0PÄ°…³\'e2ŽÚ²}”ŠÄù¾OäñôéØj%öD­`¥VŸ‰ƒªMÓØfòJ¼4ÝjQ¬}­N3ƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(54,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>IÛXãž£í¥¦`Ó3¾ûlHm%X8×=˜j2.ÝK2Ù1$îó¾ä£çÄÀ7íîˆ2Á)êI1Á²Cwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›%n|á¿´KQi\ZßWK¥”y÷#X0 6ØÛ6£&,SÓMPªÏô;Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(55,0,14,'75859b10bc51688d','1eaeb44ce16c9a8548707cafe998e6dc','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','d74f209bfcd190b3864fa678e5068a16-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfn\Zœç‹b»ÌR‹¢Æ9~’2wʦ×o\nstETóx”šHºl…MT’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(56,0,14,'75859b10bc51688d','1eaeb44ce16c9a8548707cafe998e6dc','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','d74f209bfcd190b3864fa678e5068a16-4.jpg?ts=1504775545','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©b~¡=I~}þÝvÝr¥Ï(ãìC¯äœ/m³ÎXñ¶HÇrN*ߎÛÙ\\==ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(57,0,14,'75859b10bc51688d','1eaeb44ce16c9a8548707cafe998e6dc','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','d74f209bfcd190b3864fa678e5068a16-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(58,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23R‘¡Ñð#$&5B±Es’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\ZgºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“Ñ>$ÐÒÐÅ’d \"5Éb¡‘o±¤”9þÛÛ/צF3ÅqN…°;뤂óÂãðÖûœÇ9—;߬öKka0¿ÇüZ¡‘$ÆÔ²ø¿Ob3–gíWqgÔU›l“Wº\0ĺQß´¥ÉË<;J;‘žå‰½Å’ThÜ‹}¤²hÁžÅð‘õ>Ò#Ëëøó\0\0\0\0\0\0\0>=]¡Xwg-8i®æ9‘u ö×íN†æ¢¿†éé½Ý±^ñ-l$$Þç5RtŸ\"¸þ¢ûŠeÉ)—:GŒË+3ÏšŠÍºÈÒ,¹žò¬£-d©5ÙܾÊæn~5SeW$76sS$³4SME¦›¦Š‰ä\"\"O.îðÃá_©Ž)YÂŽ1Â\r´X!M\nm½ËyºKlãR‹#Îk«M&å^šo|ML}Ij’Ê×O½æD>œ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k§2½ÎdZŽ¢ü8Š(¦ƒ$Õ÷h:§×´y}`\0\0\0\0\0\0\08íÆ£‰37 } NsÅ¿±]æEÑc pJLò„©µÛÂœÝU<ÞY)»O¥&’$.›!E“Q%¦±N¶CÈSL³8˜d¬“#z˜ä9Ë㔚g,Ü®õòG w¿7GggU)F£]Es©I-‘¿DSµ:{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i\ZÒj©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!±kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%Ž#劰Q¦ï•N•½j´¨ûERI‡3-Ïéæ_=þ#Þâ“Ú=Öœq\'áuc¾¸¼L-e¬Æ™L#·¡F³t‹¹âøñGù”–¦ä““ÒBˆåeEk2=ö¹‹ZZêC‘»èíÁìèõ‡3«åŽû‘xdRhÅ#\'£5ldE(nF­ÔˆK/‡·\rñ9c»½Ó^QG¾Œí4Ý&NjP¬·³#=–ë:•)<2šȧè܆M\Zæ3Jª‘—\"z•N¯{Ónž¿ò]Hÿ\0¯!ï\0\0\0\0\0Xl3W9_ð­.5¸W¸‚é_7ªéºÞçvôä츖©ƒã¡¥%Êk()ãÖ3Q™%%MJ#ê\",¶ì|hŸéB{¯i‹Èú—½¾†c+›‹rñŒ%É¥ÝMj5¤Ëò…”ZªV#IsÓ†ÇÍ$fK%M\0jî¥t¹‚5s…¥ÚÔn6äìe8kU««Ý‘$ì܉5*6ÅåÑ듲pg¿BÒ²ä:tö[I줩–¡*šµ¤îVùpSâ‰â—£(®d¯BÅ—4B.Š ¨su=íò =…4¥á¢™õKAeZ$qu餣}‹óFÔ£ìÈ\0\0\0\0\0\nY¸ßNo²þ!®Nºèj{\"F-zy·c×?s\Z úôI3³#̼˧Q̶úî×ö\r¶”k\\]ßÜØ6ÚÛPê««×Ur$·ê]MINÄ^|»™$Œ^u¤,ݦ=0éëO,Vt,ÛpÆ€ã’]¢I(½¾‰F\ZšœÌ”µ™©ýí‹Q–¾bJID„lè\0Öö¢ôdÓª>™o!Sg¡[$i*òÏ<Á\\Qng|QÆu¥Ÿ,µî­,§tu‘-<ª#«\rbQ\Z‰&£©v§§×ðìcêÞ¯ÌÙ§º×uŽ-›ôüã\'ðåøB˜b);C«3‰‘íÊha•ËKr\"Û˜‹r-ˆìÙ\0\0\0\0\0K÷¬y8½qa¸¥^Øïõ1[ÐØ»$¥¯#5šK¡Á,JLÌ÷ÜÈŒŒa¢šL²´sÕ&œ[dÝž1\r­×¦öKž²¦¡þɧ¿î=…í€\0DxÕa£Ã“_UdÇŽ5%â~Ñú<¥‡&’ýܾ^¾G¶âšžŸ_ÀK±Ï‰žf\\Oæ¹2Ø«û¿‡ôÓ=»t¹å2²7 ˆëˆ36¨”FffJw©ÐÍ&M^DDVŠ€\0\0\0\0\0¬÷¶A£×¼ÆÆù¹-GÖ¹Mì:]—Ø\Z¼N/&É›Œ‹¡Þ3:Rv¦_ù¥?]…íø‹%0æ¢Ø^Ìw gýh†¶FË­™3橯cù`Èáj«G¨f=h°R± Ȫn¤¼¥™ÝâG)#I©&e©Ö6£96\0\0\0\0\0\0ä·þÌL4/”ôðš6v91¼!à©\rÚ)¥,ù~*—Rg#UR¨ij‘\"£¬rN¤™òÆÞ×PkJ;ºm²>šb©¬¿d&X¤öøç™FÞ­—b÷48øK«K¢T\\Äh^èQ̶#I\Z—hWe+_ͺ£áÞɧI;õ\nÙF©Ç.Vw)7|<èfó‰dÅOœÌšXi©çî‚>íÆU-æ¡R¥ç/·ø1æãÙË.Átý‡2fsÉnÄÍÄiE˜¹u?bD›Vðè¢2#óCa§¡u3åè“3Ãq2â—øšjªw¨üµZÆÑÂèØqN?;Ä^±âœXÒâíR#g3ªDjÙÖ£ì­õ&“”ÊÞ¥\nI*¢)›;-ü¢™óÙxŽj’7AëÄ%Gi¥èÅ¢VÃ8˜ÄTNùBVÚER›Ëeñ*ÄØÌûº²¦WÃZMQºi;iR*h¥ó-·ûÏÿ\0Ÿ>£$\0\0\0\0\0‡!}¿ÃùLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¢zL+Zª%lŸ”¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0eÇi%v›•]òJód{o½?Ò$ºµ{ò„;—SØ”I-þ[l;×Ç¢±ö¤e¢ÅŽ3l±b`cn·öFæv6{\nm 톓JZ¨´§»¦„­\\¼¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ûMçr\"Ýb™vKÈ´¡Ý4»§ûës¡Û×܈Ü\ZœÓS‘E¿NU\'®ÇÐÒ|¦{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰s$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ3Bë\râ½ÆóW\\e3®4hÑ‘´Ó/˜ZÀqÞ&‰¢öÓ%ê-¢¶£$ʄʺiS2ÏgÔ@ +ŒÄmÓíRÓ­V’—NQ\\û5˜[B챌ûªÆh®xÖ%kk9­£¥ªž1&rQ%Hjˆ³ÅpæºÕ—·ÀhÇÜïÛt×–f·ØØ,¬žÈêa©ó»±\"““ÚªAú@d„&¢b\n4šcI+\0-î¨ÝR£V^úëè_g¯ÚGÓ<\0\0\0\0WcÚîâ’÷3ÉM214–V9&æ¥n›®ö)ýмsc73MB/ǬDÓ<”%ePªJXˆûº‘„™õ‹³Á¥«G¸‡Zùâ!m_Uº†ŒX:Ã,mˆœ0®y#𖦳U2SDÏ\"²9 ­I^þì)Š#²\r2”®]€\0\0\0<;´~Ébj»„\rmk;^I5£Œ]2š8ó)Ò~ÉjéŽ2K¿!‘¼d dõ‘½šFI) Š¡—]º_ÝÀü8q†•¡ô :jÎ:±Å±EÚ±F¯³³¶n`·¥=Z¢qmL°æèä}œ÷$ £ñêJÜ÷J¾Zi«øwühã“tK¨->ë)…ªØîîtï¨ì%\ZÇy&îÁ\"$År0~ƱكÑò™)23ÆT¹‰[\Z–­•¢:íLáL“—*é{ˆf{Ð^|m|D5ÉÎWtä¬R©y)d¦©zŸXã’.óQD’å“&G\"$¯Þýª#–Y·T/¨R¼µ­B½¥rMŵź¾”ì­¶ß}÷>†{™žÝvò¤\0\0>_”ò;.&ƹ *HëÞ6‡L\'R “$ïjÅhuzuQývCQüüþEÒ¦î:y}ãÆšÆUš,kJ!ïY>}«íFк/no¼ˆ3ÊNZQw35›šrï€+Ëü´òd’JRDvéе¥mO¹£F\n\'Ók~|ýH¿ö3þ8\0\0\0\0\0c÷GT¿½/]ö/Ÿ§žþ_?ÝöF´9Á2ÄGIµ…áöMZØÃ1—\'(³…ºl3ÔA¥½KuÅ’¤ÒRMíñ4é‘âwå$Ô™!¦(³÷RH¥\'š½“~.3,™âÜ3u (¿s’@#.m1HäwK[Úáñ:…ïvtG\'9&2“D‚$¥šÕN0‰Yu\nœn4‘:J_íúþ# \0+øÔË®¡ü&8„H\ZëW·¼·Ò¾Si´¹·êdr¨ÒØe¾þdì}KÐöõ{ìLàë:1\rqjNúËó›Ä›á(»™óZ735ž±Tžþ_»s’°\0\0\0\0\0\0ñÆ”dü~ø?Tÿ\0¨Ê2}±ïnj눲Få¹îêÝ ÓÏo1-º Ÿ¸y€Çù ]…øÄ¢­h¢îÄæÖvý9nüQµHåûÈŒËmºì{ü‡û>÷òm H:–•íëÛ5å;›{“#RTïòK¾ûy~Šˆö2ûŒÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ±§F Ù[ôØÚL½6ô$‘ã\0\0EJ]ï]úzÁô2þ¼Æ£èsÕÃzTÃ8Æ­•{\ZÑxû…©ÚÜí½¡*Pðïñ}Ÿ còé·Ûð\0\0\0\0\0\0\ZšñÉIõ7£IçwDÿ\0& áq¹ùï-ÃŽì>©é¿¡™™ú\rÀ\0\0ŽŠ%H¿ºò?·ùïøùyt!\0\0\0\0\0\0¥­\Zµ)V«F‰Ö·ëjg¶äf^D{ý o´ü†x\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(59,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{KÙžçw,dRtç aKþB‰f¸ðƒë }ãšÔzÞaÊoì-fr€€˜«‰@@D5¨¦Ö®Vº¡bœS“&æì-³L°åmÁ[Öx¡¦ŸS!•¿äédÌ\"á¼µ ÜÀ1‘/ÞÒn}“‚—ìŽæŠU2«ªµÊe&½T©Õ`aëUºÔ4#á ``Ø!\rÅ©lÎ>5ƒt´l\n’(\"ši”\nPÔ)ê\'Óà õÁr˜c-É^jë´ƒŠe÷[¦«ZE‘t\0ŒæÒlÆA¼-•š\'!õ~ÎÂN.A·m2¦Ñ×pù\rjX£¨OR_‡ß·]·d©rÊ8ûä$+ù\' Û¬ó–. š…Ó¬[Úõ¤ìð8Óo\rbñO½¼5†b61T\Z•EW–%BÃNnTJS®dÎ͸ì\"a±Û¦¶í˧~Ëðmõ7\rîøËnx²±ndëýxËZ¬z³1çñ ºñ„ò±¡|¿#;´ÓMu_5Ió7,œ\"‹†îÑ;w8Lª º SY’7ÚªJ¤cDÏÉS LQe[ÉÛDømúÍaýìcúÜœþÌrL°LÕ ›ÂÑ/m_°Ë˜÷~t’FÓP¯Í?“ |ÁR0c[’†wco²WåšuÆ4,ÊìŒ.8ã%T ®´«La”3Êå…‚21oÑ*ÄIÂB«eÉ߶rŠš8Z;AH¬’q먆èÙvÈ÷;º61¨ÌÌa\\?n¹W\"Š¾JØݘ1¨³’N’¿+^Ìú%9A\"©±ætb(CGX7|.{mÔGt{„ꧼ—s\r£\Ze¦jRþ¬ž5°î|‰]\'rÓ1H­þÅ»¯…F ¨ü™„”ëglÚ45V%4¶/ P\0\0àØ8ÿ\0ÍrÓMxç73†vƒ„¯ÛƒÏ÷(ú+Ç0ªLX§ß˜ÇQCB·…†` ©‹ëõ[ÅÀÃ0\"däÝ6jÝ1:œ…„¶¿¸>©½cä3c©ç½2:sH>p\\udŒ¨V.›ÆÜU}»…QùüL•î>ÇCÅu9$‘í2±ÅÕ$ݦà”»ŒqÆi¥Ül4¶—”j5z†ãhòû¸gQt¼¤CÍ×Ü-9áT\']¶l\raïR²5IgMŒ£s)Y¬Á4A²ª5fѳS™™tZ%?ÔëÔ:f™J¨Ã°¯Ujuh†P5Úä Zm š,££˜·!lѪ)¢Šd)H@\0×nûn5MÝí‡;í–ìíÄuk8bÛŽ9*Ñ8w­’Ë8Û 6꩸{^•SlPåMgLISwg8!ÝÞ×Ò9î¤ÿ\0PÄ°…³\'e2ŽÚ²}”ŠÄù¾OäñôéØj%öD­`¥VŸ‰ƒªMÓØfòJ¼4ÝjQ¬}­N3ƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(60,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>IÛXãž£í¥¦`Ó3¾ûlHm%X8×=˜j2.ÝK2Ù1$îó¾ä£çÄÀ7íîˆ2Á)êI1Á²Cwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›%n|á¿´KQi\ZßWK¥”y÷#X0 6ØÛ6£&,SÓMPªÏô;Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(61,3,16,'75859b10c4223968','9c78857b3d725c1c6d1227a7b8cbe6b2','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfnúœç‹b»ÌR‹¢Æ8à’2wʦ×o\nstETóx=d¦í>”šHºl…MD’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(62,3,16,'75859b10c4223968','9c78857b3d725c1c6d1227a7b8cbe6b2','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©bŽ¡=I~}þÝvÝr¥Ë(ãìC¯äœ/n³ÎXñ¶HÇrN*ߎÛY½=ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(63,3,16,'75859b10c4223968','9c78857b3d725c1c6d1227a7b8cbe6b2','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(64,6,17,'75859b10d79196fc','15048d33e71544a25a6dd13bb081c78f','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfnúœç‹b»ÌR‹¢Æ8à’2wʦ×o\nstETóx=d¦í>”šHºl…MD’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(65,6,17,'75859b10d79196fc','15048d33e71544a25a6dd13bb081c78f','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©bŽ¡=I~}þÝvÝr¥Ë(ãìC¯äœ/n³ÎXñ¶HÇrN*ߎÛY½=ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(66,6,17,'75859b10d79196fc','15048d33e71544a25a6dd13bb081c78f','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(67,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23R‘¡Ñð#$&5B±Es’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\ZgºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“Ñ>$ÐÒÐÅ’d \"5Éb¡‘o±¤”9þÛÛ/צF3ÅqN…°;뤂óÂãðÖûœÇ9—;߬öKka0¿ÇüZ¡‘$ÆÔ²ø¿Ob3–gíWqgÔU›l“Wº\0ĺQß´¥ÉË<;J;‘žå‰½Å’ThÜ‹}¤²hÁžÅð‘õ>Ò#Ëëøó\0\0\0\0\0\0\0>=]¡Xwg-8i®æ9‘u ö×íN†æ¢¿†éé½Ý±^ñ-l$$Þç5RtŸ\"¸þ¢ûŠeÉ)—:GŒË+3ÏšŠÍºÈÒ,¹žò¬£-d©5ÙܾÊæn~5SeW$76sS$³4SME¦›¦Š‰ä\"\"O.îðÃá_©Ž)YÂŽ1Â\r´X!M\nm½ËyºKlãR‹#Îk«M&å^šo|ML}Ij’Ê×O½æD>œ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k§2½ÎdZŽ¢ü8Š(¦ƒ$Õ÷h:§×´y}`\0\0\0\0\0\0\08íÆ£‰37 } NsÅ¿±]æEÑc pJLò„©µÛÂœÝU<ÞY)»O¥&’$.›!E“Q%¦±N¶CÈSL³8˜d¬“#z˜ä9Ë㔚g,Ü®õòG w¿7GggU)F£]Es©I-‘¿DSµ:{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i\ZÒj©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!±kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%Ž#劰Q¦ï•N•½j´¨ûERI‡3-Ïéæ_=þ#Þâ“Ú=Öœq\'áuc¾¸¼L-e¬Æ™L#·¡F³t‹¹âøñGù”–¦ä““ÒBˆåeEk2=ö¹‹ZZêC‘»èíÁìèõ‡3«åŽû‘xdRhÅ#\'£5ldE(nF­ÔˆK/‡·\rñ9c»½Ó^QG¾Œí4Ý&NjP¬·³#=–ë:•)<2šȧè܆M\Zæ3Jª‘—\"z•N¯{Ónž¿ò]Hÿ\0¯!ï\0\0\0\0\0Xl3W9_ð­.5¸W¸‚é_7ªéºÞçvôä츖©ƒã¡¥%Êk()ãÖ3Q™%%MJ#ê\",¶ì|hŸéB{¯i‹Èú—½¾†c+›‹rñŒ%É¥ÝMj5¤Ëò…”ZªV#IsÓ†ÇÍ$fK%M\0jî¥t¹‚5s…¥ÚÔn6äìe8kU««Ý‘$ì܉5*6ÅåÑ듲pg¿BÒ²ä:tö[I줩–¡*šµ¤îVùpSâ‰â—£(®d¯BÅ—4B.Š ¨su=íò =…4¥á¢™õKAeZ$qu餣}‹óFÔ£ìÈ\0\0\0\0\0\nY¸ßNo²þ!®Nºèj{\"F-zy·c×?s\Z úôI3³#̼˧Q̶úî×ö\r¶”k\\]ßÜØ6ÚÛPê««×Ur$·ê]MINÄ^|»™$Œ^u¤,ݦ=0éëO,Vt,ÛpÆ€ã’]¢I(½¾‰F\ZšœÌ”µ™©ýí‹Q–¾bJID„lè\0Öö¢ôdÓª>™o!Sg¡[$i*òÏ<Á\\Qng|QÆu¥Ÿ,µî­,§tu‘-<ª#«\rbQ\Z‰&£©v§§×ðìcêÞ¯ÌÙ§º×uŽ-›ôüã\'ðåøB˜b);C«3‰‘íÊha•ËKr\"Û˜‹r-ˆìÙ\0\0\0\0\0K÷¬y8½qa¸¥^Øïõ1[ÐØ»$¥¯#5šK¡Á,JLÌ÷ÜÈŒŒa¢šL²´sÕ&œ[dÝž1\r­×¦öKž²¦¡þɧ¿î=…í€\0DxÕa£Ã“_UdÇŽ5%â~Ñú<¥‡&’ýܾ^¾G¶âšžŸ_ÀK±Ï‰žf\\Oæ¹2Ø«û¿‡ôÓ=»t¹å2²7 ˆëˆ36¨”FffJw©ÐÍ&M^DDVŠ€\0\0\0\0\0¬÷¶A£×¼ÆÆù¹-GÖ¹Mì:]—Ø\Z¼N/&É›Œ‹¡Þ3:Rv¦_ù¥?]…íø‹%0æ¢Ø^Ìw gýh†¶FË­™3橯cù`Èáj«G¨f=h°R± Ȫn¤¼¥™ÝâG)#I©&e©Ö6£96\0\0\0\0\0\0ä·þÌL4/”ôðš6v91¼!à©\rÚ)¥,ù~*—Rg#UR¨ij‘\"£¬rN¤™òÆÞ×PkJ;ºm²>šb©¬¿d&X¤öøç™FÞ­—b÷48øK«K¢T\\Äh^èQ̶#I\Z—hWe+_ͺ£áÞɧI;õ\nÙF©Ç.Vw)7|<èfó‰dÅOœÌšXi©çî‚>íÆU-æ¡R¥ç/·ø1æãÙË.Átý‡2fsÉnÄÍÄiE˜¹u?bD›Vðè¢2#óCa§¡u3åè“3Ãq2â—øšjªw¨üµZÆÑÂèØqN?;Ä^±âœXÒâíR#g3ªDjÙÖ£ì­õ&“”ÊÞ¥\nI*¢)›;-ü¢™óÙxŽj’7AëÄ%Gi¥èÅ¢VÃ8˜ÄTNùBVÚER›Ëeñ*ÄØÌûº²¦WÃZMQºi;iR*h¥ó-·ûÏÿ\0Ÿ>£$\0\0\0\0\0‡!}¿ÃùLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¢zL+Zª%lŸ”¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0eÇi%v›•]òJód{o½?Ò$ºµ{ò„;—SØ”I-þ[l;×Ç¢±ö¤e¢ÅŽ3l±b`cn·öFæv6{\nm 톓JZ¨´§»¦„­\\¼¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ûMçr\"Ýb™vKÈ´¡Ý4»§ûës¡Û×܈Ü\ZœÓS‘E¿NU\'®ÇÐÒ|¦{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰s$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ3Bë\râ½ÆóW\\e3®4hÑ‘´Ó/˜ZÀqÞ&‰¢öÓ%ê-¢¶£$ʄʺiS2ÏgÔ@ +ŒÄmÓíRÓ­V’—NQ\\û5˜[B챌ûªÆh®xÖ%kk9­£¥ªž1&rQ%Hjˆ³ÅpæºÕ—·ÀhÇÜïÛt×–f·ØØ,¬žÈêa©ó»±\"““ÚªAú@d„&¢b\n4šcI+\0-î¨ÝR£V^úëè_g¯ÚGÓ<\0\0\0\0WcÚîâ’÷3ÉM214–V9&æ¥n›®ö)ýмsc73MB/ǬDÓ<”%ePªJXˆûº‘„™õ‹³Á¥«G¸‡Zùâ!m_Uº†ŒX:Ã,mˆœ0®y#𖦳U2SDÏ\"²9 ­I^þì)Š#²\r2”®]€\0\0\0<;´~Ébj»„\rmk;^I5£Œ]2š8ó)Ò~ÉjéŽ2K¿!‘¼d dõ‘½šFI) Š¡—]º_ÝÀü8q†•¡ô :jÎ:±Å±EÚ±F¯³³¶n`·¥=Z¢qmL°æèä}œ÷$ £ñêJÜ÷J¾Zi«øwühã“tK¨->ë)…ªØîîtï¨ì%\ZÇy&îÁ\"$År0~ƱكÑò™)23ÆT¹‰[\Z–­•¢:íLáL“—*é{ˆf{Ð^|m|D5ÉÎWtä¬R©y)d¦©zŸXã’.óQD’å“&G\"$¯Þýª#–Y·T/¨R¼µ­B½¥rMŵź¾”ì­¶ß}÷>†{™žÝvò¤\0\0>_”ò;.&ƹ *HëÞ6‡L\'R “$ïjÅhuzuQývCQüüþEÒ¦î:y}ãÆšÆUš,kJ!ïY>}«íFк/no¼ˆ3ÊNZQw35›šrï€+Ëü´òd’JRDvéе¥mO¹£F\n\'Ók~|ýH¿ö3þ8\0\0\0\0\0c÷GT¿½/]ö/Ÿ§žþ_?ÝöF´9Á2ÄGIµ…áöMZØÃ1—\'(³…ºl3ÔA¥½KuÅ’¤ÒRMíñ4é‘âwå$Ô™!¦(³÷RH¥\'š½“~.3,™âÜ3u (¿s’@#.m1HäwK[Úáñ:…ïvtG\'9&2“D‚$¥šÕN0‰Yu\nœn4‘:J_íúþ# \0+øÔË®¡ü&8„H\ZëW·¼·Ò¾Si´¹·êdr¨ÒØe¾þdì}KÐöõ{ìLàë:1\rqjNúËó›Ä›á(»™óZ735ž±Tžþ_»s’°\0\0\0\0\0\0ñÆ”dü~ø?Tÿ\0¨Ê2}±ïnj눲Få¹îêÝ ÓÏo1-º Ÿ¸y€Çù ]…øÄ¢­h¢îÄæÖvý9nüQµHåûÈŒËmºì{ü‡û>÷òm H:–•íëÛ5å;›{“#RTïòK¾ûy~Šˆö2ûŒÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ±§F Ù[ôØÚL½6ô$‘ã\0\0EJ]ï]úzÁô2þ¼Æ£èsÕÃzTÃ8Æ­•{\ZÑxû…©ÚÜí½¡*Pðïñ}Ÿ còé·Ûð\0\0\0\0\0\0\ZšñÉIõ7£IçwDÿ\0& áq¹ùï-ÃŽì>©é¿¡™™ú\rÀ\0\0ŽŠ%H¿ºò?·ùïøùyt!\0\0\0\0\0\0¥­\Zµ)V«F‰Ö·ëjg¶äf^D{ý o´ü†x\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(68,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{KÙžçw,dRtç aKþB‰f¸ðƒë }ãšÔzÞaÊoì-fr€€˜«‰@@D5¨¦Ö®Vº¡bœS“&æì-³L°åmÁ[Öx¡¦ŸS!•¿äédÌ\"á¼µ ÜÀ1‘/ÞÒn}“‚—ìŽæŠU2«ªµÊe&½T©Õ`aëUºÔ4#á ``Ø!\rÅ©lÎ>5ƒt´l\n’(\"ši”\nPÔ)ê\'Óà õÁr˜c-É^jë´ƒŠe÷[¦«ZE‘t\0ŒæÒlÆA¼-•š\'!õ~ÎÂN.A·m2¦Ñ×pù\rjX£¨OR_‡ß·]·d©rÊ8ûä$+ù\' Û¬ó–. š…Ó¬[Úõ¤ìð8Óo\rbñO½¼5†b61T\Z•EW–%BÃNnTJS®dÎ͸ì\"a±Û¦¶í˧~Ëðmõ7\rîøËnx²±ndëýxËZ¬z³1çñ ºñ„ò±¡|¿#;´ÓMu_5Ió7,œ\"‹†îÑ;w8Lª º SY’7ÚªJ¤cDÏÉS LQe[ÉÛDømúÍaýìcúÜœþÌrL°LÕ ›ÂÑ/m_°Ë˜÷~t’FÓP¯Í?“ |ÁR0c[’†wco²WåšuÆ4,ÊìŒ.8ã%T ®´«La”3Êå…‚21oÑ*ÄIÂB«eÉ߶rŠš8Z;AH¬’q먆èÙvÈ÷;º61¨ÌÌa\\?n¹W\"Š¾JØݘ1¨³’N’¿+^Ìú%9A\"©±ætb(CGX7|.{mÔGt{„ꧼ—s\r£\Ze¦jRþ¬ž5°î|‰]\'rÓ1H­þÅ»¯…F ¨ü™„”ëglÚ45V%4¶/ P\0\0àØ8ÿ\0ÍrÓMxç73†vƒ„¯ÛƒÏ÷(ú+Ç0ªLX§ß˜ÇQCB·…†` ©‹ëõ[ÅÀÃ0\"däÝ6jÝ1:œ…„¶¿¸>©½cä3c©ç½2:sH>p\\udŒ¨V.›ÆÜU}»…QùüL•î>ÇCÅu9$‘í2±ÅÕ$ݦà”»ŒqÆi¥Ül4¶—”j5z†ãhòû¸gQt¼¤CÍ×Ü-9áT\']¶l\raïR²5IgMŒ£s)Y¬Á4A²ª5fѳS™™tZ%?ÔëÔ:f™J¨Ã°¯Ujuh†P5Úä Zm š,££˜·!lѪ)¢Šd)H@\0×nûn5MÝí‡;í–ìíÄuk8bÛŽ9*Ñ8w­’Ë8Û 6꩸{^•SlPåMgLISwg8!ÝÞ×Ò9î¤ÿ\0PÄ°…³\'e2ŽÚ²}”ŠÄù¾OäñôéØj%öD­`¥VŸ‰ƒªMÓØfòJ¼4ÝjQ¬}­N3ƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(69,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:09','2017-09-07 09:16:09','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>IÛXãž£í¥¦`Ó3¾ûlHm%X8×=˜j2.ÝK2Ù1$îó¾ä£çÄÀ7íîˆ2Á)êI1Á²Cwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›%n|á¿´KQi\ZßWK¥”y÷#X0 6ØÛ6£&,SÓMPªÏô;Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(70,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23R‘¡Ñð#$&5B±Es’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\ZgºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“Ñ>$ÐÒÐÅ’d \"5Éb¡‘o±¤”9þÛÛ/צF3ÅqN…°;뤂óÂãðÖûœÇ9—;߬öKka0¿ÇüZ¡‘$ÆÔ²ø¿Ob3–gíWqgÔU›l“Wº\0ĺQß´¥ÉË<;J;‘žå‰½Å’ThÜ‹}¤²hÁžÅð‘õ>Ò#Ëëøó\0\0\0\0\0\0\0>=]¡Xwg-8i®æ9‘u ö×íN†æ¢¿†éé½Ý±^ñ-l$$Þç5RtŸ\"¸þ¢ûŠeÉ)—:GŒË+3ÏšŠÍºÈÒ,¹žò¬£-d©5ÙܾÊæn~5SeW$76sS$³4SME¦›¦Š‰ä\"\"O.îðÃá_©Ž)YÂŽ1Â\r´X!M\nm½ËyºKlãR‹#Îk«M&å^šo|ML}Ij’Ê×O½æD>œ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k§2½ÎdZŽ¢ü8Š(¦ƒ$Õ÷h:§×´y}`\0\0\0\0\0\0\08íÆ£‰37 } NsÅ¿±]æEÑc pJLò„©µÛÂœÝU<ÞY)»O¥&’$.›!E“Q%¦±N¶CÈSL³8˜d¬“#z˜ä9Ë㔚g,Ü®õòG w¿7GggU)F£]Es©I-‘¿DSµ:{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i\ZÒj©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!±kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%Ž#劰Q¦ï•N•½j´¨ûERI‡3-Ïéæ_=þ#Þâ“Ú=Öœq\'áuc¾¸¼L-e¬Æ™L#·¡F³t‹¹âøñGù”–¦ä““ÒBˆåeEk2=ö¹‹ZZêC‘»èíÁìèõ‡3«åŽû‘xdRhÅ#\'£5ldE(nF­ÔˆK/‡·\rñ9c»½Ó^QG¾Œí4Ý&NjP¬·³#=–ë:•)<2šȧè܆M\Zæ3Jª‘—\"z•N¯{Ónž¿ò]Hÿ\0¯!ï\0\0\0\0\0Xl3W9_ð­.5¸W¸‚é_7ªéºÞçvôä츖©ƒã¡¥%Êk()ãÖ3Q™%%MJ#ê\",¶ì|hŸéB{¯i‹Èú—½¾†c+›‹rñŒ%É¥ÝMj5¤Ëò…”ZªV#IsÓ†ÇÍ$fK%M\0jî¥t¹‚5s…¥ÚÔn6äìe8kU««Ý‘$ì܉5*6ÅåÑ듲pg¿BÒ²ä:tö[I줩–¡*šµ¤îVùpSâ‰â—£(®d¯BÅ—4B.Š ¨su=íò =…4¥á¢™õKAeZ$qu餣}‹óFÔ£ìÈ\0\0\0\0\0\nY¸ßNo²þ!®Nºèj{\"F-zy·c×?s\Z úôI3³#̼˧Q̶úî×ö\r¶”k\\]ßÜØ6ÚÛPê««×Ur$·ê]MINÄ^|»™$Œ^u¤,ݦ=0éëO,Vt,ÛpÆ€ã’]¢I(½¾‰F\ZšœÌ”µ™©ýí‹Q–¾bJID„lè\0Öö¢ôdÓª>™o!Sg¡[$i*òÏ<Á\\Qng|QÆu¥Ÿ,µî­,§tu‘-<ª#«\rbQ\Z‰&£©v§§×ðìcêÞ¯ÌÙ§º×uŽ-›ôüã\'ðåøB˜b);C«3‰‘íÊha•ËKr\"Û˜‹r-ˆìÙ\0\0\0\0\0K÷¬y8½qa¸¥^Øïõ1[ÐØ»$¥¯#5šK¡Á,JLÌ÷ÜÈŒŒa¢šL²´sÕ&œ[dÝž1\r­×¦öKž²¦¡þɧ¿î=…í€\0DxÕa£Ã“_UdÇŽ5%â~Ñú<¥‡&’ýܾ^¾G¶âšžŸ_ÀK±Ï‰žf\\Oæ¹2Ø«û¿‡ôÓ=»t¹å2²7 ˆëˆ36¨”FffJw©ÐÍ&M^DDVŠ€\0\0\0\0\0¬÷¶A£×¼ÆÆù¹-GÖ¹Mì:]—Ø\Z¼N/&É›Œ‹¡Þ3:Rv¦_ù¥?]…íø‹%0æ¢Ø^Ìw gýh†¶FË­™3橯cù`Èáj«G¨f=h°R± Ȫn¤¼¥™ÝâG)#I©&e©Ö6£96\0\0\0\0\0\0ä·þÌL4/”ôðš6v91¼!à©\rÚ)¥,ù~*—Rg#UR¨ij‘\"£¬rN¤™òÆÞ×PkJ;ºm²>šb©¬¿d&X¤öøç™FÞ­—b÷48øK«K¢T\\Äh^èQ̶#I\Z—hWe+_ͺ£áÞɧI;õ\nÙF©Ç.Vw)7|<èfó‰dÅOœÌšXi©çî‚>íÆU-æ¡R¥ç/·ø1æãÙË.Átý‡2fsÉnÄÍÄiE˜¹u?bD›Vðè¢2#óCa§¡u3åè“3Ãq2â—øšjªw¨üµZÆÑÂèØqN?;Ä^±âœXÒâíR#g3ªDjÙÖ£ì­õ&“”ÊÞ¥\nI*¢)›;-ü¢™óÙxŽj’7AëÄ%Gi¥èÅ¢VÃ8˜ÄTNùBVÚER›Ëeñ*ÄØÌûº²¦WÃZMQºi;iR*h¥ó-·ûÏÿ\0Ÿ>£$\0\0\0\0\0‡!}¿ÃùLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¢zL+Zª%lŸ”¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0eÇi%v›•]òJód{o½?Ò$ºµ{ò„;—SØ”I-þ[l;×Ç¢±ö¤e¢ÅŽ3l±b`cn·öFæv6{\nm 톓JZ¨´§»¦„­\\¼¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ûMçr\"Ýb™vKÈ´¡Ý4»§ûës¡Û×܈Ü\ZœÓS‘E¿NU\'®ÇÐÒ|¦{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰s$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ3Bë\râ½ÆóW\\e3®4hÑ‘´Ó/˜ZÀqÞ&‰¢öÓ%ê-¢¶£$ʄʺiS2ÏgÔ@ +ŒÄmÓíRÓ­V’—NQ\\û5˜[B챌ûªÆh®xÖ%kk9­£¥ªž1&rQ%Hjˆ³ÅpæºÕ—·ÀhÇÜïÛt×–f·ØØ,¬žÈêa©ó»±\"““ÚªAú@d„&¢b\n4šcI+\0-î¨ÝR£V^úëè_g¯ÚGÓ<\0\0\0\0WcÚîâ’÷3ÉM214–V9&æ¥n›®ö)ýмsc73MB/ǬDÓ<”%ePªJXˆûº‘„™õ‹³Á¥«G¸‡Zùâ!m_Uº†ŒX:Ã,mˆœ0®y#𖦳U2SDÏ\"²9 ­I^þì)Š#²\r2”®]€\0\0\0<;´~Ébj»„\rmk;^I5£Œ]2š8ó)Ò~ÉjéŽ2K¿!‘¼d dõ‘½šFI) Š¡—]º_ÝÀü8q†•¡ô :jÎ:±Å±EÚ±F¯³³¶n`·¥=Z¢qmL°æèä}œ÷$ £ñêJÜ÷J¾Zi«øwühã“tK¨->ë)…ªØîîtï¨ì%\ZÇy&îÁ\"$År0~ƱكÑò™)23ÆT¹‰[\Z–­•¢:íLáL“—*é{ˆf{Ð^|m|D5ÉÎWtä¬R©y)d¦©zŸXã’.óQD’å“&G\"$¯Þýª#–Y·T/¨R¼µ­B½¥rMŵź¾”ì­¶ß}÷>†{™žÝvò¤\0\0>_”ò;.&ƹ *HëÞ6‡L\'R “$ïjÅhuzuQývCQüüþEÒ¦î:y}ãÆšÆUš,kJ!ïY>}«íFк/no¼ˆ3ÊNZQw35›šrï€+Ëü´òd’JRDvéе¥mO¹£F\n\'Ók~|ýH¿ö3þ8\0\0\0\0\0c÷GT¿½/]ö/Ÿ§žþ_?ÝöF´9Á2ÄGIµ…áöMZØÃ1—\'(³…ºl3ÔA¥½KuÅ’¤ÒRMíñ4é‘âwå$Ô™!¦(³÷RH¥\'š½“~.3,™âÜ3u (¿s’@#.m1HäwK[Úáñ:…ïvtG\'9&2“D‚$¥šÕN0‰Yu\nœn4‘:J_íúþ# \0+øÔË®¡ü&8„H\ZëW·¼·Ò¾Si´¹·êdr¨ÒØe¾þdì}KÐöõ{ìLàë:1\rqjNúËó›Ä›á(»™óZ735ž±Tžþ_»s’°\0\0\0\0\0\0ñÆ”dü~ø?Tÿ\0¨Ê2}±ïnj눲Få¹îêÝ ÓÏo1-º Ÿ¸y€Çù ]…øÄ¢­h¢îÄæÖvý9nüQµHåûÈŒËmºì{ü‡û>÷òm H:–•íëÛ5å;›{“#RTïòK¾ûy~Šˆö2ûŒÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ±§F Ù[ôØÚL½6ô$‘ã\0\0EJ]ï]úzÁô2þ¼Æ£èsÕÃzTÃ8Æ­•{\ZÑxû…©ÚÜí½¡*Pðïñ}Ÿ còé·Ûð\0\0\0\0\0\0\ZšñÉIõ7£IçwDÿ\0& áq¹ùï-ÃŽì>©é¿¡™™ú\rÀ\0\0ŽŠ%H¿ºò?·ùïøùyt!\0\0\0\0\0\0¥­\Zµ)V«F‰Ö·ëjg¶äf^D{ý o´ü†x\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(71,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{KÙžçw,dRtç aKþB‰f¸ðƒë }ãšÔzÞaÊoì-fr€€˜«‰@@D5¨¦Ö®Vº¡bœS“&æì-³L°åmÁ[Öx¡¦ŸS!•¿äédÌ\"á¼µ ÜÀ1‘/ÞÒn}“‚—ìŽæŠU2«ªµÊe&½T©Õ`aëUºÔ4#á ``Ø!\rÅ©lÎ>5ƒt´l\n’(\"ši”\nPÔ)ê\'Óà õÁr˜c-É^jë´ƒŠe÷[¦«ZE‘t\0ŒæÒlÆA¼-•š\'!õ~ÎÂN.A·m2¦Ñ×pù\rjX£¨OR_‡ß·]·d©rÊ8ûä$+ù\' Û¬ó–. š…Ó¬[Úõ¤ìð8Óo\rbñO½¼5†b61T\Z•EW–%BÃNnTJS®dÎ͸ì\"a±Û¦¶í˧~Ëðmõ7\rîøËnx²±ndëýxËZ¬z³1çñ ºñ„ò±¡|¿#;´ÓMu_5Ió7,œ\"‹†îÑ;w8Lª º SY’7ÚªJ¤cDÏÉS LQe[ÉÛDømúÍaýìcúÜœþÌrL°LÕ ›ÂÑ/m_°Ë˜÷~t’FÓP¯Í?“ |ÁR0c[’†wco²WåšuÆ4,ÊìŒ.8ã%T ®´«La”3Êå…‚21oÑ*ÄIÂB«eÉ߶rŠš8Z;AH¬’q먆èÙvÈ÷;º61¨ÌÌa\\?n¹W\"Š¾JØݘ1¨³’N’¿+^Ìú%9A\"©±ætb(CGX7|.{mÔGt{„ꧼ—s\r£\Ze¦jRþ¬ž5°î|‰]\'rÓ1H­þÅ»¯…F ¨ü™„”ëglÚ45V%4¶/ P\0\0àØ8ÿ\0ÍrÓMxç73†vƒ„¯ÛƒÏ÷(ú+Ç0ªLX§ß˜ÇQCB·…†` ©‹ëõ[ÅÀÃ0\"däÝ6jÝ1:œ…„¶¿¸>©½cä3c©ç½2:sH>p\\udŒ¨V.›ÆÜU}»…QùüL•î>ÇCÅu9$‘í2±ÅÕ$ݦà”»ŒqÆi¥Ül4¶—”j5z†ãhòû¸gQt¼¤CÍ×Ü-9áT\']¶l\raïR²5IgMŒ£s)Y¬Á4A²ª5fѳS™™tZ%?ÔëÔ:f™J¨Ã°¯Ujuh†P5Úä Zm š,££˜·!lѪ)¢Šd)H@\0×nûn5MÝí‡;í–ìíÄuk8bÛŽ9*Ñ8w­’Ë8Û 6꩸{^•SlPåMgLISwg8!ÝÞ×Ò9î¤ÿ\0PÄ°…³\'e2ŽÚ²}”ŠÄù¾OäñôéØj%öD­`¥VŸ‰ƒªMÓØfòJ¼4ÝjQ¬}­N3ƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(72,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>IÛXãž£í¥¦`Ó3¾ûlHm%X8×=˜j2.ÝK2Ù1$îó¾ä£çÄÀ7íîˆ2Á)êI1Á²Cwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›%n|á¿´KQi\ZßWK¥”y÷#X0 6ØÛ6£&,SÓMPªÏô;Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(73,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23R‘¡Ñð#$&5B±Es’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\ZgºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“Ñ>$ÐÒÐÅ’d \"5Éb¡‘o±¤”9þÛÛ/צF3ÅqN…°;뤂óÂãðÖûœÇ9—;߬öKka0¿ÇüZ¡‘$ÆÔ²ø¿Ob3–gíWqgÔU›l“Wº\0ĺQß´¥ÉË<;J;‘žå‰½Å’ThÜ‹}¤²hÁžÅð‘õ>Ò#Ëëøó\0\0\0\0\0\0\0>=]¡Xwg-8i®æ9‘u ö×íN†æ¢¿†éé½Ý±^ñ-l$$Þç5RtŸ\"¸þ¢ûŠeÉ)—:GŒË+3ÏšŠÍºÈÒ,¹žò¬£-d©5ÙܾÊæn~5SeW$76sS$³4SME¦›¦Š‰ä\"\"O.îðÃá_©Ž)YÂŽ1Â\r´X!M\nm½ËyºKlãR‹#Îk«M&å^šo|ML}Ij’Ê×O½æD>œ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k§2½ÎdZŽ¢ü8Š(¦ƒ$Õ÷h:§×´y}`\0\0\0\0\0\0\08íÆ£‰37 } NsÅ¿±]æEÑc pJLò„©µÛÂœÝU<ÞY)»O¥&’$.›!E“Q%¦±N¶CÈSL³8˜d¬“#z˜ä9Ë㔚g,Ü®õòG w¿7GggU)F£]Es©I-‘¿DSµ:{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i\ZÒj©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!±kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%Ž#劰Q¦ï•N•½j´¨ûERI‡3-Ïéæ_=þ#Þâ“Ú=Öœq\'áuc¾¸¼L-e¬Æ™L#·¡F³t‹¹âøñGù”–¦ä““ÒBˆåeEk2=ö¹‹ZZêC‘»èíÁìèõ‡3«åŽû‘xdRhÅ#\'£5ldE(nF­ÔˆK/‡·\rñ9c»½Ó^QG¾Œí4Ý&NjP¬·³#=–ë:•)<2šȧè܆M\Zæ3Jª‘—\"z•N¯{Ónž¿ò]Hÿ\0¯!ï\0\0\0\0\0Xl3W9_ð­.5¸W¸‚é_7ªéºÞçvôä츖©ƒã¡¥%Êk()ãÖ3Q™%%MJ#ê\",¶ì|hŸéB{¯i‹Èú—½¾†c+›‹rñŒ%É¥ÝMj5¤Ëò…”ZªV#IsÓ†ÇÍ$fK%M\0jî¥t¹‚5s…¥ÚÔn6äìe8kU««Ý‘$ì܉5*6ÅåÑ듲pg¿BÒ²ä:tö[I줩–¡*šµ¤îVùpSâ‰â—£(®d¯BÅ—4B.Š ¨su=íò =…4¥á¢™õKAeZ$qu餣}‹óFÔ£ìÈ\0\0\0\0\0\nY¸ßNo²þ!®Nºèj{\"F-zy·c×?s\Z úôI3³#̼˧Q̶úî×ö\r¶”k\\]ßÜØ6ÚÛPê««×Ur$·ê]MINÄ^|»™$Œ^u¤,ݦ=0éëO,Vt,ÛpÆ€ã’]¢I(½¾‰F\ZšœÌ”µ™©ýí‹Q–¾bJID„lè\0Öö¢ôdÓª>™o!Sg¡[$i*òÏ<Á\\Qng|QÆu¥Ÿ,µî­,§tu‘-<ª#«\rbQ\Z‰&£©v§§×ðìcêÞ¯ÌÙ§º×uŽ-›ôüã\'ðåøB˜b);C«3‰‘íÊha•ËKr\"Û˜‹r-ˆìÙ\0\0\0\0\0K÷¬y8½qa¸¥^Øïõ1[ÐØ»$¥¯#5šK¡Á,JLÌ÷ÜÈŒŒa¢šL²´sÕ&œ[dÝž1\r­×¦öKž²¦¡þɧ¿î=…í€\0DxÕa£Ã“_UdÇŽ5%â~Ñú<¥‡&’ýܾ^¾G¶âšžŸ_ÀK±Ï‰žf\\Oæ¹2Ø«û¿‡ôÓ=»t¹å2²7 ˆëˆ36¨”FffJw©ÐÍ&M^DDVŠ€\0\0\0\0\0¬÷¶A£×¼ÆÆù¹-GÖ¹Mì:]—Ø\Z¼N/&É›Œ‹¡Þ3:Rv¦_ù¥?]…íø‹%0æ¢Ø^Ìw gýh†¶FË­™3橯cù`Èáj«G¨f=h°R± Ȫn¤¼¥™ÝâG)#I©&e©Ö6£96\0\0\0\0\0\0ä·þÌL4/”ôðš6v91¼!à©\rÚ)¥,ù~*—Rg#UR¨ij‘\"£¬rN¤™òÆÞ×PkJ;ºm²>šb©¬¿d&X¤öøç™FÞ­—b÷48øK«K¢T\\Äh^èQ̶#I\Z—hWe+_ͺ£áÞɧI;õ\nÙF©Ç.Vw)7|<èfó‰dÅOœÌšXi©çî‚>íÆU-æ¡R¥ç/·ø1æãÙË.Átý‡2fsÉnÄÍÄiE˜¹u?bD›Vðè¢2#óCa§¡u3åè“3Ãq2â—øšjªw¨üµZÆÑÂèØqN?;Ä^±âœXÒâíR#g3ªDjÙÖ£ì­õ&“”ÊÞ¥\nI*¢)›;-ü¢™óÙxŽj’7AëÄ%Gi¥èÅ¢VÃ8˜ÄTNùBVÚER›Ëeñ*ÄØÌûº²¦WÃZMQºi;iR*h¥ó-·ûÏÿ\0Ÿ>£$\0\0\0\0\0‡!}¿ÃùLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¢zL+Zª%lŸ”¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0eÇi%v›•]òJód{o½?Ò$ºµ{ò„;—SØ”I-þ[l;×Ç¢±ö¤e¢ÅŽ3l±b`cn·öFæv6{\nm 톓JZ¨´§»¦„­\\¼¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ûMçr\"Ýb™vKÈ´¡Ý4»§ûës¡Û×܈Ü\ZœÓS‘E¿NU\'®ÇÐÒ|¦{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰s$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ3Bë\râ½ÆóW\\e3®4hÑ‘´Ó/˜ZÀqÞ&‰¢öÓ%ê-¢¶£$ʄʺiS2ÏgÔ@ +ŒÄmÓíRÓ­V’—NQ\\û5˜[B챌ûªÆh®xÖ%kk9­£¥ªž1&rQ%Hjˆ³ÅpæºÕ—·ÀhÇÜïÛt×–f·ØØ,¬žÈêa©ó»±\"““ÚªAú@d„&¢b\n4šcI+\0-î¨ÝR£V^úëè_g¯ÚGÓ<\0\0\0\0WcÚîâ’÷3ÉM214–V9&æ¥n›®ö)ýмsc73MB/ǬDÓ<”%ePªJXˆûº‘„™õ‹³Á¥«G¸‡Zùâ!m_Uº†ŒX:Ã,mˆœ0®y#𖦳U2SDÏ\"²9 ­I^þì)Š#²\r2”®]€\0\0\0<;´~Ébj»„\rmk;^I5£Œ]2š8ó)Ò~ÉjéŽ2K¿!‘¼d dõ‘½šFI) Š¡—]º_ÝÀü8q†•¡ô :jÎ:±Å±EÚ±F¯³³¶n`·¥=Z¢qmL°æèä}œ÷$ £ñêJÜ÷J¾Zi«øwühã“tK¨->ë)…ªØîîtï¨ì%\ZÇy&îÁ\"$År0~ƱكÑò™)23ÆT¹‰[\Z–­•¢:íLáL“—*é{ˆf{Ð^|m|D5ÉÎWtä¬R©y)d¦©zŸXã’.óQD’å“&G\"$¯Þýª#–Y·T/¨R¼µ­B½¥rMŵź¾”ì­¶ß}÷>†{™žÝvò¤\0\0>_”ò;.&ƹ *HëÞ6‡L\'R “$ïjÅhuzuQývCQüüþEÒ¦î:y}ãÆšÆUš,kJ!ïY>}«íFк/no¼ˆ3ÊNZQw35›šrï€+Ëü´òd’JRDvéе¥mO¹£F\n\'Ók~|ýH¿ö3þ8\0\0\0\0\0c÷GT¿½/]ö/Ÿ§žþ_?ÝöF´9Á2ÄGIµ…áöMZØÃ1—\'(³…ºl3ÔA¥½KuÅ’¤ÒRMíñ4é‘âwå$Ô™!¦(³÷RH¥\'š½“~.3,™âÜ3u (¿s’@#.m1HäwK[Úáñ:…ïvtG\'9&2“D‚$¥šÕN0‰Yu\nœn4‘:J_íúþ# \0+øÔË®¡ü&8„H\ZëW·¼·Ò¾Si´¹·êdr¨ÒØe¾þdì}KÐöõ{ìLàë:1\rqjNúËó›Ä›á(»™óZ735ž±Tžþ_»s’°\0\0\0\0\0\0ñÆ”dü~ø?Tÿ\0¨Ê2}±ïnj눲Få¹îêÝ ÓÏo1-º Ÿ¸y€Çù ]…øÄ¢­h¢îÄæÖvý9nüQµHåûÈŒËmºì{ü‡û>÷òm H:–•íëÛ5å;›{“#RTïòK¾ûy~Šˆö2ûŒÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ±§F Ù[ôØÚL½6ô$‘ã\0\0EJ]ï]úzÁô2þ¼Æ£èsÕÃzTÃ8Æ­•{\ZÑxû…©ÚÜí½¡*Pðïñ}Ÿ còé·Ûð\0\0\0\0\0\0\ZšñÉIõ7£IçwDÿ\0& áq¹ùï-ÃŽì>©é¿¡™™ú\rÀ\0\0ŽŠ%H¿ºò?·ùïøùyt!\0\0\0\0\0\0¥­\Zµ)V«F‰Ö·ëjg¶äf^D{ý o´ü†x\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(74,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{KÙžçw,dRtç aKþB‰f¸ðƒë }ãšÔzÞaÊoì-fr€€˜«‰@@D5¨¦Ö®Vº¡bœS“&æì-³L°åmÁ[Öx¡¦ŸS!•¿äédÌ\"á¼µ ÜÀ1‘/ÞÒn}“‚—ìŽæŠU2«ªµÊe&½T©Õ`aëUºÔ4#á ``Ø!\rÅ©lÎ>5ƒt´l\n’(\"ši”\nPÔ)ê\'Óà õÁr˜c-É^jë´ƒŠe÷[¦«ZE‘t\0ŒæÒlÆA¼-•š\'!õ~ÎÂN.A·m2¦Ñ×pù\rjX£¨OR_‡ß·]·d©rÊ8ûä$+ù\' Û¬ó–. š…Ó¬[Úõ¤ìð8Óo\rbñO½¼5†b61T\Z•EW–%BÃNnTJS®dÎ͸ì\"a±Û¦¶í˧~Ëðmõ7\rîøËnx²±ndëýxËZ¬z³1çñ ºñ„ò±¡|¿#;´ÓMu_5Ió7,œ\"‹†îÑ;w8Lª º SY’7ÚªJ¤cDÏÉS LQe[ÉÛDømúÍaýìcúÜœþÌrL°LÕ ›ÂÑ/m_°Ë˜÷~t’FÓP¯Í?“ |ÁR0c[’†wco²WåšuÆ4,ÊìŒ.8ã%T ®´«La”3Êå…‚21oÑ*ÄIÂB«eÉ߶rŠš8Z;AH¬’q먆èÙvÈ÷;º61¨ÌÌa\\?n¹W\"Š¾JØݘ1¨³’N’¿+^Ìú%9A\"©±ætb(CGX7|.{mÔGt{„ꧼ—s\r£\Ze¦jRþ¬ž5°î|‰]\'rÓ1H­þÅ»¯…F ¨ü™„”ëglÚ45V%4¶/ P\0\0àØ8ÿ\0ÍrÓMxç73†vƒ„¯ÛƒÏ÷(ú+Ç0ªLX§ß˜ÇQCB·…†` ©‹ëõ[ÅÀÃ0\"däÝ6jÝ1:œ…„¶¿¸>©½cä3c©ç½2:sH>p\\udŒ¨V.›ÆÜU}»…QùüL•î>ÇCÅu9$‘í2±ÅÕ$ݦà”»ŒqÆi¥Ül4¶—”j5z†ãhòû¸gQt¼¤CÍ×Ü-9áT\']¶l\raïR²5IgMŒ£s)Y¬Á4A²ª5fѳS™™tZ%?ÔëÔ:f™J¨Ã°¯Ujuh†P5Úä Zm š,££˜·!lѪ)¢Šd)H@\0×nûn5MÝí‡;í–ìíÄuk8bÛŽ9*Ñ8w­’Ë8Û 6꩸{^•SlPåMgLISwg8!ÝÞ×Ò9î¤ÿ\0PÄ°…³\'e2ŽÚ²}”ŠÄù¾OäñôéØj%öD­`¥VŸ‰ƒªMÓØfòJ¼4ÝjQ¬}­N3ƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(75,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>IÛXãž£í¥¦`Ó3¾ûlHm%X8×=˜j2.ÝK2Ù1$îó¾ä£çÄÀ7íîˆ2Á)êI1Á²Cwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›%n|á¿´KQi\ZßWK¥”y÷#X0 6ØÛ6£&,SÓMPªÏô;Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(76,0,21,'75859b10ebd73888','39e7b822c093a22f70de8782c7d652d4','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23‘#$&5BR¡±ÑðEs’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\Z\'ºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“мI¡¥¡‹$ÈDj-“ (ÅC\"ßcI(sý·¶_¯L:gŠâ `w×Iç…Çá­÷9Žs.w¿Yì–ÖÂaøµC\"3:I©eñ~ÞÄg,ÎÚ®âϨ«6Ù&¯t‰t£¾/iK“–xv<”v #=Ë{‹$¨Ñ¹ûIdу=‹á#ê}¤G—ßò!æ\0\0\0\0\0\0\0*|z»B°î6ÎZpÓ]Ìs\"ëAí¯Ú\rÍE\rÓÓ{»b¼âZØHI½Îj¤é>EqýE÷Ë’S.:tŽ7–VgŸ5›u;‘¤Ys=åYFZÉRk³¹}•ÌÜüjþ¦Ê®Hnlæ¦Ifh¦š‹M6&\";MÈDDž]Ýá‡Â¿SR³…c„h°BšÛ{–ót–ÙƤGœ×VšMʽ4$Þ&2øš\"˜ú’Õ%•®Ÿ{̈}9$ž•£¼489hÛ†ºÓ @ìe™‚å´­§\Z…šØ·<äÉmê‰(v&×Ne{œÈµEøqQMI«ï\ZÐuO¯hòûþD<À\0\0\0\0\0\0\0qÛGfn\Zœç‹b»ÌR‹¢Æ9~’2wʦ×o\nstMTóx=d¦í>”šHºl…MT’šÅ:Ù!M2Ìâa’²Lêcç/ŽRiœ²Cr»×ÉÞüÝT¥\ZuÎ¥$¶FýINÔé춆´q–5ñ©ÜS¥,-BÞæc’^Ñopó}AWì8›Y)Þc?•¥TÓÝ2Fi¹¼Õ¤kIª§$b‰Õ“È鸷AºÂ\\<ôçÓFÑh†Å­ªÜ¿Ikš)É3^åNÓÙ“±wu]Ÿ¤kçU4¡J£ –8ŒW–*ÁFš7¼`^U:VõªÒ£íI%ýÌ·?·™|÷ùüŒC{ŠOh÷[¼:r‚qÄŸ…Õü Žúâñ0\\µ–³\Ze0\\ŽÞ…\ZÍÒ.ç‹ãÅæRvZ˜’NOI\n#••¬ÈôO vÚåþ-ik¨F³£Ö̬o–;îEá‘I£ŒžŒÕ±‘¢5¹\Z·Rv!,¾Ü\\4;ÄåŽî÷MyEú3´Ót˜a9ý©B²Ü:ÌŒö[¬XêT¤ðÊh_\"Ÿ£r4k˜Í*ªF\\‰êU:½ïMºzÿ\0©u#ÿ\0žCÞ\0\0\0\0\0°>Øf®rþ¿áZ\\kp¯qÒ¾.oUÓu½ÎíéÉÙq-SÇCJK”ÖPSǬf£2JJš”GÔD YmØøÐ+>!Ò„÷^Ó\n\'‘õ/{} ÆW7åâ-K;“KºšÔkI—é (µ;T¬F’ç§\ršHÌ–Jš\0ÕÝJésjç K´ÿ\0¨ÜmÉØÊpÖ«WV\'»\"IÙ¹jTlxŒ;Ò¤O,Rš½ÔÇ–‰ edK¦²çå:8Ïð¯È<)5hñˆy Ó«w žŸr*-0Çå²ÚÝ÷æBf¸ùJ& u:fIVÌr”:rjh.páŒç”´õ”¢9› M±ÖH€½Ù>ÅåÑ듲pg¿BÒ²4:{-¤öRTËP•MHZ‹áRw+|¸)ñDŒqKÑ”W2W·°eÍ‹¢‚jÝO{F|‚ÏaM)xh§æ–‚Ê´Hâê-ÓIFû3æ©GÙ\0\0\0\0\0³q¾œßd-üB\\*uÐÔöDŒZôónÇ®~æ4õè’gfG™y—N£˜-mõݯìm(Ö¸»¿¹°mµ¶¡ÕWW®ªäIoÔºš’ˆ¼ùw2I¼ëHX%»LzaÓÖžX¬èY¶áŒ;Ç$»D’Q{}Œ54;9™)k3SûÚ¢2%-|Ä”’‰ÙÐ\0­íEèɧT|+2ÞB¦ÏB¶HÒUåžy‚¸¢ÜÎø£ŒëK>YkÝ[\ZYN èë\"ZyTGV\ZÄ¢5MGRíOO¿ä&7ØÇÔ ¼;_™³Ou®ë[7éùÆOáÊ?è…0ÄRv‡Vg#Û”ÐÃ+––äE·1ä[Ù²\0\0\0\0\0—î;Xþó\ZqzâÃqJ½±ßê2c:¶#¡±vIK^Fk4—B/‚X”™™ï¹‘ÃE4™ehçªM8¶8(ü:ÿ\0s2ia¦§œ{ºû´CTµÿ\0XR…J—œ¾¿åþãÌdz–]‚éûdÌç’݉š ˆ Ò,‹1rê~ʼn6­áÑDdGæ†ÃOBêgËÑ&f)†âeÄ+/ñ4ÕTïQùjþµ£…Ñ°âœ~wˆ½cÅ8±¥ÅÚ¤FÎgTˆÕ³­GÙ[êM\')•¼?J’UDR)6v[ø#E3ç²ñÕ$nƒÖ=ˆJŽÓKÐ\'‹D­†q1ˆ8¨ò„­´Š¥7–(ËâU‰±™÷ueL¯†´š£tÒv2Ò¤TÑKæ[oøŸÿ\0>}FH\0\0\0\0\0Búÿ\0—ûLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…·-ÇZæ<9sN¤ð«þ×.¾³j…MÛ ¯#Äp–9Ãúh‰ËÛÔ¥œiÕʼn‚Q=&­U¶OÒQn’Q¬Ô”laŒö\\ø.ÄÜ\\ÿ\0’ã´’»MÊ®ù%y‹2=·ÞŸí]Z½ùBË©ìJ$–ÿ\0-¶ë‹FãÑXû R2ÑbÇ‹¶X±01·[û#s;=‚\ZÛ\r&”µQiOwM Z‰<¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ú›ÎäEºÅ2ì—‘iC;ºiwN1÷ÖçC·¯¹¸59¦§\"‹~œªO]¡¤ùO§[Ùð^T‹fì1‰ó!ÊÝÖ”qÌ2yq·êWŒØËKÃQïÓ©¡Ù¡yù™ý”\0\0\0\0ÊòŽUÇøKÍrÖX—2@±Æ?bp“L¥r+’±dŽ057x«³«¡š’[S#Y¬ˆ{mÉÌ£4.°Þ+Üo5uÆS8ÚèóF›M2ù…¬âhš/m2^¢Ü*+j2L¨L«¦•3,ö}D\0’¸ÌFÝ>Õ-:Õi)tåÁ³Y…´.ËϺ¬fŠçbV¶³ZÚ:Z©ã`W%T†¨‹3Å>I¬Î>Fd¬†üF”-$ˆj#;*O$•š)R¤])}·ôúþ[ŸÌd€\0 z¿Þû~B¼пgG 4äL‡¯=cËé¼&nìã3κu†6©Â[˜8eÓüTÆÒ”ì.GUFý(‚GûÙ$^J·Ú‘«\r­ÝÅ¿·ìËqÝÇØ®ÁÃwZ²öø\rûûnšòÌÖ⛕“ÙL5>wv$Rb2{UBˆ?H „ÔLAF“Li%`½ÕªTjÑ«ßQ¯ÿ\0>Åôõú‘ôÏ\0\0\0\0Øö»¸¤½ÌòSG ŒM%§BŽI†y©[¦ë½ŠG?t/ǘÍÌÓP‹Áñë4Ï% YT*’‡Ö\">î¤a&}bìÀpijÑîaÖ¾xˆ[WÕn¡£°ËÛb\' +„Hü%©¬ÕL”Ñ3Ȭ‡NC+RW¿»\nbˆìƒL¥+—`\0\0\0íá!ÌMWpá­­gkÉ&£4q‹¦SGe:OÙ-]1ÆIwä#27ŒŒž¢ò7³Q¨É%!‘T2ë·Cëû¸‡0Ò´>”MYÇV8¶#ch»V(ÕövvÍ̶ô§«TN-©–ݳžä”~=I[žéWËM5ã¿€­rn‰u§Ýe0µ[ÝÎõ„£Xï$ÝØ!D˜®BÆØÖ;0z>S%&FxÊ—1+cRÕ²´GB½©œ)’rå]/q Ãz ϯˆ†¹9ÊŠU/%,”Õ/SërC…Þj(’\\²dÈã$D•ûÞeQ²Èµº¡}B•å­jí+’n-®-Õðܧem¶ûï¹ô3ÜÌöë·ý \0òü§‘Ùq65ÈYRGX¨Æñ´:a:\\™\'{V(“C«Óªˆ÷ë²\Zççò.•7p‘ÓËïî4Ö2¬ÑcZQzÉóí_j6…Ñ{s}äAžRrÒ‹¹™¨ÌØäÓ—x”^_Õ§“$’R’#·N…­+j}Í\Z4hQ>›[ôëçêEÿ\0±Ÿù à\0\0\0\0ÝRþt½wؾ~ž{ù|ÿ\0‡Ò0½¡Î Ž\"8\"M¨Œ/²jÖÆŒ¹9Eœì-Ó`អ\r-ê[®,•&’’oo‰§L¿)&¤É\r1EŸº’E)<Õì›ñq™dÏᛨYEûœ’p“iŠG#ºZÞ׉Ô/{°Û¢99É1”š$%,Öªq„H\"˨Tãq¤‰ÒRþïßó\0\09_Ʀ]uá1Ä\"@×Z½½å¾•ò›M¥Í¿S#•F–Äk-÷ó\'cê^‡·¨‹ßbgYшk‹RwÖ_¬Þ$Ø¿ EÜ ÏšÑ¹™©âc/nA+©’–ñ=Ïb/\n#Ü‹a=@\0\0\0\0\0è_î¾ÿ\0™Š¾uqŒ+pÖíRb·¼if¦H®FÕ^ʱ†öâö‰j}Ù©“#55šSËàÆû)Èl·\"yP­ˆ… Èý×ßó!ï\0Í®/1sœpÀ×üq4Š··é?Û©ß4À^ÝÒ_2øš‰Deþ\"õ?ìkÄÍ›…®F‘Ô GZa«üuBá^w-Ìð BÎG·ýÔ:l_‰íºzK”\0\0\0\0\0\0ûAXµ/½£®•ˆ«•,€zO·ºön›{§«i‘«îl§¿O™íÓq?~ëïù÷€\0Ö]]ĽüÒž¥¡ £BãÞý?æ(¹Û\\levo\'–“ß®Ûl¯‘ù¤þ£ˆ}“Ø™G82á‹þàè{ã“óŒªä¯µòO]¡û™ôõŠ¤÷òþœ•€\0\0\0\0\0\0D‡Œ~4£\'ã÷À!ú§ýFQ“í{sW\\DèÍ’7-ÏsþÖè^ž{y‰mÓý„þÌ8ÈÈJì(?Æ$mh{Ev\'6³·éËwâªG/âDf[m×cßä8ÿ\0ÙðÇ¿£nZ@‰Ô´¯o^Ù¯(9ÜÛÜ™\Z’§|ï’]÷ÛËöTG±—àfFCµà\0\0\0\0\0\08s¯|kBQÅ›ìÞ­*AæZñÜýŸí:3øNÊߦÆÒeé·¡$ˆw\0\0z*RïzïÓÓý¡—üó\Z¡ÌgW\réS ã\Z¶UìkEãî§ks¶ö„©CÿÅôýh[—M¼†ß€\0\0\0\0\0\0Óü׎JO©½\ZO;º\'ú0g ÏÏynwdé÷OMý ÌÏÐn\0\0\0 tQ*EüבýßÏËË¡ €\0\0\0\0\0\0-hÕ©JµZ4Nµ¿[S=·#2ò#ßì[}OÈg€\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(77,0,21,'75859b10ebd73888','39e7b822c093a22f70de8782c7d652d4','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{LÙžçw,dRtã aKþB‰f¸ðƒë Ç5¨õ¼Ã”ßØ5™Êb®%Ö¡þ˜Z¸uZê…ŠqNL››°¶Ì2Õ·oY↚}L†VBÿ\0“¤“0‹†òÖ‚7s\0ÆD¿{I¹öN\n_°J;š)TÊ®>ª×)”šôUR§U‡­VëPlІƒ`„lD4S¤M³8øÖ\rÐfѲ*H Ši¦P)CP§¨ŸO 3Ô{ÊaŒ·%y«¬VÒ)—Üynš¬YiEÐ3›I³ð¶Vhœ„Õû; 8¹Ý´Ê›G]Ãä5©b~¡=I~}þÝvÝr¥Ï(ãìC¯äœ/m³ÎXñ¶HÇrN*ߎÛÙ\\==ZÍQed­ÏÂ{¦î\\·²¶’nÝôXí^¹Z£±2ÍTÆ“£eŠ%W\"Ôœ¥\"ŽëwFVe–L†8$¹˜¿@K¶aM`9Gzvši«eõšÅsù§¥^ýqÍY«‡ö9¶ä9(hö…9ÝH¿©Fý`„kdÓ)Žªò€ðI$B˜Êr\n\"n5€ßÁ²­}.©ù 9l2Êm&´\n÷b ºú÷+$VÀ`\nÿ\0++“û¼9Wä…0ëh¸qÀqä¯éåý´àGÐ\0GüçZ§~. š…׬cÚõ¤ìð8Óo\r¢ñO½¼5†b61T\ZEW–%BÃNnTJU2gfܤû˜lué…-»réß²ü}MÃ{¾2Ûž,¬[™:ÿ\0^2ÆÖ«¬ÌA¹üDH.¼a<ƒìh_/ÈÎí4Ó]WÍR|ÍË\'¢á»´NÝÂ*¨.‚ÅÖEdöª’©ÄQ3òC”ÂS\0”DYVòvÑ>~³X{þ·\'?³…“,5CÂfð´KÛWì2æ}ß$‘´Ô+óOäè0TŒ\'cXÖä…áÇXÛÆl•Ãùfq 0â»# Ž8ÉU(+­*Óe Ær¹a`ŒŒ[ôJ±pªÙrw휢ƒ¦ŽVŽÐEÒ+$œzê!ºö]²=ÎîŒj33WÛ®Uȇb¯’¶7f j,䤯Ê׳>‰NPHªG,yŠàQÖ\rß žÄÛuÝá:©ï%ÃœÃhÆ™iš”¿«\'l;…Ÿ\"WIÜ…4ÌR+E‡ñnëáQƒ*?&a%:ÙÛ6\rU‰M-‹Å(\0\08\0ö?ó\\´Ó^¹ÍÌá á+öàóýÊ>‡ŠñÌ*“)÷æ1ÔPÆP­ãáa˜$êbÅ:ýVñp0Ì£Ù97Mš·LN§!a-¯îªoXù\0ÌØêyïLŽœÒœY#*‹¦ñ·_náT~%{±Ðñ]NI${L¬quI7i¸0¥îãqšiw\'M-¥å\Z^¡¸Ú<¾îÔ]/)óu÷ NxU ×m…£ÛX{Ô¬FYÓc(ÜÊVk0MlªY´lÔæDf]‰OÆu:õY€¦Rª0ì+ÕZZ!”\rv¹[FÃÂÄG&‹(èæ-ÈD4jŠh¢™\nR\05ãÛ¾ÛSw{aÏe»;qZζãŽ_Ê´DŽÁ«d‡rÎ6Âͺ¢TÜ=¯J )¶H(r&³¦ &©»³‡nïkéœ÷ Ò¨ bXBÙ“²‚GmY>Ê Eâlß\'òxú|ì5ý\"Fr«OÄÁÕ&éì ³y%^\Znµ(Ö:Ô“Hóƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(78,0,21,'75859b10ebd73888','39e7b822c093a22f70de8782c7d652d4','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>J[Xã¦£í¥¦`Ó3¾ûl8m%X<×=˜j2.ßL2Ù1\"îóžä£çDÀ7í0ïĈ2Á+êI1Á²Kwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›)n|á¿´KQi\ZßWK¥”y÷#Y, 6ØÛ6c&,SÓMPªÎ”ô3Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''),(79,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',175,175,5486,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0¯\0¯\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ÿÄ\0B\0\0 \0\0\0\0\0 !\n1A\"QaqÁ%23R‘¡Ñð#$&5B±Es’ÂáÿÚ\0\0\0?\0ŸÀ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Õ†»´Ÿ¡X\ZgºµÎp|LÅsNðšÛœ}ªY%ZR|ö(ƒJ*I&+ÛrJ#ÕyI)%l¢ZÎ,:“í§i’(àäÏ¥½)äÌÏJÖàííå¹*hχo“Ñ>$ÐÒÐÅ’d \"5Éb¡‘o±¤”9þÛÛ/צF3ÅqN…°;뤂óÂãðÖûœÇ9—;߬öKka0¿ÇüZ¡‘$ÆÔ²ø¿Ob3–gíWqgÔU›l“Wº\0ĺQß´¥ÉË<;J;‘žå‰½Å’ThÜ‹}¤²hÁžÅð‘õ>Ò#Ëëøó\0\0\0\0\0\0\0>=]¡Xwg-8i®æ9‘u ö×íN†æ¢¿†éé½Ý±^ñ-l$$Þç5RtŸ\"¸þ¢ûŠeÉ)—:GŒË+3ÏšŠÍºÈÒ,¹žò¬£-d©5ÙܾÊæn~5SeW$76sS$³4SME¦›¦Š‰ä\"\"O.îðÃá_©Ž)YÂŽ1Â\r´X!M\nm½ËyºKlãR‹#Îk«M&å^šo|ML}Ij’Ê×O½æD>œ’OJÑÞ\Z´mÃÝi„ v2ÌÁrÚVÓBÍl[žrd¶õD”;k§2½ÎdZŽ¢ü8Š(¦ƒ$Õ÷h:§×´y}`\0\0\0\0\0\0\08íÆ£‰37 } NsÅ¿±]æEÑc pJLò„©µÛÂœÝU<ÞY)»O¥&’$.›!E“Q%¦±N¶CÈSL³8˜d¬“#z˜ä9Ë㔚g,Ü®õòG w¿7GggU)F£]Es©I-‘¿DSµ:{-¡­e|jwéK P·¹˜ä—´[Ü<ßPUû&ÖJw˜ÏåiU4÷L‘†\Zno5i\ZÒj©É¢udò:d.-Ðn†ð—=9ÀtÑ€£ôZ!±kj·/ÒZæ…ÊrLÅ×¹S´ödì]ÝWgé\ZùÕM(R¨Åè%Ž#劰Q¦ï•N•½j´¨ûERI‡3-Ïéæ_=þ#Þâ“Ú=Öœq\'áuc¾¸¼L-e¬Æ™L#·¡F³t‹¹âøñGù”–¦ä““ÒBˆåeEk2=ö¹‹ZZêC‘»èíÁìèõ‡3«åŽû‘xdRhÅ#\'£5ldE(nF­ÔˆK/‡·\rñ9c»½Ó^QG¾Œí4Ý&NjP¬·³#=–ë:•)<2šȧè܆M\Zæ3Jª‘—\"z•N¯{Ónž¿ò]Hÿ\0¯!ï\0\0\0\0\0Xl3W9_ð­.5¸W¸‚é_7ªéºÞçvôä츖©ƒã¡¥%Êk()ãÖ3Q™%%MJ#ê\",¶ì|hŸéB{¯i‹Èú—½¾†c+›‹rñŒ%É¥ÝMj5¤Ëò…”ZªV#IsÓ†ÇÍ$fK%M\0jî¥t¹‚5s…¥ÚÔn6äìe8kU««Ý‘$ì܉5*6ÅåÑ듲pg¿BÒ²ä:tö[I줩–¡*šµ¤îVùpSâ‰â—£(®d¯BÅ—4B.Š ¨su=íò =…4¥á¢™õKAeZ$qu餣}‹óFÔ£ìÈ\0\0\0\0\0\nY¸ßNo²þ!®Nºèj{\"F-zy·c×?s\Z úôI3³#̼˧Q̶úî×ö\r¶”k\\]ßÜØ6ÚÛPê««×Ur$·ê]MINÄ^|»™$Œ^u¤,ݦ=0éëO,Vt,ÛpÆ€ã’]¢I(½¾‰F\ZšœÌ”µ™©ýí‹Q–¾bJID„lè\0Öö¢ôdÓª>™o!Sg¡[$i*òÏ<Á\\Qng|QÆu¥Ÿ,µî­,§tu‘-<ª#«\rbQ\Z‰&£©v§§×ðìcêÞ¯ÌÙ§º×uŽ-›ôüã\'ðåøB˜b);C«3‰‘íÊha•ËKr\"Û˜‹r-ˆìÙ\0\0\0\0\0K÷¬y8½qa¸¥^Øïõ1[ÐØ»$¥¯#5šK¡Á,JLÌ÷ÜÈŒŒa¢šL²´sÕ&œ[dÝž1\r­×¦öKž²¦¡þɧ¿î=…í€\0DxÕa£Ã“_UdÇŽ5%â~Ñú<¥‡&’ýܾ^¾G¶âšžŸ_ÀK±Ï‰žf\\Oæ¹2Ø«û¿‡ôÓ=»t¹å2²7 ˆëˆ36¨”FffJw©ÐÍ&M^DDVŠ€\0\0\0\0\0¬÷¶A£×¼ÆÆù¹-GÖ¹Mì:]—Ø\Z¼N/&É›Œ‹¡Þ3:Rv¦_ù¥?]…íø‹%0æ¢Ø^Ìw gýh†¶FË­™3橯cù`Èáj«G¨f=h°R± Ȫn¤¼¥™ÝâG)#I©&e©Ö6£96\0\0\0\0\0\0ä·þÌL4/”ôðš6v91¼!à©\rÚ)¥,ù~*—Rg#UR¨ij‘\"£¬rN¤™òÆÞ×PkJ;ºm²>šb©¬¿d&X¤öøç™FÞ­—b÷48øK«K¢T\\Äh^èQ̶#I\Z—hWe+_ͺ£áÞɧI;õ\nÙF©Ç.Vw)7|<èfó‰dÅOœÌšXi©çî‚>íÆU-æ¡R¥ç/·ø1æãÙË.Átý‡2fsÉnÄÍÄiE˜¹u?bD›Vðè¢2#óCa§¡u3åè“3Ãq2â—øšjªw¨üµZÆÑÂèØqN?;Ä^±âœXÒâíR#g3ªDjÙÖ£ì­õ&“”ÊÞ¥\nI*¢)›;-ü¢™óÙxŽj’7AëÄ%Gi¥èÅ¢VÃ8˜ÄTNùBVÚER›Ëeñ*ÄØÌûº²¦WÃZMQºi;iR*h¥ó-·ûÏÿ\0Ÿ>£$\0\0\0\0\0‡!}¿ÃùLv¥x(Ʋæ9È3O\"\noH“Pú¦QiJUÖ;Gš\\/ø‡e>š´êoQ¿{hnW»^\0—S±°É8µÝ{Ë\"ΛÄìJK\\‚*ûÌG”´1)|éÝ\'s6ËÑ@áÌMœà•o+@ó:ˆeuw;uYß*9âíræOl4 ‘YLŽôÔ²3Q#â\"5•E}¤qûSSçøGÝHRb]{~&¸B\nùq@ÐwgvÊQg_Œ=–rcW6æEPÒj\"ØŠ¥öv«×‡vö{:׎÷V\r–Ä}LÖêdD[uØ÷_^½ ?!yÖ‘p<[Lš^ÀZ}ˆÓµ¥Ãø¢k;[cJ.É–6ÖÔèé²”³ï$/DèýY[ìkwRŠšD’Ùà\0\0\0\0ø.n­¬¶Nn—–v\rv§svãupVV6¶;oÌ¥‘™òï±M•¹¡\'Íxö«8xé-Ýãa›™²²£ES´º¡‰®›l13K‚ ¦Yx%²¼ó«rJ±ÜrR’YŸ5B$©eò=4ë_´…ćÙ&ø—N\Z_áý§×îk¦¨HÔòQ;wdW/+Œ^&òú—·Å)5Èú¬i‹(”…î[ŽµÌxræIáWü+®]}f,Õ\n›¶^Gˆá,s‡ôÑ—·©J\'8Ó«‹¢zL+Zª%lŸ”¢Ý$£Y©(Ù:Ãì¹ð]‰¸6¹ÿ\0eÇi%v›•]òJód{o½?Ò$ºµ{ò„;—SØ”I-þ[l;×Ç¢±ö¤e¢ÅŽ3l±b`cn·öFæv6{\nm 톓JZ¨´§»¦„­\\¼¦dJ2ÙÚ€äß#¿ëo†®pM­NÓ·ŒwïÎ8m¶2ö÷iö$’³d¸”mµ$EñÉjD—ûMçr\"Ýb™vKÈ´¡Ý4»§ûës¡Û×܈Ü\ZœÓS‘E¿NU\'®ÇÐÒ|¦{u½ŸåH¶nß0B­Ýa¹GÃ\'‘w~¥xÁ-Œ´¼5ý:š‘Ðú—Ÿ™ŸÙ@\0\0\0\0|¯(å\\„±ì×-e‰s$ cö\' 4ÊW\"¹+HãSwŠ»:º©%µ25šÈˆ×¶ÜœÊ3Bë\râ½ÆóW\\e3®4hÑ‘´Ó/˜ZÀqÞ&‰¢öÓ%ê-¢¶£$ʄʺiS2ÏgÔ@ +ŒÄmÓíRÓ­V’—NQ\\û5˜[B챌ûªÆh®xÖ%kk9­£¥ªž1&rQ%Hjˆ³ÅpæºÕ—·ÀhÇÜïÛt×–f·ØØ,¬žÈêa©ó»±\"““ÚªAú@d„&¢b\n4šcI+\0-î¨ÝR£V^úëè_g¯ÚGÓ<\0\0\0\0WcÚîâ’÷3ÉM214–V9&æ¥n›®ö)ýмsc73MB/ǬDÓ<”%ePªJXˆûº‘„™õ‹³Á¥«G¸‡Zùâ!m_Uº†ŒX:Ã,mˆœ0®y#𖦳U2SDÏ\"²9 ­I^þì)Š#²\r2”®]€\0\0\0<;´~Ébj»„\rmk;^I5£Œ]2š8ó)Ò~ÉjéŽ2K¿!‘¼d dõ‘½šFI) Š¡—]º_ÝÀü8q†•¡ô :jÎ:±Å±EÚ±F¯³³¶n`·¥=Z¢qmL°æèä}œ÷$ £ñêJÜ÷J¾Zi«øwühã“tK¨->ë)…ªØîîtï¨ì%\ZÇy&îÁ\"$År0~ƱكÑò™)23ÆT¹‰[\Z–­•¢:íLáL“—*é{ˆf{Ð^|m|D5ÉÎWtä¬R©y)d¦©zŸXã’.óQD’å“&G\"$¯Þýª#–Y·T/¨R¼µ­B½¥rMŵź¾”ì­¶ß}÷>†{™žÝvò¤\0\0>_”ò;.&ƹ *HëÞ6‡L\'R “$ïjÅhuzuQývCQüüþEÒ¦î:y}ãÆšÆUš,kJ!ïY>}«íFк/no¼ˆ3ÊNZQw35›šrï€+Ëü´òd’JRDvéе¥mO¹£F\n\'Ók~|ýH¿ö3þ8\0\0\0\0\0c÷GT¿½/]ö/Ÿ§žþ_?ÝöF´9Á2ÄGIµ…áöMZØÃ1—\'(³…ºl3ÔA¥½KuÅ’¤ÒRMíñ4é‘âwå$Ô™!¦(³÷RH¥\'š½“~.3,™âÜ3u (¿s’@#.m1HäwK[Úáñ:…ïvtG\'9&2“D‚$¥šÕN0‰Yu\nœn4‘:J_íúþ# \0+øÔË®¡ü&8„H\ZëW·¼·Ò¾Si´¹·êdr¨ÒØe¾þdì}KÐöõ{ìLàë:1\rqjNúËó›Ä›á(»™óZ735ž±Tžþ_»s’°\0\0\0\0\0\0ñÆ”dü~ø?Tÿ\0¨Ê2}±ïnj눲Få¹îêÝ ÓÏo1-º Ÿ¸y€Çù ]…øÄ¢­h¢îÄæÖvý9nüQµHåûÈŒËmºì{ü‡û>÷òm H:–•íëÛ5å;›{“#RTïòK¾ûy~Šˆö2ûŒÈÈv¼\0\0\0\0\0\0uïhJ8³ð=›U¥Ch<Ë^;Ÿ³ïþ±§F Ù[ôØÚL½6ô$‘ã\0\0EJ]ï]úzÁô2þ¼Æ£èsÕÃzTÃ8Æ­•{\ZÑxû…©ÚÜí½¡*Pðïñ}Ÿ còé·Ûð\0\0\0\0\0\0\ZšñÉIõ7£IçwDÿ\0& áq¹ùï-ÃŽì>©é¿¡™™ú\rÀ\0\0ŽŠ%H¿ºò?·ùïøùyt!\0\0\0\0\0\0¥­\Zµ)V«F‰Ö·ëjg¶äf^D{ý o´ü†x\0\0\0\0\0\0\0\0\0\0\0\0ÿÙ',4,0,'','','',''),(80,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',80,80,2703,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \0P\0P\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ÿÄ\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#‘ð3Sa¡±ÿÚ\0\0\0?\0ÏãM5AQ\0ýùj²úö‹Ç¯<‡¿þþ_½TÐ@Z®ši¦š ˆ9àóþ×¾±*ë·ñ)Öú{Ú¥¶¥´ÈJ–YÝ[6hžñe± ©,uƒ$È1Ž“tÕKvD3%ÓôçŽg[IÃ_:kƵÏJí©u¢ëBížì7‘Ô\'vX3i’Rj:¯Gâûä–*²eÿ\0ðÉaýŸM|ši¦š‰ÛîÜ:{KÙžçw,dRtç aKþB‰f¸ðƒë }ãšÔzÞaÊoì-fr€€˜«‰@@D5¨¦Ö®Vº¡bœS“&æì-³L°åmÁ[Öx¡¦ŸS!•¿äédÌ\"á¼µ ÜÀ1‘/ÞÒn}“‚—ìŽæŠU2«ªµÊe&½T©Õ`aëUºÔ4#á ``Ø!\rÅ©lÎ>5ƒt´l\n’(\"ši”\nPÔ)ê\'Óà õÁr˜c-É^jë´ƒŠe÷[¦«ZE‘t\0ŒæÒlÆA¼-•š\'!õ~ÎÂN.A·m2¦Ñ×pù\rjX£¨OR_‡ß·]·d©rÊ8ûä$+ù\' Û¬ó–. š…Ó¬[Úõ¤ìð8Óo\rbñO½¼5†b61T\Z•EW–%BÃNnTJS®dÎ͸ì\"a±Û¦¶í˧~Ëðmõ7\rîøËnx²±ndëýxËZ¬z³1çñ ºñ„ò±¡|¿#;´ÓMu_5Ió7,œ\"‹†îÑ;w8Lª º SY’7ÚªJ¤cDÏÉS LQe[ÉÛDømúÍaýìcúÜœþÌrL°LÕ ›ÂÑ/m_°Ë˜÷~t’FÓP¯Í?“ |ÁR0c[’†wco²WåšuÆ4,ÊìŒ.8ã%T ®´«La”3Êå…‚21oÑ*ÄIÂB«eÉ߶rŠš8Z;AH¬’q먆èÙvÈ÷;º61¨ÌÌa\\?n¹W\"Š¾JØݘ1¨³’N’¿+^Ìú%9A\"©±ætb(CGX7|.{mÔGt{„ꧼ—s\r£\Ze¦jRþ¬ž5°î|‰]\'rÓ1H­þÅ»¯…F ¨ü™„”ëglÚ45V%4¶/ P\0\0àØ8ÿ\0ÍrÓMxç73†vƒ„¯ÛƒÏ÷(ú+Ç0ªLX§ß˜ÇQCB·…†` ©‹ëõ[ÅÀÃ0\"däÝ6jÝ1:œ…„¶¿¸>©½cä3c©ç½2:sH>p\\udŒ¨V.›ÆÜU}»…QùüL•î>ÇCÅu9$‘í2±ÅÕ$ݦà”»ŒqÆi¥Ül4¶—”j5z†ãhòû¸gQt¼¤CÍ×Ü-9áT\']¶l\raïR²5IgMŒ£s)Y¬Á4A²ª5fѳS™™tZ%?ÔëÔ:f™J¨Ã°¯Ujuh†P5Úä Zm š,££˜·!lѪ)¢Šd)H@\0×nûn5MÝí‡;í–ìíÄuk8bÛŽ9*Ñ8w­’Ë8Û 6꩸{^•SlPåMgLISwg8!ÝÞ×Ò9î¤ÿ\0PÄ°…³\'e2ŽÚ²}”ŠÄù¾OäñôéØj%öD­`¥VŸ‰ƒªMÓØfòJ¼4ÝjQ¬}­N3ƒ*…1{@bñïÚ^Ïþþ\\kŸ!令#Àû\0öÖ#ýXê3]RzÌl»¥ ƒ©\0Úî Ç#½\rÛD1té³[gfZB*«Q–ðË\"q*¬Ñƒ€jªj$³V™ZbE¸Ä †YPQˆ8Šå~1Œ$ s8ˆXh¶ØFDÅG7M¤|ls‰¤Ñ“-QI³6mRI³VÉ$‚ ‘$ÈPû}4×ä.¸þ’!Ï^È5\n½â¾ª‰¬¬\r¾¿f…YT»}Ú«EM²|ÅUœs c´=‘G˜m¹­ãÌÝK;LcwÉûOÊ0Qâž=Ë{h¸Îc):Äš cr“\\Çù¶’Änê·ºô¼{Æi»U¢—î_7…&÷é¸L—•7)Ó·~\ràK¾—¹ˆ^fõXŽ,%_q8ZÈ)—›+°‰‘ñŽ_¢æ#êv,›´dƒ‰èS¦Ñ“Õ¤â¢ïŸªÐyôàyãõ«\rí§ø?ˆ©^Rv•YÖÍvSéb˜LÖ>ÆêòÆE›e ^/q:V!îY¸˜Þd7åÓM4ÓV }‹‚+âJ¬äضàÍ WH «K*íÈ$ y*öëèQ±ÂüÅ1J²­#ŸµM‡Pˆ·H€`!C‹ï ~ƒTû¸7<ñäžþ_]CLŒ~I¾ÝÌåoÝ’û¶í UŠ¸\0uE¿îýËÔû}Ð ÌVÖ˜~×ó ˜$R—€ÔÍÓM4ÓPêC‚»þ¨æ/a3-¡dLn.ƒžÈŽcÅödۛώЌbê8ç€0êb鮸4nNð¨¦WJ¢ƒuWËÞ¨ƒc¸QŽ§³ºrdŠ\" ™—TJ\0*G±¦ši¦º¢Í¸½+ñE1vFçhGŸæ•²§MU¶uQIC\0qÉ“/!ä®Ö¿ÿÙ',5,0,'','','',''),(81,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',48,48,1755,'ÿØÿà\0JFIF\0\0H\0H\0\0ÿþCreated by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\nÿÛ\0C\0ÿÀ\0 \00\00\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\nÿÄ\0.\0\0\0\0\0\0\0 \n!1A\"#$23QaÿÚ\0\0\0?\0÷ñÖ3œcÎsãÇœç?Æ1ûç¤ñ½{èpKïÐø§]·_¹Ér¥ÿ\0BsKñƒ]Ïn 4dªæfZ%Ó£ ³+å•r0‰m×&„i¥­-ŽŸjA”g>Œ½î%hM—©Ôé%ýC¿p—µO!¶®ª•6½²­x­iºeš5÷’«Hí)LWäl‘eµáÐæ!kŠ›:æT‡‚—hØq2Ú°½¾”NÝ´MÁj×6®AÍò7—?qYž¹ËŒƒg«Z¤[D¤En±&Z]-–mnBý÷a!—[v\\‰h¡¤2BaRI?¨ÑÜŠ<~/¸y=d§GñõÊÙ3•JM·[ݨ²¶` ´ˆÔ­yÙð¥áNšË\0ɚȥÖYÑʈ‘Š÷O`=£yîŽå| Ò¼°&¸-FÑmf·°+`<ñq{‘*EnÕ˜gÇÉÄ$”€Y˜†`¥¼P‘²#I%¼;…<Êz+Žó<”î#Û£¼g«¨dl9¨nš³&½ƒekÓÙµÔâË)XÊCÂdz«Dš´©±0áN%HiIÈmôÕòR/hvß ñ¶Ì)5>Bð~NÃÇMí¬¦XÌ}Ž¥\']´Øœ©\ZlcÞ’šZµñFQ.6–Õ?` µ/àúÕÊ>¦>IÛXãž£í¥¦`Ó3¾ûlHm%X8×=˜j2.ÝK2Ù1$îó¾ä£çÄÀ7íîˆ2Á)êI1Á²Cwí¡Áº‡n^i>%T%—cƺ€x‹]­l¨_»/ÖCŸ»X™JRÂBÂy¹ŠŸèQ-‚+μë+ug‡\\§yîJ7tæÎÞ{2U0´OH±ßm’YF]qˆZÔa†$fýdšBøÀˆÞ2éF<Àíc.:œe`ð×Zò_š°ð|Çæ½Æ÷®é›%n|á¿´KQi\ZßWK¥”y÷#X0 6ØÛ6£&,SÓMPªÏô;Ä™òþ;F imEªM²IëMiF¡ÉÜŽL¥ÂN¥W†’¶J!O©ViÐÇ2zA\n(¥$ÉGŠ#\n%õ{ž^s*]½ÎûpÉó\\Þ2níEtƒÖܬáfÝÜZ\ZÓm\0é:ëÈ2%û.ºØD§3)ª[F†¥ÊÂú¥a ²ÆÆ],2 ]—ˆøÛ®êÛ ”ZÖϯ*kj4=›±©N1³µ†¨”-c†¹;lŒ:½@ÉΫ+¾‘¯™‚€OêWWªâ!×^EJGNFGÌÃœ$œL°BÉFI\0CE‚x°‚C42˜ZÙ$R‡u·Ç}•­·šZB²•c=/>ìzà¿Á±¬XK®3x·qò»,Ã8ó“+’’Ô-Ú#ÜÆ?*\ZF¹ú £ýV)/%xR3œe‰0á(b0Њ;# ;Kl°Ã\r%¦Ye´cCM6„¡´\'JPœ%8Æ1Ž¶zWmõJýî©e¥Z✬[ &+i!Ú.>Vz8˜©XãE}+d\r\0²!—P¦ÜeÕ¡iÊUœtv³¬OÒ;}qj•e0Ã¥iÚÝ?~AÇ-µ©Ù˜H Ýqå-Åb> à\Zõ+9Ã#7ŒxÆ1Œ\Z—\Z”eÚúì²=`¾t,‚“ã\nÿ\0\"\nn:x%zsøϤèÁ×ç?œz|ãóÕ£ñŒcþ±Œuž§S?¶Ÿüê¯KªÇR+1Uh”a¸è†ÈhTcœ%AŠÆ1ç>?¸Bÿ\0ž¿ÿÙ',6,0,'','','',''); +INSERT INTO `photo` VALUES (1,1,0,'75859b1098e38271','676c41a6030639fa07634741242d99de','2017-09-07 08:55:42','2017-09-07 08:55:42','','','Profile photos','person-175.jpg','image/jpeg',175,175,5476,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0A\0\0\0\0\0\0\0 !\n1A\"Q�2aq�#%3���$&5BR��Es����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����Xg���p|L�sN���}�Y%ZR|�1(�J*I&+�r$0G��)%l�Z�,:��i�(��ϥ�)���J�����*hχoSмI����$�Dj.T�\n1PȌ�4��?�{e���Ӧx�)ж}t�^x\\~�s��2�{���ml&��\0�T2#3��ږ_�،�ûU�Y�f�$���1.�`w��)rr�ǒ��$g�boqd�\Z7\"�i,�0g��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�S�>�\'9��خ� �豆�8$��òŒ©µï¿½Âœï¿½U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJÞµZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qÒ¾.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� JË���m\'Ê¢S-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohÏY�)�^\Z)�T��U�GQ����,fJ��GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��$�Ì2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[Ú‹Ñ“N��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw�����lFÝ’Rב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ç®mÌ•gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cÖ‡6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� Ç­\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&ï¿½ï‡ ï¿½q,���K\r5<���GÝ¢ʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��ò„©´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� �\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SØ”I-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6Ú’\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoÓ•I��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hÑ£\"3i�_0���ME�K�[�EmFI� �tÒ¦e�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ÛºK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�fé·ºz��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6HÜ·=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��l×”�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήÒ¦�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(2,1,0,'75859b1098e38271','676c41a6030639fa07634741242d99de','2017-09-07 08:55:42','2017-09-07 08:55:42','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aÉ–��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CÅ°jR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��×�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\ZÜ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�ìE��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��tÙ«t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@Å FѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oÅ·r�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����dì †Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uÏ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;���U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�S�>�\'9��خ� �豆�8$��òŒ©µï¿½Âœï¿½U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJÞµZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qÒ¾.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� JË���m\'Ê¢S-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohÏY�)�^\Z)�T��U�GQ����,fJ��GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��$�Ì2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[Ú‹Ñ“N��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw�����lFÝ’Rב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ç®mÌ•gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cÖ‡6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� Ç­\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&ï¿½ï‡ ï¿½q,���K\r5<���GÝ¢ʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��ò„©´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� �\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SØ”I-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6Ú’\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoÓ•I��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hÑ£\"3i�_0���ME�K�[�EmFI� �tÒ¦e�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ÛºK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�fé·ºz��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6HÜ·=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��l×”�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήÒ¦�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(5,2,0,'75859b109d5b24c8','a78adc969a71bfd985d769baa2d51c78','2017-09-07 08:56:53','2017-09-07 08:56:53','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aÉ–��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CÅ°jR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��×�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\ZÜ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�ìE��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��tÙ«t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@Å FѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oÅ·r�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����dì †Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uÏ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;���U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�S�>�\'9��خ� �豆�8$��òŒ©µï¿½Âœï¿½U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJÞµZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qÒ¾.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� JË���m\'Ê¢S-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohÏY�)�^\Z)�T��U�GQ����,fJ��GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��$�Ì2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[Ú‹Ñ“N��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw�����lFÝ’Rב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ç®mÌ•gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cÖ‡6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� Ç­\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&ï¿½ï‡ ï¿½q,���K\r5<���GÝ¢ʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��ò„©´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� �\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SØ”I-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6Ú’\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoÓ•I��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hÑ£\"3i�_0���ME�K�[�EmFI� �tÒ¦e�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ÛºK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�fé·ºz��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6HÜ·=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��l×”�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήÒ¦�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(8,3,0,'75859b10a3a57734','cde8bd4c269d017826b5c163d04134ae','2017-09-07 08:58:34','2017-09-07 08:58:34','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aÉ–��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CÅ°jR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��×�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\ZÜ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�ìE��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��tÙ«t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@Å FѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oÅ·r�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����dì †Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uÏ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;���U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�S�>�\'9��خ� �豆�8$��òŒ©µï¿½Âœï¿½U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJÞµZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qÒ¾.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� JË���m\'Ê¢S-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohÏY�)�^\Z)�T��U�GQ����,fJ��GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��$�Ì2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[Ú‹Ñ“N��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw�����lFÝ’Rב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ç®mÌ•gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cÖ‡6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� Ç­\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&ï¿½ï‡ ï¿½q,���K\r5<���GÝ¢ʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��ò„©´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� �\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SØ”I-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6Ú’\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoÓ•I��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hÑ£\"3i�_0���ME�K�[�EmFI� �tÒ¦e�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ÛºK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�fé·ºz��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6HÜ·=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��l×”�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήÒ¦�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(11,4,0,'75859b10a64380c7','97611ba91637997e24ea7ad58fb9cb2e','2017-09-07 08:59:16','2017-09-07 08:59:16','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aÉ–��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CÅ°jR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��×�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\ZÜ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�ìE��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��tÙ«t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@Å FѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oÅ·r�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����dì †Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uÏ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;���U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�S�>�\'9��خ� �豆�8$��òŒ©µï¿½Âœï¿½U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJÞµZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qÒ¾.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� JË���m\'Ê¢S-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohÏY�)�^\Z)�T��U�GQ����,fJ��GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��$�Ì2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[Ú‹Ñ“N��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw�����lFÝ’Rב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ç®mÌ•gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cÖ‡6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� Ç­\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&ï¿½ï‡ ï¿½q,���K\r5<���GÝ¢ʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��ò„©´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� �\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SØ”I-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6Ú’\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoÓ•I��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hÑ£\"3i�_0���ME�K�[�EmFI� �tÒ¦e�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ÛºK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�fé·ºz��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6HÜ·=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��l×”�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήÒ¦�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(14,5,0,'75859b10a89b26b7','1e6e86cff989b84650c44bf8f408250a','2017-09-07 08:59:53','2017-09-07 08:59:53','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aÉ–��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CÅ°jR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��×�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\ZÜ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�ìE��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��tÙ«t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@Å FѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oÅ·r�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����dì †Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uÏ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;���U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}�����OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�)^�2-gQ~ESA�j�ƴS��<���0\0\0\0\0\0\0\0v�S�>�\'9��خ� �豆�8$��òŒ©µï¿½Âœï¿½U��Y)�O�&DH]6B�&�KMeN�D�SL�8�d��#z��9�۔�g,�ܮ��G w�7GggU)F�]Es�i-��DRd�{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i)i���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#����F�� ʧJÞµZT}��$�������|����7����u�ç(\'I�]_���/�Yk1�S���Q��\"�x��f�\\r���Z\\kp�qÒ¾.oU�u������Z�n���)����X�Fd��5Q1e�c�@���J�{LX(�GԽ��3\\�[���a,|�M.�kQ�&_�,���R�\ZK��6>i#2Y*h@Wu+����-.���q�\'c)�Z�]X��\'f�I�Q��0�J�<�H�j�RCZ$1��.�˟��4�?¿ �գ�\"t]�N��&z}Ȩ�4���\0*����AMq�%��%[1�PT�ɩ��Æ3�R��R��l14z�Y\"�d��G�N���� JË���m\'Ê¢S-BU5!j/�Iܭ���1�/FQ\\�^��.h�]P0��ohÏY�)�^\Z)�T��U�GQ����,fJ��GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��$�Ì2�.��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Z6�;�<��$���%jhvs2R�f���:>-DdJZ��)%��\0#[Ú‹Ñ“N��Ve��M��|����<�qE������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���Q��?�0�Rv�Vg#۔��+���E�1��vl�\0\0\0\0\0����?�Ɯ^��0�R�lw�����lFÝ’Rב�̋�rK�3=�2###�h��,��I��7_�Cku齒笩Y��;���a{`\0\0�\'uXh����Y\'q�E��Ix��}�RÓI_/_#�qG�OO��%�����3.\'�\\�m������>�t��2�7 ���36(�FffJw_C4�4yZ*\0\0\0\0\0����\\�1.�۷��C���6����yC��2t2$��3�K�������\\��.�K�\r^\'�G���E���);S/�ҟ����E��s,��f/qB�5�q�C\"Ç®mÌ•gx�/���6l�5|*��Io�$����}X\0]�Uz�a�� ��jv�C0�)�8�.�op���cÖ‡6���\'R (W�����J�\"�Sf>���UKS���*T�Φ�=72��?���[ َ��\0�����u��&|�5�\"�-Uh� Ç­\nV#�9Mԗ��;�H�$i5\"�̢�:��g&�\0\0\0\0\0���ك����F��&7��<!�E4��/�R���5U*���\n*:�$�N�����$\ZҎ�l�����k/�� ��)=��9�&Q��eؽ��\r>���1\Z�T|�J�m��F���J��n��w�i�N�o[/���8�����&ï¿½ï‡ ï¿½q,���K\r5<���GÝ¢ʥ����*T����\0/�<�|{9e�.���L�y-ؙ���\r\"ȳ.��Q�j�[o��OB�g��&f)��e�+/�4�\\�Q�j�����Ѱ�~wh�c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�\"�3���$n��=�J��K�\'�D��q1�8��ò„©´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���|���\0\0\0\0\0���\0/�!3ڕ�\Z˘� �.����s.b������U�~T��22T��<�)�������qv�s\'��\ZPH��GzjY��|�F�2�����?jj|�\0໩\nLK�c���A_.(\Z����J �������Lj��Ȫ\Zy��\"�}����ݽ��ε�Ճe�S5:�$�n�\Z���[�� �\"�d����F��(��(Y��\ZQvL����GM���y!z\'G�ǾƷu(���%;<\0\0\0\0\0?�յ������������n�n�\n����m���3\"\"\"=�ؼ����\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�E�=4k_��ć�&��N\Z_�����k���H��Q;wdW)%�/y}\'��)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zLKZ�%l����$�Y�(�:���]��6��\0�㴒�Mʮ�%y�2=�ޟ�$��{�;�SØ”I-��m�z�Ѹ�U��)h�c���,X�ۭ�ѹ���›C;ccg)�-TZS��BV�^S2%l��@ro�������W8&اi��;��6�{{��IY�\\J6Ú’\"��\"J�|��w\"-�)�`t��J��K�q���:�}�7�4��QoÓ•I��4��{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�k$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�>E��{�殸�g]hÑ£\"3i�_0���ME�K�[�EmFI� �tÒ¦e�Ϩ�W�ۧڥ�Z�%.���/�k0���c�U��\\�J��r [GKUkF�f�������J[�D�=��(��l\'�\0\0\0\0\0\0= ����1Wή1�n\ZݪLV��,���ګ��V0��^�`q-O�52df��Jy|�e9\r���O*�����d=�\09���.s�\Z�\0�&�V�� ��[u;� ÛºK�_Q(���d^����x��p���:��L5���\\+�幞�Y�{�C����ۧ��@\0\0\0\0\0\0@��R��:�X��R���{�fé·ºz��\Z���{����7�G�x\0\re��K��)�Z�4.=���b�����Wf�yi=��l�������>��L��p��\0pt=����UrG���\'�����z�R/��J�\0\0\0\0\0\0\"C�?\ZQ�����S��(���m�]q�6HÜ·=��[�zy��%�O�\'�`1�@�BWaA�1#h�C�(��9��?M��Q�H��\"3-������c�ѷ= D�ZW��l×”�m�L�IS�w�.��оʈ�2� ��v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;����/�F ��鱴�zm�I\"�\0\0���޻���\0c�d5C�ήÒ¦�5l��֋��-N��m� R��~�w�B���߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��.������\0\0\0�T��^G��\0]�\0?/.�2\0\0\0\0\0\0\0`T��V�*�h�:��mL�܌�������\0\0\0\0\0\0\0\0\0\0\0\0��',4,1,'','','',''),(17,6,0,'75859b10ab07f500','240eef737fb1a7e5d0bf2425f9f4030e','2017-09-07 09:00:32','2017-09-07 09:00:32','','','Profile photos','person-175.jpg','image/jpeg',80,80,2697,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\01\0\0\0\0\0\0\0\0 !1\n\"QqA#���3���\0\0\0?\0��M5Aq\0�����4�M5�ݸt���=��X�\"��™!D�p< ��_x��r���Y������C�������ê�T,Q�rd�其aÉ–��+z�4��d2���:AY1.�Z�F�`H��k7>��C�b���M���r�I��U*UXz�n���h6F�CÅ°jR6g\Z�� �6@�IM4�\nP�)�\'�� ����c-�^j����e�[��JE�t\0���l�A�5��*���ga\'��2��×�\rjX��OR_���]�d�s�8��$+�\' ۬�L%h��Au��(VH����VW&8\'�zr�� \na��p��p~��o�\0\">�?�:�;�pMT.�cר%\'g���>�xk��x���3���Ԫ*��j*sr�R�s&vm��a\r��00��n];�_�o��ow�[sŕ�s\'_��X��cՙ�7?�D����}� ��ݦ�k���/��d�\\7v�۸n�0U�X��Ȭ���RU#57%9L%0 D@u�o\'l9��5�����Rs�1�Y2�3T<$oKD��~�.`W�z�$���_�\'@�ꑄ�k\ZÜ�3��x���,�3�1�fWdaq�*�u�Zc ���W,,��~�V\"N[.O=��Pt��*���Ed��]D7@�˶G��ѱ�Bfc\n��uʹ�UV�ìE��\"t��Z�g�)�\nj�r�ш�N`���M�Q������6�i��)K��x�øY�%t��SL���W�?�w_\n�!R�; )��ٴhz�IؼR�@\n�=��M5�[�����n?ܣ�x�©1b�~cE e\n�>�@.�,S��o ��=��tÙ«t��r�������� ͎������ �r�$eB�t�6���*���$�q�:+��$����.�&�7\")A���f�]���KiyF�W�n6�/��uK�D<�}�ӞBu�ah����+#Q��t��72���D*�Vm59��E�S�N�C�V`)���;\n�V�V�e]�@Å FѰ�ɢ�:9�dȃf�QM�!JB\0���j���w�-�ۈ��oÅ·r�U�$p�[$3�q�m�1Sp��(,�� �ʒΘ$�����#�ۻ��@�=�t����dì †Q�VO���X�7���>�;\rD�ȕ����0uI�{,�IW���J5���� �pe9L_��!���۸�~{~uÏ���?��\0\Z��Bk�WY��t��u ]�8�w��h�.�6kk��HEUj2��dN%U�0�\rUMT�j�+LH `w���*\n\"�\\��0����g \rѼ|dLTst�G��0h�M0b��3f�$�5l�H �i&B��馿!t��|�z�@�U��Me`m��{4*�%���V.m��*(��C�1�Zf\r3;���U��sن��\"���-�.�9�J>tL~��H�,���$�~��v��f��UFYVEq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(20,3,7,'75859b10b87ebc39','18a7495723879503dac64b352e245508','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b~�=I~}��vÝr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(21,3,7,'75859b10b87ebc39','18a7495723879503dac64b352e245508','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(22,0,2,'75859b10b87f222d','4b7db531ad1920a7cb8fb76aed46ddd9','2017-09-07 09:12:55','2017-09-07 09:12:55','','','Contact Photos','f958f83dd2af4c30b30045dfc6ff0718-4.jpg?ts=1504775108','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(23,0,2,'75859b10b87f222d','4b7db531ad1920a7cb8fb76aed46ddd9','2017-09-07 09:12:55','2017-09-07 09:12:55','','','Contact Photos','f958f83dd2af4c30b30045dfc6ff0718-4.jpg?ts=1504775108','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b~�=I~}��vÝr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(24,0,2,'75859b10b87f222d','4b7db531ad1920a7cb8fb76aed46ddd9','2017-09-07 09:12:55','2017-09-07 09:12:55','','','Contact Photos','f958f83dd2af4c30b30045dfc6ff0718-4.jpg?ts=1504775108','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(25,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5Éb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒThÜ‹}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YÂŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�ò„©µï¿½Âœï¿½U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�Ô�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��Ý‘$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�â—£(�d�BÅ—4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dÓª>�o!Sg�[$i*��<�\\Qng|Q�u��,�î­,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�Ø�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�Ç�5%�~��<��&��ܾ^�G�âšï¿½ï¿½_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��FË­�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��Å¢V�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SØ”I-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm í��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hÑ‘��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RÓ­V��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����t×–f���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEÚ±F����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$Ô™!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��Øe��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��njëˆ�F���� ��o1-����y��� ]��Ä��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�é·ï¿½ï¿½\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(26,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��Ö®V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rÅ©l�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ÚªJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0×n�n5M��;����uk8bÛŽ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0P��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(27,2,8,'75859b10b880d425','5b0e9c6920adcf8efafaf3743d0e0c6c','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(28,0,8,'75859b10b8813eeb','db4dd6c60ea3b83171c94ae1c492fa8c','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','22875ea1ab42e09a2f1d3869cd6edfe7-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn\Z��b��R���9~�2w���o\nstET�x��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(29,0,8,'75859b10b8813eeb','db4dd6c60ea3b83171c94ae1c492fa8c','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','22875ea1ab42e09a2f1d3869cd6edfe7-4.jpg?ts=1504775234','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b~�=I~}��vÝr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(30,0,8,'75859b10b8813eeb','db4dd6c60ea3b83171c94ae1c492fa8c','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','22875ea1ab42e09a2f1d3869cd6edfe7-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(31,4,9,'75859b10ba668548','adef541d0f334352940ad40251e15158','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(32,4,9,'75859b10ba668548','adef541d0f334352940ad40251e15158','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b~�=I~}��vÝr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(33,4,9,'75859b10ba668548','adef541d0f334352940ad40251e15158','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(34,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5Éb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒThÜ‹}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YÂŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�ò„©µï¿½Âœï¿½U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�Ô�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��Ý‘$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�â—£(�d�BÅ—4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dÓª>�o!Sg�[$i*��<�\\Qng|Q�u��,�î­,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�Ø�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�Ç�5%�~��<��&��ܾ^�G�âšï¿½ï¿½_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��FË­�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��Å¢V�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SØ”I-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm í��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hÑ‘��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RÓ­V��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����t×–f���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEÚ±F����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$Ô™!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��Øe��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��njëˆ�F���� ��o1-����y��� ]��Ä��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�é·ï¿½ï¿½\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(35,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��Ö®V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rÅ©l�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ÚªJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0×n�n5M��;����uk8bÛŽ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0P��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(36,2,10,'75859b10ba67f3b5','01ff45af20fe4c6fb230e6fc773f3ef8','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(37,0,10,'75859b10ba6852dd','de20aa50472d9b54f292966d1cf693c4','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn\Z��b��R���9~�2w���o\nstET�x��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(38,0,10,'75859b10ba6852dd','de20aa50472d9b54f292966d1cf693c4','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b~�=I~}��vÝr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(39,0,10,'75859b10ba6852dd','de20aa50472d9b54f292966d1cf693c4','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(40,5,11,'75859b10bb574e2e','01ebf2eb957e5aef5463ba5ae6510ef5','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(41,5,11,'75859b10bb574e2e','01ebf2eb957e5aef5463ba5ae6510ef5','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b~�=I~}��vÝr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(42,5,11,'75859b10bb574e2e','01ebf2eb957e5aef5463ba5ae6510ef5','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(43,2,12,'75859b10bb588dfc','b32d851ca091305b4cf5d115070cedbd','2017-09-07 09:11:20','2017-09-07 09:11:20','','','Contact Photos','777ac66400f3fef5ff42189840387ede-4.jpg?ts=1504775093','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn���b��R���8��2w���o\nstET�x=d��>��H��l�MD���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(44,2,12,'75859b10bb588dfc','b32d851ca091305b4cf5d115070cedbd','2017-09-07 09:11:20','2017-09-07 09:11:20','','','Contact Photos','777ac66400f3fef5ff42189840387ede-4.jpg?ts=1504775093','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b��=I~}��vÝr��(��C����/n��X�H�rN*ߎ�Y�=Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(45,2,12,'75859b10bb588dfc','b32d851ca091305b4cf5d115070cedbd','2017-09-07 09:11:20','2017-09-07 09:11:20','','','Contact Photos','777ac66400f3fef5ff42189840387ede-4.jpg?ts=1504775093','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(46,0,12,'75859b10bb58e506','777ac66400f3fef5ff42189840387ede','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn\Z��b��R���9~�2w���o\nstET�x��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(47,0,12,'75859b10bb58e506','777ac66400f3fef5ff42189840387ede','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b~�=I~}��vÝr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(48,0,12,'75859b10bb58e506','777ac66400f3fef5ff42189840387ede','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(49,6,13,'75859b10bc4f03c7','f958f83dd2af4c30b30045dfc6ff0718','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(50,6,13,'75859b10bc4f03c7','f958f83dd2af4c30b30045dfc6ff0718','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b~�=I~}��vÝr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(51,6,13,'75859b10bc4f03c7','f958f83dd2af4c30b30045dfc6ff0718','2017-09-07 09:17:49','2017-09-07 09:17:49','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(52,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5Éb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒThÜ‹}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YÂŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�ò„©µï¿½Âœï¿½U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�Ô�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��Ý‘$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�â—£(�d�BÅ—4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dÓª>�o!Sg�[$i*��<�\\Qng|Q�u��,�î­,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�Ø�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�Ç�5%�~��<��&��ܾ^�G�âšï¿½ï¿½_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��FË­�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��Å¢V�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SØ”I-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm í��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hÑ‘��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RÓ­V��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����t×–f���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEÚ±F����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$Ô™!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��Øe��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��njëˆ�F���� ��o1-����y��� ]��Ä��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�é·ï¿½ï¿½\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(53,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��Ö®V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rÅ©l�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ÚªJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0×n�n5M��;����uk8bÛŽ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0P��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(54,2,14,'75859b10bc511276','ed2cf7a93daffb15532a78b261ac4685','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(55,0,14,'75859b10bc51688d','1eaeb44ce16c9a8548707cafe998e6dc','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','d74f209bfcd190b3864fa678e5068a16-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn\Z��b��R���9~�2w���o\nstET�x��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(56,0,14,'75859b10bc51688d','1eaeb44ce16c9a8548707cafe998e6dc','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','d74f209bfcd190b3864fa678e5068a16-4.jpg?ts=1504775545','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b~�=I~}��vÝr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(57,0,14,'75859b10bc51688d','1eaeb44ce16c9a8548707cafe998e6dc','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','d74f209bfcd190b3864fa678e5068a16-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(58,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5Éb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒThÜ‹}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YÂŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�ò„©µï¿½Âœï¿½U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�Ô�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��Ý‘$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�â—£(�d�BÅ—4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dÓª>�o!Sg�[$i*��<�\\Qng|Q�u��,�î­,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�Ø�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�Ç�5%�~��<��&��ܾ^�G�âšï¿½ï¿½_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��FË­�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��Å¢V�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SØ”I-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm í��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hÑ‘��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RÓ­V��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����t×–f���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEÚ±F����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$Ô™!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��Øe��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��njëˆ�F���� ��o1-����y��� ]��Ä��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�é·ï¿½ï¿½\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(59,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��Ö®V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rÅ©l�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ÚªJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0×n�n5M��;����uk8bÛŽ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0P��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(60,4,15,'75859b10c420acd6','22875ea1ab42e09a2f1d3869cd6edfe7','2017-09-07 09:16:42','2017-09-07 09:16:42','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(61,3,16,'75859b10c4223968','9c78857b3d725c1c6d1227a7b8cbe6b2','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn���b��R���8��2w���o\nstET�x=d��>��H��l�MD���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(62,3,16,'75859b10c4223968','9c78857b3d725c1c6d1227a7b8cbe6b2','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b��=I~}��vÝr��(��C����/n��X�H�rN*ߎ�Y�=Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(63,3,16,'75859b10c4223968','9c78857b3d725c1c6d1227a7b8cbe6b2','2017-09-07 09:09:29','2017-09-07 09:09:29','','','Contact Photos','9c78857b3d725c1c6d1227a7b8cbe6b2-4.jpg?ts=1504775234','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(64,6,17,'75859b10d79196fc','15048d33e71544a25a6dd13bb081c78f','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn���b��R���8��2w���o\nstET�x=d��>��H��l�MD���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(65,6,17,'75859b10d79196fc','15048d33e71544a25a6dd13bb081c78f','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b��=I~}��vÝr��(��C����/n��X�H�rN*ߎ�Y�=Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(66,6,17,'75859b10d79196fc','15048d33e71544a25a6dd13bb081c78f','2017-09-07 09:13:05','2017-09-07 09:13:05','','','Contact Photos','15048d33e71544a25a6dd13bb081c78f-4.jpg?ts=1504775545','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(67,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5Éb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒThÜ‹}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YÂŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�ò„©µï¿½Âœï¿½U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�Ô�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��Ý‘$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�â—£(�d�BÅ—4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dÓª>�o!Sg�[$i*��<�\\Qng|Q�u��,�î­,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�Ø�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�Ç�5%�~��<��&��ܾ^�G�âšï¿½ï¿½_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��FË­�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��Å¢V�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SØ”I-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm í��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hÑ‘��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RÓ­V��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����t×–f���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEÚ±F����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$Ô™!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��Øe��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��njëˆ�F���� ��o1-����y��� ]��Ä��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�é·ï¿½ï¿½\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(68,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��Ö®V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rÅ©l�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ÚªJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0×n�n5M��;����uk8bÛŽ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0P��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(69,5,18,'75859b10d792d9a0','d74f209bfcd190b3864fa678e5068a16','2017-09-07 09:16:09','2017-09-07 09:16:09','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(70,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5Éb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒThÜ‹}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YÂŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�ò„©µï¿½Âœï¿½U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�Ô�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��Ý‘$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�â—£(�d�BÅ—4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dÓª>�o!Sg�[$i*��<�\\Qng|Q�u��,�î­,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�Ø�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�Ç�5%�~��<��&��ܾ^�G�âšï¿½ï¿½_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��FË­�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��Å¢V�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SØ”I-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm í��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hÑ‘��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RÓ­V��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����t×–f���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEÚ±F����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$Ô™!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��Øe��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��njëˆ�F���� ��o1-����y��� ]��Ä��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�é·ï¿½ï¿½\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(71,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��Ö®V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rÅ©l�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ÚªJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0×n�n5M��;����uk8bÛŽ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0P��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(72,0,19,'75859b10e58a60ae','2b902d193517f74d2c14e163cff8c10e','2017-09-07 09:16:08','2017-09-07 09:16:08','','','Contact Photos','6.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(73,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5Éb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒThÜ‹}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YÂŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�ò„©µï¿½Âœï¿½U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�Ô�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��Ý‘$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�â—£(�d�BÅ—4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dÓª>�o!Sg�[$i*��<�\\Qng|Q�u��,�î­,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�Ø�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�Ç�5%�~��<��&��ܾ^�G�âšï¿½ï¿½_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��FË­�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��Å¢V�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SØ”I-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm í��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hÑ‘��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RÓ­V��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����t×–f���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEÚ±F����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$Ô™!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��Øe��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��njëˆ�F���� ��o1-����y��� ]��Ä��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�é·ï¿½ï¿½\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(74,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��Ö®V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rÅ©l�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ÚªJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0×n�n5M��;����uk8bÛŽ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0P��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(75,0,20,'75859b10e79de61b','01f62fe9af5d22dfb7664e78e64acd43','2017-09-07 09:16:41','2017-09-07 09:16:41','','','Contact Photos','3.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(76,0,21,'75859b10ebd73888','39e7b822c093a22f70de8782c7d652d4','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',175,175,5493,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Qa�q�%23�#$&5BR����Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Z\'���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo�мI����$�Dj-� (�C\"�cI(s���_�L�:g�� `w�I����9�s.w�Y���a���C\"3:I��e�~��g,�ڮ�Ϩ�6�&�t�t��/iK��xv<�v #=�{�$�ѹ�Idу=��#�}�G���!�\0\0\0\0\0\0\0*|z�B��6�Zp�]�s\"�A�Ú\r�E\r��{�b��Z�HI��j��>Eq�E�Ë’S.:t�7�Vg�5�u;��Ys=�YFZ�Rk��}����j��ʮHnl�Ifh���M6&\";M�DD�]��¿SR��c�h�B��{��t��ƤG��V�Mʽ4$�&2��\"����%���{̈}9$����489hÛ†�� @�e��崭�\Z��ط<��m�(v&�Ne{�ȵE�qQMI��\Z�uO�h���D<�\0\0\0\0\0\0\0qÛGfn\Z��b��R���9~�2w���o\nstMT�x=d��>��H��l�MT���:�!M2��a��L��c��/�Ri��Cr���������T�\Z�uÎ¥$�F�IN��춆�q�5��S�,-B��c�^�op�}AW�8�Y)�c?��T��2Fi��դkI��$b�Փ�é¸ï¿½A��\\<���F��h�ŭ�ܿIk�)�3^�N�ٓ�wu]��k�U4�J���8�W�*�F�7�`^U:V��ң�I%�Ì·?��|����C{�Oh�[�:r�q� ����0\\���\Ze0\\�ޅ\Z��.����RvZ��NOI\n#�����O v���-ik�F�����o�;�E�I����ձ��5�\Z�Rv!,��\\4;����MyE�3��t�a9��B��:̌�[�X�T���h_\"��r4k��*�F\\��U:��M�z�\0�u#�\0�C�\0\0\0\0\0�>�f�r���Z\\kp�qÒ¾.oU�u������q-S�CJK��PSǬf�2JJ��G�D Ym���+>!҄�^�\n\'��/{} �W7��-K;�K���kI�� (�;T�F��\r��HÌ–J�\0��J�sj� K��\0��m���pÖ«WV\'�\"IÙ¹jTlx�;Ò¤O,R��Ôǖ� edK����:�8���<)5h�y Ó�w ��r*-�0�������Bf��J& u:fIV�r�:rjh.p�甴���9� M��H���>���듲pg�BÒ²4:{-��RT�P�MHZ��Rw+|�)�D�qKÑ”W2W��e����j�O{F|��aM)xh���ʴH��-�IF�3æ©GÙ\0\0\0\0\0�q���d-�B\\*�u���D�Z��nÇ®~�4��gfG�y�N��-m�ݯ�m(ָ����m����WW���IoԺ������w2I��HX%�Lza�֞X��Y��;�$�D�Q{}�54;9�)k3S���2%-|Ĕ����\0��E�ɧT|+2�B��B�H�U�y���������K>Yk�[\ZYN ��\"ZyTGV\ZÄ¢5MGR�OO��&7��� �;_��Ou��[7���O��?�0�Rv�Vg#۔��+���E�1�[Ù²\0\0\0\0\0��;X��\Zqz��qJ����2c:�#��vIK^Fk4�B/�X���﹑�E4�eh�M8�8(�:�\0s2ia���{���CT��\0XR�J��������dz�]���d��݉� � �,�1r�~��6���DdG��OB�g��&f)��e�+/�4�T�Q�j�����Ѱ�~w��c�8���ڤF�gT�ճ�G�[�M\')��?J�UDR)6v[�#E3���$n��=�J��K�\'�D��q1�8��ò„­´ï¿½ï¿½7�(��U����ueL�����t�v2Ò¤T�K�[o���\0>}FH\0\0\0\0\0B��\0��Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���-�Z�<9sN����.��j�M� �#�p�9��h���ԥ�i�ʼn�Q=&�U�O�Qn�Q�Ԕl�a��\\�.��\\�\0�㴒�Mʮ�%y�2=�ޟ�]Z��B˩�J$��\0-��F��X� R2�b���X�01�[�#s;=�\Z�\r&��QiOwM Z�<�dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD�����E��2���iC;�iwN1���C����59��\"�~��O]����O�[��^T�f�1��!����q�2yq��W���K�Q�ө���y����\0\0\0\0��U��K�r�X�2@��?bp�L�r+��d�057x������[S#Y���{m�̣4.��+�o5u�S8���F��M2����h�/m2^��*+j2L�L���3,�}D\0���F�>�-:�i)t���Y��.�Ϻ�f��bV���Z�:Z��`W%T���3�>I��>Fd���F�-$�j#;*O$��)R�])}����[��d�\0 z���~B�пgG 4�L��=c��&n��3κu�6��[�8�e��T�Ҕ�.GUF�(�G��$^J�ڑ�\r��ſ���q��خ��wZ���\r���n�������ÙL5>wv$Rb2{UB�?H ���LAF�Li%`���Tjѫ�Q��\0>�������\0\0\0\0��������SG �M%�B�I�y�[�뽊G?t/ǘ���P����4�% YT*���\">�a&}b��pij��aÖ¾x�[W�n�����b\' +�H�%���L��3Ȭ�NC+RW��\nb��L�+�`\0\0\0��!�MWp�᭭gk�&�4q��SGe:O�-]1�Iw�#27������7�Q��%!�T2�C����0Ò´>�MY�V8�#ch�V(��vv������TN-�������~=I[��W�M5㿀�rn�u��e0�[�Î���X�$��!D��B���;0z>S%&FxÊ—1+cRղ�GB���)�r�]/q Ãz Ï����9��U/%,��/S�rC��j(�\\�d��$D���eQ�ȵ��}B��j�+�n-�-��ܧem����3���ë·ï¿½ \0�����q65�YRGX���:a:�\\�\'{V(�C�Ӫ���\Z����.�7p�����4�2��cZQz���_j6��{s}�A�Rrҋ������ӗx�^_է�$�R�#�N��+j}�\Z4hQ>�[����E�\0��� �\0\0\0\0��R�t�wؾ~�{�|�\0��0��� ��\"8\"M��/�j����9E��-�`អ\r-�[�,�&��oo��L��)&��\r1E���E)<���q�d�ᛨYE���p�i�G#�Z����/{�ۢ99�1��$%,Öªq�H\"˨T�q���R����\0\09_Ʀ]u�1�\"@�Z��徕�M�ͿS#�F��k-��\'c�^�����bgYшk�Rw�_��$Ø¿ E� Ϛѹ���c/nA+����=�b/\n#Ü‹a=@\0\0\0\0\0�_��\0���uq�+p��Rb��if�H�F�^ʱ�����j}٩�#55�S����)�l�\"yP���������!�\0Í®/1s�p���q4����?�۩�4�^��_2���De�\"�?�k�͛��F�ԠGZa���uB�^w-�� B�G���:l_��zK�\0\0\0\0\0\0�AX�/�������,�zO���n�{��i���l��O���q?~������\0�]]Ľ�Ҟ�� �B���?�(��\\levo\'��߮�l�������}�ؙG82����{��ä¯ï¿½ï¿½O]�������������\0\0\0\0\0\0D��~4�\'���!���FQ��{sW\\D�͒7-�s���^�{y�m�����8��J�(?�$mh{Ev\'6����wâªG/�Df[m�c��8�\0��ǿ�nZ@�Դ�o^Ù¯(9��ܙ\Z��|�]����TG���fFC��\0\0\0\0\0\08s�|kBQś��ޭ*A�Z�����:3�N�ߦ��eé·¡$�w\0\0z*R�z��������\Z���gW\r�S �\Z�U�kE���ks����Cÿ���h[�M��߀\0\0\0\0\0\0��׎JO��\ZO;�\'�0�g ���ynwd��OM� ���n\0\0\0 tQ*E�ב����ˡ �\0\0\0\0\0\0-hÕ©J�Z4N��[S=�#2�#��[}O�g�\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(77,0,21,'75859b10ebd73888','39e7b822c093a22f70de8782c7d652d4','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Lٞ�w,dRt� aK�B�f���� �5�����5��b�%֡��Z�uZê…ŠqNL�����2Õ�oY↚}L�VB�\0���0���ւ7s\0�D�{I��N\n_�J;�)TÊ®>��)���UR�U���V�PlÐ����`�lD4S�M�8��\r�fѲ*H��i�P)CP���O 3�{�a��%y��V�)��yn��YiE�3�I��Vh����; 8�Ý´Ê›G]��5�b~�=I~}��vÝr��(��C����/m��X�H�rN*ߎ��\\==Z�Q�ed���{��\\�����n��X�^¹Z���2�TƓ�e�%W\"���\"��wFVe�L�8$���@K�aM`9G�zv�i�e���s���^�q�Y���9���9(h��9�H��F�`�kd�)�����I$B��r�\n\"n5�����}.�� 9�l2�m&�\n�b����+$V�`\n�\0++���9W��0�h�q�q�������G�\0G��Z�~. ��׬c�����8�o\r��O��5�b61T\ZEW�%B�NnTJU2gfܤ��lué…-�r�߲�}M�{�2Ûž,�[�:�\0^2�֫��A��DH.�a<��h_/���4�]W�R|��\'�ỴN��*�.���Ed������Q3�C��S\0�DYV�vÑ>~�X{��\'?���,5C�f�K�W�2�}ß$���+�O��0T�\'cX����X��l���f��q� 0�# �8�U(+�*�e �r�a`��[�J�p���rw휢���V��E�+$�z�!��]�=�îŒj33WÛ®Uȇb����7f j,����׳>�NPH�G,y���Q�\r� ���u��:��%�hÆ™i����\'�l;��\"WIÜ…4�R+E��n��Q�*?&a%:��6�\rU�M-��(\0\08\0�?�\\��^���á ï¿½+�����>����*�)��1�P�P���a�$�b�:�V�p0���97M��LN�!a-���oX�\0���y�L����Y#*���_n�T~%{����]NI${L�quI7i�0���q�iw\'M-��\Z�^���<���]/)�u� NxU �m���X{Ԭ�FY�c(��Vk0Ml��Y�l��Df]�O�u:��Y��R�0�+�Z�Z!�\rv��[F���G&�(��-�D4j�h��\nR\05�۾ÛSw{a�e�;qZ���_Ê´D���d�r�6�ͺ�T�=�J )�H(r&�� &�����n�k��� �� bXBٓ��GmY>� E�l�\'�x�|�5�\"F�r�O���&�� �y%^\Zn�(�:Ô“H�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(78,0,21,'75859b10ebd73888','39e7b822c093a22f70de8782c7d652d4','2017-09-07 09:19:08','2017-09-07 09:19:08','','','Contact Photos','4b7db531ad1920a7cb8fb76aed46ddd9-4.jpg?ts=1504775575','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>J[X㦣�`�3���l8m%X<�=�j�2.�L2�1\"����D�7�0�Ĉ2�+�I1��Kw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������)�n|���KQi\Z�WK��y��#Y, 6��6c&,S�MP�Δ�3�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''),(79,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',175,175,5486,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0�\0�\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\n  ��\0B\0\0 \0\0\0\0\0 !\n1A\"Q�aq�%23R����#$&5B�Es�����\0\0\0?\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r*Ն����X\Zg���p|L�sN���}�Y%ZR|�(�J*I&+�rJ#�yI)%l�Z�,:��i�(��ϥ�)���J�����*hχo��>$���Œd \"5Éb��o���9���/צF�3�qN��;뤂��������9�;߬�Kka0���Z���$�Բ��Ob3�g�Wqg�U�l�W�\0ĺQ������<;J;��剽ŒThÜ‹}��h�����>�#����\0\0\0\0\0\0\0>=]�Xwg-8i��9�u����N�梿���ݱ^�-l$$��5Rt�\"�����e�)�:G��+3Ϛ�ͺ���,���-d�5�ܾ��n~5SeW$76sS$�4SME������\"\"O.����_��)YÂŽ1�\r�X!M\nm��y�Kl�R�#�k�M&�^�o|ML}Ij���O��D>��OJ��\Z�m��i��v2��r�VÓB�l[�rd��D�;k�2��dZ���8�(��$���h:�״y}`\0\0\0\0\0\0\08�ƣ�37 } Nsſ�]�E�c pJL�ò„©µï¿½Âœï¿½U<��Y)�O�&�$.�!E�Q%��N�C�SL�8�d��#z��9�㔚g,�ܮ��G w�7GggU)F�]Es�I-��DS�:{-��e�|jw�K P���䗴[�<�PU�&�Jw���iU4�L��\Zno5i\Z�j���ud�:d.-�n��=9�tр��Z!�kj�/�Z��rL�׹S��d�]�Wg�\Z��M(R���%�#劰Q����N��j���ERI�3-���_=�#���=�����q\'�uc���L-e�ƙL#��F�t�����G�����䓓�B��eEk2=����ZZ�C���������3����xdRh�#\'�5ldE(�nF�Ô�K/��\r�9c���^QG���4�&NjP���#=��:�)<2�ȧ�܆M\Z�3J���\"z�N�{�n���]H�\0�!�\0\0\0\0\0Xl3W9_�.5�W���_7����v��츖��㡥%�k()��3Q�%%MJ#�\",��|h��B{�i�������c+��r��%��ɥ�Mj5���Z��V#Isӆ��$fK%M\0j�t��5s����n6���e8kU��Ý‘$�܉5*6���듲pg�BҲ�:t�[I줩��*���¤�V�pS�â—£(�d�BÅ—4B.� �su=�� =�4�ᢙ�KAeZ$qu餣}��Fԣ��\0\0\0\0\0\nY��No��!�N��j{\"F-zy�c�?s\Z ��I3�#̼˧Q������\r��k\\]���6��Pꫫ�Ur$��]MIN�^|��$�^u�,ݦ=0��O,Vt,�p���]�I(���F\Z��̔�������Q��bJID�l�\0����dÓª>�o!Sg�[$i*��<�\\Qng|Q�u��,�î­,�tu�-<�#�\rbQ\Z�&��v�����c����٧��u�-����\'���B�b);C�3����ha��Kr\"ۘ�r-���\0\0\0\0\0K��y�8�qa��^���1�[�Ø�$��#5�K��,JL���Ȍ��a��L��s�&�[d��1\r�צ�K�����ɧ��=��\0Dx��a�Ó_Ud�Ç�5%�~��<��&��ܾ^�G�âšï¿½ï¿½_�K�ω�f\\O�2ث�����=�t��2�7 ���36��FffJw���&M^DDV��\0\0\0\0\0���A�������-G���M�:]��\Z�N/&�ɛ����3:Rv�_��?]����%0���^�w g�h��FË­�3橯c�`��j�G�f=h�R� Ȫn������G)#I�&e��6�96\0\0\0\0\0\0���L4/���6v91��!�\r�)�,�~*�Rg#UR�ij�\"��rN������P�kJ;�m�>�b���d&X�����Fޭ�b��48�K�K�T\\�h^�Q̶#I\Z�hWe+_ͺ���ɧI;�\n�F��.Vw)7|<�f�d�O�̚Xi���>��U-��R��/��1����.�t��2fs�n���iE��u?b�D�V��2#�Ca��u3��3�q2����j�w���Z�����qN?;�^��X���R#g3�Dj�֣��&�����\nI*�)�;-�����x�j�7A��%Gi��Å¢V�8��TN�BV�ER��e�*��������W�ZMQ�i;iR*h��-����\0�>�$\0\0\0\0\0�!}���Lv�x(Ʋ�9�3O\"\no�H�P��QiJU�;G�\\/��e>����oQ�{hnW�^\0�S���8��{�\"Λ��JK\\�*��G��1)|��\'s6��@��M���o+@�:�euw;uY�*9���r�Ol4��YL��Բ3Q#�\"5�E}�q�SS��G�HRb]{~&�B\n�q@�wgv�Qg_��=�rcW6�EP�j\"؊��v�ׇv�{:׎�V\r��}L��dD[u��_^� ?!yÖ‘p<[L�^�Z}�ӵ����k;[cJ.É–6���鲔��$/D��Y[�kwR��D���\0\0\0\0�.n���Nn��v\rv�sv�upVV6�;o̥����M���\'�x��8x�-��a�����ES������l13K� �Yx%���rJ��rR�Y�5B$�e�=4�_��ć�&��N\Z_�����k���H��Q;wdW/+�^&�����)5���i�(���[���xr�I�W�+�]}f,�\n��^G��,s������J\'8ӫ��zL+Z�%l����$�Y�(�:���]��6��\0e�i%v��]�J�d{o�?�$��{�;�SØ”I-�[l;��Ǣ���e�Ŏ3l�b`cn��F�v6{\nm í��JZ�������\\��dJ2�ڀ��#��o��pM�Nӷ�w��8m�2��i�$��d��m�$E��jD��M�r\"�b�vKȴ���4����s���܈�\Z��S�E�NU\'����|�{u���H�n��0B��a�G�\'�w~�x�-���5�:���������@\0\0\0\0|�(�\\����-e�s$ c�\' 4�W\"�+H�Sw��:��%�25�Ȉ׶ܜ�3B�\r���W\\e3���4hÑ‘��/�Z�q�&����%�-¢��$ʄʺiS2�g�@ +��m��RÓ­V��NQ\\�5�[B챌���h�x�%kk9�����1&rQ%Hj���p��՗��h����t×–f���,����a��\"��ڪA�@d�&�b\n4�cI+\0-��R�V�^����_g��G�<\0\0\0\0Wc����3�M214��V9&�n���)�мsc73MB/ǬD�<�%eP�JX������������G��Z��!m_U���X:�,m��0�y#𖦳U2SD�\"�9 �I^��)�#�\r2��]�\0\0\0<;�~�bj��\rmk;^I5��]2�8�)�~�j�2K�!��d d�����FI) ���]�_���8q�����:j�:�űEÚ±F����n`���=Z�qmL����}��$����J��J�Zi��w�h�tK�->�)�����t��%\Z�y&��\"$�r0~Ʊك��)23�T��[\Z����:�L�L��*�{�f{�^|m|D5��Wt�R�y)d��z�X�.�QD��&G\"$����#�Y�T/�R���B��rMŵź��쭶�}�>�{���v��\0\0>_��;.&ƹ *H��6�L\'R �$�j�huzuQ�vCQ���EҦ�:y}�ƚ�U�,kJ!�Y>}��Fк/no��3�NZQw35��r��+����d�JRDv�е�mO��F�\n\'�k~�|�H��3�8\0\0\0\0\0c�GT��/]�/����_?��F�9�2�GI����MZ��1�\'(����l3�A��KuŒ��RM��4��w�$Ô™!�(��RH�\'���~.3,���3u (�s�@#.m1H�wK[���:��vtG\'9&2�D�$���N0�Yu\n�n4�:J_���# \0+��ˮ��&8�H\Z�W���ҾSi����dr��Øe��d�}K���{�L��:1\rqjN���ě�(����Z735��T��_�s��\0\0\0\0\0\0��Ɣd�~�?T�\0��2}��njëˆ�F���� ��o1-����y��� ]��Ä��h�����v�9n�Q�H��Ȍ�m��{���>��m� H:�����5�;�{�#RT��K��y~���2����v�\0\0\0\0\0\0u�hJ8��=�U�Ch<�^;������F �[���L�6�$��\0\0EJ]�]�z��2��ƣ�s��zT�8ƭ�{\Z�x������*P���}�� c�é·ï¿½ï¿½\0\0\0\0\0\0\Z���I�7�I�wD�\0& �q���-�>�鿡���\r�\0\0��%H���?�����yt!�\0\0\0\0\0\0��\Z�)V�F�ַ�jg��f^D{� o���x\0\0\0\0\0\0\0\0\0\0\0\0��',4,0,'','','',''),(80,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',80,80,2703,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \0P\0P\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \n ��\04\0\0\0\0\0\0\0\0\0 !1Q\n\"Aq#���3Sa����\0\0\0?\0��M5AQ\0��j�����ǯ<����_�T�@Z��i����9���׾�*��)��{ڥ����J�Y�[6h��e� �,u��$�1����t�KvD3%���g[I�_:kƵ�J�u��B��7��\'vX3i�Rj:�G���*�e�\0��a��M|�i������:{Kٞ�w,dRt� aK�B�f���� }��z�a�o�-fr�����@@D5��Ö®V��b�S�&��-�L��m�[�x���S!�����d�\"ἵ����1�/��n}������U2�����e&�T��`a�U��4#�``�!\rÅ©l�>5�t�l�\n�(\"�i�\nP�)�\'�� ��r�c-�^j����e�[��ZE�t\0���l�A�-��\'!�~��N.A�m2���p�\rjX��OR_���]�d�r�8��$+�\' ۬�. ��Ӭ[�����8�o\rb�O��5�b61T\Z�EW�%B�NnTJS�d�͸�\"a�ۦ��˧~��m�7\r���nx��nd��x�Z�z�1�� �����|�#;��Mu_5I�7,�\"����;w8L��� SY�7ÚªJ�cD��S LQe[��D�m��a��c�ܜ��rL�L� ���/m_�˘�~t�F�P��?��|�R0��c[��wco�W�u�4,�.8�%T����La�3�兂21o�*�I�B�e�߶r��8Z;AH��q먆��v��;�61���a\\?n�W\"��J�ݘ1���N��+^��%9A\"���tb(C�GX7|.{m�Gt{�ꧼ�s\r�\Ze�jR���5��|�]\'r�1H��Ż��F ������gl�45V%4�/�P\0\0��8�\0�r�Mx�73�v���ۃ��(�+�0�LX�ߘ�QCB����`� ����[���0\"�d��6j�1:������>��c�3c��2:sH>p\\ud��V.���U}��Q��L��>�C�u9$��2���$ݦ�”��q�i��l�4���j5z��h���gQt��C���-9�T\']��l\ra�R�5IgM��s)Y��4A��5fѳS��tZ%?���:f�J�ð�Ujuh�P5�� Zm �,����!lѪ)��d)H@\0×n�n5M��;����uk8bÛŽ9*�8w���8� 6���{^�Sl�P�MgLISwg8!����9���\0P��\'e2�ڲ}�����O�����j%�D�`�V����M��f�J�4�jQ�}��N3�*�1{@b���^���\\k�!令#��\0���#�X�3]Rz�l�� ��\0�� �#�\r�D1t�[gfZB*�Q���\"q*�у�j�j$�V�ZbE�� �YPQ�8��~1�$ s8�Xh���FD�G7M�|ls��ѓ-QI�6mRI�V�$� �$�P�}4��.����!�^�5\n�⾪���\r��f�YT�}Ú«EM�|�U�s�c�=�G�m������K;Lcw��O�0Q�=�{h��c):Äš cr�\\�������n귺��{�i��U���_7�&��L��7)Ó·~\r�K����^f�X�,%_q8Z�)��+����_��#�v,��d���S�ѓդ��y��y���\r��?��^Rv��Y��vS�b�L�>����E�e ^/q:V!�Y���d7��M4�V }��+�J��ض�� WH �K*��$ y*���Q����1J��#��M�P��H�`!C���~�T��7<����_�]CL�~I����oݒ���U��\0uE������}� �VÖ˜~�� �$R�����M4�P�C�����/a3-�dLn.����c��dۛώЌb�8�0�b鮸4nN�WJ��uW�ި�c�Q����rd�\" ��TJ\0*G���i���͸�+�E1vF�hG�敲�MU�uQIC\0qÉ“/!��ֿ��',5,0,'','','',''),(81,0,22,'75859b10ee09e3cc','19065c444ea257e137e46e890d2c7001','2017-09-07 09:18:24','2017-09-07 09:18:24','','','Contact Photos','4.jpg','image/jpeg',48,48,1755,'����\0JFIF\0\0H\0H\0\0��Created by Andi Stadler (https://snarl.de/profile/andi)\nThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.\n��\0C\0��\0 \00\00\0��\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\n��\0.\0\0\0\0\0\0\0 \n!1A\"#$23Qa��\0\0\0?\0���3�c�s�ǜ�?�1���{�pK����]�_��r��\0BsK�]�n 4d��fZ%ӣ� ³+�r0�m�&��i��-��jA�g>���%hM����%�C¿p��O!����6���x�i�e�5���H�)LW�l�e����!k��:�T���h�q2ڰ���NÝ´M�j�6�A��7�?qY��ˌ�g�Z�[D�En�&Z]-�mnB��a!�[v\\�h��2BaRI?����<~/�y=d�G������3�JM�[ݨ��` ��ԭy���N��\0ɚȥÖY�ʈ���O`=�y��| Ҽ�&�-F�mf��+`<�q{�*EnÕ˜g���$��Y��`��P��#I%�;�<�z�+��<��#ۣ��g��dl9�n��&���ek�ٵ���)X�C�dz�D����0�N%HiI�m���R/hvߠ��)5>B�~N��M�X�}��\']�؜�\Zlcޒ�Z��FQ.6��?` �/����>�>I�X㞣�`�3���lHm%X8�=�j�2.�K2�1$������7���2�)�I1��Cw����n^i>%T%�cƺ�x�]�l�_�/�C��X�JR�B�y��Ÿ�Q-�+μ�+ug�\\�y�J7t���{2U0�OH��m�YF]q�Z�a�$f�d�B����2�F<��c.:�e`��Z�_���|������%�n|���KQi\Z�WK��y��#X0 6��6�&,S�MP���;�;F�imE�M�I�MiF��܎L��N�W����J!O�Vi��2zA\n(�$�G�#\n%�{�^s*]���p��\\�2n�Et��ܬ�fÝ�Z\Z�m\0�:��2%�.�ØD�3)�[F������a ���],2 ]�ˆ�ۮ�� �Z�ϯ*kj4=���N1�����-c��;l�:�@�Ϋ+�������O�WW��!×^EJGNFG�Ü$�L�B�FI\0CE�x��C42�Z�$R�u��}����ZB��c=/>�z������XK�3x�q�,�8�+���-�#��?*\ZF�����V)/%xR3�e�0�(b0�Š;# ;Kl��\r%�Ye�cCM6���\'JP�%8�1��z�Wm�J��e�Zâœï¿½[�&+i!�.>Vz8��X�E}+d�\r\0�!�P��eÕ¡i�U�tv��O�;}qj�e0Ã¥i��?~A�-��٘H �q�-�b> �\Z�+9�#7�x�1�\Z�\Z�e���=`�t,���\n�\0\"\nn:x%zs�Ϥ����?�z|��գ�c���u��S?����K��R+1Uh�a���hTc�%A��1�>?�B�\0����',6,0,'','','',''); /*!40000 ALTER TABLE `photo` ENABLE KEYS */; UNLOCK TABLES; From e749e8ef4c0f006be343782077d7b8a76ccef99e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 23:48:42 -0500 Subject: [PATCH 029/201] Update htconfig documentation --- doc/htconfig.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/htconfig.md b/doc/htconfig.md index 3a482742d..0355c3df2 100644 --- a/doc/htconfig.md +++ b/doc/htconfig.md @@ -58,9 +58,12 @@ Example: To set the automatic database cleanup process add this line to your .ht * **max_processes_backend** - Maximum number of concurrent database processes for background tasks. Default value is 5. * **max_processes_frontend** - Maximum number of concurrent database processes for foreground tasks. Default value is 20. * **min_poll_interval** - minimal distance in minutes between two polls for a contact. Default is 1. Reasonable values are between 1 and 59. -* **memcache** (Boolean) - Use memcache. To use memcache the PECL extension "memcache" has to be installed and activated. -* **memcache_host** - Hostname of the memcache daemon. Default is '127.0.0.1'. -* **memcache_port** - Portnumber of the memcache daemon. Default is 11211. +* **session_handler** ([database]|cache|native) - Whether to use Cache to store session data or to use PHP native session storage +* **cache_driver** ([database]|memcache|memcached) - Whether to use Memcache or Memcached to store temporary cache +* **memcache_host** - Host name of the memcache daemon. Default is '127.0.0.1'. +* **memcache_port** - Port number of the memcache daemon. Default is 11211. +* **memcached_host** - Host name of the memcached daemon. Default is '127.0.0.1'. +* **memcached_port** - Port number of the memcached daemon. Default is 11211. * **no_count** (Boolean) - Don't do count calculations (currently only when showing albums) * **no_oembed** (Boolean) - Don't use OEmbed to fetch more information about a link. * **no_smilies** (Boolean) - Don't show smilies. From 4e6dd7dd5feaf4e0a4df5fe71636f82c9a57ae66 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 23:48:54 -0500 Subject: [PATCH 030/201] Update db cache table documentation --- doc/database/db_cache.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/database/db_cache.md b/doc/database/db_cache.md index 3675474a5..f5691d08a 100644 --- a/doc/database/db_cache.md +++ b/doc/database/db_cache.md @@ -1,11 +1,13 @@ Table cache =========== +Stores temporary data + | Field | Description | Type | Null | Key | Default | Extra | | ------------ | ---------------------------------- | ------------ | ---- | --- | ------------------- | ----- | -| k | horizontal width + url or resource | varchar(255) | NO | PRI | NULL | | -| v | OEmbed response from site | text | NO | | NULL | | +| k | cache key | varchar(255) | NO | PRI | NULL | | +| v | cached serialized value | text | NO | | NULL | | +| expires | datetime of cache expiration | datetime | NO | MUL | 0001-01-01 00:00:00 | | | updated | datetime of cache insertion | datetime | NO | MUL | 0001-01-01 00:00:00 | | -| expire_mode | | int(11) | NO | | 0 | | Return to [database documentation](help/database) From 1a18220059e18677a1c888e4a0082a2e73400e19 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 28 Feb 2018 23:49:29 -0500 Subject: [PATCH 031/201] Remove unused global cache constants --- boot.php | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/boot.php b/boot.php index 5dc7ce1e9..a8b998fe1 100644 --- a/boot.php +++ b/boot.php @@ -119,22 +119,6 @@ define('LOGGER_DATA', 3); define('LOGGER_ALL', 4); /* @}*/ -/** - * @name Cache - * - * Cache levels - * @{ - */ -define('CACHE_MONTH', 0); -define('CACHE_WEEK', 1); -define('CACHE_DAY', 2); -define('CACHE_HOUR', 3); -define('CACHE_HALF_HOUR', 4); -define('CACHE_QUARTER_HOUR', 5); -define('CACHE_FIVE_MINUTES', 6); -define('CACHE_MINUTE', 7); -/* @}*/ - /** * @name Register * From 41d5c7d4c7bb7b45c63687a98170b505a96d3d2b Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 1 Mar 2018 00:33:10 -0500 Subject: [PATCH 032/201] Restore deprecated constants in boot --- boot.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/boot.php b/boot.php index a8b998fe1..a069dcafc 100644 --- a/boot.php +++ b/boot.php @@ -1,6 +1,6 @@ Date: Thu, 1 Mar 2018 00:33:44 -0500 Subject: [PATCH 033/201] Fix DatabaseCacheDriver::get SQL select - Fix typo - Fix wrong usage of NOW() --- src/Core/Cache/DatabaseCacheDriver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/Cache/DatabaseCacheDriver.php b/src/Core/Cache/DatabaseCacheDriver.php index 0aefc812b..9703208d7 100644 --- a/src/Core/Cache/DatabaseCacheDriver.php +++ b/src/Core/Cache/DatabaseCacheDriver.php @@ -16,7 +16,7 @@ class DatabaseCacheDriver implements ICacheDriver { public function get($key) { - $cache = dba::selectFirst('cache', ['v'], ['`k` = ? AND `expires` >= NOW()`', $key]); + $cache = dba::selectFirst('cache', ['v'], ['`k` = ? AND `expires` >= ?', $key, DateTimeFormat::utcNow()]); if (DBM::is_result($cache)) { $cached = $cache['v']; From 4954c4b9aa1bbbfdbe564f7b184ed5a042d51a3a Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 1 Mar 2018 00:33:56 -0500 Subject: [PATCH 034/201] Add cache timing points --- src/Core/Cache.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Core/Cache.php b/src/Core/Cache.php index 58969f081..aeda29e84 100644 --- a/src/Core/Cache.php +++ b/src/Core/Cache.php @@ -10,7 +10,7 @@ use Friendica\Core\Config; /** * @brief Class for storing data for a short time */ -class Cache +class Cache extends \Friendica\BaseObject { const MONTH = 0; const WEEK = 1; @@ -108,7 +108,13 @@ class Cache */ public static function get($key) { - return self::getDriver()->get($key); + $time = microtime(true); + + $return = self::getDriver()->get($key); + + self::getApp()->save_timestamp($time, 'cache'); + + return $return; } /** @@ -124,7 +130,13 @@ class Cache */ public static function set($key, $value, $duration = self::MONTH) { - return self::getDriver()->set($key, $value, $duration); + $time = microtime(true); + + $return = self::getDriver()->set($key, $value, $duration); + + self::getApp()->save_timestamp($time, 'cache_write'); + + return $return; } /** From 22fd2409cad636f90bc934345f2f2f017dfdf2ed Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 1 Mar 2018 01:13:50 -0500 Subject: [PATCH 035/201] Add cache to performance arrays --- src/App.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/App.php b/src/App.php index 6eff22f54..0acbfe6f4 100644 --- a/src/App.php +++ b/src/App.php @@ -148,6 +148,8 @@ class App $this->performance['start'] = microtime(true); $this->performance['database'] = 0; $this->performance['database_write'] = 0; + $this->performance['cache'] = 0; + $this->performance['cache_write'] = 0; $this->performance['network'] = 0; $this->performance['file'] = 0; $this->performance['rendering'] = 0; @@ -157,6 +159,8 @@ class App $this->callstack['database'] = []; $this->callstack['database_write'] = []; + $this->callstack['cache'] = []; + $this->callstack['cache_write'] = []; $this->callstack['network'] = []; $this->callstack['file'] = []; $this->callstack['rendering'] = []; From 95752b79e8803c2b5cfdc38840654ea691af0759 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 1 Mar 2018 01:25:39 -0500 Subject: [PATCH 036/201] Add cache performance to API and worker --- include/api.php | 23 +++++++++++++++++++++-- src/Core/Worker.php | 28 ++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/include/api.php b/include/api.php index f742d2cb2..60a9acce0 100644 --- a/include/api.php +++ b/include/api.php @@ -317,12 +317,16 @@ function api_call(App $a) /// @TODO round() really everywhere? logger( parse_url($a->query_string, PHP_URL_PATH) . ": " . sprintf( - "Database: %s/%s, Network: %s, I/O: %s, Other: %s, Total: %s", + "Database: %s/%s, Cache %s/%s, Network: %s, I/O: %s, Other: %s, Total: %s", round($a->performance["database"] - $a->performance["database_write"], 3), round($a->performance["database_write"], 3), + round($a->performance["cache"], 3), + round($a->performance["cache_write"], 3), round($a->performance["network"], 2), round($a->performance["file"], 2), - round($duration - ($a->performance["database"] + $a->performance["network"] + $a->performance["file"]), 2), + round($duration - ($a->performance["database"] + + $a->performance["cache"] + $a->performance["cache_write"] + + $a->performance["network"] + $a->performance["file"]), 2), round($duration, 2) ), LOGGER_DEBUG @@ -344,6 +348,21 @@ function api_call(App $a) } } + $o = "Cache Read:\n"; + foreach ($a->callstack["cache"] as $func => $time) { + $time = round($time, 3); + if ($time > 0) { + $o .= $func . ": " . $time . "\n"; + } + } + $o .= "\nCache Write:\n"; + foreach ($a->callstack["cache_write"] as $func => $time) { + $time = round($time, 3); + if ($time > 0) { + $o .= $func . ": " . $time . "\n"; + } + } + $o .= "\nNetwork:\n"; foreach ($a->callstack["network"] as $func => $time) { $time = round($time, 3); diff --git a/src/Core/Worker.php b/src/Core/Worker.php index f5979a82a..525287dd0 100644 --- a/src/Core/Worker.php +++ b/src/Core/Worker.php @@ -325,6 +325,8 @@ class Worker $a->performance["start"] = microtime(true); $a->performance["database"] = 0; $a->performance["database_write"] = 0; + $a->performance["cache"] = 0; + $a->performance["cache_write"] = 0; $a->performance["network"] = 0; $a->performance["file"] = 0; $a->performance["rendering"] = 0; @@ -409,6 +411,24 @@ class Worker } } } + if (isset($a->callstack["dache"])) { + $o .= "\nCache Read:\n"; + foreach ($a->callstack["dache"] as $func => $time) { + $time = round($time, 3); + if ($time > 0) { + $o .= $func.": ".$time."\n"; + } + } + } + if (isset($a->callstack["dache_write"])) { + $o .= "\nCache Write:\n"; + foreach ($a->callstack["dache_write"] as $func => $time) { + $time = round($time, 3); + if ($time > 0) { + $o .= $func.": ".$time."\n"; + } + } + } if (isset($a->callstack["network"])) { $o .= "\nNetwork:\n"; foreach ($a->callstack["network"] as $func => $time) { @@ -422,12 +442,16 @@ class Worker logger( "ID ".$queue["id"].": ".$funcname.": ".sprintf( - "DB: %s/%s, Net: %s, I/O: %s, Other: %s, Total: %s".$o, + "DB: %s/%s, Cache: %s/%s, Net: %s, I/O: %s, Other: %s, Total: %s".$o, number_format($a->performance["database"] - $a->performance["database_write"], 2), number_format($a->performance["database_write"], 2), + number_format($a->performance["cache"], 2), + number_format($a->performance["cache_write"], 2), number_format($a->performance["network"], 2), number_format($a->performance["file"], 2), - number_format($duration - ($a->performance["database"] + $a->performance["network"] + $a->performance["file"]), 2), + number_format($duration - ($a->performance["database"] + + $a->performance["cache"] + $a->performance["cache_write"] + + $a->performance["network"] + $a->performance["file"]), 2), number_format($duration, 2) ), LOGGER_DEBUG From 059b1f63f8067c54bf9c16cba9710605eb7c9f89 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 23:28:49 -0500 Subject: [PATCH 037/201] Add support for multiple Memcached servers - Updated htconfig documentation --- doc/htconfig.md | 3 +-- src/Core/Cache.php | 5 ++--- src/Core/Cache/MemcachedCacheDriver.php | 8 +++++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/htconfig.md b/doc/htconfig.md index 0355c3df2..b6fd66bc2 100644 --- a/doc/htconfig.md +++ b/doc/htconfig.md @@ -62,8 +62,7 @@ Example: To set the automatic database cleanup process add this line to your .ht * **cache_driver** ([database]|memcache|memcached) - Whether to use Memcache or Memcached to store temporary cache * **memcache_host** - Host name of the memcache daemon. Default is '127.0.0.1'. * **memcache_port** - Port number of the memcache daemon. Default is 11211. -* **memcached_host** - Host name of the memcached daemon. Default is '127.0.0.1'. -* **memcached_port** - Port number of the memcached daemon. Default is 11211. +* **memcached_hosts** - Array of Memcached servers info [host, port(, weight)]. Default is [['127.0.0.1', 11211]] * **no_count** (Boolean) - Don't do count calculations (currently only when showing albums) * **no_oembed** (Boolean) - Don't use OEmbed to fetch more information about a link. * **no_smilies** (Boolean) - Don't show smilies. diff --git a/src/Core/Cache.php b/src/Core/Cache.php index aeda29e84..a1b1ecb9c 100644 --- a/src/Core/Cache.php +++ b/src/Core/Cache.php @@ -36,10 +36,9 @@ class Cache extends \Friendica\BaseObject self::$driver = new Cache\MemcacheCacheDriver($memcache_host, $memcache_port); break; case 'memcached': - $memcached_host = Config::get('system', 'memcached_host', '127.0.0.1'); - $memcached_port = Config::get('system', 'memcached_port', 11211); + $memcached_hosts = Config::get('system', 'memcached_hosts', [['127.0.0.1', 11211]]); - self::$driver = new Cache\MemcachedCacheDriver($memcached_host, $memcached_port); + self::$driver = new Cache\MemcachedCacheDriver($memcached_hosts); break; default: self::$driver = new Cache\DatabaseCacheDriver(); diff --git a/src/Core/Cache/MemcachedCacheDriver.php b/src/Core/Cache/MemcachedCacheDriver.php index 9101c7919..8f1752cbe 100644 --- a/src/Core/Cache/MemcachedCacheDriver.php +++ b/src/Core/Cache/MemcachedCacheDriver.php @@ -17,7 +17,7 @@ class MemcachedCacheDriver extends BaseObject implements ICacheDriver */ private $memcached; - public function __construct($memcached_host, $memcached_port) + public function __construct(array $memcached_hosts) { if (!class_exists('Memcached', false)) { throw new \Exception('Memcached class isn\'t available'); @@ -25,8 +25,10 @@ class MemcachedCacheDriver extends BaseObject implements ICacheDriver $this->memcached = new \Memcached(); - if (!$this->memcached->addServer($memcached_host, $memcached_port)) { - throw new \Exception('Expected Memcached server at ' . $memcached_host . ':' . $memcached_port . ' isn\'t available'); + $this->memcached->addServers($memcached_hosts); + + if (count($this->memcached->getServerList()) == 0) { + throw new \Exception('Expected Memcached servers aren\'t available, config:' . var_export($memcached_hosts, true)); } } From 47b1e4b3ee7aec0a4ce52659a974da573a7a6540 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 23:41:01 -0500 Subject: [PATCH 038/201] Improve default values in htconfig documentation --- doc/htconfig.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/htconfig.md b/doc/htconfig.md index b6fd66bc2..bed6f7902 100644 --- a/doc/htconfig.md +++ b/doc/htconfig.md @@ -58,11 +58,11 @@ Example: To set the automatic database cleanup process add this line to your .ht * **max_processes_backend** - Maximum number of concurrent database processes for background tasks. Default value is 5. * **max_processes_frontend** - Maximum number of concurrent database processes for foreground tasks. Default value is 20. * **min_poll_interval** - minimal distance in minutes between two polls for a contact. Default is 1. Reasonable values are between 1 and 59. -* **session_handler** ([database]|cache|native) - Whether to use Cache to store session data or to use PHP native session storage -* **cache_driver** ([database]|memcache|memcached) - Whether to use Memcache or Memcached to store temporary cache +* **session_handler** (database|cache|native) - Whether to use Cache to store session data or to use PHP native session storage. Default value is `database`. +* **cache_driver** (database|memcache|memcached) - Whether to use Memcache or Memcached to store temporary cache. Default value is `database`. * **memcache_host** - Host name of the memcache daemon. Default is '127.0.0.1'. * **memcache_port** - Port number of the memcache daemon. Default is 11211. -* **memcached_hosts** - Array of Memcached servers info [host, port(, weight)]. Default is [['127.0.0.1', 11211]] +* **memcached_hosts** - Array of Memcached servers info `[host, port(, weight)]`. Default value is `[['127.0.0.1', 11211]]`. * **no_count** (Boolean) - Don't do count calculations (currently only when showing albums) * **no_oembed** (Boolean) - Don't use OEmbed to fetch more information about a link. * **no_smilies** (Boolean) - Don't show smilies. From f94134f556044104f83b81c18835cf9d0923c158 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 23:41:14 -0500 Subject: [PATCH 039/201] Update database.sql according to process --- database.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/database.sql b/database.sql index 7c4acc29f..0b2b01707 100644 --- a/database.sql +++ b/database.sql @@ -59,9 +59,9 @@ CREATE TABLE IF NOT EXISTS `cache` ( `v` mediumtext COMMENT 'cached serialized value', `expires` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache expiration', `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of cache insertion', - PRIMARY KEY (`k`), - KEY `k_expires` (`k`,`expires`) USING BTREE -) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Stores temporary data'; + PRIMARY KEY(`k`), + INDEX `k_expires` (`k`,`expires`) +) DEFAULT COLLATE utf8mb4_general_ci; -- -- TABLE challenge From d760d339895d40e9de86ab98471d233179502a8a Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 12:09:12 -0500 Subject: [PATCH 040/201] Add Config adapter interfaces/classes --- src/Core/Config/IConfigAdapter.php | 72 ++++++++++++ src/Core/Config/IPConfigAdapter.php | 77 +++++++++++++ src/Core/Config/JITConfigAdapter.php | 132 ++++++++++++++++++++++ src/Core/Config/JITPConfigAdapter.php | 117 +++++++++++++++++++ src/Core/Config/PreloadConfigAdapter.php | 119 +++++++++++++++++++ src/Core/Config/PreloadPConfigAdapter.php | 102 +++++++++++++++++ 6 files changed, 619 insertions(+) create mode 100644 src/Core/Config/IConfigAdapter.php create mode 100644 src/Core/Config/IPConfigAdapter.php create mode 100644 src/Core/Config/JITConfigAdapter.php create mode 100644 src/Core/Config/JITPConfigAdapter.php create mode 100644 src/Core/Config/PreloadConfigAdapter.php create mode 100644 src/Core/Config/PreloadPConfigAdapter.php diff --git a/src/Core/Config/IConfigAdapter.php b/src/Core/Config/IConfigAdapter.php new file mode 100644 index 000000000..ee5ca3ca5 --- /dev/null +++ b/src/Core/Config/IConfigAdapter.php @@ -0,0 +1,72 @@ + + */ +interface IConfigAdapter +{ + /** + * @brief Loads all configuration values into a cached storage. + * + * All configuration values of the system are stored in global cache + * which is available under the global variable $a->config + * + * @param string $cat The category of the configuration values to load + * + * @return void + */ + public function load($cat = "config"); + + /** + * @brief Get a particular user's config variable given the category name + * ($family) and a key. + * + * Get a particular config value from the given category ($family) + * and the $key from a cached storage in $a->config[$uid]. + * $instore is only used by the set_config function + * to determine if the key already exists in the DB + * If a key is found in the DB but doesn't exist in + * local config cache, pull it into the cache so we don't have + * to hit the DB again for this item. + * + * @param string $cat The category of the configuration value + * @param string $k The configuration key to query + * @param mixed $default_value optional, The value to return if key is not set (default: null) + * @param boolean $refresh optional, If true the config is loaded from the db and not from the cache (default: false) + * + * @return mixed Stored value or null if it does not exist + */ + public function get($cat, $k, $default_value = null, $refresh = false); + + /** + * @brief Sets a configuration value for system config + * + * Stores a config value ($value) in the category ($family) under the key ($key) + * for the user_id $uid. + * + * Note: Please do not store booleans - convert to 0/1 integer values! + * + * @param string $family The category of the configuration value + * @param string $key The configuration key to set + * @param mixed $value The value to store + * + * @return mixed Stored $value or false if the database update failed + */ + public function set($cat, $k, $value); + + /** + * @brief Deletes the given key from the system configuration. + * + * Removes the configured value from the stored cache in $a->config + * and removes it from the database. + * + * @param string $cat The category of the configuration value + * @param string $k The configuration key to delete + * + * @return mixed + */ + public function delete($cat, $k); +} diff --git a/src/Core/Config/IPConfigAdapter.php b/src/Core/Config/IPConfigAdapter.php new file mode 100644 index 000000000..f78654d39 --- /dev/null +++ b/src/Core/Config/IPConfigAdapter.php @@ -0,0 +1,77 @@ +config[$uid]. + * + * @param string $uid The user_id + * @param string $cat The category of the configuration value + * + * @return void + */ + public function load($uid, $cat); + + /** + * @brief Get a particular user's config variable given the category name + * ($family) and a key. + * + * Get a particular user's config value from the given category ($family) + * and the $key from a cached storage in $a->config[$uid]. + * + * @param string $uid The user_id + * @param string $cat The category of the configuration value + * @param string $k The configuration key to query + * @param mixed $default_value optional, The value to return if key is not set (default: null) + * @param boolean $refresh optional, If true the config is loaded from the db and not from the cache (default: false) + * + * @return mixed Stored value or null if it does not exist + */ + public function get($uid, $cat, $k, $default_value = null, $refresh = false); + + /** + * @brief Sets a configuration value for a user + * + * Stores a config value ($value) in the category ($family) under the key ($key) + * for the user_id $uid. + * + * @note Please do not store booleans - convert to 0/1 integer values! + * + * @param string $uid The user_id + * @param string $cat The category of the configuration value + * @param string $k The configuration key to set + * @param string $value The value to store + * + * @return mixed Stored $value or false + */ + public function set($uid, $cat, $k, $value); + + /** + * @brief Deletes the given key from the users's configuration. + * + * Removes the configured value from the stored cache in $a->config[$uid] + * and removes it from the database. + * + * @param string $uid The user_id + * @param string $cat The category of the configuration value + * @param string $k The configuration key to delete + * + * @return mixed + */ + public function delete($uid, $cat, $k); +} diff --git a/src/Core/Config/JITConfigAdapter.php b/src/Core/Config/JITConfigAdapter.php new file mode 100644 index 000000000..1bc3bf5a8 --- /dev/null +++ b/src/Core/Config/JITConfigAdapter.php @@ -0,0 +1,132 @@ + + */ +class JITConfigAdapter extends BaseObject implements IConfigAdapter +{ + private $cache; + private $in_db; + + public function load($cat = "config") + { + // We don't preload "system" anymore. + // This reduces the number of database reads a lot. + if ($cat === 'system') { + return; + } + + $a = self::getApp(); + + $configs = dba::select('config', ['v', 'k'], ['cat' => $cat]); + while ($config = dba::fetch($configs)) { + $k = $config['k']; + if ($cat === 'config') { + $a->config[$k] = $config['v']; + } else { + $a->config[$cat][$k] = $config['v']; + self::$cache[$cat][$k] = $config['v']; + self::$in_db[$cat][$k] = true; + } + } + dba::close($configs); + } + + public function get($cat, $k, $default_value = null, $refresh = false) + { + $a = self::getApp(); + + if (!$refresh) { + // Do we have the cached value? Then return it + if (isset($this->cache[$cat][$k])) { + if ($this->cache[$cat][$k] === '!!') { + return $default_value; + } else { + return $this->cache[$cat][$k]; + } + } + } + + $config = dba::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $k]); + if (DBM::is_result($config)) { + // manage array value + $value = (preg_match("|^a:[0-9]+:{.*}$|s", $config['v']) ? unserialize($config['v']) : $config['v']); + + // Assign the value from the database to the cache + $this->cache[$cat][$k] = $value; + $this->in_db[$cat][$k] = true; + return $value; + } elseif (isset($a->config[$cat][$k])) { + // Assign the value (mostly) from the .htconfig.php to the cache + $this->cache[$cat][$k] = $a->config[$cat][$k]; + $this->in_db[$cat][$k] = false; + + return $a->config[$cat][$k]; + } + + $this->cache[$cat][$k] = '!!'; + $this->in_db[$cat][$k] = false; + + return $default_value; + } + + public function set($cat, $k, $value) + { + $a = self::getApp(); + + // We store our setting values in a string variable. + // So we have to do the conversion here so that the compare below works. + // The exception are array values. + $dbvalue = (!is_array($value) ? (string)$value : $value); + + $stored = $this->get($cat, $k, null, true); + + if (($stored === $dbvalue) && $this->in_db[$cat][$k]) { + return true; + } + + if ($cat === 'config') { + $a->config[$k] = $dbvalue; + } elseif ($cat != 'system') { + $a->config[$cat][$k] = $dbvalue; + } + + // Assign the just added value to the cache + $this->cache[$cat][$k] = $dbvalue; + + // manage array value + $dbvalue = (is_array($value) ? serialize($value) : $dbvalue); + + $result = dba::update('config', ['v' => $dbvalue], ['cat' => $cat, 'k' => $k], true); + + if ($result) { + $this->in_db[$cat][$k] = true; + return $value; + } + + return $result; + } + + public function delete($cat, $k) + { + if (isset($this->cache[$cat][$k])) { + unset($this->cache[$cat][$k]); + unset($this->in_db[$cat][$k]); + } + + $result = dba::delete('config', ['cat' => $cat, 'k' => $k]); + + return $result; + } +} diff --git a/src/Core/Config/JITPConfigAdapter.php b/src/Core/Config/JITPConfigAdapter.php new file mode 100644 index 000000000..27f2ed862 --- /dev/null +++ b/src/Core/Config/JITPConfigAdapter.php @@ -0,0 +1,117 @@ + + */ +class JITPConfigAdapter extends BaseObject implements IPConfigAdapter +{ + private $in_db; + + public function load($uid, $cat) + { + $a = self::getApp(); + + $pconfigs = dba::select('pconfig', ['v', 'k'], ['cat' => $cat, 'uid' => $uid]); + if (DBM::is_result($pconfigs)) { + while ($pconfig = dba::fetch($pconfigs)) { + $k = $pconfig['k']; + $a->config[$uid][$cat][$k] = $pconfig['v']; + $this->in_db[$uid][$cat][$k] = true; + } + } else if ($cat != 'config') { + // Negative caching + $a->config[$uid][$cat] = "!!"; + } + dba::close($pconfigs); + } + + public function get($uid, $cat, $k, $default_value = null, $refresh = false) + { + $a = self::getApp(); + + if (!$refresh) { + // Looking if the whole family isn't set + if (isset($a->config[$uid][$cat])) { + if ($a->config[$uid][$cat] === '!!') { + return $default_value; + } + } + + if (isset($a->config[$uid][$cat][$k])) { + if ($a->config[$uid][$cat][$k] === '!!') { + return $default_value; + } + return $a->config[$uid][$cat][$k]; + } + } + + $pconfig = dba::selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $k]); + if (DBM::is_result($pconfig)) { + $val = (preg_match("|^a:[0-9]+:{.*}$|s", $pconfig['v']) ? unserialize($pconfig['v']) : $pconfig['v']); + $a->config[$uid][$cat][$k] = $val; + $this->in_db[$uid][$cat][$k] = true; + + return $val; + } else { + $a->config[$uid][$cat][$k] = '!!'; + $this->in_db[$uid][$cat][$k] = false; + + return $default_value; + } + } + + public function set($uid, $cat, $k, $value) + { + $a = self::getApp(); + + // We store our setting values in a string variable. + // So we have to do the conversion here so that the compare below works. + // The exception are array values. + $dbvalue = (!is_array($value) ? (string)$value : $value); + + $stored = $this->get($uid, $cat, $k, null, true); + + if (($stored === $dbvalue) && $this->in_db[$uid][$cat][$k]) { + return true; + } + + $a->config[$uid][$cat][$k] = $dbvalue; + + // manage array value + $dbvalue = (is_array($value) ? serialize($value) : $dbvalue); + + $result = dba::update('pconfig', ['v' => $dbvalue], ['uid' => $uid, 'cat' => $cat, 'k' => $k], true); + + if ($result) { + $this->in_db[$uid][$cat][$k] = true; + return $value; + } + + return $result; + } + + public function delete($uid, $cat, $k) + { + $a = self::getApp(); + + if (!empty($a->config[$uid][$cat][$k])) { + unset($a->config[$uid][$cat][$k]); + unset($this->in_db[$uid][$cat][$k]); + } + + $result = dba::delete('pconfig', ['uid' => $uid, 'cat' => $cat, 'k' => $k]); + + return $result; + } +} diff --git a/src/Core/Config/PreloadConfigAdapter.php b/src/Core/Config/PreloadConfigAdapter.php new file mode 100644 index 000000000..c10f2ee64 --- /dev/null +++ b/src/Core/Config/PreloadConfigAdapter.php @@ -0,0 +1,119 @@ + + */ +class PreloadConfigAdapter extends BaseObject implements IConfigAdapter +{ + private $config_loaded = false; + + public function __construct() + { + $this->load(); + } + + public function load($family = 'config') + { + if ($this->config_loaded) { + return; + } + + $a = self::getApp(); + + $configs = dba::select('config', ['cat', 'v', 'k']); + while ($config = dba::fetch($configs)) { + $cat = $config['cat']; + $k = $config['k']; + $value = (preg_match("|^a:[0-9]+:{.*}$|s", $config['v']) ? unserialize($config['v']) : $config['v']); + + if ($cat === 'config') { + $a->config[$k] = $value; + } else { + $a->config[$cat][$k] = $value; + } + } + dba::close($configs); + + $this->config_loaded = true; + } + + public function get($cat, $k, $default_value = null, $refresh = false) + { + $a = self::getApp(); + + $return = $default_value; + + if ($cat === 'config') { + if (isset($a->config[$k])) { + $return = $a->config[$k]; + } + } else { + if (isset($a->config[$cat][$k])) { + $return = $a->config[$cat][$k]; + } + } + + return $return; + } + + public function set($cat, $k, $value) + { + $a = self::getApp(); + + // We store our setting values as strings. + // So we have to do the conversion here so that the compare below works. + // The exception are array values. + $compare_value = !is_array($value) ? (string)$value : $value; + + if ($this->get($cat, $k) === $compare_value) { + return true; + } + + if ($cat === 'config') { + $a->config[$k] = $value; + } else { + $a->config[$cat][$k] = $value; + } + + // manage array value + $dbvalue = is_array($value) ? serialize($value) : $value; + + $result = dba::update('config', ['v' => $dbvalue], ['cat' => $cat, 'k' => $k], true); + if (!$result) { + throw new Exception('Unable to store config value in [' . $cat . '][' . $k . ']'); + } + + return true; + } + + public function delete($cat, $k) + { + $a = self::getApp(); + + if ($cat === 'config') { + if (isset($a->config[$k])) { + unset($a->config[$k]); + } + } else { + if (isset($a->config[$cat][$k])) { + unset($a->config[$cat][$k]); + } + } + + $result = dba::delete('config', ['cat' => $cat, 'k' => $k]); + + return $result; + } +} diff --git a/src/Core/Config/PreloadPConfigAdapter.php b/src/Core/Config/PreloadPConfigAdapter.php new file mode 100644 index 000000000..002094a51 --- /dev/null +++ b/src/Core/Config/PreloadPConfigAdapter.php @@ -0,0 +1,102 @@ + + */ +class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter +{ + private $config_loaded = false; + + public function __construct($uid) + { + $this->load($uid, 'config'); + } + + public function load($uid, $family) + { + if ($this->config_loaded) { + return; + } + + $a = self::getApp(); + + $pconfigs = dba::select('pconfig', ['cat', 'v', 'k'], ['uid' => $uid]); + while ($pconfig = dba::fetch($pconfigs)) { + $cat = $pconfig['cat']; + $k = $pconfig['k']; + $value = (preg_match("|^a:[0-9]+:{.*}$|s", $pconfig['v']) ? unserialize($pconfig['v']) : $pconfig['v']); + + $a->config[$uid][$cat][$k] = $value; + } + dba::close($pconfigs); + + $this->config_loaded = true; + } + + public function get($uid, $cat, $k, $default_value = null, $refresh = false) + { + $a = self::getApp(); + + $return = $default_value; + + if (isset($a->config[$uid][$cat][$k])) { + $return = $a->config[$uid][$cat][$k]; + } + + return $return; + } + + public function set($uid, $cat, $k, $value) + { + $a = self::getApp(); + + // We store our setting values as strings. + // So we have to do the conversion here so that the compare below works. + // The exception are array values. + $compare_value = !is_array($value) ? (string)$value : $value; + + if ($this->get($uid, $cat, $k) === $compare_value) { + return true; + } + + $a->config[$uid][$cat][$k] = $value; + + // manage array value + $dbvalue = is_array($value) ? serialize($value) : $value; + + $result = dba::update('pconfig', ['v' => $dbvalue], ['uid' => $uid, 'cat' => $cat, 'k' => $k], true); + + if (!$result) { + throw new Exception('Unable to store config value in [' . $uid . '][' . $cat . '][' . $k . ']'); + } + + return true; + } + + public function delete($uid, $cat, $k) + { + $a = self::getApp(); + + if (!isset($a->config[$uid][$cat][$k])) { + return true; + } + + unset($a->config[$uid][$cat][$k]); + + $result = dba::delete('pconfig', ['uid' => $uid, 'cat' => $cat, 'k' => $k]); + + return $result; + } +} From 6fec0433758ec1df4f798941939250dd169269a7 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 12:10:55 -0500 Subject: [PATCH 041/201] Update Config class with adapter --- index.php | 1 + src/Core/Config.php | 127 +++++++++++--------------------------------- 2 files changed, 32 insertions(+), 96 deletions(-) diff --git a/index.php b/index.php index ef8440099..4fad08da8 100644 --- a/index.php +++ b/index.php @@ -78,6 +78,7 @@ if (!$install) { exit(); } + Config::init(); Session::init(); Addon::loadHooks(); Addon::callHooks('init_1'); diff --git a/src/Core/Config.php b/src/Core/Config.php index 5e162a3fa..bff5d81ff 100644 --- a/src/Core/Config.php +++ b/src/Core/Config.php @@ -8,26 +8,35 @@ */ namespace Friendica\Core; -use Friendica\Database\DBM; -use dba; +use Friendica\BaseObject; +use Friendica\Core\Config; require_once 'include/dba.php'; /** - * @brief Arbitrary sytem configuration storage + * @brief Arbitrary system configuration storage * * Note: * If we ever would decide to return exactly the variable type as entered, * we will have fun with the additional features. :-) - * - * The config class always returns strings but in the default features - * we use a "false" to determine if the config value isn't set. - * */ -class Config +class Config extends BaseObject { - private static $cache; - private static $in_db; + /** + * @var Friendica\Core\Config\IConfigAdapter + */ + private static $adapter = null; + + public static function init() + { + $a = self::getApp(); + + if (isset($a->config['system']['config_adapter']) && $a->config['system']['config_adapter'] == 'preload') { + self::$adapter = new Config\PreloadConfigAdapter(); + } else { + self::$adapter = new Config\JITConfigAdapter(); + } + } /** * @brief Loads all configuration values of family into a cached storage. @@ -41,26 +50,11 @@ class Config */ public static function load($family = "config") { - // We don't preload "system" anymore. - // This reduces the number of database reads a lot. - if ($family === 'system') { - return; + if (empty(self::$adapter)) { + self::init(); } - $a = get_app(); - - $r = dba::select('config', ['v', 'k'], ['cat' => $family]); - while ($rr = dba::fetch($r)) { - $k = $rr['k']; - if ($family === 'config') { - $a->config[$k] = $rr['v']; - } else { - $a->config[$family][$k] = $rr['v']; - self::$cache[$family][$k] = $rr['v']; - self::$in_db[$family][$k] = true; - } - } - dba::close($r); + self::$adapter->load($family); } /** @@ -84,40 +78,11 @@ class Config */ public static function get($family, $key, $default_value = null, $refresh = false) { - $a = get_app(); - - if (!$refresh) { - // Do we have the cached value? Then return it - if (isset(self::$cache[$family][$key])) { - if (self::$cache[$family][$key] === '!!') { - return $default_value; - } else { - return self::$cache[$family][$key]; - } - } + if (empty(self::$adapter)) { + self::init(); } - $config = dba::selectFirst('config', ['v'], ['cat' => $family, 'k' => $key]); - if (DBM::is_result($config)) { - // manage array value - $val = (preg_match("|^a:[0-9]+:{.*}$|s", $config['v']) ? unserialize($config['v']) : $config['v']); - - // Assign the value from the database to the cache - self::$cache[$family][$key] = $val; - self::$in_db[$family][$key] = true; - return $val; - } elseif (isset($a->config[$family][$key])) { - // Assign the value (mostly) from the .htconfig.php to the cache - self::$cache[$family][$key] = $a->config[$family][$key]; - self::$in_db[$family][$key] = false; - - return $a->config[$family][$key]; - } - - self::$cache[$family][$key] = '!!'; - self::$in_db[$family][$key] = false; - - return $default_value; + return self::$adapter->get($family, $key, $default_value, $refresh); } /** @@ -136,38 +101,11 @@ class Config */ public static function set($family, $key, $value) { - $a = get_app(); - - // We store our setting values in a string variable. - // So we have to do the conversion here so that the compare below works. - // The exception are array values. - $dbvalue = (!is_array($value) ? (string)$value : $value); - - $stored = self::get($family, $key, null, true); - - if (($stored === $dbvalue) && self::$in_db[$family][$key]) { - return true; + if (empty(self::$adapter)) { + self::init(); } - if ($family === 'config') { - $a->config[$key] = $dbvalue; - } elseif ($family != 'system') { - $a->config[$family][$key] = $dbvalue; - } - - // Assign the just added value to the cache - self::$cache[$family][$key] = $dbvalue; - - // manage array value - $dbvalue = (is_array($value) ? serialize($value) : $dbvalue); - - $ret = dba::update('config', ['v' => $dbvalue], ['cat' => $family, 'k' => $key], true); - - if ($ret) { - self::$in_db[$family][$key] = true; - return $value; - } - return $ret; + return self::$adapter->set($family, $key, $value); } /** @@ -183,13 +121,10 @@ class Config */ public static function delete($family, $key) { - if (isset(self::$cache[$family][$key])) { - unset(self::$cache[$family][$key]); - unset(self::$in_db[$family][$key]); + if (empty(self::$adapter)) { + self::init(); } - $ret = dba::delete('config', ['cat' => $family, 'k' => $key]); - - return $ret; + return self::$adapter->delete($family, $key); } } From 7afcd6d49e6afed1bc4a94602370eee7859e401e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 12:13:20 -0500 Subject: [PATCH 042/201] Update PConfig class with adapter --- src/Core/PConfig.php | 120 +++++++++++++------------------------------ 1 file changed, 36 insertions(+), 84 deletions(-) diff --git a/src/Core/PConfig.php b/src/Core/PConfig.php index 82d469083..bfa52f5a3 100644 --- a/src/Core/PConfig.php +++ b/src/Core/PConfig.php @@ -1,20 +1,18 @@ config['system']['config_adapter']) && $a->config['system']['config_adapter'] == 'preload') { + self::$adapter = new Config\PreloadPConfigAdapter($uid); + } else { + self::$adapter = new Config\JITPConfigAdapter($uid); + } + } /** * @brief Loads all configuration values of a user's config family into a cached storage. @@ -39,20 +51,11 @@ class PConfig */ public static function load($uid, $family) { - $a = get_app(); - - $r = dba::select('pconfig', ['v', 'k'], ['cat' => $family, 'uid' => $uid]); - if (DBM::is_result($r)) { - while ($rr = dba::fetch($r)) { - $k = $rr['k']; - $a->config[$uid][$family][$k] = $rr['v']; - self::$in_db[$uid][$family][$k] = true; - } - } else if ($family != 'config') { - // Negative caching - $a->config[$uid][$family] = "!!"; + if (empty(self::$adapter)) { + self::init($uid); } - dba::close($r); + + self::$adapter->load($uid, $family); } /** @@ -72,37 +75,11 @@ class PConfig */ public static function get($uid, $family, $key, $default_value = null, $refresh = false) { - $a = get_app(); - - if (!$refresh) { - // Looking if the whole family isn't set - if (isset($a->config[$uid][$family])) { - if ($a->config[$uid][$family] === '!!') { - return $default_value; - } - } - - if (isset($a->config[$uid][$family][$key])) { - if ($a->config[$uid][$family][$key] === '!!') { - return $default_value; - } - return $a->config[$uid][$family][$key]; - } + if (empty(self::$adapter)) { + self::init($uid); } - $pconfig = dba::selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $family, 'k' => $key]); - if (DBM::is_result($pconfig)) { - $val = (preg_match("|^a:[0-9]+:{.*}$|s", $pconfig['v']) ? unserialize($pconfig['v']) : $pconfig['v']); - $a->config[$uid][$family][$key] = $val; - self::$in_db[$uid][$family][$key] = true; - - return $val; - } else { - $a->config[$uid][$family][$key] = '!!'; - self::$in_db[$uid][$family][$key] = false; - - return $default_value; - } + return self::$adapter->get($uid, $family, $key, $default_value, $refresh); } /** @@ -122,31 +99,11 @@ class PConfig */ public static function set($uid, $family, $key, $value) { - $a = get_app(); - - // We store our setting values in a string variable. - // So we have to do the conversion here so that the compare below works. - // The exception are array values. - $dbvalue = (!is_array($value) ? (string)$value : $value); - - $stored = self::get($uid, $family, $key, null, true); - - if (($stored === $dbvalue) && self::$in_db[$uid][$family][$key]) { - return true; + if (empty(self::$adapter)) { + self::init($uid); } - $a->config[$uid][$family][$key] = $dbvalue; - - // manage array value - $dbvalue = (is_array($value) ? serialize($value) : $dbvalue); - - $ret = dba::update('pconfig', ['v' => $dbvalue], ['uid' => $uid, 'cat' => $family, 'k' => $key], true); - - if ($ret) { - self::$in_db[$uid][$family][$key] = true; - return $value; - } - return $ret; + return self::$adapter->set($uid, $family, $key, $value); } /** @@ -163,15 +120,10 @@ class PConfig */ public static function delete($uid, $family, $key) { - $a = get_app(); - - if (x($a->config[$uid][$family], $key)) { - unset($a->config[$uid][$family][$key]); - unset(self::$in_db[$uid][$family][$key]); + if (empty(self::$adapter)) { + self::init($uid); } - $ret = dba::delete('pconfig', ['uid' => $uid, 'cat' => $family, 'k' => $key]); - - return $ret; + return self::$adapter->delete($uid, $family, $key); } } From 4b9c52aad0ba24476e4d04d98bd0b52f66f3ba36 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 3 Mar 2018 12:13:43 -0500 Subject: [PATCH 043/201] Update htconfig documentation --- doc/htconfig.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/htconfig.md b/doc/htconfig.md index bed6f7902..1f1b62bd4 100644 --- a/doc/htconfig.md +++ b/doc/htconfig.md @@ -27,6 +27,7 @@ Example: To set the automatic database cleanup process add this line to your .ht * **always_show_preview** (Boolean) - Only show small preview picures. Default value is false. * **block_local_dir** (Boolean) - Blocks the access to the directory of the local users. * **auth_cookie_lifetime** (Integer) - Number of days that should pass without any activity before a user who chose "Remember me" when logging in is considered logged out. Defaults to 7. +* **config_adapter** (jit|preload) - Allow to switch the configuration adapter to improve performances at the cost of memory consumption. Default value is "jit" * **curl_range_bytes** - Maximum number of bytes that should be fetched. Default is 0, which mean "no limit". * **db_log** - Name of a logfile to log slow database queries * **db_loglimit** - If a database call lasts longer than this value it is logged From dcd1f1861180b812c9b4f08209ea0610af437df0 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 22:44:33 -0500 Subject: [PATCH 044/201] Add refresh feature to Preload (P)Config adapters - Add private methods to manipulat the App config variable --- src/Core/Config/PreloadConfigAdapter.php | 111 +++++++++++++++------- src/Core/Config/PreloadPConfigAdapter.php | 98 ++++++++++++++----- 2 files changed, 150 insertions(+), 59 deletions(-) diff --git a/src/Core/Config/PreloadConfigAdapter.php b/src/Core/Config/PreloadConfigAdapter.php index c10f2ee64..4abcc4a1a 100644 --- a/src/Core/Config/PreloadConfigAdapter.php +++ b/src/Core/Config/PreloadConfigAdapter.php @@ -4,7 +4,9 @@ namespace Friendica\Core\Config; use dba; use Exception; +use Friendica\App; use Friendica\BaseObject; +use Friendica\Database\DBM; require_once 'include/dba.php'; @@ -30,19 +32,9 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter return; } - $a = self::getApp(); - $configs = dba::select('config', ['cat', 'v', 'k']); while ($config = dba::fetch($configs)) { - $cat = $config['cat']; - $k = $config['k']; - $value = (preg_match("|^a:[0-9]+:{.*}$|s", $config['v']) ? unserialize($config['v']) : $config['v']); - - if ($cat === 'config') { - $a->config[$k] = $value; - } else { - $a->config[$cat][$k] = $value; - } + $this->setPreloadedValue($config['cat'], $config['k'], $config['v']); } dba::close($configs); @@ -51,41 +43,32 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter public function get($cat, $k, $default_value = null, $refresh = false) { - $a = self::getApp(); - - $return = $default_value; - - if ($cat === 'config') { - if (isset($a->config[$k])) { - $return = $a->config[$k]; - } - } else { - if (isset($a->config[$cat][$k])) { - $return = $a->config[$cat][$k]; + if ($refresh) { + $config = dba::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $k]); + if (DBM::is_result($config)) { + $this->setPreloadedValue($cat, $k, $config['v']); + } else { + $this->deletePreloadedValue($cat, $k); } } + $return = $this->getPreloadedValue($cat, $k, $default_value); + return $return; } public function set($cat, $k, $value) { - $a = self::getApp(); - // We store our setting values as strings. // So we have to do the conversion here so that the compare below works. // The exception are array values. $compare_value = !is_array($value) ? (string)$value : $value; - if ($this->get($cat, $k) === $compare_value) { + if ($this->getPreloadedValue($cat, $k) === $compare_value) { return true; } - if ($cat === 'config') { - $a->config[$k] = $value; - } else { - $a->config[$cat][$k] = $value; - } + $this->setPreloadedValue($cat, $k, $value); // manage array value $dbvalue = is_array($value) ? serialize($value) : $value; @@ -99,6 +82,70 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter } public function delete($cat, $k) + { + $this->deletePreloadedValue($cat, $k); + + $result = dba::delete('config', ['cat' => $cat, 'k' => $k]); + + return $result; + } + + /** + * Retrieves a preloaded value from the App config cache + * + * @param string $cat + * @param string $k + * @param mixed $default + */ + private function getPreloadedValue($cat, $k, $default = null) + { + $a = self::getApp(); + + $return = $default; + + if ($cat === 'config') { + if (isset($a->config[$k])) { + $return = $a->config[$k]; + } + } else { + if (isset($a->config[$cat][$k])) { + $return = $a->config[$cat][$k]; + } + } + + return $return; + } + + /** + * Sets a preloaded value in the App config cache + * + * Accepts raw output from the config table + * + * @param string $cat + * @param string $k + * @param mixed $v + */ + private function setPreloadedValue($cat, $k, $v) + { + $a = self::getApp(); + + // Only arrays are serialized in database, so we have to unserialize sparingly + $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; + + if ($cat === 'config') { + $a->config[$k] = $value; + } else { + $a->config[$cat][$k] = $value; + } + } + + /** + * Deletes a preloaded value from the App config cache + * + * @param string $cat + * @param string $k + */ + private function deletePreloadedValue($cat, $k) { $a = self::getApp(); @@ -111,9 +158,5 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter unset($a->config[$cat][$k]); } } - - $result = dba::delete('config', ['cat' => $cat, 'k' => $k]); - - return $result; } } diff --git a/src/Core/Config/PreloadPConfigAdapter.php b/src/Core/Config/PreloadPConfigAdapter.php index 002094a51..d6a44e07c 100644 --- a/src/Core/Config/PreloadPConfigAdapter.php +++ b/src/Core/Config/PreloadPConfigAdapter.php @@ -4,7 +4,9 @@ namespace Friendica\Core\Config; use dba; use Exception; +use Friendica\App; use Friendica\BaseObject; +use Friendica\Database\DBM; require_once 'include/dba.php'; @@ -30,15 +32,9 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter return; } - $a = self::getApp(); - $pconfigs = dba::select('pconfig', ['cat', 'v', 'k'], ['uid' => $uid]); while ($pconfig = dba::fetch($pconfigs)) { - $cat = $pconfig['cat']; - $k = $pconfig['k']; - $value = (preg_match("|^a:[0-9]+:{.*}$|s", $pconfig['v']) ? unserialize($pconfig['v']) : $pconfig['v']); - - $a->config[$uid][$cat][$k] = $value; + $this->setPreloadedValue($uid, $pconfig['cat'], $pconfig['k'], $pconfig['v']); } dba::close($pconfigs); @@ -47,37 +43,37 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter public function get($uid, $cat, $k, $default_value = null, $refresh = false) { - $a = self::getApp(); - - $return = $default_value; - - if (isset($a->config[$uid][$cat][$k])) { - $return = $a->config[$uid][$cat][$k]; + if ($refresh) { + $config = dba::selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $k]); + if (DBM::is_result($config)) { + $this->setPreloadedValue($uid, $cat, $k, $config['v']); + } else { + $this->deletePreloadedValue($uid, $cat, $k); + } } + $return = $this->getPreloadedValue($uid, $cat, $k, $default_value); + return $return; } public function set($uid, $cat, $k, $value) { - $a = self::getApp(); - // We store our setting values as strings. // So we have to do the conversion here so that the compare below works. // The exception are array values. $compare_value = !is_array($value) ? (string)$value : $value; - if ($this->get($uid, $cat, $k) === $compare_value) { + if ($this->getPreloadedValue($uid, $cat, $k) === $compare_value) { return true; } - $a->config[$uid][$cat][$k] = $value; + $this->setPreloadedValue($uid, $cat, $k, $value); // manage array value $dbvalue = is_array($value) ? serialize($value) : $value; $result = dba::update('pconfig', ['v' => $dbvalue], ['uid' => $uid, 'cat' => $cat, 'k' => $k], true); - if (!$result) { throw new Exception('Unable to store config value in [' . $uid . '][' . $cat . '][' . $k . ']'); } @@ -87,16 +83,68 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter public function delete($uid, $cat, $k) { - $a = self::getApp(); - - if (!isset($a->config[$uid][$cat][$k])) { - return true; - } - - unset($a->config[$uid][$cat][$k]); + $this->deletePreloadedValue($uid, $cat, $k); $result = dba::delete('pconfig', ['uid' => $uid, 'cat' => $cat, 'k' => $k]); return $result; } + + + /** + * Retrieves a preloaded value from the App user config cache + * + * @param int $uid + * @param string $cat + * @param string $k + * @param mixed $default + */ + private function getPreloadedValue($uid, $cat, $k, $default = null) + { + $a = self::getApp(); + + $return = $default; + + if (isset($a->config[$uid][$cat][$k])) { + $return = $a->config[$uid][$cat][$k]; + } + + return $return; + } + + /** + * Sets a preloaded value in the App user config cache + * + * Accepts raw output from the pconfig table + * + * @param int $uid + * @param string $cat + * @param string $k + * @param mixed $v + */ + private function setPreloadedValue($uid, $cat, $k, $v) + { + $a = self::getApp(); + + // Only arrays are serialized in database, so we have to unserialize sparingly + $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; + + $a->config[$uid][$cat][$k] = $value; + } + + /** + * Deletes a preloaded value from the App user config cache + * + * @param int $uid + * @param string $cat + * @param string $k + */ + private function deletePreloadedValue($uid, $cat, $k) + { + $a = self::getApp(); + + if (isset($a->config[$uid][$cat][$k])) { + unset($a->config[$uid][$cat][$k]); + } + } } From 047f94996773ac248442c9565991f3558dc9aa36 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 4 Mar 2018 22:59:26 -0500 Subject: [PATCH 045/201] Remove irrelevant else case --- src/Core/Config/PreloadConfigAdapter.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Core/Config/PreloadConfigAdapter.php b/src/Core/Config/PreloadConfigAdapter.php index 4abcc4a1a..6d4350042 100644 --- a/src/Core/Config/PreloadConfigAdapter.php +++ b/src/Core/Config/PreloadConfigAdapter.php @@ -47,8 +47,6 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter $config = dba::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $k]); if (DBM::is_result($config)) { $this->setPreloadedValue($cat, $k, $config['v']); - } else { - $this->deletePreloadedValue($cat, $k); } } From 87f2d185541eeb2475c16c844b172c5fa89a6527 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 6 Mar 2018 20:04:04 -0500 Subject: [PATCH 046/201] Move *ConfigValue functions to App --- src/App.php | 112 ++++++++++++++++++++++ src/Core/Config.php | 4 +- src/Core/Config/JITConfigAdapter.php | 22 ++--- src/Core/Config/JITPConfigAdapter.php | 22 +++-- src/Core/Config/PreloadConfigAdapter.php | 86 ++--------------- src/Core/Config/PreloadPConfigAdapter.php | 76 ++------------- 6 files changed, 150 insertions(+), 172 deletions(-) diff --git a/src/App.php b/src/App.php index 0acbfe6f4..2330bc118 100644 --- a/src/App.php +++ b/src/App.php @@ -944,4 +944,116 @@ class App return true; } + + /** + * @param string $cat Config category + * @param string $k Config key + * @param mixed $default Default value if it isn't set + */ + public function getConfigValue($cat, $k, $default = null) + { + $return = $default; + + if ($cat === 'config') { + if (isset($this->config[$k])) { + $return = $this->config[$k]; + } + } else { + if (isset($this->config[$cat][$k])) { + $return = $this->config[$cat][$k]; + } + } + + return $return; + } + + /** + * Sets a value in the config cache. Accepts raw output from the config table + * + * @param string $cat Config category + * @param string $k Config key + * @param mixed $v Value to set + */ + public function setConfigValue($cat, $k, $v) + { + // Only arrays are serialized in database, so we have to unserialize sparingly + $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; + + if ($cat === 'config') { + $this->config[$k] = $value; + } else { + $this->config[$cat][$k] = $value; + } + } + + /** + * Deletes a value from the config cache + * + * @param string $cat Config category + * @param string $k Config key + */ + public function deleteConfigValue($cat, $k) + { + if ($cat === 'config') { + if (isset($this->config[$k])) { + unset($this->config[$k]); + } + } else { + if (isset($this->config[$cat][$k])) { + unset($this->config[$cat][$k]); + } + } + } + + + /** + * Retrieves a value from the user config cache + * + * @param int $uid User Id + * @param string $cat Config category + * @param string $k Config key + * @param mixed $default Default value if key isn't set + */ + public function getPConfigValue($uid, $cat, $k, $default = null) + { + $return = $default; + + if (isset($this->config[$uid][$cat][$k])) { + $return = $this->config[$uid][$cat][$k]; + } + + return $return; + } + + /** + * Sets a value in the user config cache + * + * Accepts raw output from the pconfig table + * + * @param int $uid User Id + * @param string $cat Config category + * @param string $k Config key + * @param mixed $v Value to set + */ + public function setPConfigValue($uid, $cat, $k, $v) + { + // Only arrays are serialized in database, so we have to unserialize sparingly + $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; + + $this->config[$uid][$cat][$k] = $value; + } + + /** + * Deletes a value from the user config cache + * + * @param int $uid User Id + * @param string $cat Config category + * @param string $k Config key + */ + public function deletePConfigValue($uid, $cat, $k) + { + if (isset($this->config[$uid][$cat][$k])) { + unset($this->config[$uid][$cat][$k]); + } + } } diff --git a/src/Core/Config.php b/src/Core/Config.php index bff5d81ff..3c1d3245f 100644 --- a/src/Core/Config.php +++ b/src/Core/Config.php @@ -29,9 +29,7 @@ class Config extends BaseObject public static function init() { - $a = self::getApp(); - - if (isset($a->config['system']['config_adapter']) && $a->config['system']['config_adapter'] == 'preload') { + if (self::getApp()->getConfigValue('system', 'config_adapter') == 'preload') { self::$adapter = new Config\PreloadConfigAdapter(); } else { self::$adapter = new Config\JITConfigAdapter(); diff --git a/src/Core/Config/JITConfigAdapter.php b/src/Core/Config/JITConfigAdapter.php index 1bc3bf5a8..0e7731690 100644 --- a/src/Core/Config/JITConfigAdapter.php +++ b/src/Core/Config/JITConfigAdapter.php @@ -8,7 +8,7 @@ use Friendica\Database\DBM; require_once 'include/dba.php'; /** - * JustInTime ConfigAdapter + * JustInTime Configuration Adapter * * Default Config Adapter. Provides the best performance for pages loading few configuration variables. * @@ -27,17 +27,15 @@ class JITConfigAdapter extends BaseObject implements IConfigAdapter return; } - $a = self::getApp(); - $configs = dba::select('config', ['v', 'k'], ['cat' => $cat]); while ($config = dba::fetch($configs)) { $k = $config['k']; - if ($cat === 'config') { - $a->config[$k] = $config['v']; - } else { - $a->config[$cat][$k] = $config['v']; - self::$cache[$cat][$k] = $config['v']; - self::$in_db[$cat][$k] = true; + + self::getApp()->setConfigValue($cat, $k, $config['v']); + + if ($cat !== 'config') { + $this->cache[$cat][$k] = $config['v']; + $this->in_db[$cat][$k] = true; } } dba::close($configs); @@ -96,11 +94,7 @@ class JITConfigAdapter extends BaseObject implements IConfigAdapter return true; } - if ($cat === 'config') { - $a->config[$k] = $dbvalue; - } elseif ($cat != 'system') { - $a->config[$cat][$k] = $dbvalue; - } + self::getApp()->setConfigValue($cat, $k, $value); // Assign the just added value to the cache $this->cache[$cat][$k] = $dbvalue; diff --git a/src/Core/Config/JITPConfigAdapter.php b/src/Core/Config/JITPConfigAdapter.php index 27f2ed862..ce9c5b646 100644 --- a/src/Core/Config/JITPConfigAdapter.php +++ b/src/Core/Config/JITPConfigAdapter.php @@ -8,7 +8,7 @@ use Friendica\Database\DBM; require_once 'include/dba.php'; /** - * JustInTime PConfigAdapter + * JustInTime User Configuration Adapter * * Default PConfig Adapter. Provides the best performance for pages loading few configuration variables. * @@ -26,7 +26,9 @@ class JITPConfigAdapter extends BaseObject implements IPConfigAdapter if (DBM::is_result($pconfigs)) { while ($pconfig = dba::fetch($pconfigs)) { $k = $pconfig['k']; - $a->config[$uid][$cat][$k] = $pconfig['v']; + + self::getApp()->setPConfigValue($uid, $cat, $k, $pconfig['v']); + $this->in_db[$uid][$cat][$k] = true; } } else if ($cat != 'config') { @@ -59,12 +61,15 @@ class JITPConfigAdapter extends BaseObject implements IPConfigAdapter $pconfig = dba::selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $k]); if (DBM::is_result($pconfig)) { $val = (preg_match("|^a:[0-9]+:{.*}$|s", $pconfig['v']) ? unserialize($pconfig['v']) : $pconfig['v']); - $a->config[$uid][$cat][$k] = $val; + + self::getApp()->setPConfigValue($uid, $cat, $k, $val); + $this->in_db[$uid][$cat][$k] = true; return $val; } else { - $a->config[$uid][$cat][$k] = '!!'; + self::getApp()->setPConfigValue($uid, $cat, $k, '!!'); + $this->in_db[$uid][$cat][$k] = false; return $default_value; @@ -73,8 +78,6 @@ class JITPConfigAdapter extends BaseObject implements IPConfigAdapter public function set($uid, $cat, $k, $value) { - $a = self::getApp(); - // We store our setting values in a string variable. // So we have to do the conversion here so that the compare below works. // The exception are array values. @@ -86,7 +89,7 @@ class JITPConfigAdapter extends BaseObject implements IPConfigAdapter return true; } - $a->config[$uid][$cat][$k] = $dbvalue; + self::getApp()->setPConfigValue($uid, $cat, $k, $value); // manage array value $dbvalue = (is_array($value) ? serialize($value) : $dbvalue); @@ -103,10 +106,9 @@ class JITPConfigAdapter extends BaseObject implements IPConfigAdapter public function delete($uid, $cat, $k) { - $a = self::getApp(); + self::getApp()->deletePConfigValue($uid, $cat, $k); - if (!empty($a->config[$uid][$cat][$k])) { - unset($a->config[$uid][$cat][$k]); + if (!empty($this->in_db[$uid][$cat][$k])) { unset($this->in_db[$uid][$cat][$k]); } diff --git a/src/Core/Config/PreloadConfigAdapter.php b/src/Core/Config/PreloadConfigAdapter.php index 6d4350042..f87b47f16 100644 --- a/src/Core/Config/PreloadConfigAdapter.php +++ b/src/Core/Config/PreloadConfigAdapter.php @@ -11,9 +11,9 @@ use Friendica\Database\DBM; require_once 'include/dba.php'; /** - * Preload ConfigAdapter + * Preload Configuration Adapter * - * Minimize the number of database queries to retrieve configuration values at the cost of memory. + * Minimizes the number of database queries to retrieve configuration values at the cost of memory. * * @author Hypolite Petovan */ @@ -34,7 +34,7 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter $configs = dba::select('config', ['cat', 'v', 'k']); while ($config = dba::fetch($configs)) { - $this->setPreloadedValue($config['cat'], $config['k'], $config['v']); + self::getApp()->setConfigValue($config['cat'], $config['k'], $config['v']); } dba::close($configs); @@ -46,11 +46,11 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter if ($refresh) { $config = dba::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $k]); if (DBM::is_result($config)) { - $this->setPreloadedValue($cat, $k, $config['v']); + self::getApp()->setConfigValue($cat, $k, $config['v']); } } - $return = $this->getPreloadedValue($cat, $k, $default_value); + $return = self::getApp()->getConfigValue($cat, $k, $default_value); return $return; } @@ -62,11 +62,11 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter // The exception are array values. $compare_value = !is_array($value) ? (string)$value : $value; - if ($this->getPreloadedValue($cat, $k) === $compare_value) { + if (self::getApp()->getConfigValue($cat, $k) === $compare_value) { return true; } - $this->setPreloadedValue($cat, $k, $value); + self::getApp()->setConfigValue($cat, $k, $value); // manage array value $dbvalue = is_array($value) ? serialize($value) : $value; @@ -81,80 +81,10 @@ class PreloadConfigAdapter extends BaseObject implements IConfigAdapter public function delete($cat, $k) { - $this->deletePreloadedValue($cat, $k); + self::getApp()->deleteConfigValue($cat, $k); $result = dba::delete('config', ['cat' => $cat, 'k' => $k]); return $result; } - - /** - * Retrieves a preloaded value from the App config cache - * - * @param string $cat - * @param string $k - * @param mixed $default - */ - private function getPreloadedValue($cat, $k, $default = null) - { - $a = self::getApp(); - - $return = $default; - - if ($cat === 'config') { - if (isset($a->config[$k])) { - $return = $a->config[$k]; - } - } else { - if (isset($a->config[$cat][$k])) { - $return = $a->config[$cat][$k]; - } - } - - return $return; - } - - /** - * Sets a preloaded value in the App config cache - * - * Accepts raw output from the config table - * - * @param string $cat - * @param string $k - * @param mixed $v - */ - private function setPreloadedValue($cat, $k, $v) - { - $a = self::getApp(); - - // Only arrays are serialized in database, so we have to unserialize sparingly - $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; - - if ($cat === 'config') { - $a->config[$k] = $value; - } else { - $a->config[$cat][$k] = $value; - } - } - - /** - * Deletes a preloaded value from the App config cache - * - * @param string $cat - * @param string $k - */ - private function deletePreloadedValue($cat, $k) - { - $a = self::getApp(); - - if ($cat === 'config') { - if (isset($a->config[$k])) { - unset($a->config[$k]); - } - } else { - if (isset($a->config[$cat][$k])) { - unset($a->config[$cat][$k]); - } - } - } } diff --git a/src/Core/Config/PreloadPConfigAdapter.php b/src/Core/Config/PreloadPConfigAdapter.php index d6a44e07c..d23541033 100644 --- a/src/Core/Config/PreloadPConfigAdapter.php +++ b/src/Core/Config/PreloadPConfigAdapter.php @@ -11,9 +11,9 @@ use Friendica\Database\DBM; require_once 'include/dba.php'; /** - * Preload PConfigAdapter + * Preload User Configuration Adapter * - * Minimize the number of database queries to retrieve configuration values at the cost of memory. + * Minimizes the number of database queries to retrieve configuration values at the cost of memory. * * @author Hypolite Petovan */ @@ -34,7 +34,7 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter $pconfigs = dba::select('pconfig', ['cat', 'v', 'k'], ['uid' => $uid]); while ($pconfig = dba::fetch($pconfigs)) { - $this->setPreloadedValue($uid, $pconfig['cat'], $pconfig['k'], $pconfig['v']); + self::getApp()->setPConfigValue($uid, $pconfig['cat'], $pconfig['k'], $pconfig['v']); } dba::close($pconfigs); @@ -46,13 +46,13 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter if ($refresh) { $config = dba::selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $k]); if (DBM::is_result($config)) { - $this->setPreloadedValue($uid, $cat, $k, $config['v']); + self::getApp()->setPConfigValue($uid, $cat, $k, $config['v']); } else { - $this->deletePreloadedValue($uid, $cat, $k); + self::getApp()->deletePConfigValue($uid, $cat, $k); } } - $return = $this->getPreloadedValue($uid, $cat, $k, $default_value); + $return = self::getApp()->getPConfigValue($uid, $cat, $k, $default_value); return $return; } @@ -64,11 +64,11 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter // The exception are array values. $compare_value = !is_array($value) ? (string)$value : $value; - if ($this->getPreloadedValue($uid, $cat, $k) === $compare_value) { + if (self::getApp()->getPConfigValue($uid, $cat, $k) === $compare_value) { return true; } - $this->setPreloadedValue($uid, $cat, $k, $value); + self::getApp()->setPConfigValue($uid, $cat, $k, $value); // manage array value $dbvalue = is_array($value) ? serialize($value) : $value; @@ -83,68 +83,10 @@ class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter public function delete($uid, $cat, $k) { - $this->deletePreloadedValue($uid, $cat, $k); + self::getApp()->deletePConfigValue($uid, $cat, $k); $result = dba::delete('pconfig', ['uid' => $uid, 'cat' => $cat, 'k' => $k]); return $result; } - - - /** - * Retrieves a preloaded value from the App user config cache - * - * @param int $uid - * @param string $cat - * @param string $k - * @param mixed $default - */ - private function getPreloadedValue($uid, $cat, $k, $default = null) - { - $a = self::getApp(); - - $return = $default; - - if (isset($a->config[$uid][$cat][$k])) { - $return = $a->config[$uid][$cat][$k]; - } - - return $return; - } - - /** - * Sets a preloaded value in the App user config cache - * - * Accepts raw output from the pconfig table - * - * @param int $uid - * @param string $cat - * @param string $k - * @param mixed $v - */ - private function setPreloadedValue($uid, $cat, $k, $v) - { - $a = self::getApp(); - - // Only arrays are serialized in database, so we have to unserialize sparingly - $value = is_string($v) && preg_match("|^a:[0-9]+:{.*}$|s", $v) ? unserialize($v) : $v; - - $a->config[$uid][$cat][$k] = $value; - } - - /** - * Deletes a preloaded value from the App user config cache - * - * @param int $uid - * @param string $cat - * @param string $k - */ - private function deletePreloadedValue($uid, $cat, $k) - { - $a = self::getApp(); - - if (isset($a->config[$uid][$cat][$k])) { - unset($a->config[$uid][$cat][$k]); - } - } } From ef0701a97a748704142fdf1d34149586f02d468e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 6 Mar 2018 21:34:00 -0500 Subject: [PATCH 047/201] Fix wrong session expire set for custom duration --- src/Core/Cache.php | 55 ++++--------------------- src/Core/Cache/DatabaseCacheDriver.php | 2 +- src/Core/Cache/MemcacheCacheDriver.php | 2 +- src/Core/Cache/MemcachedCacheDriver.php | 2 +- 4 files changed, 11 insertions(+), 50 deletions(-) diff --git a/src/Core/Cache.php b/src/Core/Cache.php index a1b1ecb9c..3f2edd2e2 100644 --- a/src/Core/Cache.php +++ b/src/Core/Cache.php @@ -12,14 +12,14 @@ use Friendica\Core\Config; */ class Cache extends \Friendica\BaseObject { - const MONTH = 0; - const WEEK = 1; - const DAY = 2; - const HOUR = 3; - const HALF_HOUR = 4; - const QUARTER_HOUR = 5; - const FIVE_MINUTES = 6; - const MINUTE = 7; + const MONTH = 2592000; + const WEEK = 604800; + const DAY = 86400; + const HOUR = 3600; + const HALF_HOUR = 1800; + const QUARTER_HOUR = 900; + const FIVE_MINUTES = 300; + const MINUTE = 60; /** * @var Cache\ICacheDriver @@ -45,45 +45,6 @@ class Cache extends \Friendica\BaseObject } } - /** - * @brief Return the duration for a given cache level - * - * @param integer $level Cache level - * - * @return integer The cache duration in seconds - */ - public static function duration($level) - { - switch ($level) { - case self::MONTH: - $seconds = 2592000; - break; - case self::WEEK: - $seconds = 604800; - break; - case self::DAY: - $seconds = 86400; - break; - case self::HOUR: - $seconds = 3600; - break; - case self::HALF_HOUR: - $seconds = 1800; - break; - case self::QUARTER_HOUR: - $seconds = 900; - break; - case self::FIVE_MINUTES: - $seconds = 300; - break; - case self::MINUTE: - default: - $seconds = 60; - break; - } - return $seconds; - } - /** * Returns the current cache driver * diff --git a/src/Core/Cache/DatabaseCacheDriver.php b/src/Core/Cache/DatabaseCacheDriver.php index 9703208d7..17ae31007 100644 --- a/src/Core/Cache/DatabaseCacheDriver.php +++ b/src/Core/Cache/DatabaseCacheDriver.php @@ -37,7 +37,7 @@ class DatabaseCacheDriver implements ICacheDriver { $fields = [ 'v' => serialize($value), - 'expires' => DateTimeFormat::utc('now + ' . Cache::duration($duration) . ' seconds'), + 'expires' => DateTimeFormat::utc('now + ' . $duration . ' seconds'), 'updated' => DateTimeFormat::utcNow() ]; diff --git a/src/Core/Cache/MemcacheCacheDriver.php b/src/Core/Cache/MemcacheCacheDriver.php index 03fc075f4..563447ef1 100644 --- a/src/Core/Cache/MemcacheCacheDriver.php +++ b/src/Core/Cache/MemcacheCacheDriver.php @@ -61,7 +61,7 @@ class MemcacheCacheDriver extends BaseObject implements ICacheDriver self::getApp()->get_hostname() . ":" . $key, serialize($value), MEMCACHE_COMPRESSED, - Cache::duration($duration) + time() + $duration ); } diff --git a/src/Core/Cache/MemcachedCacheDriver.php b/src/Core/Cache/MemcachedCacheDriver.php index 8f1752cbe..1a8bdc950 100644 --- a/src/Core/Cache/MemcachedCacheDriver.php +++ b/src/Core/Cache/MemcachedCacheDriver.php @@ -52,7 +52,7 @@ class MemcachedCacheDriver extends BaseObject implements ICacheDriver return $this->memcached->set( self::getApp()->get_hostname() . ":" . $key, $value, - Cache::duration($duration) + time() + $duration ); } From 274ce95d13feb0ff7b150c9a0c3d1db49eb507bb Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 7 Mar 2018 08:07:36 -0500 Subject: [PATCH 048/201] Move Composer assets to view/ --- .gitignore | 3 +- composer.json | 4 +-- view/templates/admin/federation.tpl | 2 +- view/templates/event_head.tpl | 8 ++--- view/templates/head.tpl | 20 ++++++------ view/theme/frio/templates/event_head.tpl | 8 ++--- view/theme/frio/templates/head.tpl | 32 +++++++++---------- view/theme/frost-mobile/templates/end.tpl | 8 ++--- .../frost-mobile/templates/event_end.tpl | 4 +-- .../frost-mobile/templates/event_head.tpl | 4 +-- view/theme/frost-mobile/templates/head.tpl | 6 ++-- view/theme/frost/templates/end.tpl | 10 +++--- view/theme/frost/templates/event_end.tpl | 4 +-- view/theme/frost/templates/event_head.tpl | 4 +-- view/theme/frost/templates/head.tpl | 8 ++--- .../quattro/templates/events_reminder.tpl | 8 ++--- view/theme/vier/templates/event_head.tpl | 8 ++--- 17 files changed, 71 insertions(+), 70 deletions(-) diff --git a/.gitignore b/.gitignore index 859220653..8d86b9587 100644 --- a/.gitignore +++ b/.gitignore @@ -53,7 +53,8 @@ nbproject venv/ #ignore Composer dependencies -vendor +/vendor +/view/asset #ignore config files from JetBrains /.idea \ No newline at end of file diff --git a/composer.json b/composer.json index 7bdba4cf0..e064a0a6a 100644 --- a/composer.json +++ b/composer.json @@ -54,8 +54,8 @@ "preferred-install": "dist", "fxp-asset": { "installer-paths": { - "npm-asset-library": "vendor/asset", - "bower-asset-library": "vendor/asset" + "npm-asset-library": "view/asset", + "bower-asset-library": "view/asset" } } }, diff --git a/view/templates/admin/federation.tpl b/view/templates/admin/federation.tpl index bd2af3d78..5f89d4f7d 100644 --- a/view/templates/admin/federation.tpl +++ b/view/templates/admin/federation.tpl @@ -1,4 +1,4 @@ - +

{{$title}} - {{$page}}

diff --git a/view/templates/event_head.tpl b/view/templates/event_head.tpl index 36be15290..baa031f04 100644 --- a/view/templates/event_head.tpl +++ b/view/templates/event_head.tpl @@ -1,8 +1,8 @@ - - - - + + + + - + - - - - + + + + - + - + + - - - - - - - - - - - + + + + + + + + + + + + diff --git a/view/theme/frost-mobile/templates/end.tpl b/view/theme/frost-mobile/templates/end.tpl index 4af3b41c0..a37ae7bba 100644 --- a/view/theme/frost-mobile/templates/end.tpl +++ b/view/theme/frost-mobile/templates/end.tpl @@ -1,16 +1,16 @@ - + - - + + - + diff --git a/view/theme/frost-mobile/templates/event_end.tpl b/view/theme/frost-mobile/templates/event_end.tpl index 1df60bdfd..8641b7c1b 100644 --- a/view/theme/frost-mobile/templates/event_end.tpl +++ b/view/theme/frost-mobile/templates/event_end.tpl @@ -1,3 +1,3 @@ - - + + diff --git a/view/theme/frost-mobile/templates/event_head.tpl b/view/theme/frost-mobile/templates/event_head.tpl index 6c332b435..e4abc175a 100644 --- a/view/theme/frost-mobile/templates/event_head.tpl +++ b/view/theme/frost-mobile/templates/event_head.tpl @@ -1,6 +1,6 @@ - - + + + + + diff --git a/view/theme/frost/templates/end.tpl b/view/theme/frost/templates/end.tpl index b49fc3cd4..b8a598de5 100644 --- a/view/theme/frost/templates/end.tpl +++ b/view/theme/frost/templates/end.tpl @@ -3,15 +3,15 @@ - + - - - + + + - + diff --git a/view/theme/frost/templates/event_end.tpl b/view/theme/frost/templates/event_end.tpl index 1df60bdfd..8641b7c1b 100644 --- a/view/theme/frost/templates/event_end.tpl +++ b/view/theme/frost/templates/event_end.tpl @@ -1,3 +1,3 @@ - - + + diff --git a/view/theme/frost/templates/event_head.tpl b/view/theme/frost/templates/event_head.tpl index 6c332b435..e4abc175a 100644 --- a/view/theme/frost/templates/event_head.tpl +++ b/view/theme/frost/templates/event_head.tpl @@ -1,6 +1,6 @@ - - + + + - - - + + + + - + + + + + - + - - - - + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + {{* own js files *}} - - - - + + + + + - + - - - - + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + {{* own js files *}} - - - - + + + + - 2. - - 3. - - -Options - -ratioDim obj - The pixel dimensions to apply as a restrictive ratio, with properties x & y. -minWidth int - The minimum width for the select area in pixels. -minHeight int - The mimimum height for the select area in pixels. -maxWidth int - The maximum width for the select areas in pixels (if both minWidth & maxWidth set to same the width of the cropper will be fixed) -maxHeight int - The maximum height for the select areas in pixels (if both minHeight & maxHeight set to same the height of the cropper will be fixed) -displayOnInit int - Whether to display the select area on initialisation, only used when providing minimum width & height or ratio. -onEndCrop func - The callback function to provide the crop details to on end of a crop. -captureKeys boolean - Whether to capture the keys for moving the select area, as these can cause some problems at the moment. -onloadCoords obj - A coordinates object with properties x1, y1, x2 & y2; for the coordinates of the select area to display onload - -The callback function - -The callback function is a function that allows you to capture the crop co-ordinates when the user finished a crop movement, it is passed two arguments: - - * coords, obj, coordinates object with properties x1, y1, x2 & y2; for the coordinates of the select area. - * dimensions, obj, dimensions object with properities width & height; for the dimensions of the select area. - -An example function which outputs the crop values to form fields: -Display code as plain text -JavaScript: - - 1. - function onEndCrop( coords, dimensions ) { - 2. - $PR( 'x1' ).value = coords.x1; - 3. - $PR( 'y1' ).value = coords.y1; - 4. - $PR( 'x2' ).value = coords.x2; - 5. - $PR( 'y2' ).value = coords.y2; - 6. - $PR( 'width' ).value = dimensions.width; - 7. - $PR( 'height' ).value = dimensions.height; - 8. - } - -Basic interface - -This basic example will attach the cropper UI to the test image and return crop results to the provided callback function. -Display code as plain text -HTML: - - 1. - Test image - 2. - - 3. - - -Minimum dimensions - -You can apply minimum dimensions to a single axis or both, this example applies minimum dimensions to both axis. -Display code as plain text -HTML: - - 1. - Test image - 2. - - 3. - - -Select area ratio - -You can apply a ratio to the selection area, this example applies a 4:3 ratio to the select area. -Display code as plain text -HTML: - - 1. - Test image - 2. - - 3. - - -With crop preview - -You can display a dynamically prouced preview of the resulting crop by using the ImgWithPreview subclass, a preview can only be displayed when we have a fixed size (set via minWidth & minHeight options). Note that the displayOnInit option is not required as this is the default behaviour when displaying a crop preview. -Display code as plain text -HTML: - - 1. - Test image - 2. -
- 3. - - 4. - - -Known Issues - - * Safari animated gifs, only one of each will animate, this seems to be a known Safari issue. - * After drawing an area and then clicking to start a new drag in IE 5.5 the rendered height appears as the last height until the user drags, this appears to be the related to another IE error (which has been fixed) where IE does not always redraw the select area properly. - * Lack of CSS opacity support in Opera before version 9 mean we disable those style rules, if Opera 8 support is important you & you want the overlay to work then you can use the Opera rules in the CSS to apply a black PNG with 50% alpha transparency to replicate the effect. - * Styling & borders on image, any CSS styling applied directly to the image itself (floats, borders, padding, margin, etc.) will cause problems with the cropper. The use of a wrapper element to apply these styles to is recommended. - * overflow: auto or overflow: scroll on parent will cause cropper to burst out of parent in IE and Opera when applied (maybe Mac browsers too) I'm not sure why yet. - -If you use CakePHP you will notice that including this in your script will break the CSS layout. This is due to the CSS rule - -form div{ -vertical-align: text-top; -margin-left: 1em; -margin-bottom:2em; -overflow: auto; -} - -A simple workaround is to add another rule directly after this like so: - -form div.no_cake, form div.no_cake div { -margin:0; -overflow:hidden; -} - -and then in your code surround the img tag with a div with the class name of no_cake. - -Cheers - diff --git a/view/js/cropper/cropper.js b/view/js/cropper/cropper.js deleted file mode 100644 index 427a9ba0a..000000000 --- a/view/js/cropper/cropper.js +++ /dev/null @@ -1,568 +0,0 @@ -/** - * Copyright (c) 2006, David Spurr (http://www.defusion.org.uk/) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * * Neither the name of the David Spurr nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://www.opensource.org/licenses/bsd-license.php - * - * See scriptaculous.js for full scriptaculous licence - * - * Modified 2013/06/01 Zach P to change $() to $PR() for eliminating conflicts with jQuery - */ - -var CropDraggable=Class.create(); -Object.extend(Object.extend(CropDraggable.prototype,Draggable.prototype),{initialize:function(_1){ -this.options=Object.extend({drawMethod:function(){ -}},arguments[1]||{}); -this.element=$PR(_1); -this.handle=this.element; -this.delta=this.currentDelta(); -this.dragging=false; -this.eventMouseDown=this.initDrag.bindAsEventListener(this); -Event.observe(this.handle,"mousedown",this.eventMouseDown); -Draggables.register(this); -},draw:function(_2){ -var _3=Position.cumulativeOffset(this.element); -var d=this.currentDelta(); -_3[0]-=d[0]; -_3[1]-=d[1]; -var p=[0,1].map(function(i){ -return (_2[i]-_3[i]-this.offset[i]); -}.bind(this)); -this.options.drawMethod(p); -}}); -var Cropper={}; -Cropper.Img=Class.create(); -Cropper.Img.prototype={initialize:function(_7,_8){ -this.options=Object.extend({ratioDim:{x:0,y:0},minWidth:0,minHeight:0,displayOnInit:false,onEndCrop:Prototype.emptyFunction,captureKeys:true,onloadCoords:null,maxWidth:0,maxHeight:0},_8||{}); -this.img=$PR(_7); -this.clickCoords={x:0,y:0}; -this.dragging=false; -this.resizing=false; -this.isWebKit=/Konqueror|Safari|KHTML/.test(navigator.userAgent); -this.isIE=/MSIE/.test(navigator.userAgent); -this.isOpera8=/Opera\s[1-8]/.test(navigator.userAgent); -this.ratioX=0; -this.ratioY=0; -this.attached=false; -this.fixedWidth=(this.options.maxWidth>0&&(this.options.minWidth>=this.options.maxWidth)); -this.fixedHeight=(this.options.maxHeight>0&&(this.options.minHeight>=this.options.maxHeight)); -if(typeof this.img=="undefined"){ -return; -} -$A(document.getElementsByTagName("script")).each(function(s){ -if(s.src.match(/cropper\.js/)){ -var _a=s.src.replace(/cropper\.js(.*)?/,""); -var _b=document.createElement("link"); -_b.rel="stylesheet"; -_b.type="text/css"; -_b.href=_a+"cropper.css"; -_b.media="screen"; -document.getElementsByTagName("head")[0].appendChild(_b); -} -}); -if(this.options.ratioDim.x>0&&this.options.ratioDim.y>0){ -var _c=this.getGCD(this.options.ratioDim.x,this.options.ratioDim.y); -this.ratioX=this.options.ratioDim.x/_c; -this.ratioY=this.options.ratioDim.y/_c; -} -this.subInitialize(); -if(this.img.complete||this.isWebKit){ -this.onLoad(); -}else{ -Event.observe(this.img,"load",this.onLoad.bindAsEventListener(this)); -} -},getGCD:function(a,b){ -if(b==0){ -return a; -} -return this.getGCD(b,a%b); -},onLoad:function(){ -var _f="imgCrop_"; -var _10=this.img.parentNode; -var _11=""; -if(this.isOpera8){ -_11=" opera8"; -} -this.imgWrap=Builder.node("div",{"class":_f+"wrap"+_11}); -this.north=Builder.node("div",{"class":_f+"overlay "+_f+"north"},[Builder.node("span")]); -this.east=Builder.node("div",{"class":_f+"overlay "+_f+"east"},[Builder.node("span")]); -this.south=Builder.node("div",{"class":_f+"overlay "+_f+"south"},[Builder.node("span")]); -this.west=Builder.node("div",{"class":_f+"overlay "+_f+"west"},[Builder.node("span")]); -var _12=[this.north,this.east,this.south,this.west]; -this.dragArea=Builder.node("div",{"class":_f+"dragArea"},_12); -this.handleN=Builder.node("div",{"class":_f+"handle "+_f+"handleN"}); -this.handleNE=Builder.node("div",{"class":_f+"handle "+_f+"handleNE"}); -this.handleE=Builder.node("div",{"class":_f+"handle "+_f+"handleE"}); -this.handleSE=Builder.node("div",{"class":_f+"handle "+_f+"handleSE"}); -this.handleS=Builder.node("div",{"class":_f+"handle "+_f+"handleS"}); -this.handleSW=Builder.node("div",{"class":_f+"handle "+_f+"handleSW"}); -this.handleW=Builder.node("div",{"class":_f+"handle "+_f+"handleW"}); -this.handleNW=Builder.node("div",{"class":_f+"handle "+_f+"handleNW"}); -this.selArea=Builder.node("div",{"class":_f+"selArea"},[Builder.node("div",{"class":_f+"marqueeHoriz "+_f+"marqueeNorth"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeVert "+_f+"marqueeEast"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeHoriz "+_f+"marqueeSouth"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeVert "+_f+"marqueeWest"},[Builder.node("span")]),this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW,Builder.node("div",{"class":_f+"clickArea"})]); -this.imgWrap.appendChild(this.img); -this.imgWrap.appendChild(this.dragArea); -this.dragArea.appendChild(this.selArea); -this.dragArea.appendChild(Builder.node("div",{"class":_f+"clickArea"})); -_10.appendChild(this.imgWrap); -this.startDragBind=this.startDrag.bindAsEventListener(this); -Event.observe(this.dragArea,"mousedown",this.startDragBind); -this.onDragBind=this.onDrag.bindAsEventListener(this); -Event.observe(document,"mousemove",this.onDragBind); -this.endCropBind=this.endCrop.bindAsEventListener(this); -Event.observe(document,"mouseup",this.endCropBind); -this.resizeBind=this.startResize.bindAsEventListener(this); -this.handles=[this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW]; -this.registerHandles(true); -if(this.options.captureKeys){ -this.keysBind=this.handleKeys.bindAsEventListener(this); -Event.observe(document,"keypress",this.keysBind); -} -new CropDraggable(this.selArea,{drawMethod:this.moveArea.bindAsEventListener(this)}); -this.setParams(); -},registerHandles:function(_13){ -for(var i=0;i0&&this.options.ratioDim.y>0){ -_1a.x1=Math.ceil((this.imgW-this.options.ratioDim.x)/2); -_1a.y1=Math.ceil((this.imgH-this.options.ratioDim.y)/2); -_1a.x2=_1a.x1+this.options.ratioDim.x; -_1a.y2=_1a.y1+this.options.ratioDim.y; -_1b=true; -} -} -this.setAreaCoords(_1a,false,false,1); -if(this.options.displayOnInit&&_1b){ -this.selArea.show(); -this.drawArea(); -this.endCrop(); -} -this.attached=true; -},remove:function(){ -if(this.attached){ -this.attached=false; -this.imgWrap.parentNode.insertBefore(this.img,this.imgWrap); -this.imgWrap.parentNode.removeChild(this.imgWrap); -Event.stopObserving(this.dragArea,"mousedown",this.startDragBind); -Event.stopObserving(document,"mousemove",this.onDragBind); -Event.stopObserving(document,"mouseup",this.endCropBind); -this.registerHandles(false); -if(this.options.captureKeys){ -Event.stopObserving(document,"keypress",this.keysBind); -} -} -},reset:function(){ -if(!this.attached){ -this.onLoad(); -}else{ -this.setParams(); -} -this.endCrop(); -},handleKeys:function(e){ -var dir={x:0,y:0}; -if(!this.dragging){ -switch(e.keyCode){ -case (37): -dir.x=-1; -break; -case (38): -dir.y=-1; -break; -case (39): -dir.x=1; -break; -case (40): -dir.y=1; -break; -} -if(dir.x!=0||dir.y!=0){ -if(e.shiftKey){ -dir.x*=10; -dir.y*=10; -} -this.moveArea([this.areaCoords.x1+dir.x,this.areaCoords.y1+dir.y]); -Event.stop(e); -} -} -},calcW:function(){ -return (this.areaCoords.x2-this.areaCoords.x1); -},calcH:function(){ -return (this.areaCoords.y2-this.areaCoords.y1); -},moveArea:function(_1e){ -this.setAreaCoords({x1:_1e[0],y1:_1e[1],x2:_1e[0]+this.calcW(),y2:_1e[1]+this.calcH()},true,false); -this.drawArea(); -},cloneCoords:function(_1f){ -return {x1:_1f.x1,y1:_1f.y1,x2:_1f.x2,y2:_1f.y2}; -},setAreaCoords:function(_20,_21,_22,_23,_24){ -if(_21){ -var _25=_20.x2-_20.x1; -var _26=_20.y2-_20.y1; -if(_20.x1<0){ -_20.x1=0; -_20.x2=_25; -} -if(_20.y1<0){ -_20.y1=0; -_20.y2=_26; -} -if(_20.x2>this.imgW){ -_20.x2=this.imgW; -_20.x1=this.imgW-_25; -} -if(_20.y2>this.imgH){ -_20.y2=this.imgH; -_20.y1=this.imgH-_26; -} -}else{ -if(_20.x1<0){ -_20.x1=0; -} -if(_20.y1<0){ -_20.y1=0; -} -if(_20.x2>this.imgW){ -_20.x2=this.imgW; -} -if(_20.y2>this.imgH){ -_20.y2=this.imgH; -} -if(_23!=null){ -if(this.ratioX>0){ -this.applyRatio(_20,{x:this.ratioX,y:this.ratioY},_23,_24); -}else{ -if(_22){ -this.applyRatio(_20,{x:1,y:1},_23,_24); -} -} -var _27=[this.options.minWidth,this.options.minHeight]; -var _28=[this.options.maxWidth,this.options.maxHeight]; -if(_27[0]>0||_27[1]>0||_28[0]>0||_28[1]>0){ -var _29={a1:_20.x1,a2:_20.x2}; -var _2a={a1:_20.y1,a2:_20.y2}; -var _2b={min:0,max:this.imgW}; -var _2c={min:0,max:this.imgH}; -if((_27[0]!=0||_27[1]!=0)&&_22){ -if(_27[0]>0){ -_27[1]=_27[0]; -}else{ -if(_27[1]>0){ -_27[0]=_27[1]; -} -} -} -if((_28[0]!=0||_28[0]!=0)&&_22){ -if(_28[0]>0&&_28[0]<=_28[1]){ -_28[1]=_28[0]; -}else{ -if(_28[1]>0&&_28[1]<=_28[0]){ -_28[0]=_28[1]; -} -} -} -if(_27[0]>0){ -this.applyDimRestriction(_29,_27[0],_23.x,_2b,"min"); -} -if(_27[1]>1){ -this.applyDimRestriction(_2a,_27[1],_23.y,_2c,"min"); -} -if(_28[0]>0){ -this.applyDimRestriction(_29,_28[0],_23.x,_2b,"max"); -} -if(_28[1]>1){ -this.applyDimRestriction(_2a,_28[1],_23.y,_2c,"max"); -} -_20={x1:_29.a1,y1:_2a.a1,x2:_29.a2,y2:_2a.a2}; -} -} -} -this.areaCoords=_20; -},applyDimRestriction:function(_2d,val,_2f,_30,_31){ -var _32; -if(_31=="min"){ -_32=((_2d.a2-_2d.a1)val); -} -if(_32){ -if(_2f==1){ -_2d.a2=_2d.a1+val; -}else{ -_2d.a1=_2d.a2-val; -} -if(_2d.a1<_30.min){ -_2d.a1=_30.min; -_2d.a2=val; -}else{ -if(_2d.a2>_30.max){ -_2d.a1=_30.max-val; -_2d.a2=_30.max; -} -} -} -},applyRatio:function(_33,_34,_35,_36){ -var _37; -if(_36=="N"||_36=="S"){ -_37=this.applyRatioToAxis({a1:_33.y1,b1:_33.x1,a2:_33.y2,b2:_33.x2},{a:_34.y,b:_34.x},{a:_35.y,b:_35.x},{min:0,max:this.imgW}); -_33.x1=_37.b1; -_33.y1=_37.a1; -_33.x2=_37.b2; -_33.y2=_37.a2; -}else{ -_37=this.applyRatioToAxis({a1:_33.x1,b1:_33.y1,a2:_33.x2,b2:_33.y2},{a:_34.x,b:_34.y},{a:_35.x,b:_35.y},{min:0,max:this.imgH}); -_33.x1=_37.a1; -_33.y1=_37.b1; -_33.x2=_37.a2; -_33.y2=_37.b2; -} -},applyRatioToAxis:function(_38,_39,_3a,_3b){ -var _3c=Object.extend(_38,{}); -var _3d=_3c.a2-_3c.a1; -var _3e=Math.floor(_3d*_39.b/_39.a); -var _3f; -var _40; -var _41=null; -if(_3a.b==1){ -_3f=_3c.b1+_3e; -if(_3f>_3b.max){ -_3f=_3b.max; -_41=_3f-_3c.b1; -} -_3c.b2=_3f; -}else{ -_3f=_3c.b2-_3e; -if(_3f<_3b.min){ -_3f=_3b.min; -_41=_3f+_3c.b2; -} -_3c.b1=_3f; -} -if(_41!=null){ -_40=Math.floor(_41*_39.a/_39.b); -if(_3a.a==1){ -_3c.a2=_3c.a1+_40; -}else{ -_3c.a1=_3c.a1=_3c.a2-_40; -} -} -return _3c; -},drawArea:function(){ -var _42=this.calcW(); -var _43=this.calcH(); -var px="px"; -var _45=[this.areaCoords.x1+px,this.areaCoords.y1+px,_42+px,_43+px,this.areaCoords.x2+px,this.areaCoords.y2+px,(this.img.width-this.areaCoords.x2)+px,(this.img.height-this.areaCoords.y2)+px]; -var _46=this.selArea.style; -_46.left=_45[0]; -_46.top=_45[1]; -_46.width=_45[2]; -_46.height=_45[3]; -var _47=Math.ceil((_42-6)/2)+px; -var _48=Math.ceil((_43-6)/2)+px; -this.handleN.style.left=_47; -this.handleE.style.top=_48; -this.handleS.style.left=_47; -this.handleW.style.top=_48; -this.north.style.height=_45[1]; -var _49=this.east.style; -_49.top=_45[1]; -_49.height=_45[3]; -_49.left=_45[4]; -_49.width=_45[6]; -var _4a=this.south.style; -_4a.top=_45[5]; -_4a.height=_45[7]; -var _4b=this.west.style; -_4b.top=_45[1]; -_4b.height=_45[3]; -_4b.width=_45[0]; -this.subDrawArea(); -this.forceReRender(); -},forceReRender:function(){ -if(this.isIE||this.isWebKit){ -var n=document.createTextNode(" "); -var d,el,fixEL,i; -if(this.isIE){ -fixEl=this.selArea; -}else{ -if(this.isWebKit){ -fixEl=document.getElementsByClassName("imgCrop_marqueeSouth",this.imgWrap)[0]; -d=Builder.node("div",""); -d.style.visibility="hidden"; -var _4e=["SE","S","SW"]; -for(i=0;i<_4e.length;i++){ -el=document.getElementsByClassName("imgCrop_handle"+_4e[i],this.selArea)[0]; -if(el.childNodes.length){ -el.removeChild(el.childNodes[0]); -} -el.appendChild(d); -} -} -} -fixEl.appendChild(n); -fixEl.removeChild(n); -} -},startResize:function(e){ -this.startCoords=this.cloneCoords(this.areaCoords); -this.resizing=true; -this.resizeHandle=Event.element(e).classNames().toString().replace(/([^N|NE|E|SE|S|SW|W|NW])+/,""); -Event.stop(e); -},startDrag:function(e){ -this.selArea.show(); -this.clickCoords=this.getCurPos(e); -this.setAreaCoords({x1:this.clickCoords.x,y1:this.clickCoords.y,x2:this.clickCoords.x,y2:this.clickCoords.y},false,false,null); -this.dragging=true; -this.onDrag(e); -Event.stop(e); -},getCurPos:function(e){ -var el=this.imgWrap,wrapOffsets=Position.cumulativeOffset(el); -while(el.nodeName!="BODY"){ -wrapOffsets[1]-=el.scrollTop||0; -wrapOffsets[0]-=el.scrollLeft||0; -el=el.parentNode; -} -return curPos={x:Event.pointerX(e)-wrapOffsets[0],y:Event.pointerY(e)-wrapOffsets[1]}; -},onDrag:function(e){ -if(this.dragging||this.resizing){ -var _54=null; -var _55=this.getCurPos(e); -var _56=this.cloneCoords(this.areaCoords); -var _57={x:1,y:1}; -if(this.dragging){ -if(_55.x_59){ -_5c.reverse(); -} -_5a[_5b+"1"]=_5c[0]; -_5a[_5b+"2"]=_5c[1]; -},endCrop:function(){ -this.dragging=false; -this.resizing=false; -this.options.onEndCrop(this.areaCoords,{width:this.calcW(),height:this.calcH()}); -},subInitialize:function(){ -},subDrawArea:function(){ -}}; -Cropper.ImgWithPreview=Class.create(); -Object.extend(Object.extend(Cropper.ImgWithPreview.prototype,Cropper.Img.prototype),{subInitialize:function(){ -this.hasPreviewImg=false; -if(typeof (this.options.previewWrap)!="undefined"&&this.options.minWidth>0&&this.options.minHeight>0){ -this.previewWrap=$PR(this.options.previewWrap); -this.previewImg=this.img.cloneNode(false); -this.previewImg.id="imgCrop_"+this.previewImg.id; -this.options.displayOnInit=true; -this.hasPreviewImg=true; -this.previewWrap.addClassName("imgCrop_previewWrap"); -this.previewWrap.setStyle({width:this.options.minWidth+"px",height:this.options.minHeight+"px"}); -this.previewWrap.appendChild(this.previewImg); -} -},subDrawArea:function(){ -if(this.hasPreviewImg){ -var _5d=this.calcW(); -var _5e=this.calcH(); -var _5f={x:this.imgW/_5d,y:this.imgH/_5e}; -var _60={x:_5d/this.options.minWidth,y:_5e/this.options.minHeight}; -var _61={w:Math.ceil(this.options.minWidth*_5f.x)+"px",h:Math.ceil(this.options.minHeight*_5f.y)+"px",x:"-"+Math.ceil(this.areaCoords.x1/_60.x)+"px",y:"-"+Math.ceil(this.areaCoords.y1/_60.y)+"px"}; -var _62=this.previewImg.style; -_62.width=_61.w; -_62.height=_61.h; -_62.left=_61.x; -_62.top=_61.y; -} -}}); - diff --git a/view/js/cropper/cropper.uncompressed.js b/view/js/cropper/cropper.uncompressed.js deleted file mode 100644 index 0ea0b803d..000000000 --- a/view/js/cropper/cropper.uncompressed.js +++ /dev/null @@ -1,1333 +0,0 @@ -/** - * Image Cropper (v. 1.2.0 - 2006-10-30 ) - * Copyright (c) 2006 David Spurr (http://www.defusion.org.uk/) - * - * The image cropper provides a way to draw a crop area on an image and capture - * the coordinates of the drawn crop area. - * - * Features include: - * - Based on Prototype and Scriptaculous - * - Image editing package styling, the crop area functions and looks - * like those found in popular image editing software - * - Dynamic inclusion of required styles - * - Drag to draw areas - * - Shift drag to draw/resize areas as squares - * - Selection area can be moved - * - Seleciton area can be resized using resize handles - * - Allows dimension ratio limited crop areas - * - Allows minimum dimension crop areas - * - Allows maximum dimesion crop areas - * - If both min & max dimension options set to the same value for a single axis,then the cropper will not - * display the resize handles as appropriate (when min & max dimensions are passed for both axes this - * results in a 'fixed size' crop area) - * - Allows dynamic preview of resultant crop ( if minimum width & height are provided ), this is - * implemented as a subclass so can be excluded when not required - * - Movement of selection area by arrow keys ( shift + arrow key will move selection area by - * 10 pixels ) - * - All operations stay within bounds of image - * - All functionality & display compatible with most popular browsers supported by Prototype: - * PC: IE 7, 6 & 5.5, Firefox 1.5, Opera 8.5 (see known issues) & 9.0b - * MAC: Camino 1.0, Firefox 1.5, Safari 2.0 - * - * Requires: - * - Prototype v. 1.5.0_rc0 > (as packaged with Scriptaculous 1.6.1) - * - Scriptaculous v. 1.6.1 > modules: builder, dragdrop - * - * Known issues: - * - Safari animated gifs, only one of each will animate, this seems to be a known Safari issue - * - * - After drawing an area and then clicking to start a new drag in IE 5.5 the rendered height - * appears as the last height until the user drags, this appears to be the related to the error - * that the forceReRender() method fixes for IE 6, i.e. IE 5.5 is not redrawing the box properly. - * - * - Lack of CSS opacity support in Opera before version 9 mean we disable those style rules, these - * could be fixed by using PNGs with transparency if Opera 8.5 support is high priority for you - * - * - Marching ants keep reloading in IE <6 (not tested in IE7), it is a known issue in IE and I have - * found no viable workarounds that can be included in the release. If this really is an issue for you - * either try this post: http://mir.aculo.us/articles/2005/08/28/internet-explorer-and-ajax-image-caching-woes - * or uncomment the 'FIX MARCHING ANTS IN IE' rules in the CSS file - * - * - Styling & borders on image, any CSS styling applied directly to the image itself (floats, borders, padding, margin, etc.) will - * cause problems with the cropper. The use of a wrapper element to apply these styles to is recommended. - * - * - overflow: auto or overflow: scroll on parent will cause cropper to burst out of parent in IE and Opera (maybe Mac browsers too) - * I'm not sure why yet. - * - * Usage: - * See Cropper.Img & Cropper.ImgWithPreview for usage details - * - * Changelog: - * v1.2.0 - 2006-10-30 - * + Added id to the preview image element using 'imgCrop_[originalImageID]' - * * #00001 - Fixed bug: Doesn't account for scroll offsets - * * #00009 - Fixed bug: Placing the cropper inside differently positioned elements causes incorrect co-ordinates and display - * * #00013 - Fixed bug: I-bar cursor appears on drag plane - * * #00014 - Fixed bug: If ID for image tag is not found in document script throws error - * * Fixed bug with drag start co-ordinates if wrapper element has moved in browser (e.g. dragged to a new position) - * * Fixed bug with drag start co-ordinates if image contained in a wrapper with scrolling - this may be buggy if image - * has other ancestors with scrolling applied (except the body) - * * #00015 - Fixed bug: When cropper removed and then reapplied onEndCrop callback gets called multiple times, solution suggestion from Bill Smith - * * Various speed increases & code cleanup which meant improved performance in Mac - which allowed removal of different overlay methods for - * IE and all other browsers, which led to a fix for: - * * #00010 - Fixed bug: Select area doesn't adhere to image size when image resized using img attributes - * - #00006 - Removed default behaviour of automatically setting a ratio when both min width & height passed, the ratioDimensions must be passed in - * + #00005 - Added ability to set maximum crop dimensions, if both min & max set as the same value then we'll get a fixed cropper size on the axes as appropriate - * and the resize handles will not be displayed as appropriate - * * Switched keydown for keypress for moving select area with cursor keys (makes for nicer action) - doesn't appear to work in Safari - * - * v1.1.3 - 2006-08-21 - * * Fixed wrong cursor on western handle in CSS - * + #00008 & #00003 - Added feature: Allow to set dimensions & position for cropper on load - * * #00002 - Fixed bug: Pressing 'remove cropper' twice removes image in IE - * - * v1.1.2 - 2006-06-09 - * * Fixed bugs with ratios when GCD is low (patch submitted by Andy Skelton) - * - * v1.1.1 - 2006-06-03 - * * Fixed bug with rendering issues fix in IE 5.5 - * * Fixed bug with endCrop callback issues once cropper had been removed & reset in IE - * - * v1.1.0 - 2006-06-02 - * * Fixed bug with IE constantly trying to reload select area background image - * * Applied more robust fix to Safari & IE rendering issues - * + Added method to reset parameters - useful for when dynamically changing img cropper attached to - * + Added method to remove cropper from image - * - * v1.0.0 - 2006-05-18 - * + Initial verison - * - * - * Copyright (c) 2006, David Spurr (http://www.defusion.org.uk/) - * All rights reserved. - * - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * * Neither the name of the David Spurr nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://www.opensource.org/licenses/bsd-license.php - * - * See scriptaculous.js for full scriptaculous licence - * - * Modified 2013/06/01 Zach P to change $() to $PR() for eliminating conflicts with jQuery - */ - -/** - * Extend the Draggable class to allow us to pass the rendering - * down to the Cropper object. - */ -var CropDraggable = Class.create(); - -Object.extend( Object.extend( CropDraggable.prototype, Draggable.prototype), { - - initialize: function(element) { - this.options = Object.extend( - { - /** - * The draw method to defer drawing to - */ - drawMethod: function() {} - }, - arguments[1] || {} - ); - - this.element = $PR(element); - - this.handle = this.element; - - this.delta = this.currentDelta(); - this.dragging = false; - - this.eventMouseDown = this.initDrag.bindAsEventListener(this); - Event.observe(this.handle, "mousedown", this.eventMouseDown); - - Draggables.register(this); - }, - - /** - * Defers the drawing of the draggable to the supplied method - */ - draw: function(point) { - var pos = Position.cumulativeOffset(this.element); - var d = this.currentDelta(); - pos[0] -= d[0]; - pos[1] -= d[1]; - - var p = [0,1].map(function(i) { - return (point[i]-pos[i]-this.offset[i]) - }.bind(this)); - - this.options.drawMethod( p ); - } - -}); - - -/** - * The Cropper object, this will attach itself to the provided image by wrapping it with - * the generated xHTML structure required by the cropper. - * - * Usage: - * @param obj Image element to attach to - * @param obj Optional options: - * - ratioDim obj - * The pixel dimensions to apply as a restrictive ratio, with properties x & y - * - * - minWidth int - * The minimum width for the select area in pixels - * - * - minHeight int - * The mimimum height for the select area in pixels - * - * - maxWidth int - * The maximum width for the select areas in pixels (if both minWidth & maxWidth set to same the width of the cropper will be fixed) - * - * - maxHeight int - * The maximum height for the select areas in pixels (if both minHeight & maxHeight set to same the height of the cropper will be fixed) - * - * - displayOnInit int - * Whether to display the select area on initialisation, only used when providing minimum width & height or ratio - * - * - onEndCrop func - * The callback function to provide the crop details to on end of a crop (see below) - * - * - captureKeys boolean - * Whether to capture the keys for moving the select area, as these can cause some problems at the moment - * - * - onloadCoords obj - * A coordinates object with properties x1, y1, x2 & y2; for the coordinates of the select area to display onload - * - *---------------------------------------------- - * - * The callback function provided via the onEndCrop option should accept the following parameters: - * - coords obj - * The coordinates object with properties x1, y1, x2 & y2; for the coordinates of the select area - * - * - dimensions obj - * The dimensions object with properites width & height; for the dimensions of the select area - * - * - * Example: - * function onEndCrop( coords, dimensions ) { - * $PR( 'x1' ).value = coords.x1; - * $PR( 'y1' ).value = coords.y1; - * $PR( 'x2' ).value = coords.x2; - * $PR( 'y2' ).value = coords.y2; - * $PR( 'width' ).value = dimensions.width; - * $PR( 'height' ).value = dimensions.height; - * } - * - */ -var Cropper = {}; -Cropper.Img = Class.create(); -Cropper.Img.prototype = { - - /** - * Initialises the class - * - * @access public - * @param obj Image element to attach to - * @param obj Options - * @return void - */ - initialize: function(element, options) { - this.options = Object.extend( - { - /** - * @var obj - * The pixel dimensions to apply as a restrictive ratio - */ - ratioDim: { x: 0, y: 0 }, - /** - * @var int - * The minimum pixel width, also used as restrictive ratio if min height passed too - */ - minWidth: 0, - /** - * @var int - * The minimum pixel height, also used as restrictive ratio if min width passed too - */ - minHeight: 0, - /** - * @var boolean - * Whether to display the select area on initialisation, only used when providing minimum width & height or ratio - */ - displayOnInit: false, - /** - * @var function - * The call back function to pass the final values to - */ - onEndCrop: Prototype.emptyFunction, - /** - * @var boolean - * Whether to capture key presses or not - */ - captureKeys: true, - /** - * @var obj Coordinate object x1, y1, x2, y2 - * The coordinates to optionally display the select area at onload - */ - onloadCoords: null, - /** - * @var int - * The maximum width for the select areas in pixels (if both minWidth & maxWidth set to same the width of the cropper will be fixed) - */ - maxWidth: 0, - /** - * @var int - * The maximum height for the select areas in pixels (if both minHeight & maxHeight set to same the height of the cropper will be fixed) - */ - maxHeight: 0 - }, - options || {} - ); - /** - * @var obj - * The img node to attach to - */ - this.img = $PR( element ); - /** - * @var obj - * The x & y coordinates of the click point - */ - this.clickCoords = { x: 0, y: 0 }; - /** - * @var boolean - * Whether the user is dragging - */ - this.dragging = false; - /** - * @var boolean - * Whether the user is resizing - */ - this.resizing = false; - /** - * @var boolean - * Whether the user is on a webKit browser - */ - this.isWebKit = /Konqueror|Safari|KHTML/.test( navigator.userAgent ); - /** - * @var boolean - * Whether the user is on IE - */ - this.isIE = /MSIE/.test( navigator.userAgent ); - /** - * @var boolean - * Whether the user is on Opera below version 9 - */ - this.isOpera8 = /Opera\s[1-8]/.test( navigator.userAgent ); - /** - * @var int - * The x ratio - */ - this.ratioX = 0; - /** - * @var int - * The y ratio - */ - this.ratioY = 0; - /** - * @var boolean - * Whether we've attached sucessfully - */ - this.attached = false; - /** - * @var boolean - * Whether we've got a fixed width (if minWidth EQ or GT maxWidth then we have a fixed width - * in the case of minWidth > maxWidth maxWidth wins as the fixed width) - */ - this.fixedWidth = ( this.options.maxWidth > 0 && ( this.options.minWidth >= this.options.maxWidth ) ); - /** - * @var boolean - * Whether we've got a fixed height (if minHeight EQ or GT maxHeight then we have a fixed height - * in the case of minHeight > maxHeight maxHeight wins as the fixed height) - */ - this.fixedHeight = ( this.options.maxHeight > 0 && ( this.options.minHeight >= this.options.maxHeight ) ); - - // quit if the image element doesn't exist - if( typeof this.img == 'undefined' ) return; - - // include the stylesheet - $A( document.getElementsByTagName( 'script' ) ).each( - function(s) { - if( s.src.match( /cropper\.js/ ) ) { - var path = s.src.replace( /cropper\.js(.*)?/, '' ); - // ''; - var style = document.createElement( 'link' ); - style.rel = 'stylesheet'; - style.type = 'text/css'; - style.href = path + 'cropper.css'; - style.media = 'screen'; - document.getElementsByTagName( 'head' )[0].appendChild( style ); - } - } - ); - - // calculate the ratio when neccessary - if( this.options.ratioDim.x > 0 && this.options.ratioDim.y > 0 ) { - var gcd = this.getGCD( this.options.ratioDim.x, this.options.ratioDim.y ); - this.ratioX = this.options.ratioDim.x / gcd; - this.ratioY = this.options.ratioDim.y / gcd; - // dump( 'RATIO : ' + this.ratioX + ':' + this.ratioY + '\n' ); - } - - // initialise sub classes - this.subInitialize(); - - // only load the event observers etc. once the image is loaded - // this is done after the subInitialize() call just in case the sub class does anything - // that will affect the result of the call to onLoad() - if( this.img.complete || this.isWebKit ) this.onLoad(); // for some reason Safari seems to support img.complete but returns 'undefined' on the this.img object - else Event.observe( this.img, 'load', this.onLoad.bindAsEventListener( this) ); - }, - - /** - * The Euclidean algorithm used to find the greatest common divisor - * - * @acces private - * @param int Value 1 - * @param int Value 2 - * @return int - */ - getGCD : function( a , b ) { - if( b == 0 ) return a; - return this.getGCD(b, a % b ); - }, - - /** - * Attaches the cropper to the image once it has loaded - * - * @access private - * @return void - */ - onLoad: function( ) { - /* - * Build the container and all related elements, will result in the following - * - *
- * - *
- * - *
- *
- *
- *
- *
- * - * - *
- *
- *
- *
- * - *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- */ - var cNamePrefix = 'imgCrop_'; - - // get the point to insert the container - var insertPoint = this.img.parentNode; - - // apply an extra class to the wrapper to fix Opera below version 9 - var fixOperaClass = ''; - if( this.isOpera8 ) fixOperaClass = ' opera8'; - this.imgWrap = Builder.node( 'div', { 'class': cNamePrefix + 'wrap' + fixOperaClass } ); - - this.north = Builder.node( 'div', { 'class': cNamePrefix + 'overlay ' + cNamePrefix + 'north' }, [Builder.node( 'span' )] ); - this.east = Builder.node( 'div', { 'class': cNamePrefix + 'overlay ' + cNamePrefix + 'east' } , [Builder.node( 'span' )] ); - this.south = Builder.node( 'div', { 'class': cNamePrefix + 'overlay ' + cNamePrefix + 'south' }, [Builder.node( 'span' )] ); - this.west = Builder.node( 'div', { 'class': cNamePrefix + 'overlay ' + cNamePrefix + 'west' } , [Builder.node( 'span' )] ); - - var overlays = [ this.north, this.east, this.south, this.west ]; - - this.dragArea = Builder.node( 'div', { 'class': cNamePrefix + 'dragArea' }, overlays ); - - this.handleN = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleN' } ); - this.handleNE = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleNE' } ); - this.handleE = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleE' } ); - this.handleSE = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleSE' } ); - this.handleS = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleS' } ); - this.handleSW = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleSW' } ); - this.handleW = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleW' } ); - this.handleNW = Builder.node( 'div', { 'class': cNamePrefix + 'handle ' + cNamePrefix + 'handleNW' } ); - - this.selArea = Builder.node( 'div', { 'class': cNamePrefix + 'selArea' }, - [ - Builder.node( 'div', { 'class': cNamePrefix + 'marqueeHoriz ' + cNamePrefix + 'marqueeNorth' }, [Builder.node( 'span' )] ), - Builder.node( 'div', { 'class': cNamePrefix + 'marqueeVert ' + cNamePrefix + 'marqueeEast' } , [Builder.node( 'span' )] ), - Builder.node( 'div', { 'class': cNamePrefix + 'marqueeHoriz ' + cNamePrefix + 'marqueeSouth' }, [Builder.node( 'span' )] ), - Builder.node( 'div', { 'class': cNamePrefix + 'marqueeVert ' + cNamePrefix + 'marqueeWest' } , [Builder.node( 'span' )] ), - this.handleN, - this.handleNE, - this.handleE, - this.handleSE, - this.handleS, - this.handleSW, - this.handleW, - this.handleNW, - Builder.node( 'div', { 'class': cNamePrefix + 'clickArea' } ) - ] - ); - - this.imgWrap.appendChild( this.img ); - this.imgWrap.appendChild( this.dragArea ); - this.dragArea.appendChild( this.selArea ); - this.dragArea.appendChild( Builder.node( 'div', { 'class': cNamePrefix + 'clickArea' } ) ); - - insertPoint.appendChild( this.imgWrap ); - - // add event observers - this.startDragBind = this.startDrag.bindAsEventListener( this ); - Event.observe( this.dragArea, 'mousedown', this.startDragBind ); - - this.onDragBind = this.onDrag.bindAsEventListener( this ); - Event.observe( document, 'mousemove', this.onDragBind ); - - this.endCropBind = this.endCrop.bindAsEventListener( this ); - Event.observe( document, 'mouseup', this.endCropBind ); - - this.resizeBind = this.startResize.bindAsEventListener( this ); - this.handles = [ this.handleN, this.handleNE, this.handleE, this.handleSE, this.handleS, this.handleSW, this.handleW, this.handleNW ]; - this.registerHandles( true ); - - if( this.options.captureKeys ) { - this.keysBind = this.handleKeys.bindAsEventListener( this ); - Event.observe( document, 'keypress', this.keysBind ); - } - - // attach the dragable to the select area - new CropDraggable( this.selArea, { drawMethod: this.moveArea.bindAsEventListener( this ) } ); - - this.setParams(); - }, - - /** - * Manages adding or removing the handle event handler and hiding or displaying them as appropriate - * - * @access private - * @param boolean registration true = add, false = remove - * @return void - */ - registerHandles: function( registration ) { - for( var i = 0; i < this.handles.length; i++ ) { - var handle = $PR( this.handles[i] ); - - if( registration ) { - var hideHandle = false; // whether to hide the handle - - // disable handles asappropriate if we've got fixed dimensions - // if both dimensions are fixed we don't need to do much - if( this.fixedWidth && this.fixedHeight ) hideHandle = true; - else if( this.fixedWidth || this.fixedHeight ) { - // if one of the dimensions is fixed then just hide those handles - var isCornerHandle = handle.className.match( /([S|N][E|W])$/ ) - var isWidthHandle = handle.className.match( /(E|W)$/ ); - var isHeightHandle = handle.className.match( /(N|S)$/ ); - if( isCornerHandle ) hideHandle = true; - else if( this.fixedWidth && isWidthHandle ) hideHandle = true; - else if( this.fixedHeight && isHeightHandle ) hideHandle = true; - } - if( hideHandle ) handle.hide(); - else Event.observe( handle, 'mousedown', this.resizeBind ); - } else { - handle.show(); - Event.stopObserving( handle, 'mousedown', this.resizeBind ); - } - } - }, - - /** - * Sets up all the cropper parameters, this can be used to reset the cropper when dynamically - * changing the images - * - * @access private - * @return void - */ - setParams: function() { - /** - * @var int - * The image width - */ - this.imgW = this.img.width; - /** - * @var int - * The image height - */ - this.imgH = this.img.height; - - $PR( this.north ).setStyle( { height: 0 } ); - $PR( this.east ).setStyle( { width: 0, height: 0 } ); - $PR( this.south ).setStyle( { height: 0 } ); - $PR( this.west ).setStyle( { width: 0, height: 0 } ); - - // resize the container to fit the image - $PR( this.imgWrap ).setStyle( { 'width': this.imgW + 'px', 'height': this.imgH + 'px' } ); - - // hide the select area - $PR( this.selArea ).hide(); - - // setup the starting position of the select area - var startCoords = { x1: 0, y1: 0, x2: 0, y2: 0 }; - var validCoordsSet = false; - - // display the select area - if( this.options.onloadCoords != null ) { - // if we've being given some coordinates to - startCoords = this.cloneCoords( this.options.onloadCoords ); - validCoordsSet = true; - } else if( this.options.ratioDim.x > 0 && this.options.ratioDim.y > 0 ) { - // if there is a ratio limit applied and the then set it to initial ratio - startCoords.x1 = Math.ceil( ( this.imgW - this.options.ratioDim.x ) / 2 ); - startCoords.y1 = Math.ceil( ( this.imgH - this.options.ratioDim.y ) / 2 ); - startCoords.x2 = startCoords.x1 + this.options.ratioDim.x; - startCoords.y2 = startCoords.y1 + this.options.ratioDim.y; - validCoordsSet = true; - } - - this.setAreaCoords( startCoords, false, false, 1 ); - - if( this.options.displayOnInit && validCoordsSet ) { - this.selArea.show(); - this.drawArea(); - this.endCrop(); - } - - this.attached = true; - }, - - /** - * Removes the cropper - * - * @access public - * @return void - */ - remove: function() { - if( this.attached ) { - this.attached = false; - - // remove the elements we inserted - this.imgWrap.parentNode.insertBefore( this.img, this.imgWrap ); - this.imgWrap.parentNode.removeChild( this.imgWrap ); - - // remove the event observers - Event.stopObserving( this.dragArea, 'mousedown', this.startDragBind ); - Event.stopObserving( document, 'mousemove', this.onDragBind ); - Event.stopObserving( document, 'mouseup', this.endCropBind ); - this.registerHandles( false ); - if( this.options.captureKeys ) Event.stopObserving( document, 'keypress', this.keysBind ); - } - }, - - /** - * Resets the cropper, can be used either after being removed or any time you wish - * - * @access public - * @return void - */ - reset: function() { - if( !this.attached ) this.onLoad(); - else this.setParams(); - this.endCrop(); - }, - - /** - * Handles the key functionality, currently just using arrow keys to move, if the user - * presses shift then the area will move by 10 pixels - */ - handleKeys: function( e ) { - var dir = { x: 0, y: 0 }; // direction to move it in & the amount in pixels - if( !this.dragging ) { - - // catch the arrow keys - switch( e.keyCode ) { - case( 37 ) : // left - dir.x = -1; - break; - case( 38 ) : // up - dir.y = -1; - break; - case( 39 ) : // right - dir.x = 1; - break - case( 40 ) : // down - dir.y = 1; - break; - } - - if( dir.x != 0 || dir.y != 0 ) { - // if shift is pressed then move by 10 pixels - if( e.shiftKey ) { - dir.x *= 10; - dir.y *= 10; - } - - this.moveArea( [ this.areaCoords.x1 + dir.x, this.areaCoords.y1 + dir.y ] ); - Event.stop( e ); - } - } - }, - - /** - * Calculates the width from the areaCoords - * - * @access private - * @return int - */ - calcW: function() { - return (this.areaCoords.x2 - this.areaCoords.x1) - }, - - /** - * Calculates the height from the areaCoords - * - * @access private - * @return int - */ - calcH: function() { - return (this.areaCoords.y2 - this.areaCoords.y1) - }, - - /** - * Moves the select area to the supplied point (assumes the point is x1 & y1 of the select area) - * - * @access public - * @param array Point for x1 & y1 to move select area to - * @return void - */ - moveArea: function( point ) { - // dump( 'moveArea : ' + point[0] + ',' + point[1] + ',' + ( point[0] + ( this.areaCoords.x2 - this.areaCoords.x1 ) ) + ',' + ( point[1] + ( this.areaCoords.y2 - this.areaCoords.y1 ) ) + '\n' ); - this.setAreaCoords( - { - x1: point[0], - y1: point[1], - x2: point[0] + this.calcW(), - y2: point[1] + this.calcH() - }, - true, - false - ); - this.drawArea(); - }, - - /** - * Clones a co-ordinates object, stops problems with handling them by reference - * - * @access private - * @param obj Coordinate object x1, y1, x2, y2 - * @return obj Coordinate object x1, y1, x2, y2 - */ - cloneCoords: function( coords ) { - return { x1: coords.x1, y1: coords.y1, x2: coords.x2, y2: coords.y2 }; - }, - - /** - * Sets the select coords to those provided but ensures they don't go - * outside the bounding box - * - * @access private - * @param obj Coordinates x1, y1, x2, y2 - * @param boolean Whether this is a move - * @param boolean Whether to apply squaring - * @param obj Direction of mouse along both axis x, y ( -1 = negative, 1 = positive ) only required when moving etc. - * @param string The current resize handle || null - * @return void - */ - setAreaCoords: function( coords, moving, square, direction, resizeHandle ) { - // dump( 'setAreaCoords (in) : ' + coords.x1 + ',' + coords.y1 + ',' + coords.x2 + ',' + coords.y2 ); - if( moving ) { - // if moving - var targW = coords.x2 - coords.x1; - var targH = coords.y2 - coords.y1; - - // ensure we're within the bounds - if( coords.x1 < 0 ) { - coords.x1 = 0; - coords.x2 = targW; - } - if( coords.y1 < 0 ) { - coords.y1 = 0; - coords.y2 = targH; - } - if( coords.x2 > this.imgW ) { - coords.x2 = this.imgW; - coords.x1 = this.imgW - targW; - } - if( coords.y2 > this.imgH ) { - coords.y2 = this.imgH; - coords.y1 = this.imgH - targH; - } - } else { - // ensure we're within the bounds - if( coords.x1 < 0 ) coords.x1 = 0; - if( coords.y1 < 0 ) coords.y1 = 0; - if( coords.x2 > this.imgW ) coords.x2 = this.imgW; - if( coords.y2 > this.imgH ) coords.y2 = this.imgH; - - // This is passed as null in onload - if( direction != null ) { - - // apply the ratio or squaring where appropriate - if( this.ratioX > 0 ) this.applyRatio( coords, { x: this.ratioX, y: this.ratioY }, direction, resizeHandle ); - else if( square ) this.applyRatio( coords, { x: 1, y: 1 }, direction, resizeHandle ); - - var mins = [ this.options.minWidth, this.options.minHeight ]; // minimum dimensions [x,y] - var maxs = [ this.options.maxWidth, this.options.maxHeight ]; // maximum dimensions [x,y] - - // apply dimensions where appropriate - if( mins[0] > 0 || mins[1] > 0 || maxs[0] > 0 || maxs[1] > 0) { - - var coordsTransX = { a1: coords.x1, a2: coords.x2 }; - var coordsTransY = { a1: coords.y1, a2: coords.y2 }; - var boundsX = { min: 0, max: this.imgW }; - var boundsY = { min: 0, max: this.imgH }; - - // handle squaring properly on single axis minimum dimensions - if( (mins[0] != 0 || mins[1] != 0) && square ) { - if( mins[0] > 0 ) mins[1] = mins[0]; - else if( mins[1] > 0 ) mins[0] = mins[1]; - } - - if( (maxs[0] != 0 || maxs[0] != 0) && square ) { - // if we have a max x value & it is less than the max y value then we set the y max to the max x (so we don't go over the minimum maximum of one of the axes - if that makes sense) - if( maxs[0] > 0 && maxs[0] <= maxs[1] ) maxs[1] = maxs[0]; - else if( maxs[1] > 0 && maxs[1] <= maxs[0] ) maxs[0] = maxs[1]; - } - - if( mins[0] > 0 ) this.applyDimRestriction( coordsTransX, mins[0], direction.x, boundsX, 'min' ); - if( mins[1] > 1 ) this.applyDimRestriction( coordsTransY, mins[1], direction.y, boundsY, 'min' ); - - if( maxs[0] > 0 ) this.applyDimRestriction( coordsTransX, maxs[0], direction.x, boundsX, 'max' ); - if( maxs[1] > 1 ) this.applyDimRestriction( coordsTransY, maxs[1], direction.y, boundsY, 'max' ); - - coords = { x1: coordsTransX.a1, y1: coordsTransY.a1, x2: coordsTransX.a2, y2: coordsTransY.a2 }; - } - - } - } - - // dump( 'setAreaCoords (out) : ' + coords.x1 + ',' + coords.y1 + ',' + coords.x2 + ',' + coords.y2 + '\n' ); - this.areaCoords = coords; - }, - - /** - * Applies the supplied dimension restriction to the supplied coordinates along a single axis - * - * @access private - * @param obj Single axis coordinates, a1, a2 (e.g. for the x axis a1 = x1 & a2 = x2) - * @param int The restriction value - * @param int The direction ( -1 = negative, 1 = positive ) - * @param obj The bounds of the image ( for this axis ) - * @param string The dimension restriction type ( 'min' | 'max' ) - * @return void - */ - applyDimRestriction: function( coords, val, direction, bounds, type ) { - var check; - if( type == 'min' ) check = ( ( coords.a2 - coords.a1 ) < val ); - else check = ( ( coords.a2 - coords.a1 ) > val ); - if( check ) { - if( direction == 1 ) coords.a2 = coords.a1 + val; - else coords.a1 = coords.a2 - val; - - // make sure we're still in the bounds (not too pretty for the user, but needed) - if( coords.a1 < bounds.min ) { - coords.a1 = bounds.min; - coords.a2 = val; - } else if( coords.a2 > bounds.max ) { - coords.a1 = bounds.max - val; - coords.a2 = bounds.max; - } - } - }, - - /** - * Applies the supplied ratio to the supplied coordinates - * - * @access private - * @param obj Coordinates, x1, y1, x2, y2 - * @param obj Ratio, x, y - * @param obj Direction of mouse, x & y : -1 == negative 1 == positive - * @param string The current resize handle || null - * @return void - */ - applyRatio : function( coords, ratio, direction, resizeHandle ) { - // dump( 'direction.y : ' + direction.y + '\n'); - var newCoords; - if( resizeHandle == 'N' || resizeHandle == 'S' ) { - // dump( 'north south \n'); - // if moving on either the lone north & south handles apply the ratio on the y axis - newCoords = this.applyRatioToAxis( - { a1: coords.y1, b1: coords.x1, a2: coords.y2, b2: coords.x2 }, - { a: ratio.y, b: ratio.x }, - { a: direction.y, b: direction.x }, - { min: 0, max: this.imgW } - ); - coords.x1 = newCoords.b1; - coords.y1 = newCoords.a1; - coords.x2 = newCoords.b2; - coords.y2 = newCoords.a2; - } else { - // otherwise deal with it as if we're applying the ratio on the x axis - newCoords = this.applyRatioToAxis( - { a1: coords.x1, b1: coords.y1, a2: coords.x2, b2: coords.y2 }, - { a: ratio.x, b: ratio.y }, - { a: direction.x, b: direction.y }, - { min: 0, max: this.imgH } - ); - coords.x1 = newCoords.a1; - coords.y1 = newCoords.b1; - coords.x2 = newCoords.a2; - coords.y2 = newCoords.b2; - } - - }, - - /** - * Applies the provided ratio to the provided coordinates based on provided direction & bounds, - * use to encapsulate functionality to make it easy to apply to either axis. This is probably - * quite hard to visualise so see the x axis example within applyRatio() - * - * Example in parameter details & comments is for requesting applying ratio to x axis. - * - * @access private - * @param obj Coords object (a1, b1, a2, b2) where a = x & b = y in example - * @param obj Ratio object (a, b) where a = x & b = y in example - * @param obj Direction object (a, b) where a = x & b = y in example - * @param obj Bounds (min, max) - * @return obj Coords object (a1, b1, a2, b2) where a = x & b = y in example - */ - applyRatioToAxis: function( coords, ratio, direction, bounds ) { - var newCoords = Object.extend( coords, {} ); - var calcDimA = newCoords.a2 - newCoords.a1; // calculate dimension a (e.g. width) - var targDimB = Math.floor( calcDimA * ratio.b / ratio.a ); // the target dimension b (e.g. height) - var targB; // to hold target b (e.g. y value) - var targDimA; // to hold target dimension a (e.g. width) - var calcDimB = null; // to hold calculated dimension b (e.g. height) - - // dump( 'newCoords[0]: ' + newCoords.a1 + ',' + newCoords.b1 + ','+ newCoords.a2 + ',' + newCoords.b2 + '\n'); - - if( direction.b == 1 ) { // if travelling in a positive direction - // make sure we're not going out of bounds - targB = newCoords.b1 + targDimB; - if( targB > bounds.max ) { - targB = bounds.max; - calcDimB = targB - newCoords.b1; // calcuate dimension b (e.g. height) - } - - newCoords.b2 = targB; - } else { // if travelling in a negative direction - // make sure we're not going out of bounds - targB = newCoords.b2 - targDimB; - if( targB < bounds.min ) { - targB = bounds.min; - calcDimB = targB + newCoords.b2; // calcuate dimension b (e.g. height) - } - newCoords.b1 = targB; - } - - // dump( 'newCoords[1]: ' + newCoords.a1 + ',' + newCoords.b1 + ','+ newCoords.a2 + ',' + newCoords.b2 + '\n'); - - // apply the calculated dimensions - if( calcDimB != null ) { - targDimA = Math.floor( calcDimB * ratio.a / ratio.b ); - - if( direction.a == 1 ) newCoords.a2 = newCoords.a1 + targDimA; - else newCoords.a1 = newCoords.a1 = newCoords.a2 - targDimA; - } - - // dump( 'newCoords[2]: ' + newCoords.a1 + ',' + newCoords.b1 + ','+ newCoords.a2 + ',' + newCoords.b2 + '\n'); - - return newCoords; - }, - - /** - * Draws the select area - * - * @access private - * @return void - */ - drawArea: function( ) { - /* - * NOTE: I'm not using the Element.setStyle() shortcut as they make it - * quite sluggish on Mac based browsers - */ - // dump( 'drawArea : ' + this.areaCoords.x1 + ',' + this.areaCoords.y1 + ',' + this.areaCoords.x2 + ',' + this.areaCoords.y2 + '\n' ); - var areaWidth = this.calcW(); - var areaHeight = this.calcH(); - - /* - * Calculate all the style strings before we use them, allows reuse & produces quicker - * rendering (especially noticable in Mac based browsers) - */ - var px = 'px'; - var params = [ - this.areaCoords.x1 + px, // the left of the selArea - this.areaCoords.y1 + px, // the top of the selArea - areaWidth + px, // width of the selArea - areaHeight + px, // height of the selArea - this.areaCoords.x2 + px, // bottom of the selArea - this.areaCoords.y2 + px, // right of the selArea - (this.img.width - this.areaCoords.x2) + px, // right edge of selArea - (this.img.height - this.areaCoords.y2) + px // bottom edge of selArea - ]; - - // do the select area - var areaStyle = this.selArea.style; - areaStyle.left = params[0]; - areaStyle.top = params[1]; - areaStyle.width = params[2]; - areaStyle.height = params[3]; - - // position the north, east, south & west handles - var horizHandlePos = Math.ceil( (areaWidth - 6) / 2 ) + px; - var vertHandlePos = Math.ceil( (areaHeight - 6) / 2 ) + px; - - this.handleN.style.left = horizHandlePos; - this.handleE.style.top = vertHandlePos; - this.handleS.style.left = horizHandlePos; - this.handleW.style.top = vertHandlePos; - - // draw the four overlays - this.north.style.height = params[1]; - - var eastStyle = this.east.style; - eastStyle.top = params[1]; - eastStyle.height = params[3]; - eastStyle.left = params[4]; - eastStyle.width = params[6]; - - var southStyle = this.south.style; - southStyle.top = params[5]; - southStyle.height = params[7]; - - var westStyle = this.west.style; - westStyle.top = params[1]; - westStyle.height = params[3]; - westStyle.width = params[0]; - - // call the draw method on sub classes - this.subDrawArea(); - - this.forceReRender(); - }, - - /** - * Force the re-rendering of the selArea element which fixes rendering issues in Safari - * & IE PC, especially evident when re-sizing perfectly vertical using any of the south handles - * - * @access private - * @return void - */ - forceReRender: function() { - if( this.isIE || this.isWebKit) { - var n = document.createTextNode(' '); - var d,el,fixEL,i; - - if( this.isIE ) fixEl = this.selArea; - else if( this.isWebKit ) { - fixEl = document.getElementsByClassName( 'imgCrop_marqueeSouth', this.imgWrap )[0]; - /* we have to be a bit more forceful for Safari, otherwise the the marquee & - * the south handles still don't move - */ - d = Builder.node( 'div', '' ); - d.style.visibility = 'hidden'; - - var classList = ['SE','S','SW']; - for( i = 0; i < classList.length; i++ ) { - el = document.getElementsByClassName( 'imgCrop_handle' + classList[i], this.selArea )[0]; - if( el.childNodes.length ) el.removeChild( el.childNodes[0] ); - el.appendChild(d); - } - } - fixEl.appendChild(n); - fixEl.removeChild(n); - } - }, - - /** - * Starts the resize - * - * @access private - * @param obj Event - * @return void - */ - startResize: function( e ) { - this.startCoords = this.cloneCoords( this.areaCoords ); - - this.resizing = true; - this.resizeHandle = Event.element( e ).classNames().toString().replace(/([^N|NE|E|SE|S|SW|W|NW])+/, ''); - // dump( 'this.resizeHandle : ' + this.resizeHandle + '\n' ); - Event.stop( e ); - }, - - /** - * Starts the drag - * - * @access private - * @param obj Event - * @return void - */ - startDrag: function( e ) { - this.selArea.show(); - this.clickCoords = this.getCurPos( e ); - - this.setAreaCoords( { x1: this.clickCoords.x, y1: this.clickCoords.y, x2: this.clickCoords.x, y2: this.clickCoords.y }, false, false, null ); - - this.dragging = true; - this.onDrag( e ); // incase the user just clicks once after already making a selection - Event.stop( e ); - }, - - /** - * Gets the current cursor position relative to the image - * - * @access private - * @param obj Event - * @return obj x,y pixels of the cursor - */ - getCurPos: function( e ) { - // get the offsets for the wrapper within the document - var el = this.imgWrap, wrapOffsets = Position.cumulativeOffset( el ); - // remove any scrolling that is applied to the wrapper (this may be buggy) - don't count the scroll on the body as that won't affect us - while( el.nodeName != 'BODY' ) { - wrapOffsets[1] -= el.scrollTop || 0; - wrapOffsets[0] -= el.scrollLeft || 0; - el = el.parentNode; - } - return curPos = { - x: Event.pointerX(e) - wrapOffsets[0], - y: Event.pointerY(e) - wrapOffsets[1] - } - }, - - /** - * Performs the drag for both resize & inital draw dragging - * - * @access private - * @param obj Event - * @return void - */ - onDrag: function( e ) { - if( this.dragging || this.resizing ) { - - var resizeHandle = null; - var curPos = this.getCurPos( e ); - var newCoords = this.cloneCoords( this.areaCoords ); - var direction = { x: 1, y: 1 }; - - if( this.dragging ) { - if( curPos.x < this.clickCoords.x ) direction.x = -1; - if( curPos.y < this.clickCoords.y ) direction.y = -1; - - this.transformCoords( curPos.x, this.clickCoords.x, newCoords, 'x' ); - this.transformCoords( curPos.y, this.clickCoords.y, newCoords, 'y' ); - } else if( this.resizing ) { - resizeHandle = this.resizeHandle; - // do x movements first - if( resizeHandle.match(/E/) ) { - // if we're moving an east handle - this.transformCoords( curPos.x, this.startCoords.x1, newCoords, 'x' ); - if( curPos.x < this.startCoords.x1 ) direction.x = -1; - } else if( resizeHandle.match(/W/) ) { - // if we're moving an west handle - this.transformCoords( curPos.x, this.startCoords.x2, newCoords, 'x' ); - if( curPos.x < this.startCoords.x2 ) direction.x = -1; - } - - // do y movements second - if( resizeHandle.match(/N/) ) { - // if we're moving an north handle - this.transformCoords( curPos.y, this.startCoords.y2, newCoords, 'y' ); - if( curPos.y < this.startCoords.y2 ) direction.y = -1; - } else if( resizeHandle.match(/S/) ) { - // if we're moving an south handle - this.transformCoords( curPos.y, this.startCoords.y1, newCoords, 'y' ); - if( curPos.y < this.startCoords.y1 ) direction.y = -1; - } - - } - - this.setAreaCoords( newCoords, false, e.shiftKey, direction, resizeHandle ); - this.drawArea(); - Event.stop( e ); // stop the default event (selecting images & text) in Safari & IE PC - } - }, - - /** - * Applies the appropriate transform to supplied co-ordinates, on the - * defined axis, depending on the relationship of the supplied values - * - * @access private - * @param int Current value of pointer - * @param int Base value to compare current pointer val to - * @param obj Coordinates to apply transformation on x1, x2, y1, y2 - * @param string Axis to apply transformation on 'x' || 'y' - * @return void - */ - transformCoords : function( curVal, baseVal, coords, axis ) { - var newVals = [ curVal, baseVal ]; - if( curVal > baseVal ) newVals.reverse(); - coords[ axis + '1' ] = newVals[0]; - coords[ axis + '2' ] = newVals[1]; - }, - - /** - * Ends the crop & passes the values of the select area on to the appropriate - * callback function on completion of a crop - * - * @access private - * @return void - */ - endCrop : function() { - this.dragging = false; - this.resizing = false; - - this.options.onEndCrop( - this.areaCoords, - { - width: this.calcW(), - height: this.calcH() - } - ); - }, - - /** - * Abstract method called on the end of initialization - * - * @access private - * @abstract - * @return void - */ - subInitialize: function() {}, - - /** - * Abstract method called on the end of drawArea() - * - * @access private - * @abstract - * @return void - */ - subDrawArea: function() {} -}; - - - - -/** - * Extend the Cropper.Img class to allow for presentation of a preview image of the resulting crop, - * the option for displayOnInit is always overridden to true when displaying a preview image - * - * Usage: - * @param obj Image element to attach to - * @param obj Optional options: - * - see Cropper.Img for base options - * - * - previewWrap obj - * HTML element that will be used as a container for the preview image - */ -Cropper.ImgWithPreview = Class.create(); - -Object.extend( Object.extend( Cropper.ImgWithPreview.prototype, Cropper.Img.prototype ), { - - /** - * Implements the abstract method from Cropper.Img to initialize preview image settings. - * Will only attach a preview image is the previewWrap element is defined and the minWidth - * & minHeight options are set. - * - * @see Croper.Img.subInitialize - */ - subInitialize: function() { - /** - * Whether or not we've attached a preview image - * @var boolean - */ - this.hasPreviewImg = false; - if( typeof(this.options.previewWrap) != 'undefined' - && this.options.minWidth > 0 - && this.options.minHeight > 0 - ) { - /** - * The preview image wrapper element - * @var obj HTML element - */ - this.previewWrap = $PR( this.options.previewWrap ); - /** - * The preview image element - * @var obj HTML IMG element - */ - this.previewImg = this.img.cloneNode( false ); - // set the ID of the preview image to be unique - this.previewImg.id = 'imgCrop_' + this.previewImg.id; - - - // set the displayOnInit option to true so we display the select area at the same time as the thumbnail - this.options.displayOnInit = true; - - this.hasPreviewImg = true; - - this.previewWrap.addClassName( 'imgCrop_previewWrap' ); - - this.previewWrap.setStyle( - { - width: this.options.minWidth + 'px', - height: this.options.minHeight + 'px' - } - ); - - this.previewWrap.appendChild( this.previewImg ); - } - }, - - /** - * Implements the abstract method from Cropper.Img to draw the preview image - * - * @see Croper.Img.subDrawArea - */ - subDrawArea: function() { - if( this.hasPreviewImg ) { - // get the ratio of the select area to the src image - var calcWidth = this.calcW(); - var calcHeight = this.calcH(); - // ratios for the dimensions of the preview image - var dimRatio = { - x: this.imgW / calcWidth, - y: this.imgH / calcHeight - }; - //ratios for the positions within the preview - var posRatio = { - x: calcWidth / this.options.minWidth, - y: calcHeight / this.options.minHeight - }; - - // setting the positions in an obj before apply styles for rendering speed increase - var calcPos = { - w: Math.ceil( this.options.minWidth * dimRatio.x ) + 'px', - h: Math.ceil( this.options.minHeight * dimRatio.y ) + 'px', - x: '-' + Math.ceil( this.areaCoords.x1 / posRatio.x ) + 'px', - y: '-' + Math.ceil( this.areaCoords.y1 / posRatio.y ) + 'px' - } - - var previewStyle = this.previewImg.style; - previewStyle.width = calcPos.w; - previewStyle.height = calcPos.h; - previewStyle.left = calcPos.x; - previewStyle.top = calcPos.y; - } - } - -}); diff --git a/view/js/cropper/lib/builder.js b/view/js/cropper/lib/builder.js deleted file mode 100644 index 5b15ba939..000000000 --- a/view/js/cropper/lib/builder.js +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// -// See scriptaculous.js for full license. - -var Builder = { - NODEMAP: { - AREA: 'map', - CAPTION: 'table', - COL: 'table', - COLGROUP: 'table', - LEGEND: 'fieldset', - OPTGROUP: 'select', - OPTION: 'select', - PARAM: 'object', - TBODY: 'table', - TD: 'table', - TFOOT: 'table', - TH: 'table', - THEAD: 'table', - TR: 'table' - }, - // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken, - // due to a Firefox bug - node: function(elementName) { - elementName = elementName.toUpperCase(); - - // try innerHTML approach - var parentTag = this.NODEMAP[elementName] || 'div'; - var parentElement = document.createElement(parentTag); - try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707 - parentElement.innerHTML = "<" + elementName + ">"; - } catch(e) {} - var element = parentElement.firstChild || null; - - // see if browser added wrapping tags - if(element && (element.tagName != elementName)) - element = element.getElementsByTagName(elementName)[0]; - - // fallback to createElement approach - if(!element) element = document.createElement(elementName); - - // abort if nothing could be created - if(!element) return; - - // attributes (or text) - if(arguments[1]) - if(this._isStringOrNumber(arguments[1]) || - (arguments[1] instanceof Array)) { - this._children(element, arguments[1]); - } else { - var attrs = this._attributes(arguments[1]); - if(attrs.length) { - try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707 - parentElement.innerHTML = "<" +elementName + " " + - attrs + ">"; - } catch(e) {} - element = parentElement.firstChild || null; - // workaround firefox 1.0.X bug - if(!element) { - element = document.createElement(elementName); - for(attr in arguments[1]) - element[attr == 'class' ? 'className' : attr] = arguments[1][attr]; - } - if(element.tagName != elementName) - element = parentElement.getElementsByTagName(elementName)[0]; - } - } - - // text, or array of children - if(arguments[2]) - this._children(element, arguments[2]); - - return element; - }, - _text: function(text) { - return document.createTextNode(text); - }, - _attributes: function(attributes) { - var attrs = []; - for(attribute in attributes) - attrs.push((attribute=='className' ? 'class' : attribute) + - '="' + attributes[attribute].toString().escapeHTML() + '"'); - return attrs.join(" "); - }, - _children: function(element, children) { - if(typeof children=='object') { // array can hold nodes and text - children.flatten().each( function(e) { - if(typeof e=='object') - element.appendChild(e) - else - if(Builder._isStringOrNumber(e)) - element.appendChild(Builder._text(e)); - }); - } else - if(Builder._isStringOrNumber(children)) - element.appendChild(Builder._text(children)); - }, - _isStringOrNumber: function(param) { - return(typeof param=='string' || typeof param=='number'); - } -} \ No newline at end of file diff --git a/view/js/cropper/lib/controls.js b/view/js/cropper/lib/controls.js deleted file mode 100644 index 960694877..000000000 --- a/view/js/cropper/lib/controls.js +++ /dev/null @@ -1,815 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// (c) 2005 Ivan Krstic (http://blogs.law.harvard.edu/ivan) -// (c) 2005 Jon Tirsen (http://www.tirsen.com) -// Contributors: -// Richard Livsey -// Rahul Bhargava -// Rob Wills -// -// See scriptaculous.js for full license. - -// Autocompleter.Base handles all the autocompletion functionality -// that's independent of the data source for autocompletion. This -// includes drawing the autocompletion menu, observing keyboard -// and mouse events, and similar. -// -// Specific autocompleters need to provide, at the very least, -// a getUpdatedChoices function that will be invoked every time -// the text inside the monitored textbox changes. This method -// should get the text for which to provide autocompletion by -// invoking this.getToken(), NOT by directly accessing -// this.element.value. This is to allow incremental tokenized -// autocompletion. Specific auto-completion logic (AJAX, etc) -// belongs in getUpdatedChoices. -// -// Tokenized incremental autocompletion is enabled automatically -// when an autocompleter is instantiated with the 'tokens' option -// in the options parameter, e.g.: -// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' }); -// will incrementally autocomplete with a comma as the token. -// Additionally, ',' in the above example can be replaced with -// a token array, e.g. { tokens: [',', '\n'] } which -// enables autocompletion on multiple tokens. This is most -// useful when one of the tokens is \n (a newline), as it -// allows smart autocompletion after linebreaks. - -var Autocompleter = {} -Autocompleter.Base = function() {}; -Autocompleter.Base.prototype = { - baseInitialize: function(element, update, options) { - this.element = $PR(element); - this.update = $PR(update); - this.hasFocus = false; - this.changed = false; - this.active = false; - this.index = 0; - this.entryCount = 0; - - if (this.setOptions) - this.setOptions(options); - else - this.options = options || {}; - - this.options.paramName = this.options.paramName || this.element.name; - this.options.tokens = this.options.tokens || []; - this.options.frequency = this.options.frequency || 0.4; - this.options.minChars = this.options.minChars || 1; - this.options.onShow = this.options.onShow || - function(element, update){ - if(!update.style.position || update.style.position=='absolute') { - update.style.position = 'absolute'; - Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight}); - } - Effect.Appear(update,{duration:0.15}); - }; - this.options.onHide = this.options.onHide || - function(element, update){ new Effect.Fade(update,{duration:0.15}) }; - - if (typeof(this.options.tokens) == 'string') - this.options.tokens = new Array(this.options.tokens); - - this.observer = null; - - this.element.setAttribute('autocomplete','off'); - - Element.hide(this.update); - - Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this)); - Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this)); - }, - - show: function() { - if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update); - if(!this.iefix && - (navigator.appVersion.indexOf('MSIE')>0) && - (navigator.userAgent.indexOf('Opera')<0) && - (Element.getStyle(this.update, 'position')=='absolute')) { - new Insertion.After(this.update, - ''); - this.iefix = $PR(this.update.id+'_iefix'); - } - if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50); - }, - - fixIEOverlapping: function() { - Position.clone(this.update, this.iefix); - this.iefix.style.zIndex = 1; - this.update.style.zIndex = 2; - Element.show(this.iefix); - }, - - hide: function() { - this.stopIndicator(); - if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update); - if(this.iefix) Element.hide(this.iefix); - }, - - startIndicator: function() { - if(this.options.indicator) Element.show(this.options.indicator); - }, - - stopIndicator: function() { - if(this.options.indicator) Element.hide(this.options.indicator); - }, - - onKeyPress: function(event) { - if(this.active) - switch(event.keyCode) { - case Event.KEY_TAB: - case Event.KEY_RETURN: - this.selectEntry(); - Event.stop(event); - case Event.KEY_ESC: - this.hide(); - this.active = false; - Event.stop(event); - return; - case Event.KEY_LEFT: - case Event.KEY_RIGHT: - return; - case Event.KEY_UP: - this.markPrevious(); - this.render(); - if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event); - return; - case Event.KEY_DOWN: - this.markNext(); - this.render(); - if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event); - return; - } - else - if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || - (navigator.appVersion.indexOf('AppleWebKit') > 0 && event.keyCode == 0)) return; - - this.changed = true; - this.hasFocus = true; - - if(this.observer) clearTimeout(this.observer); - this.observer = - setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000); - }, - - activate: function() { - this.changed = false; - this.hasFocus = true; - this.getUpdatedChoices(); - }, - - onHover: function(event) { - var element = Event.findElement(event, 'LI'); - if(this.index != element.autocompleteIndex) - { - this.index = element.autocompleteIndex; - this.render(); - } - Event.stop(event); - }, - - onClick: function(event) { - var element = Event.findElement(event, 'LI'); - this.index = element.autocompleteIndex; - this.selectEntry(); - this.hide(); - }, - - onBlur: function(event) { - // needed to make click events working - setTimeout(this.hide.bind(this), 250); - this.hasFocus = false; - this.active = false; - }, - - render: function() { - if(this.entryCount > 0) { - for (var i = 0; i < this.entryCount; i++) - this.index==i ? - Element.addClassName(this.getEntry(i),"selected") : - Element.removeClassName(this.getEntry(i),"selected"); - - if(this.hasFocus) { - this.show(); - this.active = true; - } - } else { - this.active = false; - this.hide(); - } - }, - - markPrevious: function() { - if(this.index > 0) this.index-- - else this.index = this.entryCount-1; - }, - - markNext: function() { - if(this.index < this.entryCount-1) this.index++ - else this.index = 0; - }, - - getEntry: function(index) { - return this.update.firstChild.childNodes[index]; - }, - - getCurrentEntry: function() { - return this.getEntry(this.index); - }, - - selectEntry: function() { - this.active = false; - this.updateElement(this.getCurrentEntry()); - }, - - updateElement: function(selectedElement) { - if (this.options.updateElement) { - this.options.updateElement(selectedElement); - return; - } - var value = ''; - if (this.options.select) { - var nodes = document.getElementsByClassName(this.options.select, selectedElement) || []; - if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select); - } else - value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal'); - - var lastTokenPos = this.findLastToken(); - if (lastTokenPos != -1) { - var newValue = this.element.value.substr(0, lastTokenPos + 1); - var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/); - if (whitespace) - newValue += whitespace[0]; - this.element.value = newValue + value; - } else { - this.element.value = value; - } - this.element.focus(); - - if (this.options.afterUpdateElement) - this.options.afterUpdateElement(this.element, selectedElement); - }, - - updateChoices: function(choices) { - if(!this.changed && this.hasFocus) { - this.update.innerHTML = choices; - Element.cleanWhitespace(this.update); - Element.cleanWhitespace(this.update.firstChild); - - if(this.update.firstChild && this.update.firstChild.childNodes) { - this.entryCount = - this.update.firstChild.childNodes.length; - for (var i = 0; i < this.entryCount; i++) { - var entry = this.getEntry(i); - entry.autocompleteIndex = i; - this.addObservers(entry); - } - } else { - this.entryCount = 0; - } - - this.stopIndicator(); - - this.index = 0; - this.render(); - } - }, - - addObservers: function(element) { - Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this)); - Event.observe(element, "click", this.onClick.bindAsEventListener(this)); - }, - - onObserverEvent: function() { - this.changed = false; - if(this.getToken().length>=this.options.minChars) { - this.startIndicator(); - this.getUpdatedChoices(); - } else { - this.active = false; - this.hide(); - } - }, - - getToken: function() { - var tokenPos = this.findLastToken(); - if (tokenPos != -1) - var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,''); - else - var ret = this.element.value; - - return /\n/.test(ret) ? '' : ret; - }, - - findLastToken: function() { - var lastTokenPos = -1; - - for (var i=0; i lastTokenPos) - lastTokenPos = thisTokenPos; - } - return lastTokenPos; - } -} - -Ajax.Autocompleter = Class.create(); -Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), { - initialize: function(element, update, url, options) { - this.baseInitialize(element, update, options); - this.options.asynchronous = true; - this.options.onComplete = this.onComplete.bind(this); - this.options.defaultParams = this.options.parameters || null; - this.url = url; - }, - - getUpdatedChoices: function() { - entry = encodeURIComponent(this.options.paramName) + '=' + - encodeURIComponent(this.getToken()); - - this.options.parameters = this.options.callback ? - this.options.callback(this.element, entry) : entry; - - if(this.options.defaultParams) - this.options.parameters += '&' + this.options.defaultParams; - - new Ajax.Request(this.url, this.options); - }, - - onComplete: function(request) { - this.updateChoices(request.responseText); - } - -}); - -// The local array autocompleter. Used when you'd prefer to -// inject an array of autocompletion options into the page, rather -// than sending out Ajax queries, which can be quite slow sometimes. -// -// The constructor takes four parameters. The first two are, as usual, -// the id of the monitored textbox, and id of the autocompletion menu. -// The third is the array you want to autocomplete from, and the fourth -// is the options block. -// -// Extra local autocompletion options: -// - choices - How many autocompletion choices to offer -// -// - partialSearch - If false, the autocompleter will match entered -// text only at the beginning of strings in the -// autocomplete array. Defaults to true, which will -// match text at the beginning of any *word* in the -// strings in the autocomplete array. If you want to -// search anywhere in the string, additionally set -// the option fullSearch to true (default: off). -// -// - fullSsearch - Search anywhere in autocomplete array strings. -// -// - partialChars - How many characters to enter before triggering -// a partial match (unlike minChars, which defines -// how many characters are required to do any match -// at all). Defaults to 2. -// -// - ignoreCase - Whether to ignore case when autocompleting. -// Defaults to true. -// -// It's possible to pass in a custom function as the 'selector' -// option, if you prefer to write your own autocompletion logic. -// In that case, the other options above will not apply unless -// you support them. - -Autocompleter.Local = Class.create(); -Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), { - initialize: function(element, update, array, options) { - this.baseInitialize(element, update, options); - this.options.array = array; - }, - - getUpdatedChoices: function() { - this.updateChoices(this.options.selector(this)); - }, - - setOptions: function(options) { - this.options = Object.extend({ - choices: 10, - partialSearch: true, - partialChars: 2, - ignoreCase: true, - fullSearch: false, - selector: function(instance) { - var ret = []; // Beginning matches - var partial = []; // Inside matches - var entry = instance.getToken(); - var count = 0; - - for (var i = 0; i < instance.options.array.length && - ret.length < instance.options.choices ; i++) { - - var elem = instance.options.array[i]; - var foundPos = instance.options.ignoreCase ? - elem.toLowerCase().indexOf(entry.toLowerCase()) : - elem.indexOf(entry); - - while (foundPos != -1) { - if (foundPos == 0 && elem.length != entry.length) { - ret.push("
  • " + elem.substr(0, entry.length) + "" + - elem.substr(entry.length) + "
  • "); - break; - } else if (entry.length >= instance.options.partialChars && - instance.options.partialSearch && foundPos != -1) { - if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) { - partial.push("
  • " + elem.substr(0, foundPos) + "" + - elem.substr(foundPos, entry.length) + "" + elem.substr( - foundPos + entry.length) + "
  • "); - break; - } - } - - foundPos = instance.options.ignoreCase ? - elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : - elem.indexOf(entry, foundPos + 1); - - } - } - if (partial.length) - ret = ret.concat(partial.slice(0, instance.options.choices - ret.length)) - return "
      " + ret.join('') + "
    "; - } - }, options || {}); - } -}); - -// AJAX in-place editor -// -// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor - -// Use this if you notice weird scrolling problems on some browsers, -// the DOM might be a bit confused when this gets called so do this -// waits 1 ms (with setTimeout) until it does the activation -Field.scrollFreeActivate = function(field) { - setTimeout(function() { - Field.activate(field); - }, 1); -} - -Ajax.InPlaceEditor = Class.create(); -Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99"; -Ajax.InPlaceEditor.prototype = { - initialize: function(element, url, options) { - this.url = url; - this.element = $PR(element); - - this.options = Object.extend({ - okButton: true, - okText: "ok", - cancelLink: true, - cancelText: "cancel", - savingText: "Saving...", - clickToEditText: "Click to edit", - okText: "ok", - rows: 1, - onComplete: function(transport, element) { - new Effect.Highlight(element, {startcolor: this.options.highlightcolor}); - }, - onFailure: function(transport) { - alert("Error communicating with the server: " + transport.responseText.stripTags()); - }, - callback: function(form) { - return Form.serialize(form); - }, - handleLineBreaks: true, - loadingText: 'Loading...', - savingClassName: 'inplaceeditor-saving', - loadingClassName: 'inplaceeditor-loading', - formClassName: 'inplaceeditor-form', - highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor, - highlightendcolor: "#FFFFFF", - externalControl: null, - submitOnBlur: false, - ajaxOptions: {}, - evalScripts: false - }, options || {}); - - if(!this.options.formId && this.element.id) { - this.options.formId = this.element.id + "-inplaceeditor"; - if ($PR(this.options.formId)) { - // there's already a form with that name, don't specify an id - this.options.formId = null; - } - } - - if (this.options.externalControl) { - this.options.externalControl = $PR(this.options.externalControl); - } - - this.originalBackground = Element.getStyle(this.element, 'background-color'); - if (!this.originalBackground) { - this.originalBackground = "transparent"; - } - - this.element.title = this.options.clickToEditText; - - this.onclickListener = this.enterEditMode.bindAsEventListener(this); - this.mouseoverListener = this.enterHover.bindAsEventListener(this); - this.mouseoutListener = this.leaveHover.bindAsEventListener(this); - Event.observe(this.element, 'click', this.onclickListener); - Event.observe(this.element, 'mouseover', this.mouseoverListener); - Event.observe(this.element, 'mouseout', this.mouseoutListener); - if (this.options.externalControl) { - Event.observe(this.options.externalControl, 'click', this.onclickListener); - Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener); - Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener); - } - }, - enterEditMode: function(evt) { - if (this.saving) return; - if (this.editing) return; - this.editing = true; - this.onEnterEditMode(); - if (this.options.externalControl) { - Element.hide(this.options.externalControl); - } - Element.hide(this.element); - this.createForm(); - this.element.parentNode.insertBefore(this.form, this.element); - Field.scrollFreeActivate(this.editField); - // stop the event to avoid a page refresh in Safari - if (evt) { - Event.stop(evt); - } - return false; - }, - createForm: function() { - this.form = document.createElement("form"); - this.form.id = this.options.formId; - Element.addClassName(this.form, this.options.formClassName) - this.form.onsubmit = this.onSubmit.bind(this); - - this.createEditField(); - - if (this.options.textarea) { - var br = document.createElement("br"); - this.form.appendChild(br); - } - - if (this.options.okButton) { - okButton = document.createElement("input"); - okButton.type = "submit"; - okButton.value = this.options.okText; - okButton.className = 'editor_ok_button'; - this.form.appendChild(okButton); - } - - if (this.options.cancelLink) { - cancelLink = document.createElement("a"); - cancelLink.href = "#"; - cancelLink.appendChild(document.createTextNode(this.options.cancelText)); - cancelLink.onclick = this.onclickCancel.bind(this); - cancelLink.className = 'editor_cancel'; - this.form.appendChild(cancelLink); - } - }, - hasHTMLLineBreaks: function(string) { - if (!this.options.handleLineBreaks) return false; - return string.match(/
    /i); - }, - convertHTMLLineBreaks: function(string) { - return string.replace(/
    /gi, "\n").replace(//gi, "\n").replace(/<\/p>/gi, "\n").replace(/

    /gi, ""); - }, - createEditField: function() { - var text; - if(this.options.loadTextURL) { - text = this.options.loadingText; - } else { - text = this.getText(); - } - - var obj = this; - - if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) { - this.options.textarea = false; - var textField = document.createElement("input"); - textField.obj = this; - textField.type = "text"; - textField.name = "value"; - textField.value = text; - textField.style.backgroundColor = this.options.highlightcolor; - textField.className = 'editor_field'; - var size = this.options.size || this.options.cols || 0; - if (size != 0) textField.size = size; - if (this.options.submitOnBlur) - textField.onblur = this.onSubmit.bind(this); - this.editField = textField; - } else { - this.options.textarea = true; - var textArea = document.createElement("textarea"); - textArea.obj = this; - textArea.name = "value"; - textArea.value = this.convertHTMLLineBreaks(text); - textArea.rows = this.options.rows; - textArea.cols = this.options.cols || 40; - textArea.className = 'editor_field'; - if (this.options.submitOnBlur) - textArea.onblur = this.onSubmit.bind(this); - this.editField = textArea; - } - - if(this.options.loadTextURL) { - this.loadExternalText(); - } - this.form.appendChild(this.editField); - }, - getText: function() { - return this.element.innerHTML; - }, - loadExternalText: function() { - Element.addClassName(this.form, this.options.loadingClassName); - this.editField.disabled = true; - new Ajax.Request( - this.options.loadTextURL, - Object.extend({ - asynchronous: true, - onComplete: this.onLoadedExternalText.bind(this) - }, this.options.ajaxOptions) - ); - }, - onLoadedExternalText: function(transport) { - Element.removeClassName(this.form, this.options.loadingClassName); - this.editField.disabled = false; - this.editField.value = transport.responseText.stripTags(); - }, - onclickCancel: function() { - this.onComplete(); - this.leaveEditMode(); - return false; - }, - onFailure: function(transport) { - this.options.onFailure(transport); - if (this.oldInnerHTML) { - this.element.innerHTML = this.oldInnerHTML; - this.oldInnerHTML = null; - } - return false; - }, - onSubmit: function() { - // onLoading resets these so we need to save them away for the Ajax call - var form = this.form; - var value = this.editField.value; - - // do this first, sometimes the ajax call returns before we get a chance to switch on Saving... - // which means this will actually switch on Saving... *after* we've left edit mode causing Saving... - // to be displayed indefinitely - this.onLoading(); - - if (this.options.evalScripts) { - new Ajax.Request( - this.url, Object.extend({ - parameters: this.options.callback(form, value), - onComplete: this.onComplete.bind(this), - onFailure: this.onFailure.bind(this), - asynchronous:true, - evalScripts:true - }, this.options.ajaxOptions)); - } else { - new Ajax.Updater( - { success: this.element, - // don't update on failure (this could be an option) - failure: null }, - this.url, Object.extend({ - parameters: this.options.callback(form, value), - onComplete: this.onComplete.bind(this), - onFailure: this.onFailure.bind(this) - }, this.options.ajaxOptions)); - } - // stop the event to avoid a page refresh in Safari - if (arguments.length > 1) { - Event.stop(arguments[0]); - } - return false; - }, - onLoading: function() { - this.saving = true; - this.removeForm(); - this.leaveHover(); - this.showSaving(); - }, - showSaving: function() { - this.oldInnerHTML = this.element.innerHTML; - this.element.innerHTML = this.options.savingText; - Element.addClassName(this.element, this.options.savingClassName); - this.element.style.backgroundColor = this.originalBackground; - Element.show(this.element); - }, - removeForm: function() { - if(this.form) { - if (this.form.parentNode) Element.remove(this.form); - this.form = null; - } - }, - enterHover: function() { - if (this.saving) return; - this.element.style.backgroundColor = this.options.highlightcolor; - if (this.effect) { - this.effect.cancel(); - } - Element.addClassName(this.element, this.options.hoverClassName) - }, - leaveHover: function() { - if (this.options.backgroundColor) { - this.element.style.backgroundColor = this.oldBackground; - } - Element.removeClassName(this.element, this.options.hoverClassName) - if (this.saving) return; - this.effect = new Effect.Highlight(this.element, { - startcolor: this.options.highlightcolor, - endcolor: this.options.highlightendcolor, - restorecolor: this.originalBackground - }); - }, - leaveEditMode: function() { - Element.removeClassName(this.element, this.options.savingClassName); - this.removeForm(); - this.leaveHover(); - this.element.style.backgroundColor = this.originalBackground; - Element.show(this.element); - if (this.options.externalControl) { - Element.show(this.options.externalControl); - } - this.editing = false; - this.saving = false; - this.oldInnerHTML = null; - this.onLeaveEditMode(); - }, - onComplete: function(transport) { - this.leaveEditMode(); - this.options.onComplete.bind(this)(transport, this.element); - }, - onEnterEditMode: function() {}, - onLeaveEditMode: function() {}, - dispose: function() { - if (this.oldInnerHTML) { - this.element.innerHTML = this.oldInnerHTML; - } - this.leaveEditMode(); - Event.stopObserving(this.element, 'click', this.onclickListener); - Event.stopObserving(this.element, 'mouseover', this.mouseoverListener); - Event.stopObserving(this.element, 'mouseout', this.mouseoutListener); - if (this.options.externalControl) { - Event.stopObserving(this.options.externalControl, 'click', this.onclickListener); - Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener); - Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener); - } - } -}; - -Ajax.InPlaceCollectionEditor = Class.create(); -Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype); -Object.extend(Ajax.InPlaceCollectionEditor.prototype, { - createEditField: function() { - if (!this.cached_selectTag) { - var selectTag = document.createElement("select"); - var collection = this.options.collection || []; - var optionTag; - collection.each(function(e,i) { - optionTag = document.createElement("option"); - optionTag.value = (e instanceof Array) ? e[0] : e; - if(this.options.value==optionTag.value) optionTag.selected = true; - optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e)); - selectTag.appendChild(optionTag); - }.bind(this)); - this.cached_selectTag = selectTag; - } - - this.editField = this.cached_selectTag; - if(this.options.loadTextURL) this.loadExternalText(); - this.form.appendChild(this.editField); - this.options.callback = function(form, value) { - return "value=" + encodeURIComponent(value); - } - } -}); - -// Delayed observer, like Form.Element.Observer, -// but waits for delay after last key input -// Ideal for live-search fields - -Form.Element.DelayedObserver = Class.create(); -Form.Element.DelayedObserver.prototype = { - initialize: function(element, delay, callback) { - this.delay = delay || 0.5; - this.element = $PR(element); - this.callback = callback; - this.timer = null; - this.lastValue = $F(this.element); - Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this)); - }, - delayedListener: function(event) { - if(this.lastValue == $F(this.element)) return; - if(this.timer) clearTimeout(this.timer); - this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000); - this.lastValue = $F(this.element); - }, - onTimerEvent: function() { - this.timer = null; - this.callback(this.element, $F(this.element)); - } -}; diff --git a/view/js/cropper/lib/dragdrop.js b/view/js/cropper/lib/dragdrop.js deleted file mode 100644 index baa607c67..000000000 --- a/view/js/cropper/lib/dragdrop.js +++ /dev/null @@ -1,915 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// (c) 2005 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz) -// -// See scriptaculous.js for full license. - -/*--------------------------------------------------------------------------*/ - -var Droppables = { - drops: [], - - remove: function(element) { - this.drops = this.drops.reject(function(d) { return d.element==$PR(element) }); - }, - - add: function(element) { - element = $PR(element); - var options = Object.extend({ - greedy: true, - hoverclass: null, - tree: false - }, arguments[1] || {}); - - // cache containers - if(options.containment) { - options._containers = []; - var containment = options.containment; - if((typeof containment == 'object') && - (containment.constructor == Array)) { - containment.each( function(c) { options._containers.push($PR(c)) }); - } else { - options._containers.push($PR(containment)); - } - } - - if(options.accept) options.accept = [options.accept].flatten(); - - Element.makePositioned(element); // fix IE - options.element = element; - - this.drops.push(options); - }, - - findDeepestChild: function(drops) { - deepest = drops[0]; - - for (i = 1; i < drops.length; ++i) - if (Element.isParent(drops[i].element, deepest.element)) - deepest = drops[i]; - - return deepest; - }, - - isContained: function(element, drop) { - var containmentNode; - if(drop.tree) { - containmentNode = element.treeNode; - } else { - containmentNode = element.parentNode; - } - return drop._containers.detect(function(c) { return containmentNode == c }); - }, - - isAffected: function(point, element, drop) { - return ( - (drop.element!=element) && - ((!drop._containers) || - this.isContained(element, drop)) && - ((!drop.accept) || - (Element.classNames(element).detect( - function(v) { return drop.accept.include(v) } ) )) && - Position.within(drop.element, point[0], point[1]) ); - }, - - deactivate: function(drop) { - if(drop.hoverclass) - Element.removeClassName(drop.element, drop.hoverclass); - this.last_active = null; - }, - - activate: function(drop) { - if(drop.hoverclass) - Element.addClassName(drop.element, drop.hoverclass); - this.last_active = drop; - }, - - show: function(point, element) { - if(!this.drops.length) return; - var affected = []; - - if(this.last_active) this.deactivate(this.last_active); - this.drops.each( function(drop) { - if(Droppables.isAffected(point, element, drop)) - affected.push(drop); - }); - - if(affected.length>0) { - drop = Droppables.findDeepestChild(affected); - Position.within(drop.element, point[0], point[1]); - if(drop.onHover) - drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element)); - - Droppables.activate(drop); - } - }, - - fire: function(event, element) { - if(!this.last_active) return; - Position.prepare(); - - if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active)) - if (this.last_active.onDrop) - this.last_active.onDrop(element, this.last_active.element, event); - }, - - reset: function() { - if(this.last_active) - this.deactivate(this.last_active); - } -} - -var Draggables = { - drags: [], - observers: [], - - register: function(draggable) { - if(this.drags.length == 0) { - this.eventMouseUp = this.endDrag.bindAsEventListener(this); - this.eventMouseMove = this.updateDrag.bindAsEventListener(this); - this.eventKeypress = this.keyPress.bindAsEventListener(this); - - Event.observe(document, "mouseup", this.eventMouseUp); - Event.observe(document, "mousemove", this.eventMouseMove); - Event.observe(document, "keypress", this.eventKeypress); - } - this.drags.push(draggable); - }, - - unregister: function(draggable) { - this.drags = this.drags.reject(function(d) { return d==draggable }); - if(this.drags.length == 0) { - Event.stopObserving(document, "mouseup", this.eventMouseUp); - Event.stopObserving(document, "mousemove", this.eventMouseMove); - Event.stopObserving(document, "keypress", this.eventKeypress); - } - }, - - activate: function(draggable) { - window.focus(); // allows keypress events if window isn't currently focused, fails for Safari - this.activeDraggable = draggable; - }, - - deactivate: function() { - this.activeDraggable = null; - }, - - updateDrag: function(event) { - if(!this.activeDraggable) return; - var pointer = [Event.pointerX(event), Event.pointerY(event)]; - // Mozilla-based browsers fire successive mousemove events with - // the same coordinates, prevent needless redrawing (moz bug?) - if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return; - this._lastPointer = pointer; - this.activeDraggable.updateDrag(event, pointer); - }, - - endDrag: function(event) { - if(!this.activeDraggable) return; - this._lastPointer = null; - this.activeDraggable.endDrag(event); - this.activeDraggable = null; - }, - - keyPress: function(event) { - if(this.activeDraggable) - this.activeDraggable.keyPress(event); - }, - - addObserver: function(observer) { - this.observers.push(observer); - this._cacheObserverCallbacks(); - }, - - removeObserver: function(element) { // element instead of observer fixes mem leaks - this.observers = this.observers.reject( function(o) { return o.element==element }); - this._cacheObserverCallbacks(); - }, - - notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag' - if(this[eventName+'Count'] > 0) - this.observers.each( function(o) { - if(o[eventName]) o[eventName](eventName, draggable, event); - }); - }, - - _cacheObserverCallbacks: function() { - ['onStart','onEnd','onDrag'].each( function(eventName) { - Draggables[eventName+'Count'] = Draggables.observers.select( - function(o) { return o[eventName]; } - ).length; - }); - } -} - -/*--------------------------------------------------------------------------*/ - -var Draggable = Class.create(); -Draggable.prototype = { - initialize: function(element) { - var options = Object.extend({ - handle: false, - starteffect: function(element) { - element._opacity = Element.getOpacity(element); - new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); - }, - reverteffect: function(element, top_offset, left_offset) { - var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; - element._revert = new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur}); - }, - endeffect: function(element) { - var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0 - new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity}); - }, - zindex: 1000, - revert: false, - scroll: false, - scrollSensitivity: 20, - scrollSpeed: 15, - snap: false // false, or xy or [x,y] or function(x,y){ return [x,y] } - }, arguments[1] || {}); - - this.element = $PR(element); - - if(options.handle && (typeof options.handle == 'string')) { - var h = Element.childrenWithClassName(this.element, options.handle, true); - if(h.length>0) this.handle = h[0]; - } - if(!this.handle) this.handle = $PR(options.handle); - if(!this.handle) this.handle = this.element; - - if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) - options.scroll = $PR(options.scroll); - - Element.makePositioned(this.element); // fix IE - - this.delta = this.currentDelta(); - this.options = options; - this.dragging = false; - - this.eventMouseDown = this.initDrag.bindAsEventListener(this); - Event.observe(this.handle, "mousedown", this.eventMouseDown); - - Draggables.register(this); - }, - - destroy: function() { - Event.stopObserving(this.handle, "mousedown", this.eventMouseDown); - Draggables.unregister(this); - }, - - currentDelta: function() { - return([ - parseInt(Element.getStyle(this.element,'left') || '0'), - parseInt(Element.getStyle(this.element,'top') || '0')]); - }, - - initDrag: function(event) { - if(Event.isLeftClick(event)) { - // abort on form elements, fixes a Firefox issue - var src = Event.element(event); - if(src.tagName && ( - src.tagName=='INPUT' || - src.tagName=='SELECT' || - src.tagName=='OPTION' || - src.tagName=='BUTTON' || - src.tagName=='TEXTAREA')) return; - - if(this.element._revert) { - this.element._revert.cancel(); - this.element._revert = null; - } - - var pointer = [Event.pointerX(event), Event.pointerY(event)]; - var pos = Position.cumulativeOffset(this.element); - this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) }); - - Draggables.activate(this); - Event.stop(event); - } - }, - - startDrag: function(event) { - this.dragging = true; - - if(this.options.zindex) { - this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0); - this.element.style.zIndex = this.options.zindex; - } - - if(this.options.ghosting) { - this._clone = this.element.cloneNode(true); - Position.absolutize(this.element); - this.element.parentNode.insertBefore(this._clone, this.element); - } - - if(this.options.scroll) { - if (this.options.scroll == window) { - var where = this._getWindowScroll(this.options.scroll); - this.originalScrollLeft = where.left; - this.originalScrollTop = where.top; - } else { - this.originalScrollLeft = this.options.scroll.scrollLeft; - this.originalScrollTop = this.options.scroll.scrollTop; - } - } - - Draggables.notify('onStart', this, event); - if(this.options.starteffect) this.options.starteffect(this.element); - }, - - updateDrag: function(event, pointer) { - if(!this.dragging) this.startDrag(event); - Position.prepare(); - Droppables.show(pointer, this.element); - Draggables.notify('onDrag', this, event); - this.draw(pointer); - if(this.options.change) this.options.change(this); - - if(this.options.scroll) { - this.stopScrolling(); - - var p; - if (this.options.scroll == window) { - with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; } - } else { - p = Position.page(this.options.scroll); - p[0] += this.options.scroll.scrollLeft; - p[1] += this.options.scroll.scrollTop; - p.push(p[0]+this.options.scroll.offsetWidth); - p.push(p[1]+this.options.scroll.offsetHeight); - } - var speed = [0,0]; - if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity); - if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity); - if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity); - if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity); - this.startScrolling(speed); - } - - // fix AppleWebKit rendering - if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); - - Event.stop(event); - }, - - finishDrag: function(event, success) { - this.dragging = false; - - if(this.options.ghosting) { - Position.relativize(this.element); - Element.remove(this._clone); - this._clone = null; - } - - if(success) Droppables.fire(event, this.element); - Draggables.notify('onEnd', this, event); - - var revert = this.options.revert; - if(revert && typeof revert == 'function') revert = revert(this.element); - - var d = this.currentDelta(); - if(revert && this.options.reverteffect) { - this.options.reverteffect(this.element, - d[1]-this.delta[1], d[0]-this.delta[0]); - } else { - this.delta = d; - } - - if(this.options.zindex) - this.element.style.zIndex = this.originalZ; - - if(this.options.endeffect) - this.options.endeffect(this.element); - - Draggables.deactivate(this); - Droppables.reset(); - }, - - keyPress: function(event) { - if(event.keyCode!=Event.KEY_ESC) return; - this.finishDrag(event, false); - Event.stop(event); - }, - - endDrag: function(event) { - if(!this.dragging) return; - this.stopScrolling(); - this.finishDrag(event, true); - Event.stop(event); - }, - - draw: function(point) { - var pos = Position.cumulativeOffset(this.element); - var d = this.currentDelta(); - pos[0] -= d[0]; pos[1] -= d[1]; - - if(this.options.scroll && (this.options.scroll != window)) { - pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft; - pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop; - } - - var p = [0,1].map(function(i){ - return (point[i]-pos[i]-this.offset[i]) - }.bind(this)); - - if(this.options.snap) { - if(typeof this.options.snap == 'function') { - p = this.options.snap(p[0],p[1],this); - } else { - if(this.options.snap instanceof Array) { - p = p.map( function(v, i) { - return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this)) - } else { - p = p.map( function(v) { - return Math.round(v/this.options.snap)*this.options.snap }.bind(this)) - } - }} - - var style = this.element.style; - if((!this.options.constraint) || (this.options.constraint=='horizontal')) - style.left = p[0] + "px"; - if((!this.options.constraint) || (this.options.constraint=='vertical')) - style.top = p[1] + "px"; - if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering - }, - - stopScrolling: function() { - if(this.scrollInterval) { - clearInterval(this.scrollInterval); - this.scrollInterval = null; - Draggables._lastScrollPointer = null; - } - }, - - startScrolling: function(speed) { - this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed]; - this.lastScrolled = new Date(); - this.scrollInterval = setInterval(this.scroll.bind(this), 10); - }, - - scroll: function() { - var current = new Date(); - var delta = current - this.lastScrolled; - this.lastScrolled = current; - if(this.options.scroll == window) { - with (this._getWindowScroll(this.options.scroll)) { - if (this.scrollSpeed[0] || this.scrollSpeed[1]) { - var d = delta / 1000; - this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] ); - } - } - } else { - this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; - this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; - } - - Position.prepare(); - Droppables.show(Draggables._lastPointer, this.element); - Draggables.notify('onDrag', this); - Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); - Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; - Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; - if (Draggables._lastScrollPointer[0] < 0) - Draggables._lastScrollPointer[0] = 0; - if (Draggables._lastScrollPointer[1] < 0) - Draggables._lastScrollPointer[1] = 0; - this.draw(Draggables._lastScrollPointer); - - if(this.options.change) this.options.change(this); - }, - - _getWindowScroll: function(w) { - var T, L, W, H; - with (w.document) { - if (w.document.documentElement && documentElement.scrollTop) { - T = documentElement.scrollTop; - L = documentElement.scrollLeft; - } else if (w.document.body) { - T = body.scrollTop; - L = body.scrollLeft; - } - if (w.innerWidth) { - W = w.innerWidth; - H = w.innerHeight; - } else if (w.document.documentElement && documentElement.clientWidth) { - W = documentElement.clientWidth; - H = documentElement.clientHeight; - } else { - W = body.offsetWidth; - H = body.offsetHeight - } - } - return { top: T, left: L, width: W, height: H }; - } -} - -/*--------------------------------------------------------------------------*/ - -var SortableObserver = Class.create(); -SortableObserver.prototype = { - initialize: function(element, observer) { - this.element = $PR(element); - this.observer = observer; - this.lastValue = Sortable.serialize(this.element); - }, - - onStart: function() { - this.lastValue = Sortable.serialize(this.element); - }, - - onEnd: function() { - Sortable.unmark(); - if(this.lastValue != Sortable.serialize(this.element)) - this.observer(this.element) - } -} - -var Sortable = { - sortables: {}, - - _findRootElement: function(element) { - while (element.tagName != "BODY") { - if(element.id && Sortable.sortables[element.id]) return element; - element = element.parentNode; - } - }, - - options: function(element) { - element = Sortable._findRootElement($PR(element)); - if(!element) return; - return Sortable.sortables[element.id]; - }, - - destroy: function(element){ - var s = Sortable.options(element); - - if(s) { - Draggables.removeObserver(s.element); - s.droppables.each(function(d){ Droppables.remove(d) }); - s.draggables.invoke('destroy'); - - delete Sortable.sortables[s.element.id]; - } - }, - - create: function(element) { - element = $PR(element); - var options = Object.extend({ - element: element, - tag: 'li', // assumes li children, override with tag: 'tagname' - dropOnEmpty: false, - tree: false, - treeTag: 'ul', - overlap: 'vertical', // one of 'vertical', 'horizontal' - constraint: 'vertical', // one of 'vertical', 'horizontal', false - containment: element, // also takes array of elements (or id's); or false - handle: false, // or a CSS class - only: false, - hoverclass: null, - ghosting: false, - scroll: false, - scrollSensitivity: 20, - scrollSpeed: 15, - format: /^[^_]*_(.*)$/, - onChange: Prototype.emptyFunction, - onUpdate: Prototype.emptyFunction - }, arguments[1] || {}); - - // clear any old sortable with same element - this.destroy(element); - - // build options for the draggables - var options_for_draggable = { - revert: true, - scroll: options.scroll, - scrollSpeed: options.scrollSpeed, - scrollSensitivity: options.scrollSensitivity, - ghosting: options.ghosting, - constraint: options.constraint, - handle: options.handle }; - - if(options.starteffect) - options_for_draggable.starteffect = options.starteffect; - - if(options.reverteffect) - options_for_draggable.reverteffect = options.reverteffect; - else - if(options.ghosting) options_for_draggable.reverteffect = function(element) { - element.style.top = 0; - element.style.left = 0; - }; - - if(options.endeffect) - options_for_draggable.endeffect = options.endeffect; - - if(options.zindex) - options_for_draggable.zindex = options.zindex; - - // build options for the droppables - var options_for_droppable = { - overlap: options.overlap, - containment: options.containment, - tree: options.tree, - hoverclass: options.hoverclass, - onHover: Sortable.onHover - //greedy: !options.dropOnEmpty - } - - var options_for_tree = { - onHover: Sortable.onEmptyHover, - overlap: options.overlap, - containment: options.containment, - hoverclass: options.hoverclass - } - - // fix for gecko engine - Element.cleanWhitespace(element); - - options.draggables = []; - options.droppables = []; - - // drop on empty handling - if(options.dropOnEmpty || options.tree) { - Droppables.add(element, options_for_tree); - options.droppables.push(element); - } - - (this.findElements(element, options) || []).each( function(e) { - // handles are per-draggable - var handle = options.handle ? - Element.childrenWithClassName(e, options.handle)[0] : e; - options.draggables.push( - new Draggable(e, Object.extend(options_for_draggable, { handle: handle }))); - Droppables.add(e, options_for_droppable); - if(options.tree) e.treeNode = element; - options.droppables.push(e); - }); - - if(options.tree) { - (Sortable.findTreeElements(element, options) || []).each( function(e) { - Droppables.add(e, options_for_tree); - e.treeNode = element; - options.droppables.push(e); - }); - } - - // keep reference - this.sortables[element.id] = options; - - // for onupdate - Draggables.addObserver(new SortableObserver(element, options.onUpdate)); - - }, - - // return all suitable-for-sortable elements in a guaranteed order - findElements: function(element, options) { - return Element.findChildren( - element, options.only, options.tree ? true : false, options.tag); - }, - - findTreeElements: function(element, options) { - return Element.findChildren( - element, options.only, options.tree ? true : false, options.treeTag); - }, - - onHover: function(element, dropon, overlap) { - if(Element.isParent(dropon, element)) return; - - if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) { - return; - } else if(overlap>0.5) { - Sortable.mark(dropon, 'before'); - if(dropon.previousSibling != element) { - var oldParentNode = element.parentNode; - element.style.visibility = "hidden"; // fix gecko rendering - dropon.parentNode.insertBefore(element, dropon); - if(dropon.parentNode!=oldParentNode) - Sortable.options(oldParentNode).onChange(element); - Sortable.options(dropon.parentNode).onChange(element); - } - } else { - Sortable.mark(dropon, 'after'); - var nextElement = dropon.nextSibling || null; - if(nextElement != element) { - var oldParentNode = element.parentNode; - element.style.visibility = "hidden"; // fix gecko rendering - dropon.parentNode.insertBefore(element, nextElement); - if(dropon.parentNode!=oldParentNode) - Sortable.options(oldParentNode).onChange(element); - Sortable.options(dropon.parentNode).onChange(element); - } - } - }, - - onEmptyHover: function(element, dropon, overlap) { - var oldParentNode = element.parentNode; - var droponOptions = Sortable.options(dropon); - - if(!Element.isParent(dropon, element)) { - var index; - - var children = Sortable.findElements(dropon, {tag: droponOptions.tag}); - var child = null; - - if(children) { - var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap); - - for (index = 0; index < children.length; index += 1) { - if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) { - offset -= Element.offsetSize (children[index], droponOptions.overlap); - } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) { - child = index + 1 < children.length ? children[index + 1] : null; - break; - } else { - child = children[index]; - break; - } - } - } - - dropon.insertBefore(element, child); - - Sortable.options(oldParentNode).onChange(element); - droponOptions.onChange(element); - } - }, - - unmark: function() { - if(Sortable._marker) Element.hide(Sortable._marker); - }, - - mark: function(dropon, position) { - // mark on ghosting only - var sortable = Sortable.options(dropon.parentNode); - if(sortable && !sortable.ghosting) return; - - if(!Sortable._marker) { - Sortable._marker = $PR('dropmarker') || document.createElement('DIV'); - Element.hide(Sortable._marker); - Element.addClassName(Sortable._marker, 'dropmarker'); - Sortable._marker.style.position = 'absolute'; - document.getElementsByTagName("body").item(0).appendChild(Sortable._marker); - } - var offsets = Position.cumulativeOffset(dropon); - Sortable._marker.style.left = offsets[0] + 'px'; - Sortable._marker.style.top = offsets[1] + 'px'; - - if(position=='after') - if(sortable.overlap == 'horizontal') - Sortable._marker.style.left = (offsets[0]+dropon.clientWidth) + 'px'; - else - Sortable._marker.style.top = (offsets[1]+dropon.clientHeight) + 'px'; - - Element.show(Sortable._marker); - }, - - _tree: function(element, options, parent) { - var children = Sortable.findElements(element, options) || []; - - for (var i = 0; i < children.length; ++i) { - var match = children[i].id.match(options.format); - - if (!match) continue; - - var child = { - id: encodeURIComponent(match ? match[1] : null), - element: element, - parent: parent, - children: new Array, - position: parent.children.length, - container: Sortable._findChildrenElement(children[i], options.treeTag.toUpperCase()) - } - - /* Get the element containing the children and recurse over it */ - if (child.container) - this._tree(child.container, options, child) - - parent.children.push (child); - } - - return parent; - }, - - /* Finds the first element of the given tag type within a parent element. - Used for finding the first LI[ST] within a L[IST]I[TEM].*/ - _findChildrenElement: function (element, containerTag) { - if (element && element.hasChildNodes) - for (var i = 0; i < element.childNodes.length; ++i) - if (element.childNodes[i].tagName == containerTag) - return element.childNodes[i]; - - return null; - }, - - tree: function(element) { - element = $PR(element); - var sortableOptions = this.options(element); - var options = Object.extend({ - tag: sortableOptions.tag, - treeTag: sortableOptions.treeTag, - only: sortableOptions.only, - name: element.id, - format: sortableOptions.format - }, arguments[1] || {}); - - var root = { - id: null, - parent: null, - children: new Array, - container: element, - position: 0 - } - - return Sortable._tree (element, options, root); - }, - - /* Construct a [i] index for a particular node */ - _constructIndex: function(node) { - var index = ''; - do { - if (node.id) index = '[' + node.position + ']' + index; - } while ((node = node.parent) != null); - return index; - }, - - sequence: function(element) { - element = $PR(element); - var options = Object.extend(this.options(element), arguments[1] || {}); - - return $PR(this.findElements(element, options) || []).map( function(item) { - return item.id.match(options.format) ? item.id.match(options.format)[1] : ''; - }); - }, - - setSequence: function(element, new_sequence) { - element = $PR(element); - var options = Object.extend(this.options(element), arguments[2] || {}); - - var nodeMap = {}; - this.findElements(element, options).each( function(n) { - if (n.id.match(options.format)) - nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode]; - n.parentNode.removeChild(n); - }); - - new_sequence.each(function(ident) { - var n = nodeMap[ident]; - if (n) { - n[1].appendChild(n[0]); - delete nodeMap[ident]; - } - }); - }, - - serialize: function(element) { - element = $PR(element); - var options = Object.extend(Sortable.options(element), arguments[1] || {}); - var name = encodeURIComponent( - (arguments[1] && arguments[1].name) ? arguments[1].name : element.id); - - if (options.tree) { - return Sortable.tree(element, arguments[1]).children.map( function (item) { - return [name + Sortable._constructIndex(item) + "=" + - encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); - }).flatten().join('&'); - } else { - return Sortable.sequence(element, arguments[1]).map( function(item) { - return name + "[]=" + encodeURIComponent(item); - }).join('&'); - } - } -} - -/* Returns true if child is contained within element */ -Element.isParent = function(child, element) { - if (!child.parentNode || child == element) return false; - - if (child.parentNode == element) return true; - - return Element.isParent(child.parentNode, element); -} - -Element.findChildren = function(element, only, recursive, tagName) { - if(!element.hasChildNodes()) return null; - tagName = tagName.toUpperCase(); - if(only) only = [only].flatten(); - var elements = []; - $A(element.childNodes).each( function(e) { - if(e.tagName && e.tagName.toUpperCase()==tagName && - (!only || (Element.classNames(e).detect(function(v) { return only.include(v) })))) - elements.push(e); - if(recursive) { - var grandchildren = Element.findChildren(e, only, recursive, tagName); - if(grandchildren) elements.push(grandchildren); - } - }); - - return (elements.length>0 ? elements.flatten() : []); -} - -Element.offsetSize = function (element, type) { - if (type == 'vertical' || type == 'height') - return element.offsetHeight; - else - return element.offsetWidth; -} diff --git a/view/js/cropper/lib/effects.js b/view/js/cropper/lib/effects.js deleted file mode 100644 index 7e0407deb..000000000 --- a/view/js/cropper/lib/effects.js +++ /dev/null @@ -1,958 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// Contributors: -// Justin Palmer (http://encytemedia.com/) -// Mark Pilgrim (http://diveintomark.org/) -// Martin Bialasinki -// -// See scriptaculous.js for full license. - -// converts rgb() and #xxx to #xxxxxx format, -// returns self (or first argument) if not convertable -String.prototype.parseColor = function() { - var color = '#'; - if(this.slice(0,4) == 'rgb(') { - var cols = this.slice(4,this.length-1).split(','); - var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3); - } else { - if(this.slice(0,1) == '#') { - if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase(); - if(this.length==7) color = this.toLowerCase(); - } - } - return(color.length==7 ? color : (arguments[0] || this)); -} - -/*--------------------------------------------------------------------------*/ - -Element.collectTextNodes = function(element) { - return $A($PR(element).childNodes).collect( function(node) { - return (node.nodeType==3 ? node.nodeValue : - (node.hasChildNodes() ? Element.collectTextNodes(node) : '')); - }).flatten().join(''); -} - -Element.collectTextNodesIgnoreClass = function(element, className) { - return $A($PR(element).childNodes).collect( function(node) { - return (node.nodeType==3 ? node.nodeValue : - ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? - Element.collectTextNodesIgnoreClass(node, className) : '')); - }).flatten().join(''); -} - -Element.setContentZoom = function(element, percent) { - element = $PR(element); - Element.setStyle(element, {fontSize: (percent/100) + 'em'}); - if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); -} - -Element.getOpacity = function(element){ - var opacity; - if (opacity = Element.getStyle(element, 'opacity')) - return parseFloat(opacity); - if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/)) - if(opacity[1]) return parseFloat(opacity[1]) / 100; - return 1.0; -} - -Element.setOpacity = function(element, value){ - element= $PR(element); - if (value == 1){ - Element.setStyle(element, { opacity: - (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? - 0.999999 : null }); - if(/MSIE/.test(navigator.userAgent)) - Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')}); - } else { - if(value < 0.00001) value = 0; - Element.setStyle(element, {opacity: value}); - if(/MSIE/.test(navigator.userAgent)) - Element.setStyle(element, - { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') + - 'alpha(opacity='+value*100+')' }); - } -} - -Element.getInlineOpacity = function(element){ - return $PR(element).style.opacity || ''; -} - -Element.childrenWithClassName = function(element, className, findFirst) { - var classNameRegExp = new RegExp("(^|\\s)" + className + "(\\s|$)"); - var results = $A($PR(element).getElementsByTagName('*'))[findFirst ? 'detect' : 'select']( function(c) { - return (c.className && c.className.match(classNameRegExp)); - }); - if(!results) results = []; - return results; -} - -Element.forceRerendering = function(element) { - try { - element = $PR(element); - var n = document.createTextNode(' '); - element.appendChild(n); - element.removeChild(n); - } catch(e) { } -}; - -/*--------------------------------------------------------------------------*/ - -Array.prototype.call = function() { - var args = arguments; - this.each(function(f){ f.apply(this, args) }); -} - -/*--------------------------------------------------------------------------*/ - -var Effect = { - tagifyText: function(element) { - var tagifyStyle = 'position:relative'; - if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1'; - element = $PR(element); - $A(element.childNodes).each( function(child) { - if(child.nodeType==3) { - child.nodeValue.toArray().each( function(character) { - element.insertBefore( - Builder.node('span',{style: tagifyStyle}, - character == ' ' ? String.fromCharCode(160) : character), - child); - }); - Element.remove(child); - } - }); - }, - multiple: function(element, effect) { - var elements; - if(((typeof element == 'object') || - (typeof element == 'function')) && - (element.length)) - elements = element; - else - elements = $PR(element).childNodes; - - var options = Object.extend({ - speed: 0.1, - delay: 0.0 - }, arguments[2] || {}); - var masterDelay = options.delay; - - $A(elements).each( function(element, index) { - new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay })); - }); - }, - PAIRS: { - 'slide': ['SlideDown','SlideUp'], - 'blind': ['BlindDown','BlindUp'], - 'appear': ['Appear','Fade'] - }, - toggle: function(element, effect) { - element = $PR(element); - effect = (effect || 'appear').toLowerCase(); - var options = Object.extend({ - queue: { position:'end', scope:(element.id || 'global'), limit: 1 } - }, arguments[2] || {}); - Effect[element.visible() ? - Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options); - } -}; - -var Effect2 = Effect; // deprecated - -/* ------------- transitions ------------- */ - -Effect.Transitions = {} - -Effect.Transitions.linear = function(pos) { - return pos; -} -Effect.Transitions.sinoidal = function(pos) { - return (-Math.cos(pos*Math.PI)/2) + 0.5; -} -Effect.Transitions.reverse = function(pos) { - return 1-pos; -} -Effect.Transitions.flicker = function(pos) { - return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4; -} -Effect.Transitions.wobble = function(pos) { - return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5; -} -Effect.Transitions.pulse = function(pos) { - return (Math.floor(pos*10) % 2 == 0 ? - (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10))); -} -Effect.Transitions.none = function(pos) { - return 0; -} -Effect.Transitions.full = function(pos) { - return 1; -} - -/* ------------- core effects ------------- */ - -Effect.ScopedQueue = Class.create(); -Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), { - initialize: function() { - this.effects = []; - this.interval = null; - }, - _each: function(iterator) { - this.effects._each(iterator); - }, - add: function(effect) { - var timestamp = new Date().getTime(); - - var position = (typeof effect.options.queue == 'string') ? - effect.options.queue : effect.options.queue.position; - - switch(position) { - case 'front': - // move unstarted effects after this effect - this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) { - e.startOn += effect.finishOn; - e.finishOn += effect.finishOn; - }); - break; - case 'end': - // start effect after last queued effect has finished - timestamp = this.effects.pluck('finishOn').max() || timestamp; - break; - } - - effect.startOn += timestamp; - effect.finishOn += timestamp; - - if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) - this.effects.push(effect); - - if(!this.interval) - this.interval = setInterval(this.loop.bind(this), 40); - }, - remove: function(effect) { - this.effects = this.effects.reject(function(e) { return e==effect }); - if(this.effects.length == 0) { - clearInterval(this.interval); - this.interval = null; - } - }, - loop: function() { - var timePos = new Date().getTime(); - this.effects.invoke('loop', timePos); - } -}); - -Effect.Queues = { - instances: $H(), - get: function(queueName) { - if(typeof queueName != 'string') return queueName; - - if(!this.instances[queueName]) - this.instances[queueName] = new Effect.ScopedQueue(); - - return this.instances[queueName]; - } -} -Effect.Queue = Effect.Queues.get('global'); - -Effect.DefaultOptions = { - transition: Effect.Transitions.sinoidal, - duration: 1.0, // seconds - fps: 25.0, // max. 25fps due to Effect.Queue implementation - sync: false, // true for combining - from: 0.0, - to: 1.0, - delay: 0.0, - queue: 'parallel' -} - -Effect.Base = function() {}; -Effect.Base.prototype = { - position: null, - start: function(options) { - this.options = Object.extend(Object.extend({},Effect.DefaultOptions), options || {}); - this.currentFrame = 0; - this.state = 'idle'; - this.startOn = this.options.delay*1000; - this.finishOn = this.startOn + (this.options.duration*1000); - this.event('beforeStart'); - if(!this.options.sync) - Effect.Queues.get(typeof this.options.queue == 'string' ? - 'global' : this.options.queue.scope).add(this); - }, - loop: function(timePos) { - if(timePos >= this.startOn) { - if(timePos >= this.finishOn) { - this.render(1.0); - this.cancel(); - this.event('beforeFinish'); - if(this.finish) this.finish(); - this.event('afterFinish'); - return; - } - var pos = (timePos - this.startOn) / (this.finishOn - this.startOn); - var frame = Math.round(pos * this.options.fps * this.options.duration); - if(frame > this.currentFrame) { - this.render(pos); - this.currentFrame = frame; - } - } - }, - render: function(pos) { - if(this.state == 'idle') { - this.state = 'running'; - this.event('beforeSetup'); - if(this.setup) this.setup(); - this.event('afterSetup'); - } - if(this.state == 'running') { - if(this.options.transition) pos = this.options.transition(pos); - pos *= (this.options.to-this.options.from); - pos += this.options.from; - this.position = pos; - this.event('beforeUpdate'); - if(this.update) this.update(pos); - this.event('afterUpdate'); - } - }, - cancel: function() { - if(!this.options.sync) - Effect.Queues.get(typeof this.options.queue == 'string' ? - 'global' : this.options.queue.scope).remove(this); - this.state = 'finished'; - }, - event: function(eventName) { - if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this); - if(this.options[eventName]) this.options[eventName](this); - }, - inspect: function() { - return '#'; - } -} - -Effect.Parallel = Class.create(); -Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), { - initialize: function(effects) { - this.effects = effects || []; - this.start(arguments[1]); - }, - update: function(position) { - this.effects.invoke('render', position); - }, - finish: function(position) { - this.effects.each( function(effect) { - effect.render(1.0); - effect.cancel(); - effect.event('beforeFinish'); - if(effect.finish) effect.finish(position); - effect.event('afterFinish'); - }); - } -}); - -Effect.Opacity = Class.create(); -Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), { - initialize: function(element) { - this.element = $PR(element); - // make this work on IE on elements without 'layout' - if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout)) - this.element.setStyle({zoom: 1}); - var options = Object.extend({ - from: this.element.getOpacity() || 0.0, - to: 1.0 - }, arguments[1] || {}); - this.start(options); - }, - update: function(position) { - this.element.setOpacity(position); - } -}); - -Effect.Move = Class.create(); -Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), { - initialize: function(element) { - this.element = $PR(element); - var options = Object.extend({ - x: 0, - y: 0, - mode: 'relative' - }, arguments[1] || {}); - this.start(options); - }, - setup: function() { - // Bug in Opera: Opera returns the "real" position of a static element or - // relative element that does not have top/left explicitly set. - // ==> Always set top and left for position relative elements in your stylesheets - // (to 0 if you do not need them) - this.element.makePositioned(); - this.originalLeft = parseFloat(this.element.getStyle('left') || '0'); - this.originalTop = parseFloat(this.element.getStyle('top') || '0'); - if(this.options.mode == 'absolute') { - // absolute movement, so we need to calc deltaX and deltaY - this.options.x = this.options.x - this.originalLeft; - this.options.y = this.options.y - this.originalTop; - } - }, - update: function(position) { - this.element.setStyle({ - left: this.options.x * position + this.originalLeft + 'px', - top: this.options.y * position + this.originalTop + 'px' - }); - } -}); - -// for backwards compatibility -Effect.MoveBy = function(element, toTop, toLeft) { - return new Effect.Move(element, - Object.extend({ x: toLeft, y: toTop }, arguments[3] || {})); -}; - -Effect.Scale = Class.create(); -Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), { - initialize: function(element, percent) { - this.element = $PR(element) - var options = Object.extend({ - scaleX: true, - scaleY: true, - scaleContent: true, - scaleFromCenter: false, - scaleMode: 'box', // 'box' or 'contents' or {} with provided values - scaleFrom: 100.0, - scaleTo: percent - }, arguments[2] || {}); - this.start(options); - }, - setup: function() { - this.restoreAfterFinish = this.options.restoreAfterFinish || false; - this.elementPositioning = this.element.getStyle('position'); - - this.originalStyle = {}; - ['top','left','width','height','fontSize'].each( function(k) { - this.originalStyle[k] = this.element.style[k]; - }.bind(this)); - - this.originalTop = this.element.offsetTop; - this.originalLeft = this.element.offsetLeft; - - var fontSize = this.element.getStyle('font-size') || '100%'; - ['em','px','%'].each( function(fontSizeType) { - if(fontSize.indexOf(fontSizeType)>0) { - this.fontSize = parseFloat(fontSize); - this.fontSizeType = fontSizeType; - } - }.bind(this)); - - this.factor = (this.options.scaleTo - this.options.scaleFrom)/100; - - this.dims = null; - if(this.options.scaleMode=='box') - this.dims = [this.element.offsetHeight, this.element.offsetWidth]; - if(/^content/.test(this.options.scaleMode)) - this.dims = [this.element.scrollHeight, this.element.scrollWidth]; - if(!this.dims) - this.dims = [this.options.scaleMode.originalHeight, - this.options.scaleMode.originalWidth]; - }, - update: function(position) { - var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position); - if(this.options.scaleContent && this.fontSize) - this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType }); - this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale); - }, - finish: function(position) { - if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle); - }, - setDimensions: function(height, width) { - var d = {}; - if(this.options.scaleX) d.width = width + 'px'; - if(this.options.scaleY) d.height = height + 'px'; - if(this.options.scaleFromCenter) { - var topd = (height - this.dims[0])/2; - var leftd = (width - this.dims[1])/2; - if(this.elementPositioning == 'absolute') { - if(this.options.scaleY) d.top = this.originalTop-topd + 'px'; - if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px'; - } else { - if(this.options.scaleY) d.top = -topd + 'px'; - if(this.options.scaleX) d.left = -leftd + 'px'; - } - } - this.element.setStyle(d); - } -}); - -Effect.Highlight = Class.create(); -Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), { - initialize: function(element) { - this.element = $PR(element); - var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {}); - this.start(options); - }, - setup: function() { - // Prevent executing on elements not in the layout flow - if(this.element.getStyle('display')=='none') { this.cancel(); return; } - // Disable background image during the effect - this.oldStyle = { - backgroundImage: this.element.getStyle('background-image') }; - this.element.setStyle({backgroundImage: 'none'}); - if(!this.options.endcolor) - this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff'); - if(!this.options.restorecolor) - this.options.restorecolor = this.element.getStyle('background-color'); - // init color calculations - this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this)); - this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this)); - }, - update: function(position) { - this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){ - return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) }); - }, - finish: function() { - this.element.setStyle(Object.extend(this.oldStyle, { - backgroundColor: this.options.restorecolor - })); - } -}); - -Effect.ScrollTo = Class.create(); -Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), { - initialize: function(element) { - this.element = $PR(element); - this.start(arguments[1] || {}); - }, - setup: function() { - Position.prepare(); - var offsets = Position.cumulativeOffset(this.element); - if(this.options.offset) offsets[1] += this.options.offset; - var max = window.innerHeight ? - window.height - window.innerHeight : - document.body.scrollHeight - - (document.documentElement.clientHeight ? - document.documentElement.clientHeight : document.body.clientHeight); - this.scrollStart = Position.deltaY; - this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart; - }, - update: function(position) { - Position.prepare(); - window.scrollTo(Position.deltaX, - this.scrollStart + (position*this.delta)); - } -}); - -/* ------------- combination effects ------------- */ - -Effect.Fade = function(element) { - element = $PR(element); - var oldOpacity = element.getInlineOpacity(); - var options = Object.extend({ - from: element.getOpacity() || 1.0, - to: 0.0, - afterFinishInternal: function(effect) { - if(effect.options.to!=0) return; - effect.element.hide(); - effect.element.setStyle({opacity: oldOpacity}); - }}, arguments[1] || {}); - return new Effect.Opacity(element,options); -} - -Effect.Appear = function(element) { - element = $PR(element); - var options = Object.extend({ - from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0), - to: 1.0, - // force Safari to render floated elements properly - afterFinishInternal: function(effect) { - effect.element.forceRerendering(); - }, - beforeSetup: function(effect) { - effect.element.setOpacity(effect.options.from); - effect.element.show(); - }}, arguments[1] || {}); - return new Effect.Opacity(element,options); -} - -Effect.Puff = function(element) { - element = $PR(element); - var oldStyle = { opacity: element.getInlineOpacity(), position: element.getStyle('position') }; - return new Effect.Parallel( - [ new Effect.Scale(element, 200, - { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), - new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], - Object.extend({ duration: 1.0, - beforeSetupInternal: function(effect) { - effect.effects[0].element.setStyle({position: 'absolute'}); }, - afterFinishInternal: function(effect) { - effect.effects[0].element.hide(); - effect.effects[0].element.setStyle(oldStyle); } - }, arguments[1] || {}) - ); -} - -Effect.BlindUp = function(element) { - element = $PR(element); - element.makeClipping(); - return new Effect.Scale(element, 0, - Object.extend({ scaleContent: false, - scaleX: false, - restoreAfterFinish: true, - afterFinishInternal: function(effect) { - effect.element.hide(); - effect.element.undoClipping(); - } - }, arguments[1] || {}) - ); -} - -Effect.BlindDown = function(element) { - element = $PR(element); - var elementDimensions = element.getDimensions(); - return new Effect.Scale(element, 100, - Object.extend({ scaleContent: false, - scaleX: false, - scaleFrom: 0, - scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, - restoreAfterFinish: true, - afterSetup: function(effect) { - effect.element.makeClipping(); - effect.element.setStyle({height: '0px'}); - effect.element.show(); - }, - afterFinishInternal: function(effect) { - effect.element.undoClipping(); - } - }, arguments[1] || {}) - ); -} - -Effect.SwitchOff = function(element) { - element = $PR(element); - var oldOpacity = element.getInlineOpacity(); - return new Effect.Appear(element, { - duration: 0.4, - from: 0, - transition: Effect.Transitions.flicker, - afterFinishInternal: function(effect) { - new Effect.Scale(effect.element, 1, { - duration: 0.3, scaleFromCenter: true, - scaleX: false, scaleContent: false, restoreAfterFinish: true, - beforeSetup: function(effect) { - effect.element.makePositioned(); - effect.element.makeClipping(); - }, - afterFinishInternal: function(effect) { - effect.element.hide(); - effect.element.undoClipping(); - effect.element.undoPositioned(); - effect.element.setStyle({opacity: oldOpacity}); - } - }) - } - }); -} - -Effect.DropOut = function(element) { - element = $PR(element); - var oldStyle = { - top: element.getStyle('top'), - left: element.getStyle('left'), - opacity: element.getInlineOpacity() }; - return new Effect.Parallel( - [ new Effect.Move(element, {x: 0, y: 100, sync: true }), - new Effect.Opacity(element, { sync: true, to: 0.0 }) ], - Object.extend( - { duration: 0.5, - beforeSetup: function(effect) { - effect.effects[0].element.makePositioned(); - }, - afterFinishInternal: function(effect) { - effect.effects[0].element.hide(); - effect.effects[0].element.undoPositioned(); - effect.effects[0].element.setStyle(oldStyle); - } - }, arguments[1] || {})); -} - -Effect.Shake = function(element) { - element = $PR(element); - var oldStyle = { - top: element.getStyle('top'), - left: element.getStyle('left') }; - return new Effect.Move(element, - { x: 20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { - new Effect.Move(effect.element, - { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { - effect.element.undoPositioned(); - effect.element.setStyle(oldStyle); - }}) }}) }}) }}) }}) }}); -} - -Effect.SlideDown = function(element) { - element = $PR(element); - element.cleanWhitespace(); - // SlideDown need to have the content of the element wrapped in a container element with fixed height! - var oldInnerBottom = $PR(element.firstChild).getStyle('bottom'); - var elementDimensions = element.getDimensions(); - return new Effect.Scale(element, 100, Object.extend({ - scaleContent: false, - scaleX: false, - scaleFrom: window.opera ? 0 : 1, - scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, - restoreAfterFinish: true, - afterSetup: function(effect) { - effect.element.makePositioned(); - effect.element.firstChild.makePositioned(); - if(window.opera) effect.element.setStyle({top: ''}); - effect.element.makeClipping(); - effect.element.setStyle({height: '0px'}); - effect.element.show(); }, - afterUpdateInternal: function(effect) { - effect.element.firstChild.setStyle({bottom: - (effect.dims[0] - effect.element.clientHeight) + 'px' }); - }, - afterFinishInternal: function(effect) { - effect.element.undoClipping(); - // IE will crash if child is undoPositioned first - if(/MSIE/.test(navigator.userAgent)){ - effect.element.undoPositioned(); - effect.element.firstChild.undoPositioned(); - }else{ - effect.element.firstChild.undoPositioned(); - effect.element.undoPositioned(); - } - effect.element.firstChild.setStyle({bottom: oldInnerBottom}); } - }, arguments[1] || {}) - ); -} - -Effect.SlideUp = function(element) { - element = $PR(element); - element.cleanWhitespace(); - var oldInnerBottom = $PR(element.firstChild).getStyle('bottom'); - return new Effect.Scale(element, window.opera ? 0 : 1, - Object.extend({ scaleContent: false, - scaleX: false, - scaleMode: 'box', - scaleFrom: 100, - restoreAfterFinish: true, - beforeStartInternal: function(effect) { - effect.element.makePositioned(); - effect.element.firstChild.makePositioned(); - if(window.opera) effect.element.setStyle({top: ''}); - effect.element.makeClipping(); - effect.element.show(); }, - afterUpdateInternal: function(effect) { - effect.element.firstChild.setStyle({bottom: - (effect.dims[0] - effect.element.clientHeight) + 'px' }); }, - afterFinishInternal: function(effect) { - effect.element.hide(); - effect.element.undoClipping(); - effect.element.firstChild.undoPositioned(); - effect.element.undoPositioned(); - effect.element.setStyle({bottom: oldInnerBottom}); } - }, arguments[1] || {}) - ); -} - -// Bug in opera makes the TD containing this element expand for a instance after finish -Effect.Squish = function(element) { - return new Effect.Scale(element, window.opera ? 1 : 0, - { restoreAfterFinish: true, - beforeSetup: function(effect) { - effect.element.makeClipping(effect.element); }, - afterFinishInternal: function(effect) { - effect.element.hide(effect.element); - effect.element.undoClipping(effect.element); } - }); -} - -Effect.Grow = function(element) { - element = $PR(element); - var options = Object.extend({ - direction: 'center', - moveTransition: Effect.Transitions.sinoidal, - scaleTransition: Effect.Transitions.sinoidal, - opacityTransition: Effect.Transitions.full - }, arguments[1] || {}); - var oldStyle = { - top: element.style.top, - left: element.style.left, - height: element.style.height, - width: element.style.width, - opacity: element.getInlineOpacity() }; - - var dims = element.getDimensions(); - var initialMoveX, initialMoveY; - var moveX, moveY; - - switch (options.direction) { - case 'top-left': - initialMoveX = initialMoveY = moveX = moveY = 0; - break; - case 'top-right': - initialMoveX = dims.width; - initialMoveY = moveY = 0; - moveX = -dims.width; - break; - case 'bottom-left': - initialMoveX = moveX = 0; - initialMoveY = dims.height; - moveY = -dims.height; - break; - case 'bottom-right': - initialMoveX = dims.width; - initialMoveY = dims.height; - moveX = -dims.width; - moveY = -dims.height; - break; - case 'center': - initialMoveX = dims.width / 2; - initialMoveY = dims.height / 2; - moveX = -dims.width / 2; - moveY = -dims.height / 2; - break; - } - - return new Effect.Move(element, { - x: initialMoveX, - y: initialMoveY, - duration: 0.01, - beforeSetup: function(effect) { - effect.element.hide(); - effect.element.makeClipping(); - effect.element.makePositioned(); - }, - afterFinishInternal: function(effect) { - new Effect.Parallel( - [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }), - new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }), - new Effect.Scale(effect.element, 100, { - scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, - sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true}) - ], Object.extend({ - beforeSetup: function(effect) { - effect.effects[0].element.setStyle({height: '0px'}); - effect.effects[0].element.show(); - }, - afterFinishInternal: function(effect) { - effect.effects[0].element.undoClipping(); - effect.effects[0].element.undoPositioned(); - effect.effects[0].element.setStyle(oldStyle); - } - }, options) - ) - } - }); -} - -Effect.Shrink = function(element) { - element = $PR(element); - var options = Object.extend({ - direction: 'center', - moveTransition: Effect.Transitions.sinoidal, - scaleTransition: Effect.Transitions.sinoidal, - opacityTransition: Effect.Transitions.none - }, arguments[1] || {}); - var oldStyle = { - top: element.style.top, - left: element.style.left, - height: element.style.height, - width: element.style.width, - opacity: element.getInlineOpacity() }; - - var dims = element.getDimensions(); - var moveX, moveY; - - switch (options.direction) { - case 'top-left': - moveX = moveY = 0; - break; - case 'top-right': - moveX = dims.width; - moveY = 0; - break; - case 'bottom-left': - moveX = 0; - moveY = dims.height; - break; - case 'bottom-right': - moveX = dims.width; - moveY = dims.height; - break; - case 'center': - moveX = dims.width / 2; - moveY = dims.height / 2; - break; - } - - return new Effect.Parallel( - [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }), - new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}), - new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }) - ], Object.extend({ - beforeStartInternal: function(effect) { - effect.effects[0].element.makePositioned(); - effect.effects[0].element.makeClipping(); }, - afterFinishInternal: function(effect) { - effect.effects[0].element.hide(); - effect.effects[0].element.undoClipping(); - effect.effects[0].element.undoPositioned(); - effect.effects[0].element.setStyle(oldStyle); } - }, options) - ); -} - -Effect.Pulsate = function(element) { - element = $PR(element); - var options = arguments[1] || {}; - var oldOpacity = element.getInlineOpacity(); - var transition = options.transition || Effect.Transitions.sinoidal; - var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) }; - reverser.bind(transition); - return new Effect.Opacity(element, - Object.extend(Object.extend({ duration: 3.0, from: 0, - afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); } - }, options), {transition: reverser})); -} - -Effect.Fold = function(element) { - element = $PR(element); - var oldStyle = { - top: element.style.top, - left: element.style.left, - width: element.style.width, - height: element.style.height }; - Element.makeClipping(element); - return new Effect.Scale(element, 5, Object.extend({ - scaleContent: false, - scaleX: false, - afterFinishInternal: function(effect) { - new Effect.Scale(element, 1, { - scaleContent: false, - scaleY: false, - afterFinishInternal: function(effect) { - effect.element.hide(); - effect.element.undoClipping(); - effect.element.setStyle(oldStyle); - } }); - }}, arguments[1] || {})); -}; - -['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom', - 'collectTextNodes','collectTextNodesIgnoreClass','childrenWithClassName'].each( - function(f) { Element.Methods[f] = Element[f]; } -); - -Element.Methods.visualEffect = function(element, effect, options) { - s = effect.gsub(/_/, '-').camelize(); - effect_class = s.charAt(0).toUpperCase() + s.substring(1); - new Effect[effect_class](element, options); - return $PR(element); -}; - -Element.addMethods(); diff --git a/view/js/cropper/lib/prototype.js b/view/js/cropper/lib/prototype.js deleted file mode 100644 index 668206587..000000000 --- a/view/js/cropper/lib/prototype.js +++ /dev/null @@ -1,2006 +0,0 @@ -/* Prototype JavaScript framework, version 1.5.0_rc0 - * (c) 2005 Sam Stephenson - * - * Prototype is freely distributable under the terms of an MIT-style license. - * For details, see the Prototype web site: http://prototype.conio.net/ - * -/*--------------------------------------------------------------------------*/ - -var Prototype = { - Version: '1.5.0_rc0', - ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', - - emptyFunction: function() {}, - K: function(x) {return x} -} - -var Class = { - create: function() { - return function() { - this.initialize.apply(this, arguments); - } - } -} - -var Abstract = new Object(); - -Object.extend = function(destination, source) { - for (var property in source) { - destination[property] = source[property]; - } - return destination; -} - -Object.inspect = function(object) { - try { - if (object == undefined) return 'undefined'; - if (object == null) return 'null'; - return object.inspect ? object.inspect() : object.toString(); - } catch (e) { - if (e instanceof RangeError) return '...'; - throw e; - } -} - -Function.prototype.bind = function() { - var __method = this, args = $A(arguments), object = args.shift(); - return function() { - return __method.apply(object, args.concat($A(arguments))); - } -} - -Function.prototype.bindAsEventListener = function(object) { - var __method = this; - return function(event) { - return __method.call(object, event || window.event); - } -} - -Object.extend(Number.prototype, { - toColorPart: function() { - var digits = this.toString(16); - if (this < 16) return '0' + digits; - return digits; - }, - - succ: function() { - return this + 1; - }, - - times: function(iterator) { - $R(0, this, true).each(iterator); - return this; - } -}); - -var Try = { - these: function() { - var returnValue; - - for (var i = 0; i < arguments.length; i++) { - var lambda = arguments[i]; - try { - returnValue = lambda(); - break; - } catch (e) {} - } - - return returnValue; - } -} - -/*--------------------------------------------------------------------------*/ - -var PeriodicalExecuter = Class.create(); -PeriodicalExecuter.prototype = { - initialize: function(callback, frequency) { - this.callback = callback; - this.frequency = frequency; - this.currentlyExecuting = false; - - this.registerCallback(); - }, - - registerCallback: function() { - setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); - }, - - onTimerEvent: function() { - if (!this.currentlyExecuting) { - try { - this.currentlyExecuting = true; - this.callback(); - } finally { - this.currentlyExecuting = false; - } - } - } -} -Object.extend(String.prototype, { - gsub: function(pattern, replacement) { - var result = '', source = this, match; - replacement = arguments.callee.prepareReplacement(replacement); - - while (source.length > 0) { - if (match = source.match(pattern)) { - result += source.slice(0, match.index); - result += (replacement(match) || '').toString(); - source = source.slice(match.index + match[0].length); - } else { - result += source, source = ''; - } - } - return result; - }, - - sub: function(pattern, replacement, count) { - replacement = this.gsub.prepareReplacement(replacement); - count = count === undefined ? 1 : count; - - return this.gsub(pattern, function(match) { - if (--count < 0) return match[0]; - return replacement(match); - }); - }, - - scan: function(pattern, iterator) { - this.gsub(pattern, iterator); - return this; - }, - - truncate: function(length, truncation) { - length = length || 30; - truncation = truncation === undefined ? '...' : truncation; - return this.length > length ? - this.slice(0, length - truncation.length) + truncation : this; - }, - - strip: function() { - return this.replace(/^\s+/, '').replace(/\s+$/, ''); - }, - - stripTags: function() { - return this.replace(/<\/?[^>]+>/gi, ''); - }, - - stripScripts: function() { - return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); - }, - - extractScripts: function() { - var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); - var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); - return (this.match(matchAll) || []).map(function(scriptTag) { - return (scriptTag.match(matchOne) || ['', ''])[1]; - }); - }, - - evalScripts: function() { - return this.extractScripts().map(function(script) { return eval(script) }); - }, - - escapeHTML: function() { - var div = document.createElement('div'); - var text = document.createTextNode(this); - div.appendChild(text); - return div.innerHTML; - }, - - unescapeHTML: function() { - var div = document.createElement('div'); - div.innerHTML = this.stripTags(); - return div.childNodes[0] ? div.childNodes[0].nodeValue : ''; - }, - - toQueryParams: function() { - var pairs = this.match(/^\??(.*)$/)[1].split('&'); - return pairs.inject({}, function(params, pairString) { - var pair = pairString.split('='); - params[pair[0]] = pair[1]; - return params; - }); - }, - - toArray: function() { - return this.split(''); - }, - - camelize: function() { - var oStringList = this.split('-'); - if (oStringList.length == 1) return oStringList[0]; - - var camelizedString = this.indexOf('-') == 0 - ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) - : oStringList[0]; - - for (var i = 1, len = oStringList.length; i < len; i++) { - var s = oStringList[i]; - camelizedString += s.charAt(0).toUpperCase() + s.substring(1); - } - - return camelizedString; - }, - - inspect: function() { - return "'" + this.replace(/\\/g, '\\\\').replace(/'/g, '\\\'') + "'"; - } -}); - -String.prototype.gsub.prepareReplacement = function(replacement) { - if (typeof replacement == 'function') return replacement; - var template = new Template(replacement); - return function(match) { return template.evaluate(match) }; -} - -String.prototype.parseQuery = String.prototype.toQueryParams; - -var Template = Class.create(); -Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; -Template.prototype = { - initialize: function(template, pattern) { - this.template = template.toString(); - this.pattern = pattern || Template.Pattern; - }, - - evaluate: function(object) { - return this.template.gsub(this.pattern, function(match) { - var before = match[1]; - if (before == '\\') return match[2]; - return before + (object[match[3]] || '').toString(); - }); - } -} - -var $break = new Object(); -var $continue = new Object(); - -var Enumerable = { - each: function(iterator) { - var index = 0; - try { - this._each(function(value) { - try { - iterator(value, index++); - } catch (e) { - if (e != $continue) throw e; - } - }); - } catch (e) { - if (e != $break) throw e; - } - }, - - all: function(iterator) { - var result = true; - this.each(function(value, index) { - result = result && !!(iterator || Prototype.K)(value, index); - if (!result) throw $break; - }); - return result; - }, - - any: function(iterator) { - var result = true; - this.each(function(value, index) { - if (result = !!(iterator || Prototype.K)(value, index)) - throw $break; - }); - return result; - }, - - collect: function(iterator) { - var results = []; - this.each(function(value, index) { - results.push(iterator(value, index)); - }); - return results; - }, - - detect: function (iterator) { - var result; - this.each(function(value, index) { - if (iterator(value, index)) { - result = value; - throw $break; - } - }); - return result; - }, - - findAll: function(iterator) { - var results = []; - this.each(function(value, index) { - if (iterator(value, index)) - results.push(value); - }); - return results; - }, - - grep: function(pattern, iterator) { - var results = []; - this.each(function(value, index) { - var stringValue = value.toString(); - if (stringValue.match(pattern)) - results.push((iterator || Prototype.K)(value, index)); - }) - return results; - }, - - include: function(object) { - var found = false; - this.each(function(value) { - if (value == object) { - found = true; - throw $break; - } - }); - return found; - }, - - inject: function(memo, iterator) { - this.each(function(value, index) { - memo = iterator(memo, value, index); - }); - return memo; - }, - - invoke: function(method) { - var args = $A(arguments).slice(1); - return this.collect(function(value) { - return value[method].apply(value, args); - }); - }, - - max: function(iterator) { - var result; - this.each(function(value, index) { - value = (iterator || Prototype.K)(value, index); - if (result == undefined || value >= result) - result = value; - }); - return result; - }, - - min: function(iterator) { - var result; - this.each(function(value, index) { - value = (iterator || Prototype.K)(value, index); - if (result == undefined || value < result) - result = value; - }); - return result; - }, - - partition: function(iterator) { - var trues = [], falses = []; - this.each(function(value, index) { - ((iterator || Prototype.K)(value, index) ? - trues : falses).push(value); - }); - return [trues, falses]; - }, - - pluck: function(property) { - var results = []; - this.each(function(value, index) { - results.push(value[property]); - }); - return results; - }, - - reject: function(iterator) { - var results = []; - this.each(function(value, index) { - if (!iterator(value, index)) - results.push(value); - }); - return results; - }, - - sortBy: function(iterator) { - return this.collect(function(value, index) { - return {value: value, criteria: iterator(value, index)}; - }).sort(function(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }).pluck('value'); - }, - - toArray: function() { - return this.collect(Prototype.K); - }, - - zip: function() { - var iterator = Prototype.K, args = $A(arguments); - if (typeof args.last() == 'function') - iterator = args.pop(); - - var collections = [this].concat(args).map($A); - return this.map(function(value, index) { - return iterator(collections.pluck(index)); - }); - }, - - inspect: function() { - return '#'; - } -} - -Object.extend(Enumerable, { - map: Enumerable.collect, - find: Enumerable.detect, - select: Enumerable.findAll, - member: Enumerable.include, - entries: Enumerable.toArray -}); -var $A = Array.from = function(iterable) { - if (!iterable) return []; - if (iterable.toArray) { - return iterable.toArray(); - } else { - var results = []; - for (var i = 0; i < iterable.length; i++) - results.push(iterable[i]); - return results; - } -} - -Object.extend(Array.prototype, Enumerable); - -if (!Array.prototype._reverse) - Array.prototype._reverse = Array.prototype.reverse; - -Object.extend(Array.prototype, { - _each: function(iterator) { - for (var i = 0; i < this.length; i++) - iterator(this[i]); - }, - - clear: function() { - this.length = 0; - return this; - }, - - first: function() { - return this[0]; - }, - - last: function() { - return this[this.length - 1]; - }, - - compact: function() { - return this.select(function(value) { - return value != undefined || value != null; - }); - }, - - flatten: function() { - return this.inject([], function(array, value) { - return array.concat(value && value.constructor == Array ? - value.flatten() : [value]); - }); - }, - - without: function() { - var values = $A(arguments); - return this.select(function(value) { - return !values.include(value); - }); - }, - - indexOf: function(object) { - for (var i = 0; i < this.length; i++) - if (this[i] == object) return i; - return -1; - }, - - reverse: function(inline) { - return (inline !== false ? this : this.toArray())._reverse(); - }, - - inspect: function() { - return '[' + this.map(Object.inspect).join(', ') + ']'; - } -}); -var Hash = { - _each: function(iterator) { - for (var key in this) { - var value = this[key]; - if (typeof value == 'function') continue; - - var pair = [key, value]; - pair.key = key; - pair.value = value; - iterator(pair); - } - }, - - keys: function() { - return this.pluck('key'); - }, - - values: function() { - return this.pluck('value'); - }, - - merge: function(hash) { - return $H(hash).inject($H(this), function(mergedHash, pair) { - mergedHash[pair.key] = pair.value; - return mergedHash; - }); - }, - - toQueryString: function() { - return this.map(function(pair) { - return pair.map(encodeURIComponent).join('='); - }).join('&'); - }, - - inspect: function() { - return '#'; - } -} - -function $H(object) { - var hash = Object.extend({}, object || {}); - Object.extend(hash, Enumerable); - Object.extend(hash, Hash); - return hash; -} -ObjectRange = Class.create(); -Object.extend(ObjectRange.prototype, Enumerable); -Object.extend(ObjectRange.prototype, { - initialize: function(start, end, exclusive) { - this.start = start; - this.end = end; - this.exclusive = exclusive; - }, - - _each: function(iterator) { - var value = this.start; - do { - iterator(value); - value = value.succ(); - } while (this.include(value)); - }, - - include: function(value) { - if (value < this.start) - return false; - if (this.exclusive) - return value < this.end; - return value <= this.end; - } -}); - -var $R = function(start, end, exclusive) { - return new ObjectRange(start, end, exclusive); -} - -var Ajax = { - getTransport: function() { - return Try.these( - function() {return new XMLHttpRequest()}, - function() {return new ActiveXObject('Msxml2.XMLHTTP')}, - function() {return new ActiveXObject('Microsoft.XMLHTTP')} - ) || false; - }, - - activeRequestCount: 0 -} - -Ajax.Responders = { - responders: [], - - _each: function(iterator) { - this.responders._each(iterator); - }, - - register: function(responderToAdd) { - if (!this.include(responderToAdd)) - this.responders.push(responderToAdd); - }, - - unregister: function(responderToRemove) { - this.responders = this.responders.without(responderToRemove); - }, - - dispatch: function(callback, request, transport, json) { - this.each(function(responder) { - if (responder[callback] && typeof responder[callback] == 'function') { - try { - responder[callback].apply(responder, [request, transport, json]); - } catch (e) {} - } - }); - } -}; - -Object.extend(Ajax.Responders, Enumerable); - -Ajax.Responders.register({ - onCreate: function() { - Ajax.activeRequestCount++; - }, - - onComplete: function() { - Ajax.activeRequestCount--; - } -}); - -Ajax.Base = function() {}; -Ajax.Base.prototype = { - setOptions: function(options) { - this.options = { - method: 'post', - asynchronous: true, - contentType: 'application/x-www-form-urlencoded', - parameters: '' - } - Object.extend(this.options, options || {}); - }, - - responseIsSuccess: function() { - return this.transport.status == undefined - || this.transport.status == 0 - || (this.transport.status >= 200 && this.transport.status < 300); - }, - - responseIsFailure: function() { - return !this.responseIsSuccess(); - } -} - -Ajax.Request = Class.create(); -Ajax.Request.Events = - ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; - -Ajax.Request.prototype = Object.extend(new Ajax.Base(), { - initialize: function(url, options) { - this.transport = Ajax.getTransport(); - this.setOptions(options); - this.request(url); - }, - - request: function(url) { - var parameters = this.options.parameters || ''; - if (parameters.length > 0) parameters += '&_='; - - try { - this.url = url; - if (this.options.method == 'get' && parameters.length > 0) - this.url += (this.url.match(/\?/) ? '&' : '?') + parameters; - - Ajax.Responders.dispatch('onCreate', this, this.transport); - - this.transport.open(this.options.method, this.url, - this.options.asynchronous); - - if (this.options.asynchronous) { - this.transport.onreadystatechange = this.onStateChange.bind(this); - setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10); - } - - this.setRequestHeaders(); - - var body = this.options.postBody ? this.options.postBody : parameters; - this.transport.send(this.options.method == 'post' ? body : null); - - } catch (e) { - this.dispatchException(e); - } - }, - - setRequestHeaders: function() { - var requestHeaders = - ['X-Requested-With', 'XMLHttpRequest', - 'X-Prototype-Version', Prototype.Version, - 'Accept', 'text/javascript, text/html, application/xml, text/xml, */*']; - - if (this.options.method == 'post') { - requestHeaders.push('Content-type', this.options.contentType); - - /* Force "Connection: close" for Mozilla browsers to work around - * a bug where XMLHttpReqeuest sends an incorrect Content-length - * header. See Mozilla Bugzilla #246651. - */ - if (this.transport.overrideMimeType) - requestHeaders.push('Connection', 'close'); - } - - if (this.options.requestHeaders) - requestHeaders.push.apply(requestHeaders, this.options.requestHeaders); - - for (var i = 0; i < requestHeaders.length; i += 2) - this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]); - }, - - onStateChange: function() { - var readyState = this.transport.readyState; - if (readyState != 1) - this.respondToReadyState(this.transport.readyState); - }, - - header: function(name) { - try { - return this.transport.getResponseHeader(name); - } catch (e) {} - }, - - evalJSON: function() { - try { - return eval('(' + this.header('X-JSON') + ')'); - } catch (e) {} - }, - - evalResponse: function() { - try { - return eval(this.transport.responseText); - } catch (e) { - this.dispatchException(e); - } - }, - - respondToReadyState: function(readyState) { - var event = Ajax.Request.Events[readyState]; - var transport = this.transport, json = this.evalJSON(); - - if (event == 'Complete') { - try { - (this.options['on' + this.transport.status] - || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')] - || Prototype.emptyFunction)(transport, json); - } catch (e) { - this.dispatchException(e); - } - - if ((this.header('Content-type') || '').match(/^text\/javascript/i)) - this.evalResponse(); - } - - try { - (this.options['on' + event] || Prototype.emptyFunction)(transport, json); - Ajax.Responders.dispatch('on' + event, this, transport, json); - } catch (e) { - this.dispatchException(e); - } - - /* Avoid memory leak in MSIE: clean up the oncomplete event handler */ - if (event == 'Complete') - this.transport.onreadystatechange = Prototype.emptyFunction; - }, - - dispatchException: function(exception) { - (this.options.onException || Prototype.emptyFunction)(this, exception); - Ajax.Responders.dispatch('onException', this, exception); - } -}); - -Ajax.Updater = Class.create(); - -Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { - initialize: function(container, url, options) { - this.containers = { - success: container.success ? $PR(container.success) : $PR(container), - failure: container.failure ? $PR(container.failure) : - (container.success ? null : $PR(container)) - } - - this.transport = Ajax.getTransport(); - this.setOptions(options); - - var onComplete = this.options.onComplete || Prototype.emptyFunction; - this.options.onComplete = (function(transport, object) { - this.updateContent(); - onComplete(transport, object); - }).bind(this); - - this.request(url); - }, - - updateContent: function() { - var receiver = this.responseIsSuccess() ? - this.containers.success : this.containers.failure; - var response = this.transport.responseText; - - if (!this.options.evalScripts) - response = response.stripScripts(); - - if (receiver) { - if (this.options.insertion) { - new this.options.insertion(receiver, response); - } else { - Element.update(receiver, response); - } - } - - if (this.responseIsSuccess()) { - if (this.onComplete) - setTimeout(this.onComplete.bind(this), 10); - } - } -}); - -Ajax.PeriodicalUpdater = Class.create(); -Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { - initialize: function(container, url, options) { - this.setOptions(options); - this.onComplete = this.options.onComplete; - - this.frequency = (this.options.frequency || 2); - this.decay = (this.options.decay || 1); - - this.updater = {}; - this.container = container; - this.url = url; - - this.start(); - }, - - start: function() { - this.options.onComplete = this.updateComplete.bind(this); - this.onTimerEvent(); - }, - - stop: function() { - this.updater.onComplete = undefined; - clearTimeout(this.timer); - (this.onComplete || Prototype.emptyFunction).apply(this, arguments); - }, - - updateComplete: function(request) { - if (this.options.decay) { - this.decay = (request.responseText == this.lastText ? - this.decay * this.options.decay : 1); - - this.lastText = request.responseText; - } - this.timer = setTimeout(this.onTimerEvent.bind(this), - this.decay * this.frequency * 1000); - }, - - onTimerEvent: function() { - this.updater = new Ajax.Updater(this.container, this.url, this.options); - } -}); -function $PR() { - var results = [], element; - for (var i = 0; i < arguments.length; i++) { - element = arguments[i]; - if (typeof element == 'string') - element = document.getElementById(element); - results.push(Element.extend(element)); - } - return results.length < 2 ? results[0] : results; -} - -document.getElementsByClassName = function(className, parentElement) { - var children = ($PR(parentElement) || document.body).getElementsByTagName('*'); - return $A(children).inject([], function(elements, child) { - if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) - elements.push(Element.extend(child)); - return elements; - }); -} - -/*--------------------------------------------------------------------------*/ - -if (!window.Element) - var Element = new Object(); - -Element.extend = function(element) { - if (!element) return; - if (_nativeExtensions) return element; - - if (!element._extended && element.tagName && element != window) { - var methods = Element.Methods, cache = Element.extend.cache; - for (property in methods) { - var value = methods[property]; - if (typeof value == 'function') - element[property] = cache.findOrStore(value); - } - } - - element._extended = true; - return element; -} - -Element.extend.cache = { - findOrStore: function(value) { - return this[value] = this[value] || function() { - return value.apply(null, [this].concat($A(arguments))); - } - } -} - -Element.Methods = { - visible: function(element) { - return $PR(element).style.display != 'none'; - }, - - toggle: function() { - for (var i = 0; i < arguments.length; i++) { - var element = $PR(arguments[i]); - Element[Element.visible(element) ? 'hide' : 'show'](element); - } - }, - - hide: function() { - for (var i = 0; i < arguments.length; i++) { - var element = $PR(arguments[i]); - element.style.display = 'none'; - } - }, - - show: function() { - for (var i = 0; i < arguments.length; i++) { - var element = $PR(arguments[i]); - element.style.display = ''; - } - }, - - remove: function(element) { - element = $PR(element); - element.parentNode.removeChild(element); - }, - - update: function(element, html) { - $PR(element).innerHTML = html.stripScripts(); - setTimeout(function() {html.evalScripts()}, 10); - }, - - replace: function(element, html) { - element = $PR(element); - if (element.outerHTML) { - element.outerHTML = html.stripScripts(); - } else { - var range = element.ownerDocument.createRange(); - range.selectNodeContents(element); - element.parentNode.replaceChild( - range.createContextualFragment(html.stripScripts()), element); - } - setTimeout(function() {html.evalScripts()}, 10); - }, - - getHeight: function(element) { - element = $PR(element); - return element.offsetHeight; - }, - - classNames: function(element) { - return new Element.ClassNames(element); - }, - - hasClassName: function(element, className) { - if (!(element = $PR(element))) return; - return Element.classNames(element).include(className); - }, - - addClassName: function(element, className) { - if (!(element = $PR(element))) return; - return Element.classNames(element).add(className); - }, - - removeClassName: function(element, className) { - if (!(element = $PR(element))) return; - return Element.classNames(element).remove(className); - }, - - // removes whitespace-only text node children - cleanWhitespace: function(element) { - element = $PR(element); - for (var i = 0; i < element.childNodes.length; i++) { - var node = element.childNodes[i]; - if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) - Element.remove(node); - } - }, - - empty: function(element) { - return $PR(element).innerHTML.match(/^\s*$/); - }, - - childOf: function(element, ancestor) { - element = $PR(element), ancestor = $PR(ancestor); - while (element = element.parentNode) - if (element == ancestor) return true; - return false; - }, - - scrollTo: function(element) { - element = $PR(element); - var x = element.x ? element.x : element.offsetLeft, - y = element.y ? element.y : element.offsetTop; - window.scrollTo(x, y); - }, - - getStyle: function(element, style) { - element = $PR(element); - var value = element.style[style.camelize()]; - if (!value) { - if (document.defaultView && document.defaultView.getComputedStyle) { - var css = document.defaultView.getComputedStyle(element, null); - value = css ? css.getPropertyValue(style) : null; - } else if (element.currentStyle) { - value = element.currentStyle[style.camelize()]; - } - } - - if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) - if (Element.getStyle(element, 'position') == 'static') value = 'auto'; - - return value == 'auto' ? null : value; - }, - - setStyle: function(element, style) { - element = $PR(element); - for (var name in style) - element.style[name.camelize()] = style[name]; - }, - - getDimensions: function(element) { - element = $PR(element); - if (Element.getStyle(element, 'display') != 'none') - return {width: element.offsetWidth, height: element.offsetHeight}; - - // All *Width and *Height properties give 0 on elements with display none, - // so enable the element temporarily - var els = element.style; - var originalVisibility = els.visibility; - var originalPosition = els.position; - els.visibility = 'hidden'; - els.position = 'absolute'; - els.display = ''; - var originalWidth = element.clientWidth; - var originalHeight = element.clientHeight; - els.display = 'none'; - els.position = originalPosition; - els.visibility = originalVisibility; - return {width: originalWidth, height: originalHeight}; - }, - - makePositioned: function(element) { - element = $PR(element); - var pos = Element.getStyle(element, 'position'); - if (pos == 'static' || !pos) { - element._madePositioned = true; - element.style.position = 'relative'; - // Opera returns the offset relative to the positioning context, when an - // element is position relative but top and left have not been defined - if (window.opera) { - element.style.top = 0; - element.style.left = 0; - } - } - }, - - undoPositioned: function(element) { - element = $PR(element); - if (element._madePositioned) { - element._madePositioned = undefined; - element.style.position = - element.style.top = - element.style.left = - element.style.bottom = - element.style.right = ''; - } - }, - - makeClipping: function(element) { - element = $PR(element); - if (element._overflow) return; - element._overflow = element.style.overflow; - if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') - element.style.overflow = 'hidden'; - }, - - undoClipping: function(element) { - element = $PR(element); - if (element._overflow) return; - element.style.overflow = element._overflow; - element._overflow = undefined; - } -} - -Object.extend(Element, Element.Methods); - -var _nativeExtensions = false; - -if(!HTMLElement && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) { - var HTMLElement = {} - HTMLElement.prototype = document.createElement('div').__proto__; -} - -Element.addMethods = function(methods) { - Object.extend(Element.Methods, methods || {}); - - if(typeof HTMLElement != 'undefined') { - var methods = Element.Methods, cache = Element.extend.cache; - for (property in methods) { - var value = methods[property]; - if (typeof value == 'function') - HTMLElement.prototype[property] = cache.findOrStore(value); - } - _nativeExtensions = true; - } -} - -Element.addMethods(); - -var Toggle = new Object(); -Toggle.display = Element.toggle; - -/*--------------------------------------------------------------------------*/ - -Abstract.Insertion = function(adjacency) { - this.adjacency = adjacency; -} - -Abstract.Insertion.prototype = { - initialize: function(element, content) { - this.element = $PR(element); - this.content = content.stripScripts(); - - if (this.adjacency && this.element.insertAdjacentHTML) { - try { - this.element.insertAdjacentHTML(this.adjacency, this.content); - } catch (e) { - var tagName = this.element.tagName.toLowerCase(); - if (tagName == 'tbody' || tagName == 'tr') { - this.insertContent(this.contentFromAnonymousTable()); - } else { - throw e; - } - } - } else { - this.range = this.element.ownerDocument.createRange(); - if (this.initializeRange) this.initializeRange(); - this.insertContent([this.range.createContextualFragment(this.content)]); - } - - setTimeout(function() {content.evalScripts()}, 10); - }, - - contentFromAnonymousTable: function() { - var div = document.createElement('div'); - div.innerHTML = '' + this.content + '
    '; - return $A(div.childNodes[0].childNodes[0].childNodes); - } -} - -var Insertion = new Object(); - -Insertion.Before = Class.create(); -Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { - initializeRange: function() { - this.range.setStartBefore(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.parentNode.insertBefore(fragment, this.element); - }).bind(this)); - } -}); - -Insertion.Top = Class.create(); -Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { - initializeRange: function() { - this.range.selectNodeContents(this.element); - this.range.collapse(true); - }, - - insertContent: function(fragments) { - fragments.reverse(false).each((function(fragment) { - this.element.insertBefore(fragment, this.element.firstChild); - }).bind(this)); - } -}); - -Insertion.Bottom = Class.create(); -Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { - initializeRange: function() { - this.range.selectNodeContents(this.element); - this.range.collapse(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.appendChild(fragment); - }).bind(this)); - } -}); - -Insertion.After = Class.create(); -Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { - initializeRange: function() { - this.range.setStartAfter(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.parentNode.insertBefore(fragment, - this.element.nextSibling); - }).bind(this)); - } -}); - -/*--------------------------------------------------------------------------*/ - -Element.ClassNames = Class.create(); -Element.ClassNames.prototype = { - initialize: function(element) { - this.element = $PR(element); - }, - - _each: function(iterator) { - this.element.className.split(/\s+/).select(function(name) { - return name.length > 0; - })._each(iterator); - }, - - set: function(className) { - this.element.className = className; - }, - - add: function(classNameToAdd) { - if (this.include(classNameToAdd)) return; - this.set(this.toArray().concat(classNameToAdd).join(' ')); - }, - - remove: function(classNameToRemove) { - if (!this.include(classNameToRemove)) return; - this.set(this.select(function(className) { - return className != classNameToRemove; - }).join(' ')); - }, - - toString: function() { - return this.toArray().join(' '); - } -} - -Object.extend(Element.ClassNames.prototype, Enumerable); -var Selector = Class.create(); -Selector.prototype = { - initialize: function(expression) { - this.params = {classNames: []}; - this.expression = expression.toString().strip(); - this.parseExpression(); - this.compileMatcher(); - }, - - parseExpression: function() { - function abort(message) { throw 'Parse error in selector: ' + message; } - - if (this.expression == '') abort('empty expression'); - - var params = this.params, expr = this.expression, match, modifier, clause, rest; - while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { - params.attributes = params.attributes || []; - params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); - expr = match[1]; - } - - if (expr == '*') return this.params.wildcard = true; - - while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) { - modifier = match[1], clause = match[2], rest = match[3]; - switch (modifier) { - case '#': params.id = clause; break; - case '.': params.classNames.push(clause); break; - case '': - case undefined: params.tagName = clause.toUpperCase(); break; - default: abort(expr.inspect()); - } - expr = rest; - } - - if (expr.length > 0) abort(expr.inspect()); - }, - - buildMatchExpression: function() { - var params = this.params, conditions = [], clause; - - if (params.wildcard) - conditions.push('true'); - if (clause = params.id) - conditions.push('element.id == ' + clause.inspect()); - if (clause = params.tagName) - conditions.push('element.tagName.toUpperCase() == ' + clause.inspect()); - if ((clause = params.classNames).length > 0) - for (var i = 0; i < clause.length; i++) - conditions.push('Element.hasClassName(element, ' + clause[i].inspect() + ')'); - if (clause = params.attributes) { - clause.each(function(attribute) { - var value = 'element.getAttribute(' + attribute.name.inspect() + ')'; - var splitValueBy = function(delimiter) { - return value + ' && ' + value + '.split(' + delimiter.inspect() + ')'; - } - - switch (attribute.operator) { - case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break; - case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break; - case '|=': conditions.push( - splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect() - ); break; - case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break; - case '': - case undefined: conditions.push(value + ' != null'); break; - default: throw 'Unknown operator ' + attribute.operator + ' in selector'; - } - }); - } - - return conditions.join(' && '); - }, - - compileMatcher: function() { - this.match = new Function('element', 'if (!element.tagName) return false; \ - return ' + this.buildMatchExpression()); - }, - - findElements: function(scope) { - var element; - - if (element = $PR(this.params.id)) - if (this.match(element)) - if (!scope || Element.childOf(element, scope)) - return [element]; - - scope = (scope || document).getElementsByTagName(this.params.tagName || '*'); - - var results = []; - for (var i = 0; i < scope.length; i++) - if (this.match(element = scope[i])) - results.push(Element.extend(element)); - - return results; - }, - - toString: function() { - return this.expression; - } -} - -function $$() { - return $A(arguments).map(function(expression) { - return expression.strip().split(/\s+/).inject([null], function(results, expr) { - var selector = new Selector(expr); - return results.map(selector.findElements.bind(selector)).flatten(); - }); - }).flatten(); -} -var Field = { - clear: function() { - for (var i = 0; i < arguments.length; i++) - $PR(arguments[i]).value = ''; - }, - - focus: function(element) { - $PR(element).focus(); - }, - - present: function() { - for (var i = 0; i < arguments.length; i++) - if ($PR(arguments[i]).value == '') return false; - return true; - }, - - select: function(element) { - $PR(element).select(); - }, - - activate: function(element) { - element = $PR(element); - element.focus(); - if (element.select) - element.select(); - } -} - -/*--------------------------------------------------------------------------*/ - -var Form = { - serialize: function(form) { - var elements = Form.getElements($PR(form)); - var queryComponents = new Array(); - - for (var i = 0; i < elements.length; i++) { - var queryComponent = Form.Element.serialize(elements[i]); - if (queryComponent) - queryComponents.push(queryComponent); - } - - return queryComponents.join('&'); - }, - - getElements: function(form) { - form = $PR(form); - var elements = new Array(); - - for (var tagName in Form.Element.Serializers) { - var tagElements = form.getElementsByTagName(tagName); - for (var j = 0; j < tagElements.length; j++) - elements.push(tagElements[j]); - } - return elements; - }, - - getInputs: function(form, typeName, name) { - form = $PR(form); - var inputs = form.getElementsByTagName('input'); - - if (!typeName && !name) - return inputs; - - var matchingInputs = new Array(); - for (var i = 0; i < inputs.length; i++) { - var input = inputs[i]; - if ((typeName && input.type != typeName) || - (name && input.name != name)) - continue; - matchingInputs.push(input); - } - - return matchingInputs; - }, - - disable: function(form) { - var elements = Form.getElements(form); - for (var i = 0; i < elements.length; i++) { - var element = elements[i]; - element.blur(); - element.disabled = 'true'; - } - }, - - enable: function(form) { - var elements = Form.getElements(form); - for (var i = 0; i < elements.length; i++) { - var element = elements[i]; - element.disabled = ''; - } - }, - - findFirstElement: function(form) { - return Form.getElements(form).find(function(element) { - return element.type != 'hidden' && !element.disabled && - ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); - }); - }, - - focusFirstElement: function(form) { - Field.activate(Form.findFirstElement(form)); - }, - - reset: function(form) { - $PR(form).reset(); - } -} - -Form.Element = { - serialize: function(element) { - element = $PR(element); - var method = element.tagName.toLowerCase(); - var parameter = Form.Element.Serializers[method](element); - - if (parameter) { - var key = encodeURIComponent(parameter[0]); - if (key.length == 0) return; - - if (parameter[1].constructor != Array) - parameter[1] = [parameter[1]]; - - return parameter[1].map(function(value) { - return key + '=' + encodeURIComponent(value); - }).join('&'); - } - }, - - getValue: function(element) { - element = $PR(element); - var method = element.tagName.toLowerCase(); - var parameter = Form.Element.Serializers[method](element); - - if (parameter) - return parameter[1]; - } -} - -Form.Element.Serializers = { - input: function(element) { - switch (element.type.toLowerCase()) { - case 'submit': - case 'hidden': - case 'password': - case 'text': - return Form.Element.Serializers.textarea(element); - case 'checkbox': - case 'radio': - return Form.Element.Serializers.inputSelector(element); - } - return false; - }, - - inputSelector: function(element) { - if (element.checked) - return [element.name, element.value]; - }, - - textarea: function(element) { - return [element.name, element.value]; - }, - - select: function(element) { - return Form.Element.Serializers[element.type == 'select-one' ? - 'selectOne' : 'selectMany'](element); - }, - - selectOne: function(element) { - var value = '', opt, index = element.selectedIndex; - if (index >= 0) { - opt = element.options[index]; - value = opt.value || opt.text; - } - return [element.name, value]; - }, - - selectMany: function(element) { - var value = []; - for (var i = 0; i < element.length; i++) { - var opt = element.options[i]; - if (opt.selected) - value.push(opt.value || opt.text); - } - return [element.name, value]; - } -} - -/*--------------------------------------------------------------------------*/ - -var $F = Form.Element.getValue; - -/*--------------------------------------------------------------------------*/ - -Abstract.TimedObserver = function() {} -Abstract.TimedObserver.prototype = { - initialize: function(element, frequency, callback) { - this.frequency = frequency; - this.element = $PR(element); - this.callback = callback; - - this.lastValue = this.getValue(); - this.registerCallback(); - }, - - registerCallback: function() { - setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); - }, - - onTimerEvent: function() { - var value = this.getValue(); - if (this.lastValue != value) { - this.callback(this.element, value); - this.lastValue = value; - } - } -} - -Form.Element.Observer = Class.create(); -Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { - getValue: function() { - return Form.Element.getValue(this.element); - } -}); - -Form.Observer = Class.create(); -Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { - getValue: function() { - return Form.serialize(this.element); - } -}); - -/*--------------------------------------------------------------------------*/ - -Abstract.EventObserver = function() {} -Abstract.EventObserver.prototype = { - initialize: function(element, callback) { - this.element = $PR(element); - this.callback = callback; - - this.lastValue = this.getValue(); - if (this.element.tagName.toLowerCase() == 'form') - this.registerFormCallbacks(); - else - this.registerCallback(this.element); - }, - - onElementEvent: function() { - var value = this.getValue(); - if (this.lastValue != value) { - this.callback(this.element, value); - this.lastValue = value; - } - }, - - registerFormCallbacks: function() { - var elements = Form.getElements(this.element); - for (var i = 0; i < elements.length; i++) - this.registerCallback(elements[i]); - }, - - registerCallback: function(element) { - if (element.type) { - switch (element.type.toLowerCase()) { - case 'checkbox': - case 'radio': - Event.observe(element, 'click', this.onElementEvent.bind(this)); - break; - case 'password': - case 'text': - case 'textarea': - case 'select-one': - case 'select-multiple': - Event.observe(element, 'change', this.onElementEvent.bind(this)); - break; - } - } - } -} - -Form.Element.EventObserver = Class.create(); -Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { - getValue: function() { - return Form.Element.getValue(this.element); - } -}); - -Form.EventObserver = Class.create(); -Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { - getValue: function() { - return Form.serialize(this.element); - } -}); -if (!window.Event) { - var Event = new Object(); -} - -Object.extend(Event, { - KEY_BACKSPACE: 8, - KEY_TAB: 9, - KEY_RETURN: 13, - KEY_ESC: 27, - KEY_LEFT: 37, - KEY_UP: 38, - KEY_RIGHT: 39, - KEY_DOWN: 40, - KEY_DELETE: 46, - - element: function(event) { - return event.target || event.srcElement; - }, - - isLeftClick: function(event) { - return (((event.which) && (event.which == 1)) || - ((event.button) && (event.button == 1))); - }, - - pointerX: function(event) { - return event.pageX || (event.clientX + - (document.documentElement.scrollLeft || document.body.scrollLeft)); - }, - - pointerY: function(event) { - return event.pageY || (event.clientY + - (document.documentElement.scrollTop || document.body.scrollTop)); - }, - - stop: function(event) { - if (event.preventDefault) { - event.preventDefault(); - event.stopPropagation(); - } else { - event.returnValue = false; - event.cancelBubble = true; - } - }, - - // find the first node with the given tagName, starting from the - // node the event was triggered on; traverses the DOM upwards - findElement: function(event, tagName) { - var element = Event.element(event); - while (element.parentNode && (!element.tagName || - (element.tagName.toUpperCase() != tagName.toUpperCase()))) - element = element.parentNode; - return element; - }, - - observers: false, - - _observeAndCache: function(element, name, observer, useCapture) { - if (!this.observers) this.observers = []; - if (element.addEventListener) { - this.observers.push([element, name, observer, useCapture]); - element.addEventListener(name, observer, useCapture); - } else if (element.attachEvent) { - this.observers.push([element, name, observer, useCapture]); - element.attachEvent('on' + name, observer); - } - }, - - unloadCache: function() { - if (!Event.observers) return; - for (var i = 0; i < Event.observers.length; i++) { - Event.stopObserving.apply(this, Event.observers[i]); - Event.observers[i][0] = null; - } - Event.observers = false; - }, - - observe: function(element, name, observer, useCapture) { - var element = $PR(element); - useCapture = useCapture || false; - - if (name == 'keypress' && - (navigator.appVersion.match(/Konqueror|Safari|KHTML/) - || element.attachEvent)) - name = 'keydown'; - - this._observeAndCache(element, name, observer, useCapture); - }, - - stopObserving: function(element, name, observer, useCapture) { - var element = $PR(element); - useCapture = useCapture || false; - - if (name == 'keypress' && - (navigator.appVersion.match(/Konqueror|Safari|KHTML/) - || element.detachEvent)) - name = 'keydown'; - - if (element.removeEventListener) { - element.removeEventListener(name, observer, useCapture); - } else if (element.detachEvent) { - element.detachEvent('on' + name, observer); - } - } -}); - -/* prevent memory leaks in IE */ -if (navigator.appVersion.match(/\bMSIE\b/)) - Event.observe(window, 'unload', Event.unloadCache, false); -var Position = { - // set to true if needed, warning: firefox performance problems - // NOT neeeded for page scrolling, only if draggable contained in - // scrollable elements - includeScrollOffsets: false, - - // must be called before calling withinIncludingScrolloffset, every time the - // page is scrolled - prepare: function() { - this.deltaX = window.pageXOffset - || document.documentElement.scrollLeft - || document.body.scrollLeft - || 0; - this.deltaY = window.pageYOffset - || document.documentElement.scrollTop - || document.body.scrollTop - || 0; - }, - - realOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.scrollTop || 0; - valueL += element.scrollLeft || 0; - element = element.parentNode; - } while (element); - return [valueL, valueT]; - }, - - cumulativeOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - } while (element); - return [valueL, valueT]; - }, - - positionedOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - if (element) { - p = Element.getStyle(element, 'position'); - if (p == 'relative' || p == 'absolute') break; - } - } while (element); - return [valueL, valueT]; - }, - - offsetParent: function(element) { - if (element.offsetParent) return element.offsetParent; - if (element == document.body) return element; - - while ((element = element.parentNode) && element != document.body) - if (Element.getStyle(element, 'position') != 'static') - return element; - - return document.body; - }, - - // caches x/y coordinate pair to use with overlap - within: function(element, x, y) { - if (this.includeScrollOffsets) - return this.withinIncludingScrolloffsets(element, x, y); - this.xcomp = x; - this.ycomp = y; - this.offset = this.cumulativeOffset(element); - - return (y >= this.offset[1] && - y < this.offset[1] + element.offsetHeight && - x >= this.offset[0] && - x < this.offset[0] + element.offsetWidth); - }, - - withinIncludingScrolloffsets: function(element, x, y) { - var offsetcache = this.realOffset(element); - - this.xcomp = x + offsetcache[0] - this.deltaX; - this.ycomp = y + offsetcache[1] - this.deltaY; - this.offset = this.cumulativeOffset(element); - - return (this.ycomp >= this.offset[1] && - this.ycomp < this.offset[1] + element.offsetHeight && - this.xcomp >= this.offset[0] && - this.xcomp < this.offset[0] + element.offsetWidth); - }, - - // within must be called directly before - overlap: function(mode, element) { - if (!mode) return 0; - if (mode == 'vertical') - return ((this.offset[1] + element.offsetHeight) - this.ycomp) / - element.offsetHeight; - if (mode == 'horizontal') - return ((this.offset[0] + element.offsetWidth) - this.xcomp) / - element.offsetWidth; - }, - - clone: function(source, target) { - source = $PR(source); - target = $PR(target); - target.style.position = 'absolute'; - var offsets = this.cumulativeOffset(source); - target.style.top = offsets[1] + 'px'; - target.style.left = offsets[0] + 'px'; - target.style.width = source.offsetWidth + 'px'; - target.style.height = source.offsetHeight + 'px'; - }, - - page: function(forElement) { - var valueT = 0, valueL = 0; - - var element = forElement; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - - // Safari fix - if (element.offsetParent==document.body) - if (Element.getStyle(element,'position')=='absolute') break; - - } while (element = element.offsetParent); - - element = forElement; - do { - valueT -= element.scrollTop || 0; - valueL -= element.scrollLeft || 0; - } while (element = element.parentNode); - - return [valueL, valueT]; - }, - - clone: function(source, target) { - var options = Object.extend({ - setLeft: true, - setTop: true, - setWidth: true, - setHeight: true, - offsetTop: 0, - offsetLeft: 0 - }, arguments[2] || {}) - - // find page position of source - source = $PR(source); - var p = Position.page(source); - - // find coordinate system to use - target = $PR(target); - var delta = [0, 0]; - var parent = null; - // delta [0,0] will do fine with position: fixed elements, - // position:absolute needs offsetParent deltas - if (Element.getStyle(target,'position') == 'absolute') { - parent = Position.offsetParent(target); - delta = Position.page(parent); - } - - // correct by body offsets (fixes Safari) - if (parent == document.body) { - delta[0] -= document.body.offsetLeft; - delta[1] -= document.body.offsetTop; - } - - // set position - if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; - if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; - if(options.setWidth) target.style.width = source.offsetWidth + 'px'; - if(options.setHeight) target.style.height = source.offsetHeight + 'px'; - }, - - absolutize: function(element) { - element = $PR(element); - if (element.style.position == 'absolute') return; - Position.prepare(); - - var offsets = Position.positionedOffset(element); - var top = offsets[1]; - var left = offsets[0]; - var width = element.clientWidth; - var height = element.clientHeight; - - element._originalLeft = left - parseFloat(element.style.left || 0); - element._originalTop = top - parseFloat(element.style.top || 0); - element._originalWidth = element.style.width; - element._originalHeight = element.style.height; - - element.style.position = 'absolute'; - element.style.top = top + 'px';; - element.style.left = left + 'px';; - element.style.width = width + 'px';; - element.style.height = height + 'px';; - }, - - relativize: function(element) { - element = $PR(element); - if (element.style.position == 'relative') return; - Position.prepare(); - - element.style.position = 'relative'; - var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); - var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); - - element.style.top = top + 'px'; - element.style.left = left + 'px'; - element.style.height = element._originalHeight; - element.style.width = element._originalWidth; - } -} - -// Safari returns margins on body which is incorrect if the child is absolutely -// positioned. For performance reasons, redefine Position.cumulativeOffset for -// KHTML/WebKit only. -if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { - Position.cumulativeOffset = function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - if (element.offsetParent == document.body) - if (Element.getStyle(element, 'position') == 'absolute') break; - - element = element.offsetParent; - } while (element); - - return [valueL, valueT]; - } -} diff --git a/view/js/cropper/lib/scriptaculous.js b/view/js/cropper/lib/scriptaculous.js deleted file mode 100644 index f61fc57f7..000000000 --- a/view/js/cropper/lib/scriptaculous.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -var Scriptaculous = { - Version: '1.6.1', - require: function(libraryName) { - // inserting via DOM fails in Safari 2.0, so brute force approach - document.write(''); - }, - load: function() { - if((typeof Prototype=='undefined') || - (typeof Element == 'undefined') || - (typeof Element.Methods=='undefined') || - parseFloat(Prototype.Version.split(".")[0] + "." + - Prototype.Version.split(".")[1]) < 1.5) - throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0"); - - $A(document.getElementsByTagName("script")).findAll( function(s) { - return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/)) - }).each( function(s) { - var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,''); - var includes = s.src.match(/\?.*load=([a-z,]*)/); - (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each( - function(include) { Scriptaculous.require(path+include+'.js') }); - }); - } -} - -Scriptaculous.load(); \ No newline at end of file diff --git a/view/js/cropper/lib/slider.js b/view/js/cropper/lib/slider.js deleted file mode 100644 index cd16b692d..000000000 --- a/view/js/cropper/lib/slider.js +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright (c) 2005 Marty Haught, Thomas Fuchs -// -// See http://script.aculo.us for more info -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -if(!Control) var Control = {}; -Control.Slider = Class.create(); - -// options: -// axis: 'vertical', or 'horizontal' (default) -// -// callbacks: -// onChange(value) -// onSlide(value) -Control.Slider.prototype = { - initialize: function(handle, track, options) { - var slider = this; - - if(handle instanceof Array) { - this.handles = handle.collect( function(e) { return $PR(e) }); - } else { - this.handles = [$PR(handle)]; - } - - this.track = $PR(track); - this.options = options || {}; - - this.axis = this.options.axis || 'horizontal'; - this.increment = this.options.increment || 1; - this.step = parseInt(this.options.step || '1'); - this.range = this.options.range || $R(0,1); - - this.value = 0; // assure backwards compat - this.values = this.handles.map( function() { return 0 }); - this.spans = this.options.spans ? this.options.spans.map(function(s){ return $PR(s) }) : false; - this.options.startSpan = $PR(this.options.startSpan || null); - this.options.endSpan = $PR(this.options.endSpan || null); - - this.restricted = this.options.restricted || false; - - this.maximum = this.options.maximum || this.range.end; - this.minimum = this.options.minimum || this.range.start; - - // Will be used to align the handle onto the track, if necessary - this.alignX = parseInt(this.options.alignX || '0'); - this.alignY = parseInt(this.options.alignY || '0'); - - this.trackLength = this.maximumOffset() - this.minimumOffset(); - this.handleLength = this.isVertical() ? this.handles[0].offsetHeight : this.handles[0].offsetWidth; - - this.active = false; - this.dragging = false; - this.disabled = false; - - if(this.options.disabled) this.setDisabled(); - - // Allowed values array - this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false; - if(this.allowedValues) { - this.minimum = this.allowedValues.min(); - this.maximum = this.allowedValues.max(); - } - - this.eventMouseDown = this.startDrag.bindAsEventListener(this); - this.eventMouseUp = this.endDrag.bindAsEventListener(this); - this.eventMouseMove = this.update.bindAsEventListener(this); - - // Initialize handles in reverse (make sure first handle is active) - this.handles.each( function(h,i) { - i = slider.handles.length-1-i; - slider.setValue(parseFloat( - (slider.options.sliderValue instanceof Array ? - slider.options.sliderValue[i] : slider.options.sliderValue) || - slider.range.start), i); - Element.makePositioned(h); // fix IE - Event.observe(h, "mousedown", slider.eventMouseDown); - }); - - Event.observe(this.track, "mousedown", this.eventMouseDown); - Event.observe(document, "mouseup", this.eventMouseUp); - Event.observe(document, "mousemove", this.eventMouseMove); - - this.initialized = true; - }, - dispose: function() { - var slider = this; - Event.stopObserving(this.track, "mousedown", this.eventMouseDown); - Event.stopObserving(document, "mouseup", this.eventMouseUp); - Event.stopObserving(document, "mousemove", this.eventMouseMove); - this.handles.each( function(h) { - Event.stopObserving(h, "mousedown", slider.eventMouseDown); - }); - }, - setDisabled: function(){ - this.disabled = true; - }, - setEnabled: function(){ - this.disabled = false; - }, - getNearestValue: function(value){ - if(this.allowedValues){ - if(value >= this.allowedValues.max()) return(this.allowedValues.max()); - if(value <= this.allowedValues.min()) return(this.allowedValues.min()); - - var offset = Math.abs(this.allowedValues[0] - value); - var newValue = this.allowedValues[0]; - this.allowedValues.each( function(v) { - var currentOffset = Math.abs(v - value); - if(currentOffset <= offset){ - newValue = v; - offset = currentOffset; - } - }); - return newValue; - } - if(value > this.range.end) return this.range.end; - if(value < this.range.start) return this.range.start; - return value; - }, - setValue: function(sliderValue, handleIdx){ - if(!this.active) { - this.activeHandle = this.handles[handleIdx]; - this.activeHandleIdx = handleIdx; - this.updateStyles(); - } - handleIdx = handleIdx || this.activeHandleIdx || 0; - if(this.initialized && this.restricted) { - if((handleIdx>0) && (sliderValuethis.values[handleIdx+1])) - sliderValue = this.values[handleIdx+1]; - } - sliderValue = this.getNearestValue(sliderValue); - this.values[handleIdx] = sliderValue; - this.value = this.values[0]; // assure backwards compat - - this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = - this.translateToPx(sliderValue); - - this.drawSpans(); - if(!this.dragging || !this.event) this.updateFinished(); - }, - setValueBy: function(delta, handleIdx) { - this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, - handleIdx || this.activeHandleIdx || 0); - }, - translateToPx: function(value) { - return Math.round( - ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) * - (value - this.range.start)) + "px"; - }, - translateToValue: function(offset) { - return ((offset/(this.trackLength-this.handleLength) * - (this.range.end-this.range.start)) + this.range.start); - }, - getRange: function(range) { - var v = this.values.sortBy(Prototype.K); - range = range || 0; - return $R(v[range],v[range+1]); - }, - minimumOffset: function(){ - return(this.isVertical() ? this.alignY : this.alignX); - }, - maximumOffset: function(){ - return(this.isVertical() ? - this.track.offsetHeight - this.alignY : this.track.offsetWidth - this.alignX); - }, - isVertical: function(){ - return (this.axis == 'vertical'); - }, - drawSpans: function() { - var slider = this; - if(this.spans) - $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) }); - if(this.options.startSpan) - this.setSpan(this.options.startSpan, - $R(0, this.values.length>1 ? this.getRange(0).min() : this.value )); - if(this.options.endSpan) - this.setSpan(this.options.endSpan, - $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum)); - }, - setSpan: function(span, range) { - if(this.isVertical()) { - span.style.top = this.translateToPx(range.start); - span.style.height = this.translateToPx(range.end - range.start + this.range.start); - } else { - span.style.left = this.translateToPx(range.start); - span.style.width = this.translateToPx(range.end - range.start + this.range.start); - } - }, - updateStyles: function() { - this.handles.each( function(h){ Element.removeClassName(h, 'selected') }); - Element.addClassName(this.activeHandle, 'selected'); - }, - startDrag: function(event) { - if(Event.isLeftClick(event)) { - if(!this.disabled){ - this.active = true; - - var handle = Event.element(event); - var pointer = [Event.pointerX(event), Event.pointerY(event)]; - if(handle==this.track) { - var offsets = Position.cumulativeOffset(this.track); - this.event = event; - this.setValue(this.translateToValue( - (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2) - )); - var offsets = Position.cumulativeOffset(this.activeHandle); - this.offsetX = (pointer[0] - offsets[0]); - this.offsetY = (pointer[1] - offsets[1]); - } else { - // find the handle (prevents issues with Safari) - while((this.handles.indexOf(handle) == -1) && handle.parentNode) - handle = handle.parentNode; - - this.activeHandle = handle; - this.activeHandleIdx = this.handles.indexOf(this.activeHandle); - this.updateStyles(); - - var offsets = Position.cumulativeOffset(this.activeHandle); - this.offsetX = (pointer[0] - offsets[0]); - this.offsetY = (pointer[1] - offsets[1]); - } - } - Event.stop(event); - } - }, - update: function(event) { - if(this.active) { - if(!this.dragging) this.dragging = true; - this.draw(event); - // fix AppleWebKit rendering - if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); - Event.stop(event); - } - }, - draw: function(event) { - var pointer = [Event.pointerX(event), Event.pointerY(event)]; - var offsets = Position.cumulativeOffset(this.track); - pointer[0] -= this.offsetX + offsets[0]; - pointer[1] -= this.offsetY + offsets[1]; - this.event = event; - this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] )); - if(this.initialized && this.options.onSlide) - this.options.onSlide(this.values.length>1 ? this.values : this.value, this); - }, - endDrag: function(event) { - if(this.active && this.dragging) { - this.finishDrag(event, true); - Event.stop(event); - } - this.active = false; - this.dragging = false; - }, - finishDrag: function(event, success) { - this.active = false; - this.dragging = false; - this.updateFinished(); - }, - updateFinished: function() { - if(this.initialized && this.options.onChange) - this.options.onChange(this.values.length>1 ? this.values : this.value, this); - this.event = null; - } -} diff --git a/view/js/cropper/lib/unittest.js b/view/js/cropper/lib/unittest.js deleted file mode 100644 index be0d25227..000000000 --- a/view/js/cropper/lib/unittest.js +++ /dev/null @@ -1,383 +0,0 @@ -// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// (c) 2005 Jon Tirsen (http://www.tirsen.com) -// (c) 2005 Michael Schuerig (http://www.schuerig.de/michael/) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -// experimental, Firefox-only -Event.simulateMouse = function(element, eventName) { - var options = Object.extend({ - pointerX: 0, - pointerY: 0, - buttons: 0 - }, arguments[2] || {}); - var oEvent = document.createEvent("MouseEvents"); - oEvent.initMouseEvent(eventName, true, true, document.defaultView, - options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY, - false, false, false, false, 0, $PR(element)); - - if(this.mark) Element.remove(this.mark); - this.mark = document.createElement('div'); - this.mark.appendChild(document.createTextNode(" ")); - document.body.appendChild(this.mark); - this.mark.style.position = 'absolute'; - this.mark.style.top = options.pointerY + "px"; - this.mark.style.left = options.pointerX + "px"; - this.mark.style.width = "5px"; - this.mark.style.height = "5px;"; - this.mark.style.borderTop = "1px solid red;" - this.mark.style.borderLeft = "1px solid red;" - - if(this.step) - alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options)); - - $PR(element).dispatchEvent(oEvent); -}; - -// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2. -// You need to downgrade to 1.0.4 for now to get this working -// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much -Event.simulateKey = function(element, eventName) { - var options = Object.extend({ - ctrlKey: false, - altKey: false, - shiftKey: false, - metaKey: false, - keyCode: 0, - charCode: 0 - }, arguments[2] || {}); - - var oEvent = document.createEvent("KeyEvents"); - oEvent.initKeyEvent(eventName, true, true, window, - options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, - options.keyCode, options.charCode ); - $PR(element).dispatchEvent(oEvent); -}; - -Event.simulateKeys = function(element, command) { - for(var i=0; i

    ' + - '' + - '' + - '' + - '
    StatusTestMessage
    '; - this.logsummary = $PR('logsummary') - this.loglines = $PR('loglines'); - }, - _toHTML: function(txt) { - return txt.escapeHTML().replace(/\n/g,"
    "); - } -} - -Test.Unit.Runner = Class.create(); -Test.Unit.Runner.prototype = { - initialize: function(testcases) { - this.options = Object.extend({ - testLog: 'testlog' - }, arguments[1] || {}); - this.options.resultsURL = this.parseResultsURLQueryParameter(); - if (this.options.testLog) { - this.options.testLog = $PR(this.options.testLog) || null; - } - if(this.options.tests) { - this.tests = []; - for(var i = 0; i < this.options.tests.length; i++) { - if(/^test/.test(this.options.tests[i])) { - this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"])); - } - } - } else { - if (this.options.test) { - this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])]; - } else { - this.tests = []; - for(var testcase in testcases) { - if(/^test/.test(testcase)) { - this.tests.push(new Test.Unit.Testcase(testcase, testcases[testcase], testcases["setup"], testcases["teardown"])); - } - } - } - } - this.currentTest = 0; - this.logger = new Test.Unit.Logger(this.options.testLog); - setTimeout(this.runTests.bind(this), 1000); - }, - parseResultsURLQueryParameter: function() { - return window.location.search.parseQuery()["resultsURL"]; - }, - // Returns: - // "ERROR" if there was an error, - // "FAILURE" if there was a failure, or - // "SUCCESS" if there was neither - getResult: function() { - var hasFailure = false; - for(var i=0;i 0) { - return "ERROR"; - } - if (this.tests[i].failures > 0) { - hasFailure = true; - } - } - if (hasFailure) { - return "FAILURE"; - } else { - return "SUCCESS"; - } - }, - postResults: function() { - if (this.options.resultsURL) { - new Ajax.Request(this.options.resultsURL, - { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false }); - } - }, - runTests: function() { - var test = this.tests[this.currentTest]; - if (!test) { - // finished! - this.postResults(); - this.logger.summary(this.summary()); - return; - } - if(!test.isWaiting) { - this.logger.start(test.name); - } - test.run(); - if(test.isWaiting) { - this.logger.message("Waiting for " + test.timeToWait + "ms"); - setTimeout(this.runTests.bind(this), test.timeToWait || 1000); - } else { - this.logger.finish(test.status(), test.summary()); - this.currentTest++; - // tail recursive, hopefully the browser will skip the stackframe - this.runTests(); - } - }, - summary: function() { - var assertions = 0; - var failures = 0; - var errors = 0; - var messages = []; - for(var i=0;i 0) return 'failed'; - if (this.errors > 0) return 'error'; - return 'passed'; - }, - assert: function(expression) { - var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"'; - try { expression ? this.pass() : - this.fail(message); } - catch(e) { this.error(e); } - }, - assertEqual: function(expected, actual) { - var message = arguments[2] || "assertEqual"; - try { (expected == actual) ? this.pass() : - this.fail(message + ': expected "' + Test.Unit.inspect(expected) + - '", actual "' + Test.Unit.inspect(actual) + '"'); } - catch(e) { this.error(e); } - }, - assertEnumEqual: function(expected, actual) { - var message = arguments[2] || "assertEnumEqual"; - try { $A(expected).length == $A(actual).length && - expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ? - this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) + - ', actual ' + Test.Unit.inspect(actual)); } - catch(e) { this.error(e); } - }, - assertNotEqual: function(expected, actual) { - var message = arguments[2] || "assertNotEqual"; - try { (expected != actual) ? this.pass() : - this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); } - catch(e) { this.error(e); } - }, - assertNull: function(obj) { - var message = arguments[1] || 'assertNull' - try { (obj==null) ? this.pass() : - this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); } - catch(e) { this.error(e); } - }, - assertHidden: function(element) { - var message = arguments[1] || 'assertHidden'; - this.assertEqual("none", element.style.display, message); - }, - assertNotNull: function(object) { - var message = arguments[1] || 'assertNotNull'; - this.assert(object != null, message); - }, - assertInstanceOf: function(expected, actual) { - var message = arguments[2] || 'assertInstanceOf'; - try { - (actual instanceof expected) ? this.pass() : - this.fail(message + ": object was not an instance of the expected type"); } - catch(e) { this.error(e); } - }, - assertNotInstanceOf: function(expected, actual) { - var message = arguments[2] || 'assertNotInstanceOf'; - try { - !(actual instanceof expected) ? this.pass() : - this.fail(message + ": object was an instance of the not expected type"); } - catch(e) { this.error(e); } - }, - _isVisible: function(element) { - element = $PR(element); - if(!element.parentNode) return true; - this.assertNotNull(element); - if(element.style && Element.getStyle(element, 'display') == 'none') - return false; - - return this._isVisible(element.parentNode); - }, - assertNotVisible: function(element) { - this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1])); - }, - assertVisible: function(element) { - this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1])); - }, - benchmark: function(operation, iterations) { - var startAt = new Date(); - (iterations || 1).times(operation); - var timeTaken = ((new Date())-startAt); - this.info((arguments[2] || 'Operation') + ' finished ' + - iterations + ' iterations in ' + (timeTaken/1000)+'s' ); - return timeTaken; - } -} - -Test.Unit.Testcase = Class.create(); -Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), { - initialize: function(name, test, setup, teardown) { - Test.Unit.Assertions.prototype.initialize.bind(this)(); - this.name = name; - this.test = test || function() {}; - this.setup = setup || function() {}; - this.teardown = teardown || function() {}; - this.isWaiting = false; - this.timeToWait = 1000; - }, - wait: function(time, nextPart) { - this.isWaiting = true; - this.test = nextPart; - this.timeToWait = time; - }, - run: function() { - try { - try { - if (!this.isWaiting) this.setup.bind(this)(); - this.isWaiting = false; - this.test.bind(this)(); - } finally { - if(!this.isWaiting) { - this.teardown.bind(this)(); - } - } - } - catch(e) { this.error(e); } - } -}); diff --git a/view/js/cropper/licence.txt b/view/js/cropper/licence.txt deleted file mode 100644 index b59e02917..000000000 --- a/view/js/cropper/licence.txt +++ /dev/null @@ -1,12 +0,0 @@ -Copyright (c) 2006, David Spurr (www.defusion.org.uk) -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the David Spurr nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -http://www.opensource.org/licenses/bsd-license.php \ No newline at end of file diff --git a/view/js/cropper/marqueeHoriz.gif b/view/js/cropper/marqueeHoriz.gif deleted file mode 100644 index 25317e5738bfcce43707ec0a0640533f69eb8fff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1125 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 PPffC!10NW#8L$7@U6jV2 diff --git a/view/js/cropper/tests/castleMed.jpg b/view/js/cropper/tests/castleMed.jpg deleted file mode 100644 index c35a6f554a21eb62f3c3e3580e616a4feee8748c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50584 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%0Dl3VwBB+R7y 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 RJ3V^U{{ZIRKl@F8|Jg7^TQ~p! diff --git a/view/js/cropper/tests/example-Basic.htm b/view/js/cropper/tests/example-Basic.htm deleted file mode 100644 index 2a55eca5a..000000000 --- a/view/js/cropper/tests/example-Basic.htm +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - Basic cropper test - - - - - - - - - - -

    Basic cropper test

    -

    - Some test content before the image -

    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-CSS-Absolute.htm b/view/js/cropper/tests/example-CSS-Absolute.htm deleted file mode 100644 index b605fd344..000000000 --- a/view/js/cropper/tests/example-CSS-Absolute.htm +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - CSS - Absolute positioned (and draggable) test - - - - - - - - - - -

    CSS - Absolute positioned (and draggable) test

    -

    - Some test content before the image -

    -

    - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque consequat risus cursus ipsum. Etiam libero. Integer vel mauris. Donec vulputate. In ut augue vitae nibh lobortis tempor. Aliquam hendrerit quam. Phasellus sed orci. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut sed urna. Donec nunc urna, porttitor a, feugiat pellentesque, varius id, justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla facilisi. Sed sollicitudin. Integer enim. Aenean sollicitudin. -

    -

    - Integer lorem turpis, dapibus sed, vulputate nec, volutpat a, sem. Sed malesuada laoreet lorem. Duis mauris ipsum, fringilla nec, tristique vel, imperdiet vel, neque. Nulla vel purus. Fusce non lectus. Mauris pulvinar. Curabitur eget eros. Nunc ultrices, risus vitae adipiscing scelerisque, quam mi auctor lacus, non pellentesque augue sapien a magna. Etiam rutrum posuere tortor. Mauris rhoncus sagittis dolor. Donec sed quam. Vivamus vel diam id massa adipiscing bibendum. Suspendisse potenti. Integer arcu est, adipiscing sit amet, convallis eu, sollicitudin tincidunt, quam. -

    -

    - Etiam ligula lorem, imperdiet ac, luctus eget, ultrices at, odio. Vivamus malesuada, justo eu adipiscing semper, nisi dui tempus magna, quis ultrices nunc tellus id massa. Nullam lobortis auctor sapien. Quisque non nulla. Donec lobortis pellentesque nisl. Sed lacus sapien, viverra vitae, blandit ut, fermentum quis, leo. Morbi augue turpis, hendrerit non, feugiat vel, laoreet sed, est. Nunc velit. Praesent lobortis. Integer enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur faucibus lacus ac ante. Donec odio odio, tincidunt a, egestas nec, scelerisque nec, dui. Cras sollicitudin. Donec lacus enim, mollis sit amet, interdum quis, euismod et, nulla. Nunc sit amet dui eu magna dapibus mollis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla facilisi. -

    -

    - In hac habitasse platea dictumst. Nunc neque urna, dapibus ut, tristique ut, bibendum ac, felis. Donec dictum est ut dolor. Etiam accumsan, velit sit amet blandit vestibulum, turpis quam hendrerit risus, vel interdum eros orci in nunc. Curabitur tellus sapien, rutrum ac, euismod ac, malesuada nec, pede. Proin sit amet ipsum. Praesent quam nisl, adipiscing nec, tristique eget, fermentum sed, est. Praesent ac est sit amet orci facilisis placerat. Sed consequat, est sit amet consectetuer viverra, risus urna porttitor tellus, ut convallis nibh libero in lectus. Pellentesque molestie, erat non vehicula pretium, turpis nisi eleifend eros, sed scelerisque tortor odio non tellus. Nunc leo tellus, faucibus vitae, placerat a, accumsan vel, arcu. In et orci. Ut tristique euismod nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed nulla nunc, placerat vitae, pellentesque non, interdum non, sapien. Quisque faucibus, eros sed venenatis sagittis, leo risus rhoncus risus, in pretium sem purus a lacus. Aliquam aliquam leo et diam. - -

    -

    - Nulla sagittis diam. Phasellus vitae enim tristique libero molestie tristique. Nam mauris sem, elementum nec, cursus in, fringilla ac, neque. Nunc metus nisi, dictum vel, vulputate quis, porttitor bibendum, tortor. Vestibulum vehicula. Nulla facilisi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla ac magna sed purus ultricies euismod. Aliquam dictum. Sed mauris. Suspendisse justo. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi purus lorem, auctor non, porta ac, vehicula vel, orci. Morbi pharetra massa nec leo. Maecenas et mauris. Aliquam porttitor tincidunt nulla. Vestibulum pede. -

    -

    - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque consequat risus cursus ipsum. Etiam libero. Integer vel mauris. Donec vulputate. In ut augue vitae nibh lobortis tempor. Aliquam hendrerit quam. Phasellus sed orci. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut sed urna. Donec nunc urna, porttitor a, feugiat pellentesque, varius id, justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla facilisi. Sed sollicitudin. Integer enim. Aenean sollicitudin. -

    -

    - Integer lorem turpis, dapibus sed, vulputate nec, volutpat a, sem. Sed malesuada laoreet lorem. Duis mauris ipsum, fringilla nec, tristique vel, imperdiet vel, neque. Nulla vel purus. Fusce non lectus. Mauris pulvinar. Curabitur eget eros. Nunc ultrices, risus vitae adipiscing scelerisque, quam mi auctor lacus, non pellentesque augue sapien a magna. Etiam rutrum posuere tortor. Mauris rhoncus sagittis dolor. Donec sed quam. Vivamus vel diam id massa adipiscing bibendum. Suspendisse potenti. Integer arcu est, adipiscing sit amet, convallis eu, sollicitudin tincidunt, quam. -

    -

    - Etiam ligula lorem, imperdiet ac, luctus eget, ultrices at, odio. Vivamus malesuada, justo eu adipiscing semper, nisi dui tempus magna, quis ultrices nunc tellus id massa. Nullam lobortis auctor sapien. Quisque non nulla. Donec lobortis pellentesque nisl. Sed lacus sapien, viverra vitae, blandit ut, fermentum quis, leo. Morbi augue turpis, hendrerit non, feugiat vel, laoreet sed, est. Nunc velit. Praesent lobortis. Integer enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur faucibus lacus ac ante. Donec odio odio, tincidunt a, egestas nec, scelerisque nec, dui. Cras sollicitudin. Donec lacus enim, mollis sit amet, interdum quis, euismod et, nulla. Nunc sit amet dui eu magna dapibus mollis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla facilisi. -

    -

    - In hac habitasse platea dictumst. Nunc neque urna, dapibus ut, tristique ut, bibendum ac, felis. Donec dictum est ut dolor. Etiam accumsan, velit sit amet blandit vestibulum, turpis quam hendrerit risus, vel interdum eros orci in nunc. Curabitur tellus sapien, rutrum ac, euismod ac, malesuada nec, pede. Proin sit amet ipsum. Praesent quam nisl, adipiscing nec, tristique eget, fermentum sed, est. Praesent ac est sit amet orci facilisis placerat. Sed consequat, est sit amet consectetuer viverra, risus urna porttitor tellus, ut convallis nibh libero in lectus. Pellentesque molestie, erat non vehicula pretium, turpis nisi eleifend eros, sed scelerisque tortor odio non tellus. Nunc leo tellus, faucibus vitae, placerat a, accumsan vel, arcu. In et orci. Ut tristique euismod nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed nulla nunc, placerat vitae, pellentesque non, interdum non, sapien. Quisque faucibus, eros sed venenatis sagittis, leo risus rhoncus risus, in pretium sem purus a lacus. Aliquam aliquam leo et diam. - -

    -

    - Nulla sagittis diam. Phasellus vitae enim tristique libero molestie tristique. Nam mauris sem, elementum nec, cursus in, fringilla ac, neque. Nunc metus nisi, dictum vel, vulputate quis, porttitor bibendum, tortor. Vestibulum vehicula. Nulla facilisi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla ac magna sed purus ultricies euismod. Aliquam dictum. Sed mauris. Suspendisse justo. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi purus lorem, auctor non, porta ac, vehicula vel, orci. Morbi pharetra massa nec leo. Maecenas et mauris. Aliquam porttitor tincidunt nulla. Vestibulum pede. -

    -

    - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque consequat risus cursus ipsum. Etiam libero. Integer vel mauris. Donec vulputate. In ut augue vitae nibh lobortis tempor. Aliquam hendrerit quam. Phasellus sed orci. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut sed urna. Donec nunc urna, porttitor a, feugiat pellentesque, varius id, justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla facilisi. Sed sollicitudin. Integer enim. Aenean sollicitudin. -

    -

    - Integer lorem turpis, dapibus sed, vulputate nec, volutpat a, sem. Sed malesuada laoreet lorem. Duis mauris ipsum, fringilla nec, tristique vel, imperdiet vel, neque. Nulla vel purus. Fusce non lectus. Mauris pulvinar. Curabitur eget eros. Nunc ultrices, risus vitae adipiscing scelerisque, quam mi auctor lacus, non pellentesque augue sapien a magna. Etiam rutrum posuere tortor. Mauris rhoncus sagittis dolor. Donec sed quam. Vivamus vel diam id massa adipiscing bibendum. Suspendisse potenti. Integer arcu est, adipiscing sit amet, convallis eu, sollicitudin tincidunt, quam. -

    -

    - Etiam ligula lorem, imperdiet ac, luctus eget, ultrices at, odio. Vivamus malesuada, justo eu adipiscing semper, nisi dui tempus magna, quis ultrices nunc tellus id massa. Nullam lobortis auctor sapien. Quisque non nulla. Donec lobortis pellentesque nisl. Sed lacus sapien, viverra vitae, blandit ut, fermentum quis, leo. Morbi augue turpis, hendrerit non, feugiat vel, laoreet sed, est. Nunc velit. Praesent lobortis. Integer enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur faucibus lacus ac ante. Donec odio odio, tincidunt a, egestas nec, scelerisque nec, dui. Cras sollicitudin. Donec lacus enim, mollis sit amet, interdum quis, euismod et, nulla. Nunc sit amet dui eu magna dapibus mollis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla facilisi. -

    -

    - In hac habitasse platea dictumst. Nunc neque urna, dapibus ut, tristique ut, bibendum ac, felis. Donec dictum est ut dolor. Etiam accumsan, velit sit amet blandit vestibulum, turpis quam hendrerit risus, vel interdum eros orci in nunc. Curabitur tellus sapien, rutrum ac, euismod ac, malesuada nec, pede. Proin sit amet ipsum. Praesent quam nisl, adipiscing nec, tristique eget, fermentum sed, est. Praesent ac est sit amet orci facilisis placerat. Sed consequat, est sit amet consectetuer viverra, risus urna porttitor tellus, ut convallis nibh libero in lectus. Pellentesque molestie, erat non vehicula pretium, turpis nisi eleifend eros, sed scelerisque tortor odio non tellus. Nunc leo tellus, faucibus vitae, placerat a, accumsan vel, arcu. In et orci. Ut tristique euismod nibh. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Sed nulla nunc, placerat vitae, pellentesque non, interdum non, sapien. Quisque faucibus, eros sed venenatis sagittis, leo risus rhoncus risus, in pretium sem purus a lacus. Aliquam aliquam leo et diam. - -

    -

    - Nulla sagittis diam. Phasellus vitae enim tristique libero molestie tristique. Nam mauris sem, elementum nec, cursus in, fringilla ac, neque. Nunc metus nisi, dictum vel, vulputate quis, porttitor bibendum, tortor. Vestibulum vehicula. Nulla facilisi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla ac magna sed purus ultricies euismod. Aliquam dictum. Sed mauris. Suspendisse justo. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi purus lorem, auctor non, porta ac, vehicula vel, orci. Morbi pharetra massa nec leo. Maecenas et mauris. Aliquam porttitor tincidunt nulla. Vestibulum pede. -

    - - -
    -

    Absolute test

    -
    - test image -
    - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -
    - - - - - diff --git a/view/js/cropper/tests/example-CSS-Float.htm b/view/js/cropper/tests/example-CSS-Float.htm deleted file mode 100644 index 3dbeeab4b..000000000 --- a/view/js/cropper/tests/example-CSS-Float.htm +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - CSS - Float test - - - - - - - - - - -

    Test page with floating wrapper

    -

    - Some test content before the image -

    - -
    -

    Float test

    -
    - test image -
    - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -
    - - - - - diff --git a/view/js/cropper/tests/example-CSS-Relative.htm b/view/js/cropper/tests/example-CSS-Relative.htm deleted file mode 100644 index ecad1341a..000000000 --- a/view/js/cropper/tests/example-CSS-Relative.htm +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - CSS - Relative test - - - - - - - - - - -

    Test page with relatively positioned wrapper

    -

    - Some test content before the image -

    - -
    -

    Relative test

    -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -
    - - - - - diff --git a/view/js/cropper/tests/example-CoordsOnLoad.htm b/view/js/cropper/tests/example-CoordsOnLoad.htm deleted file mode 100644 index c14289c2d..000000000 --- a/view/js/cropper/tests/example-CoordsOnLoad.htm +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - Loading & displaying co-ordinates of crop area on attachment test - - - - - - - - - - -

    Loading & displaying co-ordinates of crop area on attachment test

    -

    - Some test content before the image -

    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-CoordsOnLoadWithRatio.htm b/view/js/cropper/tests/example-CoordsOnLoadWithRatio.htm deleted file mode 100644 index 9ba02da11..000000000 --- a/view/js/cropper/tests/example-CoordsOnLoadWithRatio.htm +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - Loading & displaying co-ordinates (with ratio) of crop area on attachment test< - - - - - - - - - - -

    Loading & displaying co-ordinates (with ratio) of crop area on attachment test

    -

    - Some test content before the image -

    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-Dimensions.htm b/view/js/cropper/tests/example-Dimensions.htm deleted file mode 100644 index 10e5ba26c..000000000 --- a/view/js/cropper/tests/example-Dimensions.htm +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - Different dimensions test - - - - - - - - - - -

    Multiple dimensions tests

    -

    - Test of applying different dimension restrictions to the cropper -

    - - -
    - Set the cropper with the following dimension restrictions: -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - -
    - - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-DynamicImage.htm b/view/js/cropper/tests/example-DynamicImage.htm deleted file mode 100644 index 08240bb63..000000000 --- a/view/js/cropper/tests/example-DynamicImage.htm +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - Dynamic image test - - - - - - - - - - -

    Dynamic image test

    -

    - Test of dynamically changing images or removing & re-applying the cropper -

    - -
    - test image -
    - -

    - - -

    - -

    - - -

    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-FixedRatio.htm b/view/js/cropper/tests/example-FixedRatio.htm deleted file mode 100644 index 8d196c15c..000000000 --- a/view/js/cropper/tests/example-FixedRatio.htm +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - Fixed ratio test - - - - - - - - - - -

    Fixed ratio test

    -

    - Test of applying a fixed ratio to the cropper -

    -
    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-MinimumDimensions.htm b/view/js/cropper/tests/example-MinimumDimensions.htm deleted file mode 100644 index e6d96b393..000000000 --- a/view/js/cropper/tests/example-MinimumDimensions.htm +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - Min dimensions test - - - - - - - - - - -

    Minimum (both axes ) dimension test

    -

    - Test of applying a minimum dimension to both axes to the cropper -

    -
    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-MinimumWidth.htm b/view/js/cropper/tests/example-MinimumWidth.htm deleted file mode 100644 index ec5d69667..000000000 --- a/view/js/cropper/tests/example-MinimumWidth.htm +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - Min (single axis) dimensions test - - - - - - - - - - -

    Minimum (single axis) dimension test

    -

    - Test of applying a minimum dimension to only one axis (width in this case) to the cropper -

    -
    -

    - -
    - test image -
    - - -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    - - - - - diff --git a/view/js/cropper/tests/example-Preview.htm b/view/js/cropper/tests/example-Preview.htm deleted file mode 100644 index 51bf260d3..000000000 --- a/view/js/cropper/tests/example-Preview.htm +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - -

    - -
    - test image -
    - -
    - -
    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -

    - - -

    -
    - - - - - diff --git a/view/js/cropper/tests/poppy.jpg b/view/js/cropper/tests/poppy.jpg deleted file mode 100644 index 1f6498584473b632b707c83ec751499878266915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18338 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 diff --git a/view/js/cropper/tests/staticHTMLStructure.htm b/view/js/cropper/tests/staticHTMLStructure.htm deleted file mode 100644 index ddb99278e..000000000 --- a/view/js/cropper/tests/staticHTMLStructure.htm +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - - - -

    - - -

    - test image -
    -
    -
    - - -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -

    Preview:

    -
    - test image -
    -
    - - - - diff --git a/view/templates/cropbody.tpl b/view/templates/cropbody.tpl index 4cf030bc9..5fedfd0df 100644 --- a/view/templates/cropbody.tpl +++ b/view/templates/cropbody.tpl @@ -1,58 +1,54 @@

    {{$title}}

    -{{$desc}} + {{$desc}}

    +
    -{{$title}} + {{$title}}
    +
    -
    +
    - + - - - - - - - - + + + + + + + + -
    - -
    +
    + +
    diff --git a/view/templates/crophead.tpl b/view/templates/crophead.tpl index 033f2e410..d6fc84567 100644 --- a/view/templates/crophead.tpl +++ b/view/templates/crophead.tpl @@ -1,4 +1,2 @@ - - - - + + diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 728a55b9c..84ea6db94 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -726,6 +726,9 @@ input#dfrn-url { height:175px; padding: 12px; } +#profile-photo-wrapper.crop-preview img { + padding: 0; +} #profile-edit-profile-name-label, #profile-edit-name-label, diff --git a/view/theme/frio/css/style.css b/view/theme/frio/css/style.css index 99fde3309..312bee263 100644 --- a/view/theme/frio/css/style.css +++ b/view/theme/frio/css/style.css @@ -1087,6 +1087,9 @@ color: rgba(255,255,255,.85); aside .vcard #profile-photo-wrapper:hover .tool .action { opacity: 1; } +aside .vcard #profile-photo-wrapper.crop-preview { + padding: 0; +} aside .vcard .profile-header { margin-bottom: 20px; } From 51841ab148949100f27cbe51e029e293564838c1 Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Thu, 29 Mar 2018 18:06:56 +0200 Subject: [PATCH 195/201] cropperjs: fix indention --- view/templates/cropbody.tpl | 38 ++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/view/templates/cropbody.tpl b/view/templates/cropbody.tpl index 5fedfd0df..144277310 100644 --- a/view/templates/cropbody.tpl +++ b/view/templates/cropbody.tpl @@ -13,25 +13,25 @@ From 4efa2109ee0892e926f5d1f43ef4134692c6b3ec Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Thu, 29 Mar 2018 18:39:26 +0200 Subject: [PATCH 196/201] cropperjs: use npm-asset for composer --- composer.json | 13 +---- composer.lock | 107 ++++++++++++++++++++++++++++++++---- view/templates/crophead.tpl | 4 +- 3 files changed, 98 insertions(+), 26 deletions(-) diff --git a/composer.json b/composer.json index 9cef6f379..52b4f2c86 100644 --- a/composer.json +++ b/composer.json @@ -35,23 +35,12 @@ "npm-asset/jquery-datetimepicker": "^2.4.0", "npm-asset/jgrowl": "^1.4", "npm-asset/fullcalendar": "^3.0.1", - "fengyuanchen/cropperjs": "1.2.2" + "npm-asset/cropperjs": "1.2.2" }, "repositories": [ { "type": "vcs", "url": "https://github.com/pear/Text_Highlighter" - }, - { - "type": "package", - "package": { - "name": "fengyuanchen/cropperjs", - "version": "1.2.2", - "dist": { - "url": "https://github.com/fengyuanchen/cropperjs/archive/v1.2.2.zip", - "type": "zip" - } - } } ], "autoload": { diff --git a/composer.lock b/composer.lock index 5d15aef12..4aeae3a72 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "c665c4d63bd0317db0c1992ad7c6c7a1", + "content-hash": "12b8df66213734281765cb6e2c5a786e", "packages": [ { "name": "asika/simple-console", @@ -225,17 +225,6 @@ ], "time": "2015-08-05T01:03:42+00:00" }, - { - "name": "fengyuanchen/cropperjs", - "version": "1.2.2", - "dist": { - "type": "zip", - "url": "https://github.com/fengyuanchen/cropperjs/archive/v1.2.2.zip", - "reference": null, - "shasum": null - }, - "type": "library" - }, { "name": "fxp/composer-asset-plugin", "version": "v1.4.2", @@ -671,6 +660,100 @@ ], "time": "2018-02-26T19:39:55+00:00" }, + { + "name": "npm-asset/cropperjs", + "version": "1.2.2", + "dist": { + "type": "tar", + "url": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.2.2.tgz", + "reference": null, + "shasum": "30dc7a7ce872155b23a33bd10ad4c76c0d613f55" + }, + "require-dev": { + "npm-asset/babel-core": ">=6.26.0,<7.0.0", + "npm-asset/babel-plugin-external-helpers": ">=6.22.0,<7.0.0", + "npm-asset/babel-preset-env": ">=1.6.1,<2.0.0", + "npm-asset/cpy-cli": ">=1.0.1,<2.0.0", + "npm-asset/cssnano": ">=3.10.0,<4.0.0", + "npm-asset/del-cli": ">=1.1.0,<2.0.0", + "npm-asset/eslint": ">=4.14.0,<5.0.0", + "npm-asset/eslint-config-airbnb-base": ">=12.1.0,<13.0.0", + "npm-asset/eslint-plugin-import": ">=2.8.0,<3.0.0", + "npm-asset/node-qunit-phantomjs": ">=2.0.0,<3.0.0", + "npm-asset/npm-run-all": ">=4.1.2,<5.0.0", + "npm-asset/postcss-cli": ">=4.1.1,<5.0.0", + "npm-asset/postcss-cssnext": ">=3.0.2,<4.0.0", + "npm-asset/postcss-header": ">=1.0.0,<2.0.0", + "npm-asset/postcss-url": ">=7.3.0,<8.0.0", + "npm-asset/rollup": ">=0.53.3,<0.54.0", + "npm-asset/rollup-plugin-babel": ">=3.0.3,<4.0.0", + "npm-asset/rollup-watch": ">=4.3.1,<5.0.0", + "npm-asset/stylefmt": ">=6.0.0,<7.0.0", + "npm-asset/uglify-js": ">=3.3.4,<4.0.0" + }, + "type": "npm-asset-library", + "extra": { + "npm-asset-bugs": { + "url": "https://github.com/fengyuanchen/cropperjs/issues" + }, + "npm-asset-files": [ + "src", + "dist" + ], + "npm-asset-main": "dist/cropper.common.js", + "npm-asset-directories": [], + "npm-asset-repository": { + "type": "git", + "url": "git+https://github.com/fengyuanchen/cropperjs.git" + }, + "npm-asset-scripts": { + "build": "npm run build:css && npm run build:js", + "build:css": "postcss src/css/cropper.css -o dist/cropper.css --no-map", + "build:js": "rollup -c", + "clear": "del-cli dist", + "compress": "npm run compress:css && npm run compress:js", + "compress:css": "postcss dist/cropper.css -u cssnano -o dist/cropper.min.css --no-map", + "compress:js": "uglifyjs dist/cropper.js -o dist/cropper.min.js -c -m --comments /^!/", + "copy": "cpy dist/cropper.css docs/css", + "lint": "eslint src/js --fix", + "release": "npm run clear && npm run lint && npm run build && npm run compress && npm run copy && npm test", + "start": "npm-run-all --parallel watch:*", + "test": "node-qunit-phantomjs test/index.html --timeout 10", + "watch:css": "postcss src/css/cropper.css -o docs/css/cropper.css -m -w", + "watch:js": "rollup -c -m -w" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chen Fengyuan", + "url": "http://chenfengyuan.com" + } + ], + "description": "JavaScript image cropper.", + "homepage": "https://fengyuanchen.github.io/cropperjs", + "keywords": [ + "crop", + "cropper", + "cropper.js", + "cropperjs", + "cropping", + "css", + "development", + "front-end", + "html", + "image", + "javascript", + "move", + "rotate", + "scale", + "web", + "zoom" + ], + "time": "2018-01-03T13:39:39+00:00" + }, { "name": "npm-asset/fullcalendar", "version": "3.9.0", diff --git a/view/templates/crophead.tpl b/view/templates/crophead.tpl index d6fc84567..3fd15796e 100644 --- a/view/templates/crophead.tpl +++ b/view/templates/crophead.tpl @@ -1,2 +1,2 @@ - - + + From 515ef66c52178a73af85716a3a3019c0cf7936f5 Mon Sep 17 00:00:00 2001 From: rabuzarus Date: Thu, 29 Mar 2018 20:30:26 +0200 Subject: [PATCH 197/201] cropperjs: fix composer.lock --- composer.lock | 102 ++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 54 deletions(-) diff --git a/composer.lock b/composer.lock index 4aeae3a72..72417f8e3 100644 --- a/composer.lock +++ b/composer.lock @@ -41,16 +41,16 @@ }, { "name": "bower-asset/Chart-js", - "version": "v2.7.2", + "version": "v2.7.1", "source": { "type": "git", "url": "https://github.com/chartjs/Chart.js.git", - "reference": "98f104cdd03617f1300b417b3d60c23d4e3e3403" + "reference": "0fead21939b92c15093c1b7d5ee2627fb5900fff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/chartjs/Chart.js/zipball/98f104cdd03617f1300b417b3d60c23d4e3e3403", - "reference": "98f104cdd03617f1300b417b3d60c23d4e3e3403", + "url": "https://api.github.com/repos/chartjs/Chart.js/zipball/0fead21939b92c15093c1b7d5ee2627fb5900fff", + "reference": "0fead21939b92c15093c1b7d5ee2627fb5900fff", "shasum": "" }, "type": "bower-asset-library", @@ -69,7 +69,7 @@ "MIT" ], "description": "Simple HTML5 charts using the canvas element.", - "time": "2018-03-01T21:45:21+00:00" + "time": "2017-10-28T15:01:52+00:00" }, { "name": "bower-asset/base64", @@ -286,16 +286,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.3.2", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90" + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/68d0ea14d5a3f42a20e87632a5f84931e2709c90", - "reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", "shasum": "" }, "require": { @@ -305,7 +305,7 @@ }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4", + "phpunit/phpunit": "^4.0 || ^5.0", "psr/log": "^1.0" }, "suggest": { @@ -314,7 +314,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.3-dev" + "dev-master": "6.2-dev" } }, "autoload": { @@ -347,7 +347,7 @@ "rest", "web service" ], - "time": "2018-03-26T16:33:04+00:00" + "time": "2017-06-22T18:50:49+00:00" }, { "name": "guzzlehttp/promises", @@ -610,16 +610,16 @@ }, { "name": "mobiledetect/mobiledetectlib", - "version": "2.8.31", + "version": "2.8.30", "source": { "type": "git", "url": "https://github.com/serbanghita/Mobile-Detect.git", - "reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37" + "reference": "5500bbbf312fe77ef0c7223858dad84fe49ee0c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/adb882ea3b9d154f087ecb2c333180dad6f4dd37", - "reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37", + "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/5500bbbf312fe77ef0c7223858dad84fe49ee0c3", + "reference": "5500bbbf312fe77ef0c7223858dad84fe49ee0c3", "shasum": "" }, "require": { @@ -658,7 +658,7 @@ "mobile detector", "php mobile detect" ], - "time": "2018-02-26T19:39:55+00:00" + "time": "2017-12-18T10:38:51+00:00" }, { "name": "npm-asset/cropperjs", @@ -756,27 +756,27 @@ }, { "name": "npm-asset/fullcalendar", - "version": "3.9.0", + "version": "3.8.2", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/fullcalendar/-/fullcalendar-3.9.0.tgz", + "url": "https://registry.npmjs.org/fullcalendar/-/fullcalendar-3.8.2.tgz", "reference": null, - "shasum": "b608a9989f3416f0b1d526c6bdfeeaf2ac79eda5" + "shasum": "ef7dc77b89134bbe6163e51136f7a1f8bfc1d807" }, "require": { "npm-asset/jquery": ">=2,<4.0", - "npm-asset/moment": ">=2.20.1,<3.0.0" + "npm-asset/moment": ">=2.9.0,<3.0.0" }, "require-dev": { - "npm-asset/awesome-typescript-loader": ">=3.5.0,<4.0.0", + "npm-asset/awesome-typescript-loader": ">=3.3.0,<4.0.0", "npm-asset/bootstrap": ">=3.3.7,<4.0.0", "npm-asset/components-jqueryui": "dev-github:components/jqueryui", - "npm-asset/css-loader": ">=0.28.10,<0.29.0", + "npm-asset/css-loader": ">=0.28.7,<0.29.0", "npm-asset/del": ">=2.2.1,<3.0.0", "npm-asset/dts-generator": ">=2.1.0,<3.0.0", - "npm-asset/eslint": ">=4.18.2,<5.0.0", - "npm-asset/eslint-config-standard": ">=11.0.0,<12.0.0", - "npm-asset/eslint-plugin-import": ">=2.9.0,<3.0.0", + "npm-asset/eslint": ">=4.13.1,<5.0.0", + "npm-asset/eslint-config-standard": ">=11.0.0-beta.0,<12.0.0", + "npm-asset/eslint-plugin-import": ">=2.8.0,<3.0.0", "npm-asset/eslint-plugin-node": ">=5.2.1,<6.0.0", "npm-asset/eslint-plugin-promise": ">=3.6.0,<4.0.0", "npm-asset/eslint-plugin-standard": ">=3.0.1,<4.0.0", @@ -789,7 +789,7 @@ "npm-asset/gulp-modify-file": ">=1.0.0,<2.0.0", "npm-asset/gulp-rename": ">=1.2.2,<2.0.0", "npm-asset/gulp-shell": ">=0.6.5,<0.7.0", - "npm-asset/gulp-tslint": ">=8.1.3,<9.0.0", + "npm-asset/gulp-tslint": ">=8.1.2,<9.0.0", "npm-asset/gulp-uglify": ">=2.0.0,<3.0.0", "npm-asset/gulp-util": ">=3.0.7,<4.0.0", "npm-asset/gulp-watch": ">=4.3.11,<5.0.0", @@ -808,14 +808,14 @@ "npm-asset/native-promise-only": ">=0.8.1,<0.9.0", "npm-asset/node-sass": ">=4.7.2,<5.0.0", "npm-asset/phantomjs-prebuilt": ">=2.1.7,<3.0.0", - "npm-asset/sass-loader": ">=6.0.7,<7.0.0", + "npm-asset/sass-loader": ">=6.0.6,<7.0.0", "npm-asset/tslib": ">=1.8.0,<2.0.0", "npm-asset/tslint": ">=5.8.0,<6.0.0", "npm-asset/tslint-config-standard": ">=7.0.0,<8.0.0", "npm-asset/types--jquery": "2.0.47", - "npm-asset/typescript": ">=2.7.2,<3.0.0", - "npm-asset/webpack": ">=3.11.0,<4.0.0", - "npm-asset/webpack-stream": ">=4.0.2,<5.0.0", + "npm-asset/typescript": ">=2.6.2,<3.0.0", + "npm-asset/webpack": ">=3.8.1,<4.0.0", + "npm-asset/webpack-stream": ">=4.0.0,<5.0.0", "npm-asset/yargs": ">=4.8.1,<5.0.0" }, "type": "npm-asset-library", @@ -864,7 +864,7 @@ "full-sized", "jquery-plugin" ], - "time": "2018-03-05T03:30:23+00:00" + "time": "2018-01-30T23:49:01+00:00" }, { "name": "npm-asset/jgrowl", @@ -1027,12 +1027,12 @@ }, { "name": "npm-asset/jquery-datetimepicker", - "version": "2.5.20", + "version": "2.5.17", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/jquery-datetimepicker/-/jquery-datetimepicker-2.5.20.tgz", + "url": "https://registry.npmjs.org/jquery-datetimepicker/-/jquery-datetimepicker-2.5.17.tgz", "reference": null, - "shasum": "687d6204b90b03dc93f725f8df036e1d061f37ac" + "shasum": "8857a631f248081d4072563bde40fa8c17e407b1" }, "require": { "npm-asset/jquery": ">=1.7.2", @@ -1040,14 +1040,8 @@ "npm-asset/php-date-formatter": ">=1.3.4,<2.0.0" }, "require-dev": { - "npm-asset/chai": ">=4.1.2,<5.0.0", "npm-asset/concat": "dev-github:azer/concat", "npm-asset/concat-cli": ">=4.0.0,<5.0.0", - "npm-asset/karma": ">=2.0.0,<3.0.0", - "npm-asset/karma-chai": ">=0.1.0,<0.2.0", - "npm-asset/karma-firefox-launcher": ">=1.1.0,<2.0.0", - "npm-asset/karma-mocha": ">=1.3.0,<2.0.0", - "npm-asset/mocha": ">=5.0.4,<6.0.0", "npm-asset/uglifycss": ">=0.0.27,<0.0.28", "npm-asset/uglifyjs": ">=2.4.10,<3.0.0" }, @@ -1063,13 +1057,13 @@ "url": "git+https://github.com/xdan/datetimepicker.git" }, "npm-asset-scripts": { - "test": "karma start --browsers Firefox karma.conf.js --single-run", + "test": "echo \"Error: no test specified\" && exit 1", "concat": "concat-cli -f node_modules/php-date-formatter/js/php-date-formatter.min.js jquery.datetimepicker.js node_modules/jquery-mousewheel/jquery.mousewheel.js -o build/jquery.datetimepicker.full.js", "minify": "uglifyjs jquery.datetimepicker.js -c -m -o build/jquery.datetimepicker.min.js && uglifycss jquery.datetimepicker.css > build/jquery.datetimepicker.min.css", "minifyconcat": "uglifyjs build/jquery.datetimepicker.full.js -c -m -o build/jquery.datetimepicker.full.min.js", "github": "git add --all && git commit -m \"New version %npm_package_version% \" && git tag %npm_package_version% && git push --tags origin HEAD:master && npm publish", "build": "npm run minify && npm run concat && npm run minifyconcat", - "public": "npm run test && npm version patch --no-git-tag-version && npm run build && npm run github" + "public": "npm version patch --no-git-tag-version && npm run build && npm run github" } }, "license": [ @@ -1079,7 +1073,7 @@ { "name": "Chupurnov", "email": "chupurnov@gmail.com", - "url": "https://xdsoft.net/" + "url": "http://xdsoft.net/" } ], "description": "jQuery Plugin DateTimePicker it is DatePicker and TimePicker in one", @@ -1093,7 +1087,7 @@ "time", "timepicker" ], - "time": "2018-03-21T16:26:39+00:00" + "time": "2018-01-23T05:56:50+00:00" }, { "name": "npm-asset/jquery-mousewheel", @@ -1152,12 +1146,12 @@ }, { "name": "npm-asset/moment", - "version": "2.21.0", + "version": "2.20.1", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/moment/-/moment-2.21.0.tgz", + "url": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", "reference": null, - "shasum": "2a114b51d2a6ec9e6d83cf803f838a878d8a023a" + "shasum": "d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" }, "require-dev": { "npm-asset/benchmark": "dev-default|*", @@ -1260,7 +1254,7 @@ "time", "validate" ], - "time": "2018-03-02T20:41:10+00:00" + "time": "2017-12-19T04:44:18+00:00" }, { "name": "npm-asset/php-date-formatter", @@ -1472,16 +1466,16 @@ }, { "name": "paragonie/sodium_compat", - "version": "v1.6.1", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "9857e17bf9c1464485d8cc804eb13f2bcddc4cf0" + "reference": "1f6e5682eff4a5a6a394b14331a1904f1740e432" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/9857e17bf9c1464485d8cc804eb13f2bcddc4cf0", - "reference": "9857e17bf9c1464485d8cc804eb13f2bcddc4cf0", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/1f6e5682eff4a5a6a394b14331a1904f1740e432", + "reference": "1f6e5682eff4a5a6a394b14331a1904f1740e432", "shasum": "" }, "require": { @@ -1550,7 +1544,7 @@ "secret-key cryptography", "side-channel resistant" ], - "time": "2018-03-21T17:08:08+00:00" + "time": "2018-02-15T05:50:20+00:00" }, { "name": "pear/console_getopt", From 586b0b6e5724c79c17f57e04897a1c7d7dead6f6 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 29 Mar 2018 19:29:09 -0400 Subject: [PATCH 198/201] Add bash to text_highlight language list --- include/text.php | 4 ++++ src/Content/Text/BBCode.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/text.php b/include/text.php index 67ce7e65e..311422c57 100644 --- a/include/text.php +++ b/include/text.php @@ -2030,6 +2030,10 @@ function text_highlight($s, $lang) { $lang = 'javascript'; } + if ($lang === 'bash') { + $lang = 'sh'; + } + // @TODO: Replace Text_Highlighter_Renderer_Html by scrivo/highlight.php // Autoload the library to make constants available diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 7d1c42976..d545492bb 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1294,7 +1294,7 @@ class BBCode extends BaseObject { if (in_array(strtolower($match[1]), ['php', 'css', 'mysql', 'sql', 'abap', 'diff', 'html', 'perl', 'ruby', - 'vbscript', 'avrc', 'dtd', 'java', 'xml', 'cpp', 'python', 'javascript', 'js', 'sh']) + 'vbscript', 'avrc', 'dtd', 'java', 'xml', 'cpp', 'python', 'javascript', 'js', 'sh', 'bash']) ) { return text_highlight($match[2], strtolower($match[1])); } From 80b6dc5787a6da176f1906132e8b520b5aa2db43 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 29 Mar 2018 19:29:36 -0400 Subject: [PATCH 199/201] Add fallback to regular code if language doesn't exist --- src/Content/Text/BBCode.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index d545492bb..5b0aa2cff 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1292,13 +1292,17 @@ class BBCode extends BaseObject private static function textHighlightCallback($match) { + // Fallback in case the language doesn't exist + $return = '[code]' . $match[2] . '[/code]'; + if (in_array(strtolower($match[1]), ['php', 'css', 'mysql', 'sql', 'abap', 'diff', 'html', 'perl', 'ruby', 'vbscript', 'avrc', 'dtd', 'java', 'xml', 'cpp', 'python', 'javascript', 'js', 'sh', 'bash']) ) { - return text_highlight($match[2], strtolower($match[1])); + $return = text_highlight($match[2], strtolower($match[1])); } - return $match[0]; + + return $return; } /** From 3a58fe48bd915da6d3f3d2a40317a5b0b43b4baa Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 29 Mar 2018 23:28:48 -0400 Subject: [PATCH 200/201] Fix formatting in mod/follow --- mod/follow.php | 132 ++++++++++++++++++++++++------------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/mod/follow.php b/mod/follow.php index 1dc20d16d..639fa0686 100644 --- a/mod/follow.php +++ b/mod/follow.php @@ -11,10 +11,10 @@ use Friendica\Model\Profile; use Friendica\Network\Probe; use Friendica\Database\DBM; -function follow_post(App $a) { - +function follow_post(App $a) +{ if (!local_user()) { - notice(L10n::t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.')); goaway($_SESSION['return_url']); // NOTREACHED } @@ -29,7 +29,7 @@ function follow_post(App $a) { // Makes the connection request for friendica contacts easier // This is just a precaution if maybe this page is called somewhere directly via POST - $_SESSION["fastlane"] = $url; + $_SESSION['fastlane'] = $url; $result = Contact::createFromProbe($uid, $url, true); @@ -39,19 +39,19 @@ function follow_post(App $a) { } goaway($return_url); } elseif ($result['cid']) { - goaway(System::baseUrl().'/contacts/'.$result['cid']); + goaway(System::baseUrl() . '/contacts/' . $result['cid']); } - info(L10n::t('The contact could not be added.').EOL); + info(L10n::t('The contact could not be added.')); goaway($return_url); // NOTREACHED } -function follow_content(App $a) { - +function follow_content(App $a) +{ if (!local_user()) { - notice(L10n::t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.')); goaway($_SESSION['return_url']); // NOTREACHED } @@ -70,8 +70,8 @@ function follow_content(App $a) { if ($r) { if ($r[0]['pending']) { - notice(L10n::t('You already added this contact.').EOL); - $submit = ""; + notice(L10n::t('You already added this contact.')); + $submit = ''; //goaway($_SESSION['return_url']); // NOTREACHED } @@ -79,104 +79,104 @@ function follow_content(App $a) { $ret = Probe::uri($url); - if (($ret["network"] == NETWORK_DIASPORA) && !Config::get('system', 'diaspora_enabled')) { - notice(L10n::t("Diaspora support isn't enabled. Contact can't be added.") . EOL); - $submit = ""; + if (($ret['network'] == NETWORK_DIASPORA) && !Config::get('system', 'diaspora_enabled')) { + notice(L10n::t("Diaspora support isn't enabled. Contact can't be added.")); + $submit = ''; //goaway($_SESSION['return_url']); // NOTREACHED } - if (($ret["network"] == NETWORK_OSTATUS) && Config::get('system', 'ostatus_disabled')) { - notice(L10n::t("OStatus support is disabled. Contact can't be added.") . EOL); - $submit = ""; + if (($ret['network'] == NETWORK_OSTATUS) && Config::get('system', 'ostatus_disabled')) { + notice(L10n::t("OStatus support is disabled. Contact can't be added.")); + $submit = ''; //goaway($_SESSION['return_url']); // NOTREACHED } - if ($ret["network"] == NETWORK_PHANTOM) { - notice(L10n::t("The network type couldn't be detected. Contact can't be added.") . EOL); - $submit = ""; + if ($ret['network'] == NETWORK_PHANTOM) { + notice(L10n::t("The network type couldn't be detected. Contact can't be added.")); + $submit = ''; //goaway($_SESSION['return_url']); // NOTREACHED } - if ($ret["network"] == NETWORK_MAIL) { - $ret["url"] = $ret["addr"]; + if ($ret['network'] == NETWORK_MAIL) { + $ret['url'] = $ret['addr']; } if (($ret['network'] === NETWORK_DFRN) && !DBM::is_result($r)) { - $request = $ret["request"]; + $request = $ret['request']; $tpl = get_markup_template('dfrn_request.tpl'); } else { - $request = System::baseUrl()."/follow"; + $request = System::baseUrl() . '/follow'; $tpl = get_markup_template('auto_request.tpl'); } $r = q("SELECT `url` FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1", intval($uid)); if (!$r) { - notice(L10n::t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.')); goaway($_SESSION['return_url']); // NOTREACHED } - $myaddr = $r[0]["url"]; + $myaddr = $r[0]['url']; $gcontact_id = 0; // Makes the connection request for friendica contacts easier - $_SESSION["fastlane"] = $ret["url"]; + $_SESSION['fastlane'] = $ret['url']; $r = q("SELECT `id`, `location`, `about`, `keywords` FROM `gcontact` WHERE `nurl` = '%s'", - normalise_link($ret["url"])); + normalise_link($ret['url'])); if (!$r) { - $r = [["location" => "", "about" => "", "keywords" => ""]]; + $r = [['location' => '', 'about' => '', 'keywords' => '']]; } else { - $gcontact_id = $r[0]["id"]; + $gcontact_id = $r[0]['id']; } if ($ret['network'] === NETWORK_DIASPORA) { - $r[0]["location"] = ""; - $r[0]["about"] = ""; + $r[0]['location'] = ''; + $r[0]['about'] = ''; } - $header = L10n::t("Connect/Follow"); + $header = L10n::t('Connect/Follow'); - $o = replace_macros($tpl, [ - '$header' => htmlentities($header), - //'$photo' => proxy_url($ret["photo"], false, PROXY_SIZE_SMALL), - '$desc' => "", - '$pls_answer' => L10n::t('Please answer the following:'), - '$does_know_you' => ['knowyou', L10n::t('Does %s know you?', $ret["name"]), false, '', [L10n::t('No'), L10n::t('Yes')]], - '$add_note' => L10n::t('Add a personal note:'), - '$page_desc' => "", - '$friendica' => "", - '$statusnet' => "", - '$diaspora' => "", - '$diasnote' => "", - '$your_address' => L10n::t('Your Identity Address:'), - '$invite_desc' => "", - '$emailnet' => "", - '$submit' => $submit, - '$cancel' => L10n::t('Cancel'), - '$nickname' => "", - '$name' => $ret["name"], - '$url' => $ret["url"], - '$zrl' => Profile::zrl($ret["url"]), - '$url_label' => L10n::t("Profile URL"), - '$myaddr' => $myaddr, - '$request' => $request, - /*'$location' => Friendica\Content\Text\BBCode::::convert($r[0]["location"]), - '$location_label' => L10n::t("Location:"), - '$about' => Friendica\Content\Text\BBCode::::convert($r[0]["about"], false, false), - '$about_label' => L10n::t("About:"), */ - '$keywords' => $r[0]["keywords"], - '$keywords_label' => L10n::t("Tags:") + $o = replace_macros($tpl, [ + '$header' => htmlentities($header), + //'$photo' => proxy_url($ret['photo'], false, PROXY_SIZE_SMALL), + '$desc' => '', + '$pls_answer' => L10n::t('Please answer the following:'), + '$does_know_you' => ['knowyou', L10n::t('Does %s know you?', $ret['name']), false, '', [L10n::t('No'), L10n::t('Yes')]], + '$add_note' => L10n::t('Add a personal note:'), + '$page_desc' => '', + '$friendica' => '', + '$statusnet' => '', + '$diaspora' => '', + '$diasnote' => '', + '$your_address' => L10n::t('Your Identity Address:'), + '$invite_desc' => '', + '$emailnet' => '', + '$submit' => $submit, + '$cancel' => L10n::t('Cancel'), + '$nickname' => '', + '$name' => $ret['name'], + '$url' => $ret['url'], + '$zrl' => Profile::zrl($ret['url']), + '$url_label' => L10n::t('Profile URL'), + '$myaddr' => $myaddr, + '$request' => $request, + /*'$location' => Friendica\Content\Text\BBCode::::convert($r[0]['location']), + '$location_label'=> L10n::t('Location:'), + '$about' => Friendica\Content\Text\BBCode::::convert($r[0]['about'], false, false), + '$about_label' => L10n::t('About:'),*/ + '$keywords' => $r[0]['keywords'], + '$keywords_label'=> L10n::t('Tags:') ]); - $a->page['aside'] = ""; + $a->page['aside'] = ''; - Profile::load($a, "", 0, Contact::getDetailsByURL($ret["url"]), false); + Profile::load($a, '', 0, Contact::getDetailsByURL($ret['url']), false); if ($gcontact_id <> 0) { $o .= replace_macros(get_markup_template('section_title.tpl'), @@ -184,7 +184,7 @@ function follow_content(App $a) { ); // Show last public posts - $o .= Contact::getPostsFromUrl($ret["url"]); + $o .= Contact::getPostsFromUrl($ret['url']); } return $o; From d13f36938cf5132b822c313eef4f9ed565ecf7b9 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 29 Mar 2018 23:29:41 -0400 Subject: [PATCH 201/201] Suppress error message for non-existing contacts in mod/follow --- mod/follow.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mod/follow.php b/mod/follow.php index 639fa0686..1292d24e3 100644 --- a/mod/follow.php +++ b/mod/follow.php @@ -176,7 +176,10 @@ function follow_content(App $a) $a->page['aside'] = ''; - Profile::load($a, '', 0, Contact::getDetailsByURL($ret['url']), false); + $profiledata = Contact::getDetailsByURL($ret['url']); + if ($profiledata) { + Profile::load($a, '', 0, $profiledata, false); + } if ($gcontact_id <> 0) { $o .= replace_macros(get_markup_template('section_title.tpl'),