ÿØÿà JFIF ÿþ >CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality
ÿÛ C
Server IP : 104.21.29.46 / Your IP : 216.73.216.123 Web Server : Apache System : Linux server1.morocco-tours.com 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64 User : zagoradraa ( 1005) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/include/mysql/server/private/ |
Upload File : |
| Current File : /usr/include/mysql/server/private//item_windowfunc.h |
/*
Copyright (c) 2016, 2020, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#ifndef ITEM_WINDOWFUNC_INCLUDED
#define ITEM_WINDOWFUNC_INCLUDED
#include "item.h"
class Window_spec;
int test_if_group_changed(List<Cached_item> &list);
/* A wrapper around test_if_group_changed */
class Group_bound_tracker
{
public:
Group_bound_tracker(THD *thd, SQL_I_List<ORDER> *list)
{
for (ORDER *curr = list->first; curr; curr=curr->next)
{
Cached_item *tmp= new_Cached_item(thd, curr->item[0], TRUE);
group_fields.push_back(tmp);
}
}
void init()
{
first_check= true;
}
/*
Check if the current row is in a different group than the previous row
this function was called for.
XXX: Side-effect: The new row's group becomes the current row's group.
Returns true if there is a change between the current_group and the cached
value, or if it is the first check after a call to init.
*/
bool check_if_next_group()
{
if (test_if_group_changed(group_fields) > -1 || first_check)
{
first_check= false;
return true;
}
return false;
}
/*
Check if the current row is in a different group than the previous row
check_if_next_group was called for.
Compares the groups without the additional side effect of updating the
current cached values.
*/
int compare_with_cache()
{
List_iterator<Cached_item> li(group_fields);
Cached_item *ptr;
int res;
while ((ptr= li++))
{
if ((res= ptr->cmp_read_only()))
return res;
}
return 0;
}
~Group_bound_tracker()
{
group_fields.delete_elements();
}
private:
List<Cached_item> group_fields;
/*
During the first check_if_next_group, the list of cached_items is not
initialized. The compare function will return that the items match if
the field's value is the same as the Cached_item's default value (0).
This flag makes sure that we always return true during the first check.
XXX This is better to be implemented within test_if_group_changed, but
since it is used in other parts of the codebase, we keep it here for now.
*/
bool first_check;
};
/*
ROW_NUMBER() OVER (...)
@detail
- This is a Window function (not just an aggregate)
- It can be computed by doing one pass over select output, provided
the output is sorted according to the window definition.
*/
class Item_sum_row_number: public Item_sum_int
{
longlong count;
public:
Item_sum_row_number(THD *thd)
: Item_sum_int(thd), count(0) {}
void clear()
{
count= 0;
}
bool add()
{
count++;
return false;
}
void update_field() {}
enum Sumfunctype sum_func() const
{
return ROW_NUMBER_FUNC;
}
longlong val_int()
{
return count;
}
const char*func_name() const
{
return "row_number";
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_row_number>(thd, this); }
};
/*
RANK() OVER (...) Windowing function
@detail
- This is a Window function (not just an aggregate)
- It can be computed by doing one pass over select output, provided
the output is sorted according to the window definition.
The function is defined as:
"The rank of row R is defined as 1 (one) plus the number of rows that
precede R and are not peers of R"
"This implies that if two or more rows are not distinct with respect to
the window ordering, then there will be one or more"
*/
class Item_sum_rank: public Item_sum_int
{
protected:
longlong row_number; // just ROW_NUMBER()
longlong cur_rank; // current value
Group_bound_tracker *peer_tracker;
public:
Item_sum_rank(THD *thd) : Item_sum_int(thd), peer_tracker(NULL) {}
void clear()
{
/* This is called on partition start */
cur_rank= 1;
row_number= 0;
}
bool add();
longlong val_int()
{
return cur_rank;
}
void update_field() {}
/*
void reset_field();
TODO: ^^ what does this do ? It is not called ever?
*/
enum Sumfunctype sum_func () const
{
return RANK_FUNC;
}
const char*func_name() const
{
return "rank";
}
void setup_window_func(THD *thd, Window_spec *window_spec);
void cleanup()
{
if (peer_tracker)
{
delete peer_tracker;
peer_tracker= NULL;
}
Item_sum_int::cleanup();
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_rank>(thd, this); }
};
/*
DENSE_RANK() OVER (...) Windowing function
@detail
- This is a Window function (not just an aggregate)
- It can be computed by doing one pass over select output, provided
the output is sorted according to the window definition.
The function is defined as:
"If DENSE_RANK is specified, then the rank of row R is defined as the
number of rows preceding and including R that are distinct with respect
to the window ordering"
"This implies that there are no gaps in the sequential rank numbering of
rows in each window partition."
*/
class Item_sum_dense_rank: public Item_sum_int
{
longlong dense_rank;
bool first_add;
Group_bound_tracker *peer_tracker;
public:
/*
XXX(cvicentiu) This class could potentially be implemented in the rank
class, with a switch for the DENSE case.
*/
void clear()
{
dense_rank= 0;
first_add= true;
}
bool add();
void update_field() {}
longlong val_int()
{
return dense_rank;
}
Item_sum_dense_rank(THD *thd)
: Item_sum_int(thd), dense_rank(0), first_add(true), peer_tracker(NULL) {}
enum Sumfunctype sum_func () const
{
return DENSE_RANK_FUNC;
}
const char*func_name() const
{
return "dense_rank";
}
void setup_window_func(THD *thd, Window_spec *window_spec);
void cleanup()
{
if (peer_tracker)
{
delete peer_tracker;
peer_tracker= NULL;
}
Item_sum_int::cleanup();
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_dense_rank>(thd, this); }
};
class Item_sum_hybrid_simple : public Item_sum_hybrid
{
public:
Item_sum_hybrid_simple(THD *thd, Item *arg):
Item_sum_hybrid(thd, arg),
value(NULL)
{ }
Item_sum_hybrid_simple(THD *thd, Item *arg1, Item *arg2):
Item_sum_hybrid(thd, arg1, arg2),
value(NULL)
{ }
bool add();
bool fix_fields(THD *, Item **);
bool fix_length_and_dec();
void setup_hybrid(THD *thd, Item *item);
double val_real();
longlong val_int();
my_decimal *val_decimal(my_decimal *);
void reset_field();
String *val_str(String *);
bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate);
void update_field();
Field *create_tmp_field(bool group, TABLE *table);
void clear()
{
value->clear();
null_value= 1;
}
private:
Item_cache *value;
};
/*
This item will remember the first value added to it. It will not update
the value unless it is cleared.
*/
class Item_sum_first_value : public Item_sum_hybrid_simple
{
public:
Item_sum_first_value(THD* thd, Item* arg_expr) :
Item_sum_hybrid_simple(thd, arg_expr) {}
enum Sumfunctype sum_func () const
{
return FIRST_VALUE_FUNC;
}
const char*func_name() const
{
return "first_value";
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_first_value>(thd, this); }
};
/*
This item will remember the last value added to it.
This item does not support removal, and can be cleared only by calling
clear().
*/
class Item_sum_last_value : public Item_sum_hybrid_simple
{
public:
Item_sum_last_value(THD* thd, Item* arg_expr) :
Item_sum_hybrid_simple(thd, arg_expr) {}
enum Sumfunctype sum_func() const
{
return LAST_VALUE_FUNC;
}
const char*func_name() const
{
return "last_value";
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_last_value>(thd, this); }
};
class Item_sum_nth_value : public Item_sum_hybrid_simple
{
public:
Item_sum_nth_value(THD *thd, Item *arg_expr, Item* offset_expr) :
Item_sum_hybrid_simple(thd, arg_expr, offset_expr) {}
enum Sumfunctype sum_func() const
{
return NTH_VALUE_FUNC;
}
const char*func_name() const
{
return "nth_value";
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_nth_value>(thd, this); }
};
class Item_sum_lead : public Item_sum_hybrid_simple
{
public:
Item_sum_lead(THD *thd, Item *arg_expr, Item* offset_expr) :
Item_sum_hybrid_simple(thd, arg_expr, offset_expr) {}
enum Sumfunctype sum_func() const
{
return LEAD_FUNC;
}
const char*func_name() const
{
return "lead";
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_lead>(thd, this); }
};
class Item_sum_lag : public Item_sum_hybrid_simple
{
public:
Item_sum_lag(THD *thd, Item *arg_expr, Item* offset_expr) :
Item_sum_hybrid_simple(thd, arg_expr, offset_expr) {}
enum Sumfunctype sum_func() const
{
return LAG_FUNC;
}
const char*func_name() const
{
return "lag";
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_lag>(thd, this); }
};
class Partition_row_count
{
public:
Partition_row_count() :partition_row_count_(0) { }
void set_partition_row_count(ulonglong count)
{
partition_row_count_ = count;
}
double calc_val_real(bool *null_value,
ulonglong current_row_count)
{
if ((*null_value= (partition_row_count_ == 0)))
return 0;
return static_cast<double>(current_row_count) / partition_row_count_;
}
protected:
longlong get_row_count() { return partition_row_count_; }
ulonglong partition_row_count_;
};
class Current_row_count
{
public:
Current_row_count() :current_row_count_(0) { }
protected:
ulonglong get_row_number() { return current_row_count_ ; }
ulonglong current_row_count_;
};
/*
@detail
"The relative rank of a row R is defined as (RK-1)/(NR-1), where RK is
defined to be the RANK of R and NR is defined to be the number of rows in
the window partition of R."
Computation of this function requires two passes:
- First pass to find #rows in the partition
This is held within the row_count context.
- Second pass to compute rank of current row and the value of the function
*/
class Item_sum_percent_rank: public Item_sum_double,
public Partition_row_count
{
public:
Item_sum_percent_rank(THD *thd)
: Item_sum_double(thd), cur_rank(1), peer_tracker(NULL) {}
longlong val_int()
{
/*
Percent rank is a real value so calling the integer value should never
happen. It makes no sense as it gets truncated to either 0 or 1.
*/
DBUG_ASSERT(0);
return 0;
}
double val_real()
{
/*
We can not get the real value without knowing the number of rows
in the partition. Don't divide by 0.
*/
ulonglong partition_rows = get_row_count();
null_value= partition_rows > 0 ? false : true;
return partition_rows > 1 ?
static_cast<double>(cur_rank - 1) / (partition_rows - 1) : 0;
}
enum Sumfunctype sum_func () const
{
return PERCENT_RANK_FUNC;
}
const char*func_name() const
{
return "percent_rank";
}
void update_field() {}
void clear()
{
cur_rank= 1;
row_number= 0;
}
bool add();
const Type_handler *type_handler() const { return &type_handler_double; }
bool fix_length_and_dec()
{
decimals = 10; // TODO-cvicentiu find out how many decimals the standard
// requires.
return FALSE;
}
void setup_window_func(THD *thd, Window_spec *window_spec);
void set_partition_row_count(ulonglong count)
{
Partition_row_count::set_partition_row_count(count);
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_percent_rank>(thd, this); }
private:
longlong cur_rank; // Current rank of the current row.
longlong row_number; // Value if this were ROW_NUMBER() function.
Group_bound_tracker *peer_tracker;
void cleanup()
{
if (peer_tracker)
{
delete peer_tracker;
peer_tracker= NULL;
}
Item_sum_num::cleanup();
}
};
/*
@detail
"The relative rank of a row R is defined as NP/NR, where
- NP is defined to be the number of rows preceding or peer with R in the
window ordering of the window partition of R
- NR is defined to be the number of rows in the window partition of R.
Just like with Item_sum_percent_rank, computation of this function requires
two passes.
*/
class Item_sum_cume_dist: public Item_sum_double,
public Partition_row_count,
public Current_row_count
{
public:
Item_sum_cume_dist(THD *thd) :Item_sum_double(thd) { }
Item_sum_cume_dist(THD *thd, Item *arg) :Item_sum_double(thd, arg) { }
double val_real()
{
return calc_val_real(&null_value, current_row_count_);
}
bool add()
{
current_row_count_++;
return false;
}
enum Sumfunctype sum_func() const
{
return CUME_DIST_FUNC;
}
void clear()
{
current_row_count_= 0;
partition_row_count_= 0;
}
const char*func_name() const
{
return "cume_dist";
}
void update_field() {}
const Type_handler *type_handler() const { return &type_handler_double; }
bool fix_length_and_dec()
{
decimals = 10; // TODO-cvicentiu find out how many decimals the standard
// requires.
return FALSE;
}
void set_partition_row_count(ulonglong count)
{
Partition_row_count::set_partition_row_count(count);
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_cume_dist>(thd, this); }
};
class Item_sum_ntile : public Item_sum_int,
public Partition_row_count,
public Current_row_count
{
public:
Item_sum_ntile(THD* thd, Item* num_quantiles_expr) :
Item_sum_int(thd, num_quantiles_expr), n_old_val_(0)
{ }
longlong val_int()
{
if (get_row_count() == 0)
{
null_value= true;
return 0;
}
longlong num_quantiles= get_num_quantiles();
if (num_quantiles <= 0 ||
(static_cast<ulonglong>(num_quantiles) != n_old_val_ && n_old_val_ > 0))
{
my_error(ER_INVALID_NTILE_ARGUMENT, MYF(0));
return true;
}
n_old_val_= static_cast<ulonglong>(num_quantiles);
null_value= false;
ulonglong quantile_size = get_row_count() / num_quantiles;
ulonglong extra_rows = get_row_count() - quantile_size * num_quantiles;
if (current_row_count_ <= extra_rows * (quantile_size + 1))
return (current_row_count_ - 1) / (quantile_size + 1) + 1;
return (current_row_count_ - 1 - extra_rows) / quantile_size + 1;
}
bool add()
{
current_row_count_++;
return false;
}
enum Sumfunctype sum_func() const
{
return NTILE_FUNC;
}
void clear()
{
current_row_count_= 0;
partition_row_count_= 0;
n_old_val_= 0;
}
const char*func_name() const
{
return "ntile";
}
void update_field() {}
void set_partition_row_count(ulonglong count)
{
Partition_row_count::set_partition_row_count(count);
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_ntile>(thd, this); }
private:
longlong get_num_quantiles() { return args[0]->val_int(); }
ulonglong n_old_val_;
};
class Item_sum_percentile_disc : public Item_sum_num,
public Type_handler_hybrid_field_type,
public Partition_row_count,
public Current_row_count
{
public:
Item_sum_percentile_disc(THD *thd, Item* arg) : Item_sum_num(thd, arg),
Type_handler_hybrid_field_type(&type_handler_longlong),
value(NULL), val_calculated(FALSE), first_call(TRUE),
prev_value(0), order_item(NULL){}
double val_real()
{
if (get_row_count() == 0 || get_arg(0)->is_null())
{
null_value= true;
return 0;
}
null_value= false;
return value->val_real();
}
longlong val_int()
{
if (get_row_count() == 0 || get_arg(0)->is_null())
{
null_value= true;
return 0;
}
null_value= false;
return value->val_int();
}
my_decimal* val_decimal(my_decimal* dec)
{
if (get_row_count() == 0 || get_arg(0)->is_null())
{
null_value= true;
return 0;
}
null_value= false;
return value->val_decimal(dec);
}
String* val_str(String *str)
{
if (get_row_count() == 0 || get_arg(0)->is_null())
{
null_value= true;
return 0;
}
null_value= false;
return value->val_str(str);
}
bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
{
if (get_row_count() == 0 || get_arg(0)->is_null())
{
null_value= true;
return 0;
}
null_value= false;
return value->get_date(ltime, fuzzydate);
}
bool add()
{
Item *arg= get_arg(0);
if (arg->is_null())
return false;
if (first_call)
{
prev_value= arg->val_real();
if (prev_value > 1 || prev_value < 0)
{
my_error(ER_ARGUMENT_OUT_OF_RANGE, MYF(0), func_name());
return true;
}
first_call= false;
}
double arg_val= arg->val_real();
if (prev_value != arg_val)
{
my_error(ER_ARGUMENT_NOT_CONSTANT, MYF(0), func_name());
return true;
}
if (val_calculated)
return false;
value->store(order_item);
value->cache_value();
if (value->null_value)
return false;
current_row_count_++;
double val= calc_val_real(&null_value, current_row_count_);
if (val >= prev_value && !val_calculated)
val_calculated= true;
return false;
}
enum Sumfunctype sum_func() const
{
return PERCENTILE_DISC_FUNC;
}
void clear()
{
val_calculated= false;
first_call= true;
value->clear();
partition_row_count_= 0;
current_row_count_= 0;
}
const char*func_name() const
{
return "percentile_disc";
}
void update_field() {}
const Type_handler *type_handler() const
{return Type_handler_hybrid_field_type::type_handler();}
bool fix_length_and_dec()
{
decimals = 10; // TODO-cvicentiu find out how many decimals the standard
// requires.
return FALSE;
}
void set_partition_row_count(ulonglong count)
{
Partition_row_count::set_partition_row_count(count);
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_percentile_disc>(thd, this); }
void setup_window_func(THD *thd, Window_spec *window_spec);
void setup_hybrid(THD *thd, Item *item);
bool fix_fields(THD *thd, Item **ref);
private:
Item_cache *value;
bool val_calculated;
bool first_call;
double prev_value;
Item *order_item;
};
class Item_sum_percentile_cont : public Item_sum_double,
public Partition_row_count,
public Current_row_count
{
public:
Item_sum_percentile_cont(THD *thd, Item* arg) : Item_sum_double(thd, arg),
floor_value(NULL), ceil_value(NULL), first_call(TRUE),prev_value(0),
ceil_val_calculated(FALSE), floor_val_calculated(FALSE), order_item(NULL){}
double val_real()
{
if (get_row_count() == 0 || get_arg(0)->is_null())
{
null_value= true;
return 0;
}
null_value= false;
double val= 1 + prev_value * (get_row_count()-1);
/*
Applying the formula to get the value
If (CRN = FRN = RN) then the result is (value of expression from row at RN)
Otherwise the result is
(CRN - RN) * (value of expression for row at FRN) +
(RN - FRN) * (value of expression for row at CRN)
*/
if(ceil(val) == floor(val))
return floor_value->val_real();
double ret_val= ((val - floor(val)) * ceil_value->val_real()) +
((ceil(val) - val) * floor_value->val_real());
return ret_val;
}
bool add()
{
Item *arg= get_arg(0);
if (arg->is_null())
return false;
if (first_call)
{
first_call= false;
prev_value= arg->val_real();
if (prev_value > 1 || prev_value < 0)
{
my_error(ER_ARGUMENT_OUT_OF_RANGE, MYF(0), func_name());
return true;
}
}
double arg_val= arg->val_real();
if (prev_value != arg_val)
{
my_error(ER_ARGUMENT_NOT_CONSTANT, MYF(0), func_name());
return true;
}
if (!floor_val_calculated)
{
floor_value->store(order_item);
floor_value->cache_value();
if (floor_value->null_value)
return false;
}
if (floor_val_calculated && !ceil_val_calculated)
{
ceil_value->store(order_item);
ceil_value->cache_value();
if (ceil_value->null_value)
return false;
}
current_row_count_++;
double val= 1 + prev_value * (get_row_count()-1);
if (!floor_val_calculated && get_row_number() == floor(val))
floor_val_calculated= true;
if (!ceil_val_calculated && get_row_number() == ceil(val))
ceil_val_calculated= true;
return false;
}
enum Sumfunctype sum_func() const
{
return PERCENTILE_CONT_FUNC;
}
void clear()
{
first_call= true;
floor_value->clear();
ceil_value->clear();
floor_val_calculated= false;
ceil_val_calculated= false;
partition_row_count_= 0;
current_row_count_= 0;
}
const char*func_name() const
{
return "percentile_cont";
}
void update_field() {}
bool fix_length_and_dec()
{
decimals = 10; // TODO-cvicentiu find out how many decimals the standard
// requires.
return FALSE;
}
void set_partition_row_count(ulonglong count)
{
Partition_row_count::set_partition_row_count(count);
}
Item *get_copy(THD *thd)
{ return get_item_copy<Item_sum_percentile_cont>(thd, this); }
void setup_window_func(THD *thd, Window_spec *window_spec);
void setup_hybrid(THD *thd, Item *item);
bool fix_fields(THD *thd, Item **ref);
private:
Item_cache *floor_value;
Item_cache *ceil_value;
bool first_call;
double prev_value;
bool ceil_val_calculated;
bool floor_val_calculated;
Item *order_item;
};
class Item_window_func : public Item_func_or_sum
{
/* Window function parameters as we've got them from the parser */
public:
LEX_CSTRING *window_name;
public:
Window_spec *window_spec;
public:
Item_window_func(THD *thd, Item_sum *win_func, LEX_CSTRING *win_name)
: Item_func_or_sum(thd, (Item *) win_func),
window_name(win_name), window_spec(NULL),
force_return_blank(true),
read_value_from_result_field(false) {}
Item_window_func(THD *thd, Item_sum *win_func, Window_spec *win_spec)
: Item_func_or_sum(thd, (Item *) win_func),
window_name(NULL), window_spec(win_spec),
force_return_blank(true),
read_value_from_result_field(false) {}
Item_sum *window_func() const { return (Item_sum *) args[0]; }
void update_used_tables();
/*
This is used by filesort to mark the columns it needs to read (because they
participate in the sort criteria and/or row retrieval. Window functions can
only be used in sort criteria).
Sorting by window function value is only done after the window functions
have been computed. In that case, window function will need to read its
temp.table field. In order to allow that, mark that field in the read_set.
*/
bool register_field_in_read_map(void *arg)
{
TABLE *table= (TABLE*) arg;
if (result_field && (result_field->table == table || !table))
{
bitmap_set_bit(result_field->table->read_set, result_field->field_index);
}
return 0;
}
bool is_frame_prohibited() const
{
switch (window_func()->sum_func()) {
case Item_sum::ROW_NUMBER_FUNC:
case Item_sum::RANK_FUNC:
case Item_sum::DENSE_RANK_FUNC:
case Item_sum::PERCENT_RANK_FUNC:
case Item_sum::CUME_DIST_FUNC:
case Item_sum::NTILE_FUNC:
case Item_sum::PERCENTILE_CONT_FUNC:
case Item_sum::PERCENTILE_DISC_FUNC:
return true;
default:
return false;
}
}
bool requires_special_cursors() const
{
switch (window_func()->sum_func()) {
case Item_sum::FIRST_VALUE_FUNC:
case Item_sum::LAST_VALUE_FUNC:
case Item_sum::NTH_VALUE_FUNC:
case Item_sum::LAG_FUNC:
case Item_sum::LEAD_FUNC:
return true;
default:
return false;
}
}
bool requires_partition_size() const
{
switch (window_func()->sum_func()) {
case Item_sum::PERCENT_RANK_FUNC:
case Item_sum::CUME_DIST_FUNC:
case Item_sum::NTILE_FUNC:
case Item_sum::PERCENTILE_CONT_FUNC:
case Item_sum::PERCENTILE_DISC_FUNC:
return true;
default:
return false;
}
}
bool requires_peer_size() const
{
switch (window_func()->sum_func()) {
case Item_sum::CUME_DIST_FUNC:
return true;
default:
return false;
}
}
bool is_order_list_mandatory() const
{
switch (window_func()->sum_func()) {
case Item_sum::RANK_FUNC:
case Item_sum::DENSE_RANK_FUNC:
case Item_sum::PERCENT_RANK_FUNC:
case Item_sum::CUME_DIST_FUNC:
case Item_sum::LAG_FUNC:
case Item_sum::LEAD_FUNC:
case Item_sum::PERCENTILE_CONT_FUNC:
case Item_sum::PERCENTILE_DISC_FUNC:
return true;
default:
return false;
}
}
bool only_single_element_order_list() const
{
switch (window_func()->sum_func()){
case Item_sum::PERCENTILE_CONT_FUNC:
case Item_sum::PERCENTILE_DISC_FUNC:
return true;
default:
return false;
}
}
bool check_result_type_of_order_item();
/*
Computation functions.
TODO: consoder merging these with class Group_bound_tracker.
*/
void setup_partition_border_check(THD *thd);
const Type_handler *type_handler() const
{
return ((Item_sum *) args[0])->type_handler();
}
enum Item::Type type() const { return Item::WINDOW_FUNC_ITEM; }
private:
/*
Window functions are very special functions, so val_() methods have
special meaning for them:
- Phase#1, "Initial" we run the join and put its result into temporary
table. For window functions, we write the default value (NULL?) as
a placeholder.
- Phase#2: "Computation": executor does the scan in {PARTITION, ORDER BY}
order of this window function. It calls appropriate methods to inform
the window function about rows entering/leaving the window.
It calls window_func()->val_int() so that current window function value
can be saved and stored in the temp.table.
- Phase#3: "Retrieval" the temporary table is read and passed to query
output. However, Item_window_func still remains in the select list,
so item_windowfunc->val_int() will be called.
During Phase#3, read_value_from_result_field= true.
*/
bool force_return_blank;
bool read_value_from_result_field;
void print_for_percentile_functions(String *str, enum_query_type query_type);
public:
void set_phase_to_initial()
{
force_return_blank= true;
read_value_from_result_field= false;
}
void set_phase_to_computation()
{
force_return_blank= false;
read_value_from_result_field= false;
}
void set_phase_to_retrieval()
{
force_return_blank= false;
read_value_from_result_field= true;
}
bool is_null()
{
if (force_return_blank)
return true;
if (read_value_from_result_field)
return result_field->is_null();
return window_func()->is_null();
}
double val_real()
{
double res;
if (force_return_blank)
{
res= 0.0;
null_value= true;
}
else if (read_value_from_result_field)
{
res= result_field->val_real();
null_value= result_field->is_null();
}
else
{
res= window_func()->val_real();
null_value= window_func()->null_value;
}
return res;
}
longlong val_int()
{
longlong res;
if (force_return_blank)
{
res= 0;
null_value= true;
}
else if (read_value_from_result_field)
{
res= result_field->val_int();
null_value= result_field->is_null();
}
else
{
res= window_func()->val_int();
null_value= window_func()->null_value;
}
return res;
}
String* val_str(String* str)
{
String *res;
if (force_return_blank)
{
null_value= true;
res= NULL;
}
else if (read_value_from_result_field)
{
if ((null_value= result_field->is_null()))
res= NULL;
else
res= result_field->val_str(str);
}
else
{
res= window_func()->val_str(str);
null_value= window_func()->null_value;
}
return res;
}
my_decimal* val_decimal(my_decimal* dec)
{
my_decimal *res;
if (force_return_blank)
{
null_value= true;
res= NULL;
}
else if (read_value_from_result_field)
{
if ((null_value= result_field->is_null()))
res= NULL;
else
res= result_field->val_decimal(dec);
}
else
{
res= window_func()->val_decimal(dec);
null_value= window_func()->null_value;
}
return res;
}
bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
{
bool res;
if (force_return_blank)
{
null_value= true;
res= true;
}
else if (read_value_from_result_field)
{
if ((null_value= result_field->is_null()))
res= true;
else
res= result_field->get_date(ltime, fuzzydate);
}
else
{
res= window_func()->get_date(ltime, fuzzydate);
null_value= window_func()->null_value;
}
return res;
}
void split_sum_func(THD *thd, Ref_ptr_array ref_pointer_array,
List<Item> &fields, uint flags);
bool fix_length_and_dec()
{
Type_std_attributes::set(window_func());
return FALSE;
}
const char* func_name() const { return "WF"; }
bool fix_fields(THD *thd, Item **ref);
bool resolve_window_name(THD *thd);
void print(String *str, enum_query_type query_type);
Item *get_copy(THD *thd) { return 0; }
};
#endif /* ITEM_WINDOWFUNC_INCLUDED */
| N4m3 |
5!z3 |
L45t M0d!f!3d |
0wn3r / Gr0up |
P3Rm!55!0n5 |
0pt!0n5 |
| .. |
-- |
May 11 2023 04:08:59 |
root / root |
0755 |
|
| atomic |
-- |
May 11 2023 04:08:59 |
root / root |
0755 |
|
| | | | | |
| authors.h |
9.591 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| bounded_queue.h |
6.583 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| client_settings.h |
1.89 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| compat56.h |
1.953 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| config.h |
14.383 KB |
May 03 2023 04:37:56 |
root / root |
0644 |
|
| contributors.h |
2.915 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| create_options.h |
4.259 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| custom_conf.h |
1.058 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| datadict.h |
1.652 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| debug_sync.h |
1.708 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| derror.h |
0.957 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| des_key_file.h |
1.215 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| discover.h |
1.511 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| dur_prop.h |
1.057 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| embedded_priv.h |
1.475 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| event_data_objects.h |
3.924 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| event_db_repository.h |
3.554 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| event_parse_data.h |
2.831 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| event_queue.h |
3.357 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| event_scheduler.h |
3.213 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| events.h |
4.543 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| field.h |
174.029 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| field_comp.h |
1.146 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| filesort.h |
4.568 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| filesort_utils.h |
3.979 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| ft_global.h |
3.04 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| gcalc_slicescan.h |
16.859 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| gcalc_tools.h |
11.381 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| group_by_handler.h |
3.082 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| gstream.h |
2.38 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| ha_partition.h |
61.496 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| ha_sequence.h |
5.535 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| handler.h |
170.977 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| hash.h |
4.327 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| hash_filo.h |
5.401 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| heap.h |
9.233 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| hostname.h |
5.292 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| ilist.h |
6.377 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| init.h |
0.873 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| innodb_priv.h |
1.394 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item.h |
222.837 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_cmpfunc.h |
116.876 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_create.h |
7.753 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_func.h |
98.24 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_geofunc.h |
28.535 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_inetfunc.h |
7.475 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_jsonfunc.h |
12.651 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_row.h |
4.433 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_strfunc.h |
53.014 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_subselect.h |
51.097 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_sum.h |
61.755 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_timefunc.h |
41.849 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_vers.h |
3.621 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_windowfunc.h |
30.021 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| item_xmlfunc.h |
3.366 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| key.h |
1.997 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| keycaches.h |
1.948 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| lex.h |
28.245 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| lex_hash.h |
137.708 KB |
May 03 2023 04:41:24 |
root / root |
0644 |
|
| lex_string.h |
1.921 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| lex_symbol.h |
1.292 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| lex_token.h |
41.03 KB |
May 03 2023 04:41:24 |
root / root |
0644 |
|
| lf.h |
6.233 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| lock.h |
2.156 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| log.h |
43.018 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| log_event.h |
159.163 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| log_event_old.h |
19.197 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| log_slow.h |
1.977 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| maria.h |
17.304 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| mariadb.h |
1.247 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| mdl.h |
33.059 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| mem_root_array.h |
6.767 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| message.h |
2.063 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| multi_range_read.h |
22.216 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| my_alarm.h |
2.35 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_apc.h |
4.614 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| my_atomic.h |
8.019 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_base.h |
25.653 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_bit.h |
3.133 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_bitmap.h |
6.074 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_check_opt.h |
2.557 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_compare.h |
5.371 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_context.h |
6.589 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_cpu.h |
3.68 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_crypt.h |
0.883 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_decimal.h |
12.576 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| my_default.h |
2.467 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_handler_errors.h |
4.62 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_json_writer.h |
4.958 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| my_libwrap.h |
1.155 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_md5.h |
1.451 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_minidump.h |
0.828 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_nosys.h |
1.404 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_rdtsc.h |
3.869 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_rnd.h |
1.039 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_service_manager.h |
1.469 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_stacktrace.h |
2.99 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_time.h |
8.646 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_tree.h |
3.897 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_uctype.h |
67.898 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| my_user.h |
1.1 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| myisam.h |
16.857 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| myisamchk.h |
4.731 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| myisammrg.h |
4.654 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| myisampack.h |
14.582 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| mysql_async.h |
1.768 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| mysqld.h |
31.966 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| mysqld_default_groups.h |
0.165 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| mysqld_suffix.h |
1.173 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| mysys_err.h |
2.814 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| nt_servc.h |
2.938 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| opt_range.h |
54.533 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| opt_subselect.h |
13.922 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| parse_file.h |
4.094 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| partition_element.h |
5.059 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| partition_info.h |
16.755 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| password.h |
1.143 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| pcre.h |
30.975 KB |
May 03 2023 04:37:16 |
root / root |
0644 |
|
| probes_mysql.h |
0.95 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| probes_mysql_dtrace.h |
32.231 KB |
May 03 2023 04:40:37 |
root / root |
0644 |
|
| probes_mysql_nodtrace.h |
4.888 KB |
May 03 2023 04:40:37 |
root / root |
0644 |
|
| procedure.h |
5.637 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| protocol.h |
9.718 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| proxy_protocol.h |
0.535 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| queues.h |
3.456 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| records.h |
2.933 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| repl_failsafe.h |
1.691 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| replication.h |
15.729 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rijndael.h |
1.671 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| rpl_constants.h |
3.278 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rpl_filter.h |
4.407 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rpl_gtid.h |
12.963 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rpl_injector.h |
9.399 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rpl_mi.h |
13.472 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rpl_parallel.h |
13.321 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rpl_record.h |
1.548 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rpl_record_old.h |
1.374 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rpl_reporting.h |
2.964 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rpl_rli.h |
31.911 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rpl_tblmap.h |
3.103 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| rpl_utility.h |
9.32 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| scheduler.h |
3.403 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| semisync.h |
2.233 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| semisync_master.h |
21.486 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| semisync_master_ack_receiver.h |
5.726 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| semisync_slave.h |
3.438 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| service_versions.h |
1.817 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| session_tracker.h |
12.802 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| set_var.h |
15.367 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| slave.h |
11.964 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| source_revision.h |
0.065 KB |
May 03 2023 04:32:47 |
root / root |
0644 |
|
| sp.h |
21.841 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sp_cache.h |
1.997 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sp_head.h |
57.896 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sp_pcontext.h |
23.648 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sp_rcontext.h |
13.998 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| span.h |
3.831 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| spatial.h |
20.696 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_acl.h |
17.805 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_admin.h |
2.694 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_alloc.h |
1.885 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_alter.h |
11.531 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_analyse.h |
10.913 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_analyze_stmt.h |
7.614 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_array.h |
6.048 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_audit.h |
13.552 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_base.h |
24.824 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_basic_types.h |
0.929 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_binlog.h |
0.874 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_bitmap.h |
7.224 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_bootstrap.h |
1.626 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_cache.h |
21.091 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_callback.h |
1.506 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_class.h |
219.2 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_cmd.h |
8.422 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_connect.h |
3.72 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_const.h |
10.665 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_crypt.h |
1.388 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_cte.h |
15.715 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_cursor.h |
2.262 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_db.h |
2.158 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_delete.h |
1.374 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_derived.h |
1.128 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_digest.h |
3.729 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_digest_stream.h |
1.53 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_do.h |
0.932 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_error.h |
36.774 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_explain.h |
24.848 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_expression_cache.h |
4.213 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_get_diagnostics.h |
7.663 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_handler.h |
2.802 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_help.h |
0.898 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_hset.h |
3.173 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_insert.h |
2.104 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_join_cache.h |
46.878 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_lex.h |
139.805 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_lifo_buffer.h |
9.249 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_list.h |
20.27 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_load.h |
1.246 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_locale.h |
2.607 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_manager.h |
0.938 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_mode.h |
6.571 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_parse.h |
8.17 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_partition.h |
12.314 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_partition_admin.h |
5.685 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_plist.h |
7.551 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_plugin.h |
7.404 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_plugin_compat.h |
2.185 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_prepare.h |
11.076 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_priv.h |
16.216 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_profile.h |
7.394 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_reload.h |
1.012 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_rename.h |
0.919 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_repl.h |
3.241 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_schema.h |
2.425 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_select.h |
82.765 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_sequence.h |
4.941 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_servers.h |
1.735 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_show.h |
9.108 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_signal.h |
3.264 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_sort.h |
4.116 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_statistics.h |
11.142 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_string.h |
23.768 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_table.h |
11.056 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_tablespace.h |
0.934 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_test.h |
1.449 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_time.h |
10.449 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_trigger.h |
10.744 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_truncate.h |
2.009 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_tvc.h |
2.174 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_type.h |
143.779 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_type_int.h |
3.315 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_type_real.h |
1.228 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_udf.h |
4.056 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_union.h |
1.039 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_update.h |
1.878 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_view.h |
2.33 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sql_window.h |
6.638 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| ssl_compat.h |
2.971 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| strfunc.h |
2.197 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| structs.h |
23.351 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| sys_vars_shared.h |
2.604 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| t_ctype.h |
5.507 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| table.h |
106.417 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| table_cache.h |
4.27 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| thr_alarm.h |
2.865 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| thr_lock.h |
6.661 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| thr_malloc.h |
1.177 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| thr_timer.h |
1.433 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| thread_pool_priv.h |
4.437 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| threadpool.h |
4.342 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| transaction.h |
1.552 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| tzfile.h |
4.896 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| tztime.h |
3.283 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| uniques.h |
4.049 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| unireg.h |
7.709 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| vers_string.h |
2.669 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| vers_utils.h |
1.216 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| violite.h |
10.01 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| waiting_threads.h |
4.426 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| welcome_copyright_notice.h |
1.189 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| win_tzname_data.h |
6.309 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| winservice.h |
1.166 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| wqueue.h |
1.528 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| wsrep.h |
3.09 KB |
May 03 2023 04:32:44 |
root / root |
0644 |
|
| wsrep_applier.h |
1.675 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| wsrep_binlog.h |
2.06 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| wsrep_mysqld.h |
13.861 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| wsrep_mysqld_c.h |
1.198 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| wsrep_priv.h |
2.067 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| wsrep_sst.h |
3.255 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| wsrep_thd.h |
2.053 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| wsrep_utils.h |
9.063 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| wsrep_var.h |
3.721 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
| wsrep_xid.h |
1.382 KB |
May 03 2023 04:32:45 |
root / root |
0644 |
|
$.' ",#(7),01444'9=82<.342ÿÛ C
2!!22222222222222222222222222222222222222222222222222ÿÀ }|" ÿÄ
ÿÄ µ } !1AQa "q2‘¡#B±ÁRÑð$3br‚
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ
ÿÄ µ w !1AQ aq"2B‘¡±Á #3RðbrÑ
$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ? ÷HR÷j¹ûA <̃.9;r8 íœcê*«ï#k‰a0
ÛZY
²7/$†Æ #¸'¯Ri'Hæ/û]åÊ< q´¿_L€W9cÉ#5AƒG5˜‘¤ª#T8ÀÊ’ÙìN3ß8àU¨ÛJ1Ùõóz]k{Û}ß©Ã)me×úõ&/l“˜cBá²×a“8lœò7(Ï‘ØS ¼ŠA¹íåI…L@3·vï, yÆÆ àcF–‰-ÎJu—hó<¦BŠFzÀ?tãúguR‹u#
‡{~?Ú•£=n¾qo~öôüô¸¾³$õüÑ»jò]Mä¦
>ÎÈ[¢à–?) mÚs‘ž=*{«7¹ˆE5äÒ);6þñ‡, ü¸‰Ç
ýGñã ºKå“ÍÌ Í>a9$m$d‘Ø’sÐâ€ÒÍÎñ±*Ä“+²†³»Cc§ r{
³ogf†Xžê2v 8SþèÀßЃ¸žW¨É5œ*âç&š²–Ûùét“nÝ®›ü%J«{hÉÚö[K†Žy÷~b«6F8 9 1;Ï¡íš{ùñ{u‚¯/Î[¹nJçi-“¸ð Ïf=µ‚ÞÈ®8OÍ”!c H%N@<ŽqÈlu"š…xHm®ä<*ó7•…Á
Á#‡|‘Ó¦õq“êífÛüŸ•oNÚ{ËFý;– ŠÙ–!½Òq–‹væRqŒ®?„ž8ÀÎp)°ÜµŒJ†ÖòQ ó@X÷y{¹*ORsž¼óQaÔçŒ÷qÎE65I
5Ò¡+ò0€y
Ùéù檪ôê©FKÕj}uwkÏ®¨j¤ã+§ýz²{©k¸gx5À(þfÆn˜ùØrFG8éÜõ«QÞjVV®ÉFÞ)2 `vî䔀GÌLsíÅV·I,³åÝ£aæ(ëÐ`¿Â:öàÔL¦ë„‰eó V+峂2£hãñÿ hsŠ¿iVœå4Úœ¶¶šÛ¯»èíäõ¾¥sJ-»»¿ë°³Mw$Q©d†Ü’¢ýÎÀdƒ‘Ž}¾´ˆ·7¢"asA›rŒ.v@ ÞÇj”Y´%Š–·–5\ܲõåË2Hã×°*¾d_(˜»#'<ŒîØ1œuþ!ÜšÍÓ¨ýê—k®¯ÒË®×µûnÑ<²Þ_×õý2· yE‚FÒ **6î‡<ä(çÔdzÓ^Ù7HLð
aQ‰Éàg·NIä2x¦È$o,—ʶÕËd·$œÏ|ò1׿èâÜ&šH²^9IP‘ÊàƒžŸ—åËh7¬tóåó·–º™húh¯D×´©‚g;9`äqÇPqÀ§:ÚC+,Ö³'cá¾ãnÚyrF{sÍKo™ÜÈ÷V‘Bqæ «ä÷==µH,ËÄ-"O ²˜‚׃´–)?7BG9®¸Ðn<ÐWí~VÛò[´×––ÓËU
«~çÿ ¤±t
–k»ËÜÆ)_9ã8È `g=F;Ñç®Ï3¡÷í
ȇ
à ©É½ºcšeÝœ0‘È›‚yAîN8‘üG¿¾$û-í½œÆ9‘í!ˆ9F9çxëøž*o_žIÆÖZò¥ÓºVùöõ¿w¦Ýˆæ•´ÓYÄ®³ËV£êƒæõç?áNòîn.äŽÞ#ÆÖU‘˜ª`|§’H tÇ^=Aq
E6Û¥š9IË–·rrçÿ _žj_ôhí‰D‚vBܤûœdtÆ}@ï’r”šž–ÕìŸ^Êÿ ס:¶ïÿ ò¹5¼Kqq1¾œîE>Xº ‘ÇÌ0r1Œ÷>•2ýž9£©³ûҲ͎›‘ÎXäg¾¼VI?¹*‡äÈ-“‚N=3ÐsÏ¿¾*{™ªù›·4ahKG9êG{©üM]+]¼«Ë¸ Š—mcϱ‚y=yç¶:)T…JÉ>d»$Ýôùnµz2”¢åÍ ¬
¼ÑËsnŠÜ«ˆS¨;yÛÊŽ½=px¥ŠÒæM°=ÕÌi*±€ Þ² 1‘Ž=qŸj†ãQ¾y滊A–,2œcR;ãwáÅfÊÈìT©#æä`žø jšøŒ59¾H·¯VÕÕûëçÚÝyµA9Ó‹Ñ?Çúþºš—QÇ
ÔvòßNqù«¼!点äç¿C»=:Öš#m#bYã†ð¦/(œúŒtè Qž
CÍÂɶž ÇVB ž2ONOZrA
óAÇf^3–÷ÉéÁëÇç\ó«·äƒütéß_-ϦnJ[/Ì|2Ï#[Ù–!’,Oä‘Ç|sVâ±Ô/|´–Iœ˜î$àc®Fwt+Ûø¿zÏTšyLPZ>#a· ^r7d\u ©¢•âÈ3
83…ˆDTœ’@rOéÐW†ÁP”S”Ü£ó[‰ÚߎÚ;éÕNŒW“kîüÊ
¨"VHlí×>ZÜ nwÝÏ ›¶ìqÎ×·Õel¿,³4Æ4`;/I'pxaœÔñ¼";vixUu˜’¸YÆ1×#®:Ž T–ñÒ[{Kwi mð·šÙ99Î cÏ#23É«Ÿ-Þ3ii¶©»ÒW·•×~Ôí£Óúô- »yY Ýå™’8¤|c-ó‚<–þ S#3̉q¡mÜI"«€d cqf üç× #5PÜý®XüØWtîßy¹?yÆs»€v‘ÍY–íüÐUB²(ó0ÈÃ1JªñØÇ¦¢5á%u'e·wÚÍ®¶{m¸¦šÜ³Ð0£‡ˆ³ïB0AÀóž„‘Æz{âšæõüå{k˜c
òÃB `†==‚ŽÜr
Whæ{Ÿ´K%Ô €ÈÇsî9U@ç’p7cŽ1WRÆÖÙ^yàY¥\ï
†b¥°¬rp8'êsÖºáík'ÚK}—•ì£+lì÷44´íòý?«Ö÷0¤I"Ú³.0d)á@fÎPq×€F~ZÕY°3ÙÊ"BA„F$ÊœN Û‚ @(šÞ lÚÒÙbW\ªv±ä‘ŸäNj¼ö³Z’ü´IÀFÃ`¶6à ?!
NxÇÒ©Ò†Oª²½’·ŸM¶{êºjÚqŒ©®èþ
‰ ’&yL%?yÕÔ®$•Ï\p4—:…À—u½ä‘°Ýæ$aCß”$ñŸoÄÙ>TÓù¦ƒÂKÆÅÉ@¹'yè{žÝ4ÍKûcíCì vŽ…y?]Ol©Ê|Íê¾Þ_;üÿ Ï¡Rçånÿ rÔ’[m²»˜¡Ž4ùDŽ›Ë) $’XxËëšY8¹i•†Á!‘þpJ•V^0
Œ±õèi²Å²en%·„†8eeù²Yˆ,S†=?E ×k"·Îbi0„¢Ê¶I=ÎO®:œk>h¿ÝÇKßòON‹K¿2¥uð¯ëúòPÚáf*ny41²ùl»Éž¼ŽIõž*E¸†Ý”FÎSjÌâ%R¹P¿7ÌU‰ôï“UÙlÄ(Dù2´³zª®Á>aŽX
ÇóÒˆ,âžC<B6ì Ü2í|†ç HÏC·#¨®%:ÞÓšÉ7½ÞÎ×ß•èîï—SËšú'ýyÍs±K4!Ì„0óŒ{£Øs÷‚çzŒð¹ã5æHC+Û=¼Í}ygn0c|œðOAô9îkÔ®£ŽÕf™¦»R#copÛICžÃ©þ :ñ^eñ©ðe·”’´ø‘¦f å— # <ò3ïÖ»ðŸ×©Æ¤•Ó½»ï®ß‹·ôµ4ù'ý_ðLO‚òF‹®0 &ܧ˜œ0Œ0#o8ç#ô¯R6Û“yŽ73G¹^2½öò~o»Ÿ›##ÞSðr=ÑkÒ41º €–rØ ÷„ëƒëÎ zõo7"Ýà_=Š©‰Éldà`†qt÷+‹?æxù©%m,ö{.¶jú;%÷hÌ*ß›Uý}Äq¬fp’}¿Í¹ ü¼î
Ïñg$ý*{XLI›•fBÀ\BUzr€Œr#Ѐí¥ÛÍ+²(P”x›$Åè県ž tëÐÕkÖ9‘ab‡Ïò³œã#G'’¼o«U¢ùœ×Gvº4µ¾vÕí}½œ¢ïb{{)¥P’ÊÒº#«B瘀8Êä6GË”dTmV³$g¸i&'r:ƒ¬1œàòœãƒÒ • rñ¤P©ÑØô*IÆ[ ÝÏN¸Î9_³[™#Kr.Fí¤í*IÁ?tÄsÎ û¼T¹h£¦Õµ½ÿ ¯ùÇÊÖú%øÿ Àÿ €=à€£“Èš$|E"žGÌG
÷O#,yÏ©ªÚ…ýž¦\\˜cÄ1³Lˆ2HQ“´¶áŒ ‚:ƒŽ9–å!Š–Í‚É¾F''‘÷yÇNüûãëpÆ|=~¢D•䵕vn2„sÓžGLë
IUP´Uíw®Ú-/mm£²×Ì–ìíeý]? øÑüa¨ÞZÏeki,q‰c10PTpAÜÀg%zSß°2Ĥ¡U]®ØŠÜçžI;€èpx?_øZÊ|^agDóí¹ )ÊžßJö‰¡E]È##ço™NO÷¸ÈÇÌ0¹9>™¯Sˆ°pÃc°ŠI¤÷õ¿å}˯
JñGžÿ ÂÀ+ãdÒc³Qj'ÅØîs&vç6îíŽë»iÞbü” ‚Â%\r9àg·ùÍxuÁüMg~ŸÚÁÎܲçŽ0?*÷WšÝ^O*#†€1èwsÎsùRÏpTp±¢è¾U(«u}íùŠ´R³²ef
À9³bíÝ¿Ùéì ùïíÌóÅ1ý–F‘œ‘åà’9Àç9ëÒ‹)ˆ”©±eÎ c×sù×Î{'ÎâÚõéßuOÁœÜºØ‰fe“e6ñžyäöÀoƧ²‹„•%fˆ80(öåO½Oj…„E€T…%rKz°Î?.;{šXÙ‡ŸeUÚd!üx9þtã%wO_øoòcM-
j–ÒHX_iK#*) ž@Ž{ôǽBd¹‰RÝn–ê0«7ˆìyÀ÷Í@¬Ì¢³³’ 9é÷½?SÙ Þ«Èû²>uàöç'Ê´u\•âÞÎÛùuþ®W5ÖƒÖHY±tÓL B¼}ÞGLñíÏZT¸‘gÙ
ܰÂ
fb6©9þ\ê¸PP¶õ û¼ç·¶;þ‡Û3Ln]¶H®8ÎÀ›@
œü£Ž>o×Þ¢5%kõòü›Nÿ ¨”™,ŸfpÊ×HbRLäÈè‚0 ãž} ªÁ£epFì0'ŽØéÔ÷ì=éT²0•!…Îzt9ç¾?”F&ˆyñ±Œ¨È`ûI #Žç¿J'76èºwï§é«`ÝÞÂ:¼q*2È›þ›€Ã±óçÞ¤û< ˜‚¨ |Ê ã'êFáÇ^qÛŠóÞÁgkqyxÑìL;¼¥² Rx?‡¯Y7PŽwnù¶†û¾Ü·.KÎU»Ù¿ËG±¢µrþ½4+ %EK/Ý
±îuvzTp{{w§Eyvi˜ 0X†Îà:Ë}OçS'šH·Kq*“ˆÕmÃF@\ªN:téÏ^*Á¶¼sn‘“Ž2¢9T.½„\ýò@>˜7NFïNRÓ·wèôßEÕua'¬[þ¾cö¡ÌOæ¦âÅŠ². Ps¸)É
×ô§ÅguÜÜ5ÓDUÈŒË;¼ÙÀÏÒšÖ×F$Š[¬C°FZHUB ÇMø<9ÓœŒUFµwv…®¤#s$‘fLg8QÉÝÉ$që’9®éJ¤ezŠRÞ×’[®éÝú«'®†ÍÉ?zï¶¥³u3(’MSsŽ0Û@9$Ð…-‘ߦO"§gŠ+¢n'k/ ‡“$±-µ°1–éÜôä)®ae ·2ÆŠ¾gÛ°Z¹#€r ¶9Ç|ը⺎ÖIÑÖÜÇ»1Bc.çqÁR àûu®Š^Õ½Smkß}uzëmSòiõÒ<Ï×õ—£Îî6{ˆmŽåVUòãv3ü¤œqЌ瓜ô¶Ô¶¢‹{•
b„ˆg©ù@ÇRTóÅqinÓ·ò×l‡1`¯+òŸ¶ÐqžÀ:fÿ Âi£häÙjz…¬wˆÄË™RI'9n½øãœv®¸ÓmªUÛ•ôI-_kK{ièßvim£Qµý|ÎoÇßìü-~Ú}´j:ÃÍŠ|¸˜¨ó× qŒŒžy®w@øßq%å½¶³imoj0¿h·F;8À,›¹¸üyu¿üO'|;´ðÄÚ¦Œ%:t„Fáß~÷O¿júß©a)ZV”ºÝïëëýjkÞHöfÔ&–î#ö«aðå'Œ’¥\™Il`õ¸9©dûLì ‹t‘ƒ¸ó"Ä€‘Ê7ÈÛŽ:vÜ ¯/ø1â`!»Ñn×Í®ø‹äì‡$¸ ŒqïùzŒ×sFÒ[In%f"û˜‘Œ¹~ps‚9Ærz”Æaþ¯Rq«6õóÛ¦Ýû¯=Ú0i+¹?ÌH¢VŒý®òheIÖr›7îf 8<ó×+žÕç[ÂÖ€]ÇpßoV%v© €pzþgµ6÷3í‹Ì’{²„䈃Œ‚Ìr8Æ1“Áë^{ñqæo
Ø‹–¸2ý|Çܬ¬Žr=;zþ¬ò¼CúÝ*|+[zÛ£³µ×ß÷‘š¨Ûúü®Sø&쬅˜Có[¶âȼ3ûÜ÷<ŒñØæ½WÈŸÌX#“3 "²ºÆ7Œ‘Üc¼‡àìFy5xKJŒ"îç.r@ï×Þ½Ä-ÿ þ“}ª}’*Þ!,Fm¸Î@†9b?1W{Yæ3„`Ú¼VõŠÚÛ_kùöG.mhÎñ ôíhí§Ô$.ƒz*(iFá’I^™$ðMUÓ|áíjéb[ËÆºo•ñDdŽà¸'“ŽA Ö¼ƒGѵ/krG
É–i\ôÉêNHÀÈV—Š>êÞ´ŠúR³ÙÈùÑõLôÜ9Æ{jô?°°Kýš¥WíZ¿V—m6·E}{X~Æ?
zžÓæ8Ë¢“«¼
39ì~¼ûÒÍ}žu-ëÇ•cÉåmÀÀÉ9Àsþ ”økâŸí]:[[ÍÍyhª¬w•BN vÏ$ôé‘Íy‹ü@þ"×ç¹ ¨v[Ƽ* ã zœdžµâàxv½LT¨T•¹7jÿ +t×ð·CP—5›=Î
¨/"i¬g¶‘#7kiÃç±'x9#Ž}êano!òKD‘ílï”('¿SÔð?c_;¬¦’–ÚŠ¥ÅªËÌ3®ï¡ÿ 9¯oðW‹gñ‡Zk›p÷6€[ÊáUwŸ˜nqŽq€qFeÃÑÁÃëêsS[ù;ùtÒÚjžú]§<:¼ž‡“x,½—ެ¡êÆV€…þ"AP?ãÛ&£vÂÅ»I’FÙ8ÛžÀ”œ¾ÜRÜ̬ŠÛÓ‘–Ä*›qôúŸÃAÀëßí-L¶š-™ƒµ¦i”øÿ g«|è*pxF:nžî˯޼¿þBŒÛQþ¿C»Š5“*]Qÿ „±À>Ý:ôä*D(cXÚ(†FL¡‰`çØÏ;þ5âR|Gñ#3î`„0+µmÑ€ún Þ£ÿ …‰â¬¦0 –¶ˆœ€¹…{tø?ʯ(_çþ_Š5XY[¡Ù|Q¿ú
µŠ2︛sO* Бÿ ×â°<+à›MkÂ÷š…ij
·Ü–ˆ«ò‚?ˆœúäc½øåunû]¹Iïåè› ç ¯[ð&©¥Ýxn;6>}²’'`IË0ÁèN}zö5éâ©âr\¢0¥ñs^Ml¿«%®ýM$¥F•–ç‘Øj÷Ze¦£k
2¥ô"FqÀ`„~5Ùü+Ò¤—QºÕ†GÙ—Ë‹ çqä°=¶ÏûÔÍcá¶¡/ˆ¤[ý†iK ™°"ó•Æp;`t¯MÑt}+@²¶Óí·Ídy’3mÕË‘’zc€0 íyÎq„ž ¬4×5[_]Rë{]ì¬UZ±p÷^åØÞÈ[©&OúÝÛ‚‚s÷zžIïßó btÎΪ\ya¾U;C¤t*IÎFF3Џ™c
1žYD…U° êÄàõë\oŒ¼a ‡c[[GŽãP‘7 â znÈ>Ãü3ñ˜,=lUENŒäô¾ÚÀÓ[_ð9 œ´JçMy©E¢Àí}x,bpAó¦üdcûŒW9?Å[Há$¿¹pÄ™#^9O88©zO=«Ë!µÖüY¨³ªÍy9ûÒ1 úôÚ»M?àô÷«ÞëÖ–ÙMÌ#C&ßnJ“Üp#Ђ~²†G–àíekϵío»_žŸuΨQ„t“ÔÛ²øáû›´W6»Øoy FQÎr $Óõìk¬„‹ïÞÚ¼sÆíòÉ67\míÎyF¯ð¯TÓã’K;ë[ð·ld«7üyíšÉ𯊵 êáeYžÏq[«&vMÀðßFà}p3ÅgW‡°8ØßVín›þšõ³¹/ ü,÷ií|’‘´R,®ŠÉ‡W“Ž1ØöëÓ¾xžÖÞ¹xÞݬXZGù\’vŒž˜ÆsØúÓïí&ÒÒ{]Qž9£Ê¡ù·ÄÀ»¶áHäž™5—ìö« -&ù¤U<±ÉÆA>½ý+æg
jžö륢þNÛ=÷JÖÛfdÔ õýËúû‹ÓØB²¬fInZ8wÌÉЮ~aƒÎ=3ìx‚+/¶äÁlŠ‚?™Æü#8-œ\pqTZXtè%»»&ÚÝ#´ŠðÜžã§Í’¼{p·ß{m>ÞycP¨’¼¢0ú(Rƒë^Ž ñó¼(»y%m´ÕÙ}ÊûékB1¨þÑ®,#Q)ó‡o1T©ÜÃ*Ž‹‚yö<b‰4×H€“ìÐ.
¤²9ÌŠ>„Žãøgšñ
¯Š~)¸ßå\ÛÛoBŒa·L²œg$‚Iã¯ZÈ—Æ~%”äë—È8â)Œcƒ‘Âàu9¯b%)ÞS²¿Ïïÿ 4Öºù}Z/[H%¤vÉ#Ì’x§†b
© ³´tÜ{gn=iï%õªÇç]ܧ—!åw„SÓp ·VÈÏ¡?5Âcâb¥_ĤŠz¬—nàþÖΟñKÄöJé=ÌWèêT‹¸÷qÎჟ•q’zWUN«N/ØO^Ÿe|í¾©k{üõ4öV^ïù~G¹êzÂèº|·÷×[’Þ31†rpjg·n
Æ0Ý}kåË‹‰nîe¹ËÍ+™ÏVbrOç]'‰¼o®xÎh`¹Ç*±ÙÚ!T$d/$žN>¼WqᯅZ9ÑÒO\ÜÛê1o&,-z ~^NCgNÕéá)ÒÊ©7‰¨¯'Õþ¯þ_¿Ehîþóâ €ï¬uÛûý*ÎK9ä.â-öv<²‘×h$àãúW%ö¯~«g-ÕõÀàG~>Zú¾Iš+(šM³ Û#9äl%ðc¬ ûÝ xÖKG´x®|¸¤Ï™O:Ê8Ã’qÉcÔä‚yÇNJyËŒTj¥&µOmztjÿ ?KëaµÔù¯áýóXøãLeb¾tžAÇû`¨êGBAõ¾•:g˜’ù·,þhÀ`¬qÜ` e·~+å[±ý“âYÄjWì—µHé±ø?Nõô>½âX<5 Ç©ÏѼM¶8cܪXŽÉ^r?¼IróÈS•ZmÇ›™5»òÚÚ7ïu«&|·÷•Ά
>[©ÞXHeS$Œyà€ ÷ù²:ò2|óãDf? Z¼PD¶ÓßC(xÆ0|©ßR;ôMsÿ µ´ÔVi¬,͹›Ìxâi˜`¹,GAéÇlV§ÄýF×Yø§ê–‘:Ã=ò2³9n±ÉžØÏ@yÎWžæ±Ãàe„ÄÒN ]ïòêìú_Go'¦ŽÑ’_×õЯðR66þ!›ÑÄ gFMÙ— äžäqôÈ;ÿ eX<#%»Aö‰ãR¤ Í”Ž¹È G&¹Ÿƒ&á?¶Zˆ±keRè Kãnz·ãŠÕøÄÒÂ9j%@®×q±ÜŒý[õ-É$uíè&¤¶9zÇï·Oøï®ÄJKšÖìdü"µˆ[jײÎc;ã…B(g<9nàȯG½µŸPÓ.´Éfâ¼FŽP
31 ‘ÏR}<3šä~
Ã2xVöî Dr
Ç\›}Ý#S÷ÈÀëŽHÆI®à\OçKuäI¹†ó(”—GWî ñ³¹¸æ2¨›‹ºÚû%¾ýÖ_3ºNú¯ëúì|ÕÅÖ‰}ylM’ZËîTÿ á[ðÐñ/ˆ9Àû
¸ón3 Mòd‘÷ döª^.Êñް›BâîNp>cëÏçÍzïÃôÏ
YÍ%ª¬·ãÏ-*9ÜÂãhéŒc¾dÈêú¼Ë,. VŠ÷çeÿ n/¡¼äãõâ=‹xGQKx”|¹bÌŠD@2Œ 8'Ž àúƒŽ+áDÒ&¡¨"Œ§–Žr22 Ç·s]ŸÄ‹«ð%ÚÄ<¹ä’(×{e›HÀqÁç©Ç½`üŽÚõK饚9ƒÄ±€<–úƒú~ çðñO#Í%iKKlµ¦¾F)'Iê¬Î+Ç(`ñ¾£œdÈ’`™ºcßéé^ÿ i¸”Û\ý¡æhÔB«aq¸}ãÀÆ:ÜWƒ|FÛÿ BŒÇÀeaŸ-sÊ€:úW½ÜÝÜ<%$µ†%CóDªÀí%IÈÏʤ…ôäñÞŒ÷‘a0“ôŽÚë¤nŸoW÷0«e¶y'Å»aΗ2r’# Û°A^ý9ÉQÔõ=ù5¬£Öü.(Þ’M$~V«=éSÄFN½®©ÔWô»ÿ þHžkR‹ìÏ+µµžöê;khÚI¤m¨‹Ôš–âÖçJ¾_Z•’6a”Èô> ÕÉaÕ<%®£2n bQŠå\tÈõUÿ ø»þ‹k15‚ÃuCL$ݹp P1=Oøýs¯^u éEJ”–éêŸê½5ýzy›jÛ³á›Ûkÿ ÚOcn±ÛÏîW;boºz{ãžüVÆ¡a£a5½äÎÂks¸J@?1è¿{$ä‘=k”øsÖ^nŒ¦)ÝåXÃíùN1ØõÚOJë–xF÷h¸ Œ"Ž?x䜚ü³ì¨c*Fœ¯i;7~ñí׫Ðó¥Ë»3Ãü púw ‰°<Á%»ñž ÿ P+Û^ ¾Ye£ŽCÄŒ„/>˜>•á¶Ìm~&&À>M[hÈÈÿ [Ž•íd…RO@3^Ç(ʽ*¶ÖQZyßþ
1Vº}Ñç?¼O4Rh6R€ª£í¡ûÙ
a‚3ß·Õ
ü=mRÍ/µ9¤‚0ÑC¼Iè:cŽsÛ¾™x£ÆÐ¬ªÍöˢ샒W$•€Å{¨ÀPG
ÀÀàŸZìÍ1RÉ0´ðxEË9+Éÿ ^rEÕ—±Š„70l¼áË@û.' ¼¹Žz€N3úUÉ<3á×*?²¬‚ä†"Ùc=p íÛ'¡ª1ñ"økJ†HÒ'»Ÿ+
oÏN¬Ã9 dÙãÜדÏâÍ~æc+j·Jzâ7(£ðW]•æ™?nê´º6åwéåç÷N•ZŠíž›¬|?Ðõ?Ñ-E…®³ÇV$~X¯/…õ x‘LˆÑÜÚÈ7¦pzãÜüë½ðÄ^õtÝYËÍ7ÉÖÕ8ÏUe# #€r=sU¾/é’E§jRC4mxNÝ´9†íuá»›V‘
ZI€×cr1Ÿpzsøf»¨åV‹ìû`qËLÊIã?\~¼³áËC©êhªOîO»‘ÃmçÛçút×¢x“Z}?Üê#b-¤X7õÄò gž zzbº3œm*qvs·M=íúéw}¿&Úª°^Ö×µÏ(ø‡â†Öµƒenñý†×åQáYûœ÷ÇLœôÎNk¡ð‡¼/µ¸n0æÉ0¬ƒ‚üîÉÆvŒw®Sáö”š¯‹-üÕVŠØÙ[$`(9cqƒÔ_@BëqûÙ`Ýæ0;79È?w<ó |ÙÜkßÌ1±Ëã¿ìÒ»ðlìï«ÓnªèèrP´NÏš&ŽéöÙ¸÷æ°~-_O'‰`°!RÚÚÝ%]Ø%þbß1'¿ÿ XÕáOöÎŒ·‹¬+Åæ*ÛÛ™0¤ƒOÍÔ`u¯¦ÂaèÐÃÓ«‹¨Ô¥µœ¿¯ÉyÅÙ.oÔôŸ Úx&(STðݽ¦õ] ’ÒNóÁäÈùr3í·žÚ[™ƒ¼veÈ÷ÞIõÎGlqÎ=M|«gsªxÅI6
]Z·Îªä,¨zŒŽÄ~#ØŠúFñiÉqc©éÐD>S딑 GñŽ1éÐ^+
Ëi;Ô„µVÕú»i¯ÈÒ-ZÍ]òܘ®ì`bÛÙ¥_/y(@÷qÐúg Ô÷W0.Ø›
6Ò© r>QƒŒ0+Èîzb¨É+I0TbNñ"$~)ÕÒ6Þ‹{0VÆ27œWWñcÄcX×íôûyKZéðªc'iQ¿¯LaWŠŸS\·Š“źʸ…ôÙÂí|öÀÇåV|!¤ÂGâÛ[[’ï
3OrÙËPY¹=Î1õ5öåTžÑè Ú64/üö?Zëžk}¬¶éàoá¾á}3“ü]8Éæ¿´n²Žš_6¾pœ)2?úWÓÚ¥¾¨iWúdŽq{*ª1rXŒd…m»‰äcô¯–dâ•ã‘Jº¬§¨#¨®§,df«8ÉÅßN¾hˆ;îÓ=7áùpën®É 6ûJžO2^œÐò JÖø¥²ã›Ò6Ü·‰!wbÍ‚¬O©»õ¬ÿ ƒP=Ä:â¤-&ÙŽ
`È9 r9íϧzë> XÅ7ƒ5X–krÑ¢L7€ìw}ÑŸNHëŒüþ:2†á¼+u·á÷N/Û'Ðç~ߘô«ëh!ónRéeQ´6QÛÿ èEwëÅÒ|¸Yqó1uêyùzð8 ƒŠù¦Ò;¹ä6öi<'ü³„[ÃZhu½ ùÍ¡g‚>r¯×ŠîÌx}bñ2“k꣧oø~›hTèóËWò4|ki"xßQ˜Ï6øÀLnß‚0 ¹Æ{±–¶Öe#¨27È@^Ìß.1N¾œyç€õ†ñeé·Õã†çQ°€=Ì©ºB€Ø8<‚ÃSõ®ùcc>×Ú .Fr:žÝGæ=kÁâ,^!Fž
¬,àµ}%¶«îõ¹†"r²ƒGœüYÕd?aÑÃY®49PyU ÷þ!žxÅm|/‚ãNð˜¼PcûTÒ,¹/Ý=FkÏ|u¨¶«âë…{¤m¢]Û¾ïP>®XãÞ½iÓÁ¾
‰'¬–6ß¼(„ï— í!úÙäzôë^–:œ¨å|,_¿&š×]uÓѵÛô4’j”bž§x‘Æ©ã›á,‚[Ô
ÎÞ= ŒËæ ÀùYÁ?ŽïÚ¼?ÁªxºÕÛ,°1¸‘¿ÝäãØ¯v…@¤åq½ºã œàûââ·z8Xýˆþz~—û»™âµj=Ž
â~ãáh@'h¼F#·Üp?ŸëQü-løvépx»cŸø…lxâÃûG·‰¶ø”L£©%y?¦úõÆü-Õ¶¥y`Òl7>q’2üA?•F}c‡jB:¸Jÿ +§¹¿¸Q÷°ív=VÑìu[Qml%R7a×IèTõéŽx¬
?†š7
1†îã-ˆã’L¡lŽ0OÓ=ÅuˆpÇ•¼3ÛùÒ¶W/!|’wŽw^qÔ×ÏaóM8Q¨ãÑ?ëï0IEhÄa¸X•`a
?!ÐñùQ!Rä žqŽžÝO`I0ÿ J“y|ñ!Îã@99>þ8–+éáu…!ù—ä
ʰ<÷6’I®z
ÅS„¾)Zþ_Öýµ×ËPåOwø÷þ*üïænÖùmØÝûþ¹=>¦½öî×Jh]¼ç&@§nTŒ6ITÀõ^Fxð7Å3!Ö·aÛ$þÿ ¹ã5îIo:ȪmËY[’8ÇӾlj*òû¢¥xõ¾¼ú•åk+\ð¯ HÚoŽl•Ûk,¯ ç²²cõÅ{²Z\
´ìQ åpzŽ3Ôð}ÿ Jð¯XO¡øÎé€hÙ¥ûLdŒ`““ù6Gá^ÃáÝ^Ë[Ñb¾YåŒÊ»dŽ4†2§,;ÿ CQÄ´¾°¨c–±”mºV{«ßÕýÄW\ÖŸ‘çŸ,çMRÆí“l-ƒn~ë©ÉÈê Ü?#Ž•¹ðãSÒ¥ÐWNíà½;ãž)™ÎSÈ9cóLj뵿ūiÍk¨ió¶X‚7÷ƒ€yãnyÏŽëÞ Öt`×À×V's$È9Ú:ä{wÆEk€«†Çàc—â$éÎ.éí~Ýëk}ÅAÆpörÑ¢‡Šl¡ÑüSs‹¨‰IÄóÀ×wñ&eºðf™pŒÆ9gŽTø£lñëÀçŽ NkÊUK0U’p ï^¡ãÈ¥´ø{£ÙHp`’ØåbqÏ©äó^Æ:
Ž' ÊóM«õz+ß×ó5Ÿ»('¹ð¦C„$˜Å¢_ºÈI?»^äã'ñêzž+ë€ñ-½»´}¡Ë*õ?.xÇ^1ŽMyǸ&“—L–îëöâ7…' bqéÎGé]˪â1$o²¸R8Ã`.q€}sÖ¾C98cêÆÞíïóòvÓòùœÕfÔÚéýuèÖ·Ú
Å‚_¤³ÜۺƑß”àרý:׃xPþÅÕî-/üØmnQìïGΊÙRqê=>¢½õnæ·r!—h`+’;ò3È<“Û©éšóŸx*÷V¹¸×tÈiˆßwiÔÿ |cŒñÏ®3ֽ̰‰Ë Qr©ö½®¼ÛoÑÙZÅÑ«O൯ýw8;k›ÿ x†;ˆJa;‘º9÷÷R+¡ñgŽí|Iáë{ôáo2ʲ9 029ÉÏLí\‰¿¸Ÿb˜ "Bv$£ßiê>=ªª©f
’N ëí>¡NXW~5×úíø\‰»½Ï^ø(—wÖú¥¤2íŽÞXæÁ$°eÈ888^nÝë²ñÝÔ^ ÖÚ9Q~Ëå7ï
DC¶ÑµƒsËÇè9®Wáþƒ6‡£´·°2\Ý:ÈÑ?(#¨'$õèGJ¥ñW\ÿ ‰E¶—¸™g˜ÌÀ¹;Pv ú±ÎNs·ëŸ’–"Ž/:té+ûË]öJöÓM»ëø˜*‘•^Uý—êd|‰åñMæÔÝ‹23å™6æHùÛ‚ëüñ^…ñ1¢oêûÑEØ.õ7*ÅHtÎp{g<·Á«+¸c¿¿pÓ¾Æby=8É_ÄsÆk¬ñB\jÞÔì••Ë[9Píb‹Bヅ =93§ð§LšÛáÖšÆæXÌÞdÛP.0\ãïÛ0?™úJ¸™Ë
”•œº+=<µI£¦í¯õêt¬d‹T¬P=ËFêT>ÍØØ@Ï9<÷AQÌ×»Õ¡xùk",JÎæù±Éç$œŽŸZWH®¯"·UÌQ ’ÙÈ]ÅXg<ã
ߨg3-Üqe€0¢¨*Œ$܃
’Sû 8㎼_/e'+Ï–-èÓ¶¶Õíß[·ÙÙ½îì—¼sk%§µxä‰â-pÒeÆCrú
ôσžû=”šÅô(QW‚Õd\ƒæ. \àö¹¯F½°³½0M>‘gr÷q+œ¶NïºHO— ¤ ܥݔn·J|ÆP6Kµc=Isó}Ò çGš)a=—#vK›åoK§ßóÙ¤¶¿õú…ÄRÚ[ËsöÙ¼Ë•Ë ópw®qœŒ·Ø
ùÇâ‹ý‡ãKèS&ÞvûDAù‘É9ŒîqÅ}
$SnIV[]Ñ´Ó}ØÜ¾A Ü|½kÅþÓ|EMuR¼.I¼¶däò‚ÃkÆ}ðy¹vciUœZ…Õõ»z¾÷¿n¦*j-É/àœHã\y5 Û ß™ó0—äŸnzôã#Ô¯,†¥ÚeÔ÷ÜÅ´„“'c…<íÝ€<·SŠ¥k§Ã¢éÆÆÙna‚8–=«Êª[Ÿ™°pNî02z“ÔÙ–K8.È’Þî(vƒ2®@ äÈûãçžxäÇf¯ˆu¹yUÕîýWšÙ|›ëÒ%Q^í[æ|éo5ZY•^{96ˆY‚§v*x>âº_|U¹Ö´©tûMÒÂ9PÇ#«£#€ éÉñ‘ƒÍz/‰´-į¹°dd,Б›p03ƒœ{ç9=+
Ûᧇ¬¦[‡‚ê婺¸#±ß=³ý¿•Õµjñ½HÙh›Û[§ÚýÊöô÷{˜?ô÷·Ô.u©–_%còcAÀ˜’
}0x9Î>žñÇáÍ9,ahï¦Ì2òÓ ñÛAäry$V²Nð
]=$Ž
‚#Ù‚1ƒƒødõMax‡ÂÖ^!±KkÛ‘
«“Çó²FN8+ëÎ{Ò¼oí§[«ÕMRoËeç×[_m/¦¦k.kôgŽxsSÓ´ý`êzªÜÜKo‰cPC9ÎY‰#§^üý9¹âïÞx£Ë·Ú`±‰‹¤;³–=ÏaôÕAð‚÷kêÁNBéÎælcõö®£Fð†ô2Ò¬]ßÂK$ÓÜ®•”/ÊHàã$ä¸÷ëf¹Oµúâ“”’²øè´µþöjçNü÷üÌ¿ xNïFÒd»¼·h®îT9ŽAµÖ>qÁçÔœtïÒ»\ȶÎîcÞäîó3¶@#ÉIÎ ÔñW.<´’¥–ÑÑ€ÕšA‚ ;†qÓë‚2q
ÒÂó$# Çí‡
!Ë}Õ9ÈÎÑÉã=;ŒÇÎuñ+ÉûÏ¥öíeÙ+$úíÜ娯'+êZH4ƒq¶FV‹gïŒ208ÆÌ)íб>M|÷âÍã¾"iì‹¥£Jd´™OÝç;sÈúr+ÜäˆË)DŒ¥šF°*3Õ”d{zÔwºQ¿·UžÉf†~>I+ŒqÔ`ð3œ“Ü×f]œTÁÔn4“ƒø’Ýßõ_«*5šzGCÊ,þ+ê1ò÷O¶¸cœºb2yÇ;cùÕ£ñh¬›áÑŠr¤ÝäNBk¥—á—†gxšX/쑘hŸ*Tçn =ûã¦2|(ð¿e·ºÖ$
ýìŸ!'åΰyîî+×öœ=Y:²¦ÓÞ×iü’—ü
-BK™£˜›âÆ¡&véðõ-ûÉY¹=Onj¹ø¯¯yf4·±T Pó`çœ7={×mÃ/¢˜ZÚòK…G½¥b„’G AãÜœ*í¯Ã¿ IoæI¦NU8‘RwÈã;·€ Û×ëÒ”1Y
•£E»ÿ Oyto¢<£Áö·šï,䉧ûA¼sû»Nò}¹üE{ÜÖªò1’õÞr0â}ÎØ#>à/8ïéÎ~—áÍ#ñÎlí§³2f'h”?C÷YËdð:qëõÓ·‚ïeÄ©
ÔÈØÜRL+žAÎ3¼g=åšó³Œt3
ÑQ¦ùRÙßE®¼±w_;þhš’Sirÿ ^ˆã¼iੇ|RòO„m°J/“$·l“ ÇÓ¿ÿ [ÑŠÆ“„†Õø>cFÆ6Ø1ƒ– àz7Ldòxäüwá‹ÝAXùO•Úý’é®ähm •NÀ±ÌTÈç
ƒ‘I$pGž:‚ÄbêW¢®œ´|¦nÍ>¶ÖÏ¢§ÎÜ¢ºö¹•%ÄqL^öÛKpNA<ã¡ …î==ª¸óffËF‡yÌcÉ ©ç$ð=ñÏYþÊ’Ú]—¥‚¬‚eDïÎH>Ÿ_ÌTP™a‰ch['çÆÜò7a‡?w°Ïn§âÎ5”’¨¹uÚÛ|´ÓÓc§{O—ü1•ªxsÃZ…ÊÏy¡Ã3¸Ë2Èé» ‘ƒÎ äžÜðA§cáOéúÛ4ý5-fŒï„ù¬ûô.Ç Üsž•Ò¾•wo<¶Ÿ"¬¡º|£
î2sÇ¡éE²ÉFѱrU°dÜ6œ¨ mc†Îxë׺Þ'0²¡Rr„{j¾í·è›µ÷)º·å–‹î2|I®Y¼ºÍË·–ÃÆàã£'óÆxƒOÆÞ&>\lóÌxP Xc¸ì Sþ5§qà/ê>#žÞW¸if$\3 ® ûÄ“ùŽÕê¾ð<Ó‹H¶óÏ" å·( á‘€:ã†8Ï=+ꨬUA×ÃËÚT’ÑÞöù¥¢]{»ms¥F0\ÑÕ—ô}&ÛB´ƒOŽÚ+›xíÄÀ1
,v± žIëíZ0ǧ™3í2®0ทp9öÝÔž)ÓZËoq/Ú“‘L ²ŒmùŽï‘Ó9§[Û#Ä‘\ÞB¬Çs [;à à«g‚2ôòªœÝV§»·¯/[uó½õÛï¾
/šÍ}öüÿ «=x»HŸÂÞ.™ ÌQùŸh´‘#a$‚'¡u<Š›Æ>2>+ƒLSiöwµFó1!eg`£åœ ÷ëÛö}Á¿ÛVÙêv $¬ƒ|,s÷z€ð΃¨x÷ÅD\ÜŒÞmåÔ„ ˆ o| :{ÇÓ¶–òÁn!´0Ål€, ƒ ( ÛŒŒc¶rsšæ,4‹MÛOH!@¢ ÇŽ„`å²9ÝÃw;AÍt0®¤¡…¯ØÄ.Àìí´ƒ‘ßñ5Í,Óëu-ÈÔc¢KÃÓ£òÖ̺U.õL¯0…%2È—"~x
‚[`có±nHàŽyàö™¥keˆìŒÛFç{(Ø©†`Jã#Žwg<“:ÚÉ;M
^\yhûX‡vB·÷zrF?§BÊÔ/s<ÐÈB)Û± ·ÍÔwç5Âã:så§e{mѤï«Òíh—]Wm4âí¿ùþW4bC3¶ª¾Ùr$pw`àädzt!yŠI„hÂîàM)!edŒm'æ>Ç?wzºKìcŒ´¯Ìq6fp$)ãw¡éUl`µ»ARAˆÝÕgr:äŒgƒéé[Ôö±”iYs5Ýï«ÙG—K=þF’æMG«óÿ `ŠKɦuOQ!ÕåŒ/ÎGÞ`@ËqÕzdõâ«Ê/Ö(ƒK´%ŽbMüåÜŸö—>¤óŒŒV‘°„I¢Yž#™¥ùÏÊ@8
œgqöö5ª4vד[¬(q cò¨À!FGaÁõõ¯?§†¥ÏU½í¿WªZ$úyú½Žz×§Éþ?>Ã×È•6°{™™ŽÙ.$`ÎUœ…çè ' ¤r$1Ø(y7 ðV<ž:È ÁÎMw¾Â'Øb§øxb7gãО½óÉÊë²,i„Fȹ£§8ãä½k¹¥¦ê/ç{ïê驪2œ/«ü?¯Ô›ìñÜ$þeýœRIåŒg9Ác’zrrNO bÚi¢
ѺË/$,“ª¯Ýä;Œ× ´<ÛÑn³IvŸb™¥ nm–ÄŸ—nÝÀãŽ3ëÍG,.öó³˜Ù£¹uÊÌrŠ[<±!@Æ:c9ÅZh
ì’M5ÄìÌ-‚¼ëÉùqŽGì9¬á ;¨A-ž—évþÖ–^ON·Ô”ŸEý}ú×PO&e[]ÒG¸˜Ûp ƒÃà/Ë·8ûÀ€1ž@¿ÚB*²¼ñì8@p™8Q“žÆH'8«I-%¸‚
F»“åó6°Uù|¶Ú¸ã ò^Äw¥ŠÖK–1ÜÝK,Žddlí²0PÀü“×ükG…¯U«·¶–´w¶ŽÍ¾©yÞú[Zös•¯Á[™6°
¨¼ÉVæq·,#
ìãï‘×8îry®A››¨,ãc66»Ë´ã'æÉù?t}¢æH--Òá"›|ˆ¬[í 7¶ö#¸9«––‹$,+Ëqœ\Êøc€yê^ݸÄa°«™B-9%«×®‹V´w~vÜTéꢷþ¼ˆ%·¹• ’[xç•÷2gØS?6åÀÚ õ9É#š@÷bT¸º²C*3Bá¤òÎA9 =úU§Ó"2Ãlá0iÝIc‚2Î@%öç94ùô»'»HÄ¥Ô¾@à Tp£šíx:úÊ:5eºßMý×wµ›Ó_+šº3Ýyvÿ "ºÇ<ÂI>Õ1G·Ë«È«É# àÈÇ øp Jv·šæDûE¿›†Ë’NFr2qŸ½ÇAÜšu•´éí#Ħ8£2”Ú2Ã/€[ÎTr;qŠz*ý’Îþ(≠;¡TÆâ›;ºÿ àçœk‘Þ8¾Uª¾íé{^×IZéwÓkXÉûÑZo¯_øo×È¡¬ â–ÞR§2„‚Àœü½ùç® SVa†Âüª¼±D‘ŒísŸàä|ä2 æ[‹z”¯s{wn„ÆmáóCO+†GO8Ïeçåº`¯^¼ðG5f{Xžä,k‰<á y™¥voÆ éÛõëI=œ1‹éíÔÀÑ)R#;AÂncäŽ:tÏ#¶TkB.0Œ-ÖÞZÛgumß}fÎJÉ+#2êÔP£žùÈÅi¢%œ3P*Yƒò‚A쓎2r:ƒÐúñiRUQq‰H9!”={~¼“JŽV¥»×²m.ÛߺiYl¾òk˜gL³·rT•
’…wHÁ6ä`–Î3ùÌ4Øe³†&òL‘•%clyîAÂäà0 žüç$[3uŘpNOÀÉ=† cï{rYK
ååä~FÁ
•a»"Lär1Ó¯2Äõæ<™C•.fÕ»è¥~½-¿g½Â4¡{[ør¨¶·Žõäx¥’l®qpwÇ»8ärF \cޏܯÓ-g‚yciÏÀ¾rÎwèØÈ#o°Á9ã5¢šfÔxÞæfGusÏÌJÿ µ×œ/LtãÅT7²¶w,l
ɳ;”eúà·¨çîŒsÜgTÃS¦^ '~‹®›¯+k÷ZÖd©Æ*Ó[Ü«%Œk0ŽXƒ”$k#Ȩ P2bv‘ƒŸáÇ™ÆÕb)m$É*8óLE‘8'–ÜN Úyàúô+{uº±I'wvš4fÜr íì½=úuú
sFlìV$‘ö†HÑù€$§ õ=½¸«Ž]
:Ž+•¦ïmRþ½l´îÊT#nkiøÿ _ðÆT¶7Ò½ºÒ£Î¸d\ã8=yãŽÜäR{x]ZâÚé#¸r²#»ÎHÆ6õ ç® ÎFkr;sºÄ.&;só±Ç9êH÷ýSšÕtÐU¢-n Ì| vqœ„{gŒt§S.P‹’މ_[;m¥ÞZýRûÂX{+¥úü¼ú•-àÓ7!„G"“´‹žƒnrYXã¸îp éœ!ÓoPÌtÑ (‰Þ¹é€sÓ#GLçÕšÑnJý¡!‘Tä#“ß?îýp}xÇ‚I¥Õn#·¸–y'qó@r[ Êô÷<ÔWÃÓ¢áN¥4Ô’I&ݼ¬¬¼ÞºvéÆ
FQV~_ÒüJÖÚt¥¦Xá3BÄP^%ÈÎW-×c¡ú©¤·Iþèk¥š?–UQåIR[’O 5x\ÉhÆI¶K4«2ùªŠŒ<¼óœçØ`u«‚Í.VHä€ Ëgfx''9ÆI#±®Z8
sISºku¢ßÞ]úk»Jößl¡B.Ü»ÿ MWe
°·Ž%šêɆ¼»Âù³´œ O¿cÐÓÄh©"ÛÜÏ.ÖV’3nüÄmnq[ŒòznšÖ>J¬òˆæ…qýØP Ž:ä7^0yëWšÍ_79äoaÈ °#q0{ää×mœy”R{vÒÞ¶ÚÏe¥“ÚÆÐ¥Ì®—õýjR •íç›Ìb„+JyÜØÙ•Ç]¿Ôd þËOL²”9-Œ—õÃc'æÝלçÚ²ìejP“½
âù°¨†ðqòädЃÉäÖÜj÷PÇp“ÍšŠå«‘î
<iWNsmª»¶vÓz5»ûì:Rs\Ðßôû×uÔÿÙ