FWDw9pN:X YYyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yYyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{NYyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&YyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~YyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_YyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJaYyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9}YyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]EYyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'96YyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkYyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"YyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& YyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& z-#z^#zg#zp#zy$zL$z^$zu$z$z$z$z%z%z;%z%z%z%z%\m%z# &z)&z.,&z3<&z8L&z=\&zBl&zN|&YyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& z-#z^#zg#zp#zy$zL$z^$zu$z$z$z$z%z%z;%z%z%z%z%\m%z# &z)&z.,&z3<&z8L&z=\&zBl&zN|&$ 4+$&+$'+$++$-,$.+,$/I,$0,$2,$8,$9,$?-$@-$BA-$CZ-$E-$F-$G-$H-$I.$J.$N9.$Vq.$W|.$X.$Z.$[.$\.$]/$_4/$`K/$a/$c/$d/$e/$f0$g'0$jL0$mg0$o0$p0$r0$t1$u"1$z.1$}F1$V1$b1$1$1$1$1$1$2$2$42$_2$2$2$2$3$)3$G3$q3$3$3$3$4$C4$m4$4$4$4$5$G5$5$5$5$5$6$6$06$H6$`6$g6$6YyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& z-#z^#zg#zp#zy$zL$z^$zu$z$z$z$z%z%z;%z%z%z%z%\m%z# &z)&z.,&z3<&z8L&z=\&zBl&zN|&$ 4+$&+$'+$++$-,$.+,$/I,$0,$2,$8,$9,$?-$@-$BA-$CZ-$E-$F-$G-$H-$I.$J.$N9.$Vq.$W|.$X.$Z.$[.$\.$]/$_4/$`K/$a/$c/$d/$e/$f0$g'0$jL0$mg0$o0$p0$r0$t1$u"1$z.1$}F1$V1$b1$1$1$1$1$1$2$2$42$_2$2$2$2$3$)3$G3$q3$3$3$3$4$C4$m4$4$4$4$5$G5$5$5$5$5$6$6$06$H6$`6$g6$68?:83:85:86:87;88;;8:e;8A;8H;8J;8K<8P@<8Rw<8Z<8[<8d<8f=8h8=8ib=8j=8k=8l=8u&>8v=>8xO>8|w>8>8>8?8a@8z@8@8@8A85A8SA8sA8A8A8 B8B8YB8B8B8B8B8C8CC8qC8)C8-CYyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& z-#z^#zg#zp#zy$zL$z^$zu$z$z$z$z%z%z;%z%z%z%z%\m%z# &z)&z.,&z3<&z8L&z=\&zBl&zN|&$ 4+$&+$'+$++$-,$.+,$/I,$0,$2,$8,$9,$?-$@-$BA-$CZ-$E-$F-$G-$H-$I.$J.$N9.$Vq.$W|.$X.$Z.$[.$\.$]/$_4/$`K/$a/$c/$d/$e/$f0$g'0$jL0$mg0$o0$p0$r0$t1$u"1$z.1$}F1$V1$b1$1$1$1$1$1$2$2$42$_2$2$2$2$3$)3$G3$q3$3$3$3$4$C4$m4$4$4$4$5$G5$5$5$5$5$6$6$06$H6$`6$g6$68?:83:85:86:87;88;;8:e;8A;8H;8J;8K<8P@<8Rw<8Z<8[<8d<8f=8h8=8ib=8j=8k=8l=8u&>8v=>8xO>8|w>8>8>8?8a@8z@8@8@8A85A8SA8sA8A8A8 B8B8YB8B8B8B8B8C8CC8qC8)C8-CE9LELELELELELEeMEMEMEME NE0NEGNELNENENE OE7OEgOEOEOEOEOEPENPEiPEPEPEPEQEQEXQEQEQEQEQEQERE QRE4RE5RE5RE6RE6RE7SE8 SE9-SE:?SE;QSE;jSE<xSE<SE>SE@SEB9TECcTEEpTEFTEGTEHTEI#UEK4UEMUENUEOUEPUES VEUWVEVvVEWVEYVEYVEZVE[WE]XWE_WEaWEbXEc%XEdLXEe]XEguXEhXEi-YEj?YEkQYElcYEozYEpYEqYErYEtZEuZEy&ZE{8ZEQZEcZEZE\[Eo[E[E[E[E[E\E\EJ\Eb\E\E\E]E ]E8]Ec]E]E]E]E]E]E^E"^E4^EF^EX^Ej^E^E^E_E>_EP_Ep_E_E_E_E`E `E9`EW`En`E`E`E`EaEaEaE7aECaEJaEaaEsaEaEaEaEaEbE{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& z-#z^#zg#zp#zy$zL$z^$zu$z$z$z$z%z%z;%z%z%z%z%\m%z# &z)&z.,&z3<&z8L&z=\&zBl&zN|&$ 4+$&+$'+$++$-,$.+,$/I,$0,$2,$8,$9,$?-$@-$BA-$CZ-$E-$F-$G-$H-$I.$J.$N9.$Vq.$W|.$X.$Z.$[.$\.$]/$_4/$`K/$a/$c/$d/$e/$f0$g'0$jL0$mg0$o0$p0$r0$t1$u"1$z.1$}F1$V1$b1$1$1$1$1$1$2$2$42$_2$2$2$2$3$)3$G3$q3$3$3$3$4$C4$m4$4$4$4$5$G5$5$5$5$5$6$6$06$H6$`6$g6$68?:83:85:86:87;88;;8:e;8A;8H;8J;8K<8P@<8Rw<8Z<8[<8d<8f=8h8=8ib=8j=8k=8l=8u&>8v=>8xO>8|w>8>8>8?8a@8z@8@8@8A85A8SA8sA8A8A8 B8B8YB8B8B8B8B8C8CC8qC8)C8-CE9LELELELELELEeMEMEMEME NE0NEGNELNENENE OE7OEgOEOEOEOEOEPENPEiPEPEPEPEQEQEXQEQEQEQEQEQERE QRE4RE5RE5RE6RE6RE7SE8 SE9-SE:?SE;QSE;jSE<xSE<SE>SE@SEB9TECcTEEpTEFTEGTEHTEI#UEK4UEMUENUEOUEPUES VEUWVEVvVEWVEYVEYVEZVE[WE]XWE_WEaWEbXEc%XEdLXEe]XEguXEhXEi-YEj?YEkQYElcYEozYEpYEqYErYEtZEuZEy&ZE{8ZEQZEcZEZE\[Eo[E[E[E[E[E\E\EJ\Eb\E\E\E]E ]E8]Ec]E]E]E]E]E]E^E"^E4^EF^EX^Ej^E^E^E_E>_EP_Ep_E_E_E_E`E `E9`EW`En`E`E`E`EaEaEaE7aECaEJaEaaEsaEaEaEaEaEbE{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& z-#z^#zg#zp#zy$zL$z^$zu$z$z$z$z%z%z;%z%z%z%z%\m%z# &z)&z.,&z3<&z8L&z=\&zBl&zN|&$ 4+$&+$'+$++$-,$.+,$/I,$0,$2,$8,$9,$?-$@-$BA-$CZ-$E-$F-$G-$H-$I.$J.$N9.$Vq.$W|.$X.$Z.$[.$\.$]/$_4/$`K/$a/$c/$d/$e/$f0$g'0$jL0$mg0$o0$p0$r0$t1$u"1$z.1$}F1$V1$b1$1$1$1$1$1$2$2$42$_2$2$2$2$3$)3$G3$q3$3$3$3$4$C4$m4$4$4$4$5$G5$5$5$5$5$6$6$06$H6$`6$g6$68?:83:85:86:87;88;;8:e;8A;8H;8J;8K<8P@<8Rw<8Z<8[<8d<8f=8h8=8ib=8j=8k=8l=8u&>8v=>8xO>8|w>8>8>8?8a@8z@8@8@8A85A8SA8sA8A8A8 B8B8YB8B8B8B8B8C8CC8qC8)C8-CE9LELELELELELEeMEMEMEME NE0NEGNELNENENE OE7OEgOEOEOEOEOEPENPEiPEPEPEPEQEQEXQEQEQEQEQEQERE QRE4RE5RE5RE6RE6RE7SE8 SE9-SE:?SE;QSE;jSE<xSE<SE>SE@SEB9TECcTEEpTEFTEGTEHTEI#UEK4UEMUENUEOUEPUES VEUWVEVvVEWVEYVEYVEZVE[WE]XWE_WEaWEbXEc%XEdLXEe]XEguXEhXEi-YEj?YEkQYElcYEozYEpYEqYErYEtZEuZEy&ZE{8ZEQZEcZEZE\[Eo[E[E[E[E[E\E\EJ\Eb\E\E\E]E ]E8]Ec]E]E]E]E]E]E^E"^E4^EF^EX^Ej^E^E^E_E>_EP_Ep_E_E_E_E`E `E9`EW`En`E`E`E`EaEaEaE7aECaEJaEaaEsaEaEaEaEaEbE{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& z-#z^#zg#zp#zy$zL$z^$zu$z$z$z$z%z%z;%z%z%z%z%\m%z# &z)&z.,&z3<&z8L&z=\&zBl&zN|&$ 4+$&+$'+$++$-,$.+,$/I,$0,$2,$8,$9,$?-$@-$BA-$CZ-$E-$F-$G-$H-$I.$J.$N9.$Vq.$W|.$X.$Z.$[.$\.$]/$_4/$`K/$a/$c/$d/$e/$f0$g'0$jL0$mg0$o0$p0$r0$t1$u"1$z.1$}F1$V1$b1$1$1$1$1$1$2$2$42$_2$2$2$2$3$)3$G3$q3$3$3$3$4$C4$m4$4$4$4$5$G5$5$5$5$5$6$6$06$H6$`6$g6$68?:83:85:86:87;88;;8:e;8A;8H;8J;8K<8P@<8Rw<8Z<8[<8d<8f=8h8=8ib=8j=8k=8l=8u&>8v=>8xO>8|w>8>8>8?8a@8z@8@8@8A85A8SA8sA8A8A8 B8B8YB8B8B8B8B8C8CC8qC8)C8-CE9LELELELELELEeMEMEMEME NE0NEGNELNENENE OE7OEgOEOEOEOEOEPENPEiPEPEPEPEQEQEXQEQEQEQEQEQERE QRE4RE5RE5RE6RE6RE7SE8 SE9-SE:?SE;QSE;jSE<xSE<SE>SE@SEB9TECcTEEpTEFTEGTEHTEI#UEK4UEMUENUEOUEPUES VEUWVEVvVEWVEYVEYVEZVE[WE]XWE_WEaWEbXEc%XEdLXEe]XEguXEhXEi-YEj?YEkQYElcYEozYEpYEqYErYEtZEuZEy&ZE{8ZEQZEcZEZE\[Eo[E[E[E[E[E\E\EJ\Eb\E\E\E]E ]E8]Ec]E]E]E]E]E]E^E"^E4^EF^EX^Ej^E^E^E_E>_EP_Ep_E_E_E_E`E `E9`EW`En`E`E`E`EaEaEaE7aECaEJaEaaEsaEaEaEaEaEbE{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& z-#z^#zg#zp#zy$zL$z^$zu$z$z$z$z%z%z;%z%z%z%z%\m%z# &z)&z.,&z3<&z8L&z=\&zBl&zN|&$ 4+$&+$'+$++$-,$.+,$/I,$0,$2,$8,$9,$?-$@-$BA-$CZ-$E-$F-$G-$H-$I.$J.$N9.$Vq.$W|.$X.$Z.$[.$\.$]/$_4/$`K/$a/$c/$d/$e/$f0$g'0$jL0$mg0$o0$p0$r0$t1$u"1$z.1$}F1$V1$b1$1$1$1$1$1$2$2$42$_2$2$2$2$3$)3$G3$q3$3$3$3$4$C4$m4$4$4$4$5$G5$5$5$5$5$6$6$06$H6$`6$g6$68?:83:85:86:87;88;;8:e;8A;8H;8J;8K<8P@<8Rw<8Z<8[<8d<8f=8h8=8ib=8j=8k=8l=8u&>8v=>8xO>8|w>8>8>8?8a@8z@8@8@8A85A8SA8sA8A8A8 B8B8YB8B8B8B8B8C8CC8qC8)C8-CE9LELELELELELEeMEMEMEME NE0NEGNELNENENE OE7OEgOEOEOEOEOEPENPEiPEPEPEPEQEQEXQEQEQEQEQEQERE QRE4RE5RE5RE6RE6RE7SE8 SE9-SE:?SE;QSE;jSE<xSE<SE>SE@SEB9TECcTEEpTEFTEGTEHTEI#UEK4UEMUENUEOUEPUES VEUWVEVvVEWVEYVEYVEZVE[WE]XWE_WEaWEbXEc%XEdLXEe]XEguXEhXEi-YEj?YEkQYElcYEozYEpYEqYErYEtZEuZEy&ZE{8ZEQZEcZEZE\[Eo[E[E[E[E[E\E\EJ\Eb\E\E\E]E ]E8]Ec]E]E]E]E]E]E^E"^E4^EF^EX^Ej^E^E^E_E>_EP_Ep_E_E_E_E`E `E9`EW`En`E`E`E`EaEaEaE7aECaEJaEaaEsaEaEaEaEaEbE{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& z-#z^#zg#zp#zy$zL$z^$zu$z$z$z$z%z%z;%z%z%z%z%\m%z# &z)&z.,&z3<&z8L&z=\&zBl&zN|&$ 4+$&+$'+$++$-,$.+,$/I,$0,$2,$8,$9,$?-$@-$BA-$CZ-$E-$F-$G-$H-$I.$J.$N9.$Vq.$W|.$X.$Z.$[.$\.$]/$_4/$`K/$a/$c/$d/$e/$f0$g'0$jL0$mg0$o0$p0$r0$t1$u"1$z.1$}F1$V1$b1$1$1$1$1$1$2$2$42$_2$2$2$2$3$)3$G3$q3$3$3$3$4$C4$m4$4$4$4$5$G5$5$5$5$5$6$6$06$H6$`6$g6$68?:83:85:86:87;88;;8:e;8A;8H;8J;8K<8P@<8Rw<8Z<8[<8d<8f=8h8=8ib=8j=8k=8l=8u&>8v=>8xO>8|w>8>8>8?8a@8z@8@8@8A85A8SA8sA8A8A8 B8B8YB8B8B8B8B8C8CC8qC8)C8-CE9LELELELELELEeMEMEMEME NE0NEGNELNENENE OE7OEgOEOEOEOEOEPENPEiPEPEPEPEQEQEXQEQEQEQEQEQERE QRE4RE5RE5RE6RE6RE7SE8 SE9-SE:?SE;QSE;jSE<xSE<SE>SE@SEB9TECcTEEpTEFTEGTEHTEI#UEK4UEMUENUEOUEPUES VEUWVEVvVEWVEYVEYVEZVE[WE]XWE_WEaWEbXEc%XEdLXEe]XEguXEhXEi-YEj?YEkQYElcYEozYEpYEqYErYEtZEuZEy&ZE{8ZEQZEcZEZE\[Eo[E[E[E[E[E\E\EJ\Eb\E\E\E]E ]E8]Ec]E]E]E]E]E]E^E"^E4^EF^EX^Ej^E^E^E_E>_EP_Ep_E_E_E_E`E `E9`EW`En`E`E`E`EaEaEaE7aECaEJaEaaEsaEaEaEaEaEbE[P[a[y[[[[[[7[b[[[[/[[[[[J[[[B[o[[.[_[[ [[I[Z[x[[[)[.5[6E[<U[Al[F[L[R[X[^[d[j[p [uE[{[[YyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& z-#z^#zg#zp#zy$zL$z^$zu$z$z$z$z%z%z;%z%z%z%z%\m%z# &z)&z.,&z3<&z8L&z=\&zBl&zN|&$ 4+$&+$'+$++$-,$.+,$/I,$0,$2,$8,$9,$?-$@-$BA-$CZ-$E-$F-$G-$H-$I.$J.$N9.$Vq.$W|.$X.$Z.$[.$\.$]/$_4/$`K/$a/$c/$d/$e/$f0$g'0$jL0$mg0$o0$p0$r0$t1$u"1$z.1$}F1$V1$b1$1$1$1$1$1$2$2$42$_2$2$2$2$3$)3$G3$q3$3$3$3$4$C4$m4$4$4$4$5$G5$5$5$5$5$6$6$06$H6$`6$g6$68?:83:85:86:87;88;;8:e;8A;8H;8J;8K<8P@<8Rw<8Z<8[<8d<8f=8h8=8ib=8j=8k=8l=8u&>8v=>8xO>8|w>8>8>8?8a@8z@8@8@8A85A8SA8sA8A8A8 B8B8YB8B8B8B8B8C8CC8qC8)C8-CE9LELELELELELEeMEMEMEME NE0NEGNELNENENE OE7OEgOEOEOEOEOEPENPEiPEPEPEPEQEQEXQEQEQEQEQEQERE QRE4RE5RE5RE6RE6RE7SE8 SE9-SE:?SE;QSE;jSE<xSE<SE>SE@SEB9TECcTEEpTEFTEGTEHTEI#UEK4UEMUENUEOUEPUES VEUWVEVvVEWVEYVEYVEZVE[WE]XWE_WEaWEbXEc%XEdLXEe]XEguXEhXEi-YEj?YEkQYElcYEozYEpYEqYErYEtZEuZEy&ZE{8ZEQZEcZEZE\[Eo[E[E[E[E[E\E\EJ\Eb\E\E\E]E ]E8]Ec]E]E]E]E]E]E^E"^E4^EF^EX^Ej^E^E^E_E>_EP_Ep_E_E_E_E`E `E9`EW`En`E`E`E`EaEaEaE7aECaEJaEaaEsaEaEaEaEaEbE[P[a[y[[[[[[7[b[[[[/[[[[[J[[[B[o[[.[_[[ [[I[Z[x[[[)[.5[6E[<U[Al[F[L[R[X[^[d[j[p [uE[{[[((((((;(_( (!("(#(YyGzYy1zYy2zYy3zYy4{Yy5/{Yy6@{Yy8L{Yy<{{Yy>{Yy?{Yy@{YyA|YyBJ|YyCc|YyDt|YyE|YyF|YyG|YyH|YyI}Yy[}Yy\}Yy^}Yy_}Yya~Yyb~Yyb)~Yyc5~YyeI~Yyh`~Yyiq~Yyl~Yym~YynYyp Yyq8YysPYyt[YyweYyyqYyzYy{Yy~YyYyYy'YyEYy]YyYyYy؀YyYyYy Yy,YyiYynYýYyYy#YyhYyYyYyYyYyBYygYyYyYyYyYỹYyYyYy<YyA3iYy+yc{.c{ c{yc{c{ c{َc{c{%c{/9c{9c{B֏c{Kc{Tc{YKc{Wfc{bc{kc{tߐc{y c{w(c{_c{yc{c{c{c{c{0c{]c{c{c{c{c{c{&c{=c{[c{c{œc{ғc{c{c{c{-c{Lc{Rc{c{Ȕc{Քc{ c{c{Lc{ c{ c{c{c{ܕc{c{ c{0c{1c{3c{4c{6ǖc{8ږc{I7c{JIc{L[c{Mmc{Oc{Qc{Sc{`c{ac{oPc{pqc{qc{rc{sԘc{c{ic{|c{c{c{Ùc{ڙc{c{c{*c{Cc{Uc{c{c{c{ c{7c{c{c{Ǜc{c{3c{Fc{qc{c{c{̜c{c{c{%c{dc{c{c{c{3c{Tc{&c{'c{/Ԟc{1c{5c{7 c{9"c{;;c{>Tc{@fc{Dc{Kc{Mc{Nǟc{Pc{R c{Sc{T8c{WKc{YWc{[}c{\c{]c{kؠc{lc{nc{pc{t=c{wVc{ync{c{c{¡c{ԡc{c{c{%c{7c{c{c{c{c{c{c{.c{Mc{Sc{^c{dc{c{ȣc{c{c{ c{#c{Oc{mc{c{c{c{c{-c{Kc{wc{c{c{c{c{7c{cc{c{c{˦c{c{c{Hc{fc{vc{c{c{c{c{ c{  c{Ac{Mc{kc{}c{c{c{ƨc{ިc{  c{!c{#Fc{)ec{*}c{+c{-c{.c{/Ωc{1c{3c{4c{6/c{=Nc{>`c{@rc{Bc{Ec{Hc{Iêc{Kc{Z c{\c{_,c{aEc{eSc{fec{hwc{kc{oc{pɫc{uc{vc{xc{y c{z2c{{Ec{|Wc{~^c{pc{ɬc{۬c{c{c{c{,c{Wc{pc{c{c{c{c{ƭc{c{c{#c{4*c{9:XWc{Bgc{Ec{Gc{Hc{KϮc{߮c{N&h&#&$+&+^&3&4&<´&=Դ&( '(p(z(((Ϸ(( ( (!;(a()ȸ(*Ը(+޸(+(,(*3(4`(5j(5(6(4(>(?(? (@+(>K(Hx(I(I(J(Hݺ(RD(SN(Se(T(R(\л(]ڻ(](^(\/(f\(gf(g}(h(f(p(q(q (r'(pM(~((ս((~QbQ*Q,Q.Q0Q2Q47Q7OQ9hQ;zQ>QDQFQTQUQVQ[JQ\Q^Q_JJ~JJRJJJ#JfJJ#J@JQJa9 9e99fW9gu9h9i9j9k9l 9m)9oG9pu9q9r9s9t-9u[9v9w9O9PG9QP9Wr9W9X9h9i9l29m9o9p9r9t99$9t99999#9Y9p99999999*969b9999 909A9y9999999'919J9V99999+9P9a99999%9 @9 e9 {999999 Z9"o9#9&9'9(9)'9+]99999;9<9? 9@J9B_9E9F9H9I9J9L$9M79PC9QV9R9S9U9d+9gb9hu9j9j9l9m9n9p9q9s9v9w9y'9j9999999;9L9q99999999<9N9X9^9}999999919M9g9999999"9,929Q9o9999999<9`9{99999/9 :9 @9 `9 s9999 9G9T9r999999 9"39#99%Y9&l9'y9(9)9,-9.G90l91r9394959697)9:f9<{9<9>9?9@9B9C/9DG9F9F9G9S9T9U9W9X9Y!9Z`9[y9^99999!9( 919809@C9GV9Ji9} ] ]LG ]Nk ]O ]P ]Q ]R  ]S9 ]Ti ]U ]] ]^ ]gH ]hf ]n ]o ]p ]q ]r ]s ]t ]u/ ]wA ]yX ]{j ]} ] ] ] ] ] ] ] ]" ]4 ]L ]^ ]q ] ] ] ] ] ]  ]1 ]U ]y ] ] ] ]( ]K ]p ] ]  ]" ]$ ]E9y999999 /9!B9"e9.90929394C95m9;9<9=9?9A9C9D29G?9Kd9N|9P9R9V9\ 9hX9io9k9o9y9z9|9~49]9999'969g(9gv9g~49g^9g9g9g9g9g9g<9gZ9g9g9g9g9g9g9g 9g7 9gW 9gw 9g 9g 9g 9g 9g= 9gh 9g 9g 9g 9g 9g 9g 9g 9g% 9g* 9gH 9g_ 9gw 9g 9g 9g 9g 9g 9g4 9gN 9gy 9g 9g  9g# 9g. 9g0, 9g1? 9g2E 9g4\ 9gI 9gK 9gL 9gN 9gQ 9gU 9gW%9geX9g.9g3u9g;9g>9g?9gN9gU9gZ59gkQTUWXa+b^ekuwy;zZ~s/5Hb Q:Ox;N z(a.5n&5EH"C %+0 3& z-#z^#zg#zp#zy$zL$z^$zu$z$z$z$z%z%z;%z%z%z%z%\m%z# &z)&z.,&z3<&z8L&z=\&zBl&zN|&$ 4+$&+$'+$++$-,$.+,$/I,$0,$2,$8,$9,$?-$@-$BA-$CZ-$E-$F-$G-$H-$I.$J.$N9.$Vq.$W|.$X.$Z.$[.$\.$]/$_4/$`K/$a/$c/$d/$e/$f0$g'0$jL0$mg0$o0$p0$r0$t1$u"1$z.1$}F1$V1$b1$1$1$1$1$1$2$2$42$_2$2$2$2$3$)3$G3$q3$3$3$3$4$C4$m4$4$4$4$5$G5$5$5$5$5$6$6$06$H6$`6$g6$68?:83:85:86:87;88;;8:e;8A;8H;8J;8K<8P@<8Rw<8Z<8[<8d<8f=8h8=8ib=8j=8k=8l=8u&>8v=>8xO>8|w>8>8>8?8a@8z@8@8@8A85A8SA8sA8A8A8 B8B8YB8B8B8B8B8C8CC8qC8)C8-CE9LELELELELELEeMEMEMEME NE0NEGNELNENENE OE7OEgOEOEOEOEOEPENPEiPEPEPEPEQEQEXQEQEQEQEQEQERE QRE4RE5RE5RE6RE6RE7SE8 SE9-SE:?SE;QSE;jSE<xSE<SE>SE@SEB9TECcTEEpTEFTEGTEHTEI#UEK4UEMUENUEOUEPUES VEUWVEVvVEWVEYVEYVEZVE[WE]XWE_WEaWEbXEc%XEdLXEe]XEguXEhXEi-YEj?YEkQYElcYEozYEpYEqYErYEtZEuZEy&ZE{8ZEQZEcZEZE\[Eo[E[E[E[E[E\E\EJ\Eb\E\E\E]E ]E8]Ec]E]E]E]E]E]E^E"^E4^EF^EX^Ej^E^E^E_E>_EP_Ep_E_E_E_E`E `E9`EW`En`E`E`E`EaEaEaE7aECaEJaEaaEsaEaEaEaEaEbE[P[a[y[[[[[[7[b[[[[/[[[[[J[[[B[o[[.[_[[ [[I[Z[x[[[)[.5[6E[<U[Al[F[L[R[X[^[d[j[p [uE[{[[((((((;(_( (!("(#(mx.skins.Border: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\skins\Border.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** import mx.core.UIObject; /** * Base class for Borders * * - extends UIObject * - Draws borders around objects * * Most implementations use RectBorder, but non-rectangular borders can use this * class or subclass * * @tiptext * @helpid 3321 */ class mx.skins.Border extends UIObject { /** * @private * SymbolName for object */ static var symbolName:String = "Border"; /** * @private * Class used in createClassObject */ static var symbolOwner:Object = mx.skins.Border; /** * name of this class */ var className:String = "Border"; /** * @private * index of border skin */ var tagBorder:Number = 0; /** * @private * instance names for border skin */ var idNames:Array = new Array("border_mc"); // styles supported here var borderStyle:String; /** * @private * constructor */ function Border() { } /** * @private * init variables */ function init(Void):Void { super.init(); } } mx.core.View: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\core\View.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** import mx.events.UIEventDispatcher; import mx.core.UIObject; import mx.skins.RectBorder; import mx.core.UIComponent; import mx.managers.DepthManager; /** * base class for views/containers * * @helpid 3294 * @tiptext */ class mx.core.View extends UIComponent { /** * @private * SymbolName for object */ static var symbolName:String = "View"; /** * @private * Class used in createClassObject */ static var symbolOwner:Object = mx.core.View; // Version string #include "../core/ComponentVersion.as" /** * name of this class */ var className:String = "View"; /** * @private * the border object */ var border_mc:RectBorder; // internal object that gives initial size var boundingBox_mc:MovieClip; // value of tabIndex var __tabIndex:Number; // Base for all children names (_child0 - _childN) static var childNameBase:String = "_child"; /* loading external content takes place in two stages: emptying the existing content, and loading the new content. We track all loading using an object that moves from one stage to the other. */ // the last used depth for the children var depth:Number; // from DepthManager; var createClassChildAtDepth:Function; // from ExternalContent var loadExternal:Function; // whether we've been layed out private var hasBeenLayedOut:Boolean = false; // className used to construct placeholder clip for loadExternal() private var _loadExternalClass:String = "UIComponent"; function View() { } // initialize variables function init():Void { super.init(); // by default containers cannot receive focus but their children can tabChildren = true; tabEnabled = false; boundingBox_mc._visible = false; boundingBox_mc._width = boundingBox_mc._height = 0; } // respond to size changes function size():Void { // border covers the whole thing border_mc.move(0, 0); border_mc.setSize(width, height); // layout the content doLayout(); } // redraw by re-laying out function draw():Void { size(); } /** * get the number of children in this view * @tiptext Returns the number of children * @helpid 3400 */ function get numChildren():Number { var childName:String = childNameBase; for (var i:Number = 0; true; i++) { if (this[childName + i] == undefined) return i; } // Should never get here... return -1; } /** * By default, views are not tabstops so tabIndex will * be undefined. However, some views can be tabstops and will therefore * return a tabIndex */ function get tabIndex():Number { return tabEnabled ? __tabIndex : undefined; } /* removed to allow for the proper function of accessibility */ //function set tabIndex(n:Number) //{ // __tabIndex = n; //} /** * @private * override this to find out when a new object is added that needs to be layed out * @param object the layout object */ function addLayoutObject(object:Object):Void { //trace("View.addLayoutObject"); } /** * add a new child object * @param className the name of the symbol, a reference to a class, or file path or URL to the external content * @param instanceName the instance name of the child * @param initProps object containing initialization properties * @return reference to the child object */ function createChild(className, instanceName:String, initProps:Object):MovieClip { if (depth == undefined) depth = 1; // Attach our object var newObj: MovieClip; if (typeof(className) == "string") newObj = createObject(className, instanceName, depth++, initProps); else newObj = createClassObject(className, instanceName, depth++, initProps); // See if we need to load it if (newObj == undefined) { newObj = loadExternal(className, _loadExternalClass, instanceName, depth++, initProps); } else { // Make an alias for ordered access //trace("View.createChild: this[" + childNameBase + numChildren + "] = " + newObj); this[childNameBase + numChildren] = newObj; newObj._complete = true; childLoaded(newObj); } // Finally, tell the layout manager about this new object. addLayoutObject(newObj); return newObj; } /** * get the Nth child object * @param childIndex a number from 0 to N-1 * @return a reference to the child * @tiptext Returns the child at the specified position * @helpid 3403 */ function getChildAt(childIndex:Number):UIObject { //trace("View.getChildAt"); return this[childNameBase + childIndex]; } /** * destroy the Nth child object. Remaining child objects get renumbered * @param childIndex a number from 0 to N-1 * @return a reference to the child */ function destroyChildAt(childIndex:Number):Void { if (!(childIndex >= 0 && childIndex < numChildren)) return; var childName:String = childNameBase + childIndex; var nChildren:Number = numChildren; // Find the real child object var slot:String; // ??? for (slot in this) { if (slot == childName) { // Disconnect our _childN alias from the original childName = ""; // Delete the child destroyObject(slot); // Done. break; } } // Shuffle all higher numbered children down for (var i:Number = Number(childIndex); i < (nChildren - 1); i++) { this[childNameBase + i] = this[childNameBase + (i + 1)]; } // Delete the leftover slot delete this[childNameBase + (nChildren - 1)]; depth--; } // layout the first time function initLayout():Void { if (!hasBeenLayedOut) { // Default is to just call doLayout. Override if you need to // do additional processing upon initial layout. doLayout(); } } /** * @private * override this to layout the content */ function doLayout():Void { hasBeenLayedOut = true; } // create the border behind everything and schedule first layout function createChildren():Void { if (border_mc == undefined) border_mc = createClassChildAtDepth(_global.styles.rectBorderClass, DepthManager.kBottom, {styleName : this}); // The constructors for this object's children haven't executed yet. // Wait until later to register the children with the layout manager. doLater(this, "initLayout"); } // anything that gets loadmovie'd is just a movieclip. There's no way to make it a component except by doing this function convertToUIObject(obj:MovieClip):Void { } /** * @private * this gets called when the child is finished loading * @param obj the loaded child */ function childLoaded(obj:MovieClip):Void { convertToUIObject(obj); } // this never gets called, it just makes sure the external content module gets loaded static function extension() { mx.core.ExternalContent.enableExternalContent(); } } C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\core\ComponentVersion.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** static var version:String = "2.0.2.126"; mx.skins.CustomBorder: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\skins\CustomBorder.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** import mx.skins.SkinElement; import mx.skins.Border; /** * A border class that uses two end caps and a stretchable middle * * @tiptext * @helpid 3323 */ class mx.skins.CustomBorder extends Border { /** * @private * SymbolName for object */ static var symbolName:String = "CustomBorder"; /** * @private * Class used in createClassObject */ static var symbolOwner:Object = CustomBorder; // Version string #include "../core/ComponentVersion.as" /** * name of this class */ var className:String = "CustomBorder"; /** * @private * index of border skin */ static var tagL:Number = 0; // L = Left, R = right, M = middle static var tagM:Number = 1; static var tagR:Number = 2; /** * @private * instance names for border skins */ var idNames = new Array("l_mc", "m_mc", "r_mc"); /** * symbol name of skin element for left end cap * * @tiptext * @helpid 3324 */ var leftSkin:String = "F3PieceLeft"; /** * symbol name of skin element stretchable middle piece * * @tiptext * @helpid 3325 */ var middleSkin:String = "F3PieceMiddle"; /** * symbol name of skin element for left end cap * * @tiptext * @helpid 3326 */ var rightSkin:String = "F3PieceRight"; /** * whether the caps and middle are placed horizontally or vertically * * @tiptext * @helpid 3327 */ var horizontal:Boolean = true; /** * @private * instance name of the left end cap */ var l_mc:MovieClip; /** * @private * instance name of the middle piece */ var m_mc:MovieClip; /** * @private * instance name of the right end cap */ var r_mc:MovieClip; /** * minimum height of border, regardless of its orientation */ var minHeight:Number; /** * minimum width of border, regardless of its orientation */ var minWidth:Number; /** * width of object * Read-Only: use setSize() to change. */ function get width():Number { return __width; } /** * height of object * Read-Only: use setSize() to change. */ function get height():Number { return __height; } function CustomBorder() { } /** * @private * init variables. Components should implement this method and call super.init() at minimum */ function init(Void):Void { super.init(); } /** * @private * create child objects. CustomBorder actually creates its children as it is drawn */ function createChildren(Void):Void { } /** * @private * load skins and draw. */ function draw(Void):Void { if (l_mc == undefined) { var z = setSkin(tagL, leftSkin); if (horizontal) { minHeight = l_mc._height; minWidth = l_mc._width; } else { minHeight = l_mc._height; minWidth = l_mc._width; } } if (m_mc == undefined) { setSkin(tagM, middleSkin); if (horizontal) { minHeight = m_mc._height; minWidth += m_mc._width; } else { minHeight += m_mc._height; minWidth = m_mc._width; } } if (r_mc == undefined) { setSkin(tagR, rightSkin); if (horizontal) { minHeight = r_mc._height; minWidth += r_mc._width; } else { minHeight += r_mc._height; minWidth = r_mc._width; } } size(); } /** * @private * layout the two end caps and stretch the middle. */ function size(Void):Void { l_mc.move(0, 0); if (horizontal) { r_mc.move(width - r_mc.width, 0); m_mc.move(l_mc.width, 0); m_mc.setSize(r_mc.x - m_mc.x, m_mc.height); } else { r_mc.move(0, height - r_mc.height, 0); m_mc.move(0, l_mc.height); m_mc.setSize(m_mc.width, r_mc.y - m_mc.y); } } } $mx.core.ExternalContent: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\core\ExternalContent.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** import mx.core.UIObject; import mx.events.UIEventDispatcher; import mx.core.View; class mx.core.ExternalContent { // list of things waiting to be emptied // key is instanceID // value is { obj: , url: , complete: } var prepList:Object; // list of things currently loading // key is instanceID // value is { obj: , url: , complete: } var loadList:Object; // list of things completely loaded. // key is instanceID // value is {obj: , url: , complete: } var loadedList:Object; var numChildren:Number; var doLater:Function; var childLoaded:Function; var createObject:Function; var dispatchEvent:Function; function loadExternal(url:String, placeholderClassName:String, instanceName:String, depth:Number, initProps:Object):MovieClip { var newObj:MovieClip; newObj = createObject(placeholderClassName, instanceName, depth, initProps); // Make an alias for ordered access //trace("View.createChild: this[" + numChildren + "] = " + newObj); this[View.childNameBase + numChildren] = newObj; if (prepList == undefined) prepList = new Object(); prepList[instanceName] = { obj: newObj, url: url, complete: false, initProps: initProps }; prepareToLoadMovie(newObj); return newObj; } // request to empty the contents before loading new content function prepareToLoadMovie(obj:MovieClip):Void { obj.unloadMovie(); doLater(this, "waitForUnload"); } // checkt to see if we're empty function waitForUnload():Void { var i:String; for (i in prepList) { var x:Object = prepList[i]; if (x.obj.getBytesTotal() == 0) { if (loadList == undefined) loadList = new Object(); loadList[i] = x; x.obj.loadMovie(x.url); delete prepList[i]; doLater(this, "checkLoadProgress"); } else { doLater(this, "waitForUnload"); } } } // now that we're loading new content, see how we're doing function checkLoadProgress():Void { var contentLoading = false; var i:String; for (i in loadList) { var x:Object = loadList[i]; x.loaded = x.obj.getBytesLoaded(); x.total = x.obj.getBytesTotal(); if (x.total > 0) { x.obj._visible = false; dispatchEvent({type: "progress", target: x.obj, current: x.loaded, total: x.total}); if (x.loaded == x.total) { if (loadedList == undefined) loadedList = new Object(); loadedList[i] = x; delete loadList[i]; doLater(this, "contentLoaded"); } } else if (x.total == -1) { // sometimes you get a -1 before it starts loading if (x.failedOnce != undefined) { x.failedOnce++; if (x.failedOnce > 3) { dispatchEvent({type: "complete", target: x.obj, current: x.loaded, total: x.total}); //trace("total == -1 loaded = " + x.loaded); delete loadList[i]; delete x; } } else { x.failedOnce = 0; } } contentLoading = true; } if(contentLoading) { doLater(this, "checkLoadProgress"); } } // completely loaded. Had to wait for a bit to make sure _width and _height were set correctly. function contentLoaded():Void { var i:String; for (i in loadedList) { var x:Object = loadedList[i]; //trace("loaded..." + i); x.obj._visible = true; x.obj._complete = true; // Initialize properties, only when loading external movies. var prop:String; for (prop in x.initProps) x.obj[prop] = x.initProps[prop]; childLoaded(x.obj); dispatchEvent({type: "complete", target: x.obj, current: x.loaded, total: x.total}); delete loadedList[i]; delete x; } } // anything that gets loadmovie'd is just a movieclip. There's no way to make it a component except by doing this function convertToUIObject(obj:MovieClip):Void { if (obj.setSize == undefined) { var ui:Object = UIObject.prototype; obj.addProperty("width", ui.__get__width, null); obj.addProperty("height", ui.__get__height, null); obj.addProperty("left", ui.__get__left, null); obj.addProperty("x", ui.__get__x, null); obj.addProperty("top", ui.__get__top, null); obj.addProperty("y", ui.__get__y, null); obj.addProperty("right", ui.__get__right, null); obj.addProperty("bottom", ui.__get__bottom, null); // add other things to the MovieClip so it looks more like a UIObject obj.addProperty("visible", ui.__get__visible, ui.__set__visible); obj.move = UIObject.prototype.move; obj.setSize = UIObject.prototype.setSize; obj.size = UIObject.prototype.size; UIEventDispatcher.initialize(obj); } } static function enableExternalContent():Void { } static function classConstruct():Boolean { var v = View.prototype; var p = ExternalContent.prototype; v.loadExternal = p.loadExternal; v.prepareToLoadMovie = p.prepareToLoadMovie; v.waitForUnload = p.waitForUnload; v.checkLoadProgress = p.checkLoadProgress; v.contentLoaded = p.contentLoaded; v.convertToUIObject = p.convertToUIObject; return true; } static var classConstructed:Boolean = classConstruct(); static var ViewDependency = View; }&mx.skins.SkinElement: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\skins\SkinElement.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** /** * The class for skin elements. SkinElements support a common API for sizing and positioning * If you do not have any other special needs just register your skins as skin elements. If * you do have your own class, register that class anyway otherwise it will get re-registered as * a skin element and your class code will not be executed. This is essentially UIObject without * events, style API, and child object management. * * @helpid 3329 * @tiptext The class for all skin elements */ class mx.skins.SkinElement extends MovieClip { // mixins var width:Number; var height:Number; var top:Number; var visible:Boolean; /** * All library assets that want to participate in our resizing and recoloring schemes * need to be SkinElements or UIObjects. If you are not a SkinElement you must register here. * Otherwise, you will be a SkinElement automatically * @param name Symbol name of object * @param className Name of Class that supports the object */ static function registerElement(name:String, className:Function):Void { Object.registerClass(name, (className == undefined) ? SkinElement : className); _global.skinRegistry[name] = true; } /** * @see mx.core.UIObject */ function __set__visible(visible:Boolean):Void { _visible = visible; } /** * @see mx.core.UIObject */ function move(x:Number, y:Number):Void { _x = x; _y = y; } /** * @see mx.core.UIObject */ function setSize(w:Number, h:Number):Void { _width = w; _height = h; } } (Calendario: P:\Mis Webs\Discoteca Palko\Flash\Calendario.as//Importamos import mx.events.EventDispatcher; import mx.core.UIObject; //Eventos [Event("change")] class Calendario extends UIObject { private var dia_actual:Number; private var mes_actual:Number; private var anio_actual:Number; private var dia_semana_actual:Number; public var anio_mostrado:Number; public var mes_mostrado:Number; public var fecha:Object; public var addEventListener:Function; public var posredondax:Number; public var posredonday:Number; public var removeEventListener:Function; private var dispatchEvent:Function; public function Calendario() { var mifecha = new Date(); this.dia_semana_actual=mifecha.getDay(); this.dia_actual=mifecha.getDate(); this.mes_actual=mifecha.getMonth(); this.anio_actual=mifecha.getUTCFullYear(); this.mes_mostrado=mifecha.getMonth(); this.anio_mostrado=mifecha.getUTCFullYear(); this.fecha={}; this.posredondax=-1000; this.posredonday=-1000; } }(mx.styles.CSSTextStyles: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\styles\CSSTextStyles.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** /** * factory for adding CSS Text styles to StyleDeclarations and UIObject */ class mx.styles.CSSTextStyles { static function addTextStyles(o:Object, bColor:Boolean):Void { /** * the text alignment or justification. Allowed values are "left", "center", "right" * * @tiptext * @helpid 3336 */ o.addProperty("textAlign", function() { return this._tf.align; }, function(x) { if (this._tf == undefined) this._tf = new TextFormat(); this._tf.align = x; }); /** * the font weight. Allowed values are: "none", "bold" * * @tiptext * @helpid 3337 */ o.addProperty("fontWeight", function() { return (this._tf.bold != undefined) ? (this._tf.bold ? "bold" : "none") : undefined}, function(x) { if (this._tf == undefined) this._tf = new TextFormat(); this._tf.bold = (x == "bold"); }); /** * the font color. Allowed values are colors in the form of 0xRRGGBB (0xFF0000 is red). * * @tiptext * @helpid 3338 */ if (bColor) o.addProperty("color", function() { return this._tf.color; }, function(x) { if (this._tf == undefined) this._tf = new TextFormat(); this._tf.color = x; }); /** * the font family. Allowed values are font names like "Times New Roman" or "Arial" * * @tiptext * @helpid 3339 */ o.addProperty("fontFamily", function() { return this._tf.font; }, function(x) { if (this._tf == undefined) this._tf = new TextFormat(); this._tf.font = x; }); /** * the number of pixels to indentation the first line of a paragraph * * @tiptext * @helpid 3340 */ o.addProperty("textIndent", function() { return this._tf.indent; }, function(x) { if (this._tf == undefined) this._tf = new TextFormat(); this._tf.indent = x; }); /** * the font style. Allowed values are: "none", "italic" * * @tiptext * @helpid 3341 */ o.addProperty("fontStyle", function() { return (this._tf.italic != undefined) ? (this._tf.italic ? "italic" : "none") : undefined}, function(x) { if (this._tf == undefined) this._tf = new TextFormat(); this._tf.italic = (x == "italic"); }); /** * the number of pixels to the left of the text * * @tiptext * @helpid 3342 */ o.addProperty("marginLeft", function() { return this._tf.leftMargin; }, function(x) { if (this._tf == undefined) this._tf = new TextFormat(); this._tf.leftMargin = x; }); /** * the number of pixels to the right of the text * * @tiptext * @helpid 3343 */ o.addProperty("marginRight", function() { return this._tf.rightMargin; }, function(x) { if (this._tf == undefined) this._tf = new TextFormat(); this._tf.rightMargin = x; }); /** * the font size. Allowed values are numbers 6 and higher. * * @tiptext * @helpid 3344 */ o.addProperty("fontSize", function() { return this._tf.size; }, function(x) { if (this._tf == undefined) this._tf = new TextFormat(); this._tf.size = x; }); /** * the text decoration. Allowed values are: "none", "underline" * * @tiptext * @helpid 3345 */ o.addProperty("textDecoration", function() { return (this._tf.underline != undefined) ? (this._tf.underline ? "underline" : "none") : undefined}, function(x) { if (this._tf == undefined) this._tf = new TextFormat(); this._tf.underline = (x == "underline"); }); /** * whether to embed fonts or use device fonts. "true" embeds fonts, making them look better * and allowing them to be drawn at different angles, but making the download larger. * "false" uses device fonts which cannot be drawn at an angle and if the user doesn't * have the exact font on their system will approximate the font, but makes the download smaller. * * @tiptext * @helpid 3346 */ o.addProperty("embedFonts", function() { return this._tf.embedFonts; }, function(x) { if (this._tf == undefined) this._tf = new TextFormat(); this._tf.embedFonts = x; }); } } ,mx.controls.SimpleButton: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\controls\SimpleButton.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** import mx.core.UIComponent; [Event("click")] [TagName("SimpleButton")] /** * SimpleButton class * extends UIComponent * use if button does not need to be resized * does support icons or text * @tiptext Provides core button functionality without resizability. Extends UIComponent * @helpid 3169 */ class mx.controls.SimpleButton extends UIComponent { /** * @private * SymbolName for object */ static var symbolName:String = "SimpleButton"; /** * @private * Class used in createClassObject */ static var symbolOwner:Object = mx.controls.SimpleButton; #include "../core/ComponentVersion.as" /** * @private * className for object */ var className:String = "SimpleButton"; var style3dInset:Number = 4; /** * @private * number used to offset the label and/or icon when button is pressed */ var btnOffset:Number = 1; /** * @private * define private toggle value */ var __toggle:Boolean = false; /** * @private * define private state value */ var __state:Boolean = false; /** * @private * define private emphasized value */ var __emphasized:Boolean = false; /** * @private * define private emphatic value */ var __emphatic:Boolean = false; /** * @private * define button down handler */ var buttonDownHandler:Function; /** * @private * define click handler */ var clickHandler:Function; /** * @private * way of storing data off of component */ var detail:Number; /** * @private * falseUp depth */ static var falseUp:Number = 0; /** * @private * falseDown depth */ static var falseDown:Number = 1; /** * @private * falseOver depth */ static var falseOver:Number = 2; /** * @private * falseDisabled depth */ static var falseDisabled:Number = 3; /** * @private * trueUp depth */ static var trueUp:Number = 4; /** * @private * trueDown depth */ static var trueDown:Number = 5; /** * @private * trueOver depth */ static var trueOver:Number = 6; /** * @private * trueDisabled depth */ static var trueDisabled:Number = 7; /** * @private * falseUpSkin name * change of value will change the viewable state */ var falseUpSkin:String = "SimpleButtonUp"; /** * @private * falseDownSkin name * change of value will change the viewable state */ var falseDownSkin:String = "SimpleButtonIn"; /** * @private * falseOverSkin name * change of value will change the viewable state */ var falseOverSkin:String = ""; /** * @private * falseDisabledSkin name * change of value will change the viewable state */ var falseDisabledSkin:String = "SimpleButtonUp"; /** * @private * trueUpSkin name * change of value will change the viewable state */ var trueUpSkin:String = "SimpleButtonIn"; /** * @private * trueDownSkin name * change of value will change the viewable state */ var trueDownSkin:String = "" /** * @private * trueOverSkin name * change of value will change the viewable state */ var trueOverSkin:String = "" /** * @private * trueDisabledSkin name * change of value will change the viewable state */ var trueDisabledSkin:String = "SimpleButtonIn"; /** * @private * falseUpSkinEmphasized name * change of value will change the viewable state */ var falseUpSkinEmphasized:String; /** * @private * falseDownSkinEmphasized name * change of value will change the viewable state */ var falseDownSkinEmphasized:String; /** * @private * falseOverSkinEmphasized name * change of value will change the viewable state */ var falseOverSkinEmphasized:String; /** * @private * falseDisabledSkinEmphasized name * change of value will change the viewable state */ var falseDisabledSkinEmphasized:String; /** * @private * trueUpSkinEmphasized name * change of value will change the viewable state */ var trueUpSkinEmphasized:String; /** * @private * trueDownSkinEmphasized name * change of value will change the viewable state */ var trueDownSkinEmphasized:String; /** * @private * trueOverSkinEmphasized name * change of value will change the viewable state */ var trueOverSkinEmphasized:String; /** * @private * trueDisabledSkinEmphasized name * change of value will change the viewable state */ var trueDisabledSkinEmphasized:String; /** * @private * falseUpIcon name * change of value will change the viewable state */ var falseUpIcon:String = ""; /** * @private * falseDownIcon name * change of value will change the viewable state */ var falseDownIcon:String = ""; /** * @private * falseOverIcon name * change of value will change the viewable state */ var falseOverIcon:String = ""; /** * @private * falseDisabledIcon name * change of value will change the viewable state */ var falseDisabledIcon:String = ""; /** * @private * trueUpIcon name * change of value will change the viewable state */ var trueUpIcon:String = ""; /** * @private * trueDownIcon name * change of value will change the viewable state */ var trueDownIcon:String = ""; /** * @private * trueOverIcon name * change of value will change the viewable state */ var trueOverIcon:String = ""; /** * @private * trueDisabledIcon name * change of value will change the viewable state */ var trueDisabledIcon:String = ""; /** * @private * falseUpIconEmphasized name * change of value will change the viewable state */ var falseUpIconEmphasized:String; /** * @private * falseDownIconEmphasized name * change of value will change the viewable state */ var falseDownIconEmphasized:String; /** * @private * falseOverIconEmphasized name * change of value will change the viewable state */ var falseOverIconEmphasized:String; /** * @private * falseDisabledIconEmphasized name * change of value will change the viewable state */ var falseDisabledIconEmphasized:String; /** * @private * trueUpIconEmphasized name * change of value will change the viewable state */ var trueUpIconEmphasized:String; /** * @private * trueDownIconEmphasized name * change of value will change the viewable state */ var trueDownIconEmphasized:String; /** * @private * trueOverIconEmphasized name * change of value will change the viewable state */ var trueOverIconEmphasized:String; /** * @private * trueDisabledIconEmphasized name * change of value will change the viewable state */ var trueDisabledIconEmphasized:String; /** * @private * emphasizedStyleDeclaration */ static var emphasizedStyleDeclaration; /** * @private * define skinName */ var skinName:Object; /** * @private * linkage string length */ var linkLength:Number; /** * @private * */ var preset:Boolean; /** * @private * */ var iconName:Object; /** * @private * */ var __emphaticStyleName:String; /** * @private * */ var phase:String = "up"; /** * @private * */ var autoRepeat:Boolean; /** * @private * */ var interval; /** * @private * */ var boundingBox_mc:MovieClip; /** * @private * */ var fui = "falseUpIcon"; /** * @private * */ var fus = "falseUpSkin"; /** * @private * */ var fdi = "falseDownIcon"; /** * @private * */ var fds = "falseDownSkin"; /** * @private * */ var frs = "falseOverSkin"; /** * @private * */ var fri = "falseOverIcon"; /** * @private * */ var dfi = "falseDisabledIcon"; /** * @private * */ var dfs = "falseDisabledSkin"; /** * @private * */ var tui = "trueUpIcon"; /** * @private * */ var tus = "trueUpSkin"; /** * @private * */ var tdi = "trueDownIcon"; /** * @private * */ var tds = "trueDownSkin"; /** * @private * */ var trs = "trueOverSkin"; /** * @private * */ var tri = "trueOverIcon"; /** * @private * */ var dts = "trueDisabledSkin"; /** * @private * */ var dti = "trueDisabledIcon"; /** * @private * */ var rolloverSkin:Object = frs; /** * @private * */ var rolloverIcon:Object = fri; /** * @private * */ var upSkin:Object = fus; /** * @private * */ var downSkin:Object = fds; /** * @private * */ var disabledSkin:Object = dfs; /** * @private * */ var upIcon:Object = fui; /** * @private * */ var downIcon:Object = fdi; /** * @private * */ var disabledIcon:Object = dfi; /** * @private * */ var initializing:Boolean = true; /** * @private * SimpleButton constructor */ function SimpleButton() { } /** * @private * init variables. Components should implement this method and call super.init() to * ensure this method gets called. The width, height and clip parameters will not * be properly set until after this is called. */ function init(Void):Void { super.init(); if (preset == undefined) { boundingBox_mc._visible = false; boundingBox_mc._width = boundingBox_mc._height = 0; //trace("width :: " + width) //trace("_width :: " + _width) //trace("__width :: " + __width) } useHandCursor = false; } /** * @private * array of names used to set the state */ var idNames = ["fus","fds","frs","dfs","tus","tds", "trs","dts", "fui","fdi","fri","dfi","tui","tdi","tri","dti" ]; /** * @private * state names of a button */ var stateNames = ["falseUp","falseDown","falseOver","falseDisabled","trueUp","trueDown","trueOver","trueDisabled"]; /** * @private * */ var refNames = ["upSkin","downSkin","rolloverSkin","disabledSkin"]; /** * @private * */ var tagMap = { falseUpSkin: 0, falseDownSkin: 1, falseOverSkin: 2, falseDisabledSkin: 3, trueUpSkin: 4, trueDownSkin: 5, trueOverSkin: 6, trueDisabledSkin: 7, falseUpIcon: 0, falseDownIcon: 1, falseOverIcon: 2, falseDisabledIcon: 3, trueUpIcon: 4, trueDownIcon: 5, trueOverIcon: 6, trueDisabledIcon: 7 }; /** * @private * create children objects. Components implement this method to create the * subobjects in the component. Recommended way is to make text objects * invisible and make them visible when the draw() method is called to * avoid flicker on the screen. */ function createChildren(Void):Void { if (preset != undefined) // initial state Skin is present in the symbol { var ref = this[idNames[preset]]; this[refNames[preset]] = ref; skinName = ref; if (falseOverSkin.length == 0) rolloverSkin = fus; if (falseOverIcon.length == 0) rolloverIcon = fui; initializing = false; } else { if (__state == true) setStateVar(true); else { if (falseOverSkin.length == 0) rolloverSkin = fus; if (falseOverIcon.length == 0) rolloverIcon = fui; } } } /** * @private * */ function setIcon(tag:Number,linkageName:String):Object { return setSkin(tag + 8,linkageName); } /** * @private * */ function changeIcon(tag:Number,linkageName:String):Void { linkLength = linkageName.length; var s = stateNames[tag] + "Icon"; this[s] = linkageName; this[idNames[tag +8]] = s; setStateVar(getState()); } /** * @private * */ function changeSkin(tag:Number,linkageName:String):Void { var s = stateNames[tag] + "Skin"; this[s] = linkageName; this[idNames[tag]] = s; setStateVar(getState()); } /** * @private * */ function viewIcon(varName:String):Void { var v = varName + "Icon"; var ref = this[v]; // ref is now .fui or equivalent which points to a movieclip // or the name of variable that holds the linkage name (falseUpIcon) if(typeof(ref) == "string") { var s = ref; if (__emphasized) { if (this[ref + "Emphasized"].length > 0) ref = ref + "Emphasized"; } if(this[ref].length == 0 )return; ref = setIcon(tagMap[s], this[ref]); if (ref == undefined && _global.isLivePreview){ ref = setIcon(0,"ButtonIcon") ; } this[v] = ref; } iconName._visible = false; iconName = ref; iconName._visible = true; } /** * @private * */ function removeIcons() { for (var t = 0; t <2 ;t++){ for (var i = 8;i < 16;i++){ destroyObject(idNames[i]); this[stateNames[i-8]+"Icon"] = ""; } } refresh(); } /** * @private * */ function setSkin(tag:Number,linkageName:String, initobj:Object):MovieClip { var o = super.setSkin(tag, linkageName, initobj!= undefined?initobj:{styleName: this}); calcSize(tag, o); return o; } /** * @private * */ function calcSize(Void):Void { __width = _width; __height = _height; } /** * @private * */ function viewSkin(varName:String,initObj:Object):Void { var v = varName+"Skin"; var ref = this[v]; if(typeof(ref) == "string") { var s = ref; if (__emphasized) { if (this[ref + "Emphasized"].length > 0) ref = ref + "Emphasized"; } if(this[ref].length == 0 )return; ref = setSkin(tagMap[s], this[ref], initObj!= undefined? initObj: {styleName: this} ); this[v] = ref; } skinName._visible = false; skinName = ref; skinName._visible = true; } /** * @private * */ function showEmphasized (e:Boolean):Void { if (e && !__emphatic) { if (SimpleButton.emphasizedStyleDeclaration != undefined) { __emphaticStyleName = styleName; styleName = SimpleButton.emphasizedStyleDeclaration; } __emphatic = true; } else { if (__emphatic) { styleName = __emphaticStyleName; } __emphatic = false; } } /** * @private * */ function refresh(Void):Void { var offset:Boolean = getState(); if (enabled == false ) { viewIcon("disabled"); viewSkin("disabled"); } else { viewSkin(phase); viewIcon(phase); } setView(phase == "down"); iconName.enabled = enabled; } /** * @private * */ function setView(offset:Boolean):Void { if(iconName == undefined) return; var n = offset ? btnOffset : 0; iconName._x = (__width - iconName._width)/2 + n; iconName._y = (__height - iconName._height)/2 + n; } /** * @private * */ function setStateVar(state:Boolean):Void { if (state) { if (trueOverSkin.length == 0) { rolloverSkin = tus; } else { rolloverSkin = trs; } if (trueOverIcon.length == 0) { rolloverIcon = tui; } else { rolloverIcon = tri; } upSkin = tus; downSkin = tds; disabledSkin = dts; upIcon = tui; downIcon = tdi; disabledIcon = dti; } else { if (falseOverSkin.length == 0) { rolloverSkin = fus; } else { rolloverSkin = frs; } if (falseOverIcon.length == 0) { rolloverIcon = fui; } else { rolloverIcon = fri; } upSkin = fus; downSkin = fds; disabledSkin = dfs; upIcon = fui; downIcon = fdi; disabledIcon = dfi; } __state = state; } /** * @private * */ function setState(state:Boolean):Void { if (state != __state) { setStateVar(state); invalidate(); } } /** * @private * Each component should implement this method and lay out * its children based on the .width and .height properties */ function size(Void):Void { refresh(); } /** * @private * */ function draw(Void):Void { if (initializing) { initializing = false; skinName.visible = true; iconName.visible = true; } size(); } /** * @private * */ function getState(Void):Boolean { return __state; } /** * @private * */ function setToggle(val:Boolean) { __toggle = val; if (__toggle == false) setState(false); } /** * @private * */ function getToggle(Void):Boolean { return __toggle; } /** * @private * */ function set toggle(val:Boolean) { setToggle(val); } /** * @tiptext Needs tooltip * @helpid 3406 */ [Inspectable(defaultValue=false)] function get toggle():Boolean { return getToggle(); } /** * @private * */ function set value(val:Boolean) { setSelected(val); } /** * @private * */ function get value():Boolean { return getSelected(); } /** * @private * */ function set selected (val:Boolean) { setSelected(val); } /** * @tiptext Needs tooltip * @helpid 3405 */ [Inspectable(defaultValue=false)] function get selected ():Boolean { return getSelected(); } /** * @private * */ function setSelected (val:Boolean) { if(__toggle) { setState(val); } else { setState( (initializing) ? val : __state); } } /** * @private * */ function getSelected ():Boolean { return __state; } /** * @private * */ function setEnabled(val:Boolean):Void { if (enabled != val) { super.setEnabled(val); invalidate(); } } /** * @private * */ function onPress(Void):Void { pressFocus(); phase = "down"; refresh(); dispatchEvent({type:"buttonDown"}); if (autoRepeat) { interval = setInterval(this, "onPressDelay", getStyle("repeatDelay")); } } /** * @private * */ function onPressDelay(Void):Void { dispatchEvent({type:"buttonDown"}); if (autoRepeat) { clearInterval(interval); interval = setInterval(this, "onPressRepeat", getStyle("repeatInterval")); } } /** * @private * */ function onPressRepeat(Void):Void { dispatchEvent({type:"buttonDown"}); updateAfterEvent(); } /** * @private * */ function onRelease(Void):Void { releaseFocus(); phase = "rollover"; if (interval != undefined) { clearInterval(interval); delete interval; } if (getToggle()) { setState(!getState()); } else { refresh(); } dispatchEvent({type:"click"}); } /** * @private * */ function onDragOut(Void):Void { phase = "up"; refresh(); dispatchEvent({type:"buttonDragOut"}); } /** * @private * */ function onDragOver(Void):Void { if (phase != "up") { // it is possible to get a onDragOver even though we never got a dragOut or press. // in this situation, we map onDragOver to onPress onPress(); return; } else { phase = "down"; refresh(); } } /** * @private * */ function onReleaseOutside(Void):Void { releaseFocus(); phase="up"; if (interval != undefined) { clearInterval(interval); delete interval; } } /** * @private * */ function onRollOver(Void):Void { phase = "rollover"; refresh() } /** * @private * */ function onRollOut(Void):Void { phase = "up"; refresh(); } /** * @private * */ function getLabel(Void):String { return fui.text; } /** * @private * */ function setLabel(val:String):Void { if (typeof(fui) == "string") { createLabel("fui", 8, val); fui.styleName = this; } else fui.text = val; var tf = fui._getTextFormat(); var extent = tf.getTextExtent2(val); fui._width = extent.width + 5; fui._height = extent.height + 5; iconName = fui; setView(__state); } /** * @private * */ function get emphasized():Boolean { return __emphasized; } /** * @private * */ function set emphasized(val:Boolean) { __emphasized = val; for (var i = 0; i < 8; i++) { this[idNames[i]] = stateNames[i] + "Skin"; if (typeof(this[idNames[i+8]]) == "movieclip") { this[idNames[i+8]] = stateNames[i] + "Icon"; } } showEmphasized(__emphasized); setStateVar(__state); invalidateStyle(); } /** * @private * */ function keyDown(e:Object):Void { if (e.code == Key.SPACE) onPress(); } /** * @private * */ function keyUp(e:Object):Void { if (e.code == Key.SPACE) onRelease(); } function onKillFocus(newFocus:Object):Void { super.onKillFocus(); // most of the time the system sends a rollout, but there are situations // where the mouse is over something else that you don't get one so // we force one here if (phase != "up") { phase = "up"; refresh(); } } } 3C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\core\ComponentVersion.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** static var version:String = "2.0.2.126"; 8mx.events.UIEventDispatcher: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\events\UIEventDispatcher.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** import mx.events.EventDispatcher; import mx.core.UIObject; /** * event listening and dispatching for UIObjects. * * @helpid 3296 * @tiptext */ class mx.events.UIEventDispatcher extends EventDispatcher { /** * list of supported keyboard events */ static var keyEvents:Object = { keyDown: 1, keyUp: 1 }; /** * load and unload events */ static var loadEvents:Object = { load: 1, unload: 1}; // we can't use 'super' in a mix-in because we'd then have // to mix into the object's prototype which is too dangerous // instead we rename functions from the parent class and add // them to the object as well. var __origAddEventListener:Function; // a pointer to the target object used when we get called // in a different scope var owner:Object; // we don't know if the load event has already been sent when the // user adds a listener for "load". So, we send them a load event // and don't send one when the real load event happens var __sentLoadEvent; static var lowLevelEvents:Object = { keyEvents: ["addKeyEvents", "removeKeyEvents"], loadEvents: ["addLoadEvents", "removeLoadEvents"] }; // a copy of ourselves so we can add methods to other instances static var _fEventDispatcher:UIEventDispatcher = undefined; // internal function that adds keyboard listeners to a UIObject so the // listener can get events static function addKeyEvents(obj:Object):Void { if (obj.keyHandler == undefined) { var o = obj.keyHandler = new Object(); o.owner = obj; o.onKeyDown = _fEventDispatcher.onKeyDown; o.onKeyUp = _fEventDispatcher.onKeyUp; } Key.addListener(obj.keyHandler); } // internal function that removes keyboard listeners from a UIObject static function removeKeyEvents(obj:Object):Void { Key.removeListener(obj.keyHandler); } // internal function that adds load/unload listeners to a UIObject so the // listener can get events static function addLoadEvents(obj:Object):Void { if (obj.onLoad == undefined) { obj.onLoad = _fEventDispatcher.onLoad; obj.onUnload = _fEventDispatcher.onUnload; // sometimes when you create an obj, the player has already figured out the list of // methods it needs to run so when you add an onLoad here it is too late and never // gets called. if (obj.getBytesTotal() == obj.getBytesLoaded()) { obj.doLater(obj, "onLoad"); } } } // internal function that removes load/unload listeners from a UIObject static function removeLoadEvents(obj:Object):Void { delete obj.onLoad; delete obj.onUnload; } /** * add listening and dispatching methods to an object * @param object the object to receive the methods */ static function initialize(obj:Object):Void { if (_fEventDispatcher == undefined) { _fEventDispatcher = new UIEventDispatcher; } obj.addEventListener = _fEventDispatcher.__addEventListener; obj.__origAddEventListener = _fEventDispatcher.addEventListener; obj.removeEventListener = _fEventDispatcher.removeEventListener; obj.dispatchEvent = _fEventDispatcher.dispatchEvent; obj.dispatchQueue = _fEventDispatcher.dispatchQueue; } /** * dispatch the event to all listeners * @param eventObj an Event or one of its subclasses describing the event */ function dispatchEvent(eventObj:Object):Void { if (eventObj.target == undefined) eventObj.target = this; this[eventObj.type + "Handler"](eventObj); // Dispatch to objects that are registered as listeners for // all objects. this.dispatchQueue(EventDispatcher, eventObj); // Dispatch to objects that are registered as listeners for // this object. this.dispatchQueue(this, eventObj); } // internal hook for keyboard events function onKeyDown(Void):Void { owner.dispatchEvent({type:"keyDown", code:Key.getCode(), ascii:Key.getAscii(), shiftKey:Key.isDown(Key.SHIFT), ctrlKey:Key.isDown(Key.CONTROL)}); } // internal hook for keyboard events function onKeyUp(Void):Void { owner.dispatchEvent({type:"keyUp", code:Key.getCode(), ascii:Key.getAscii(), shiftKey:Key.isDown(Key.SHIFT), ctrlKey:Key.isDown(Key.CONTROL)}); } // internal hook for load events function onLoad(Void):Void { if (__sentLoadEvent != true) dispatchEvent({type:"load"}); __sentLoadEvent = true; } // internal hook for load events function onUnload(Void):Void { dispatchEvent({type:"unload"}); } // internal hook of FEventDispatcher.addEventListener function __addEventListener(event:String, handler):Void { __origAddEventListener(event, handler); var ll = UIEventDispatcher.lowLevelEvents; for (var i in ll) { if (UIEventDispatcher[i][event] != undefined) { var s = ll[i][0]; UIEventDispatcher[s](this); } } } // override of FEventDispatcher.removeEventListener function removeEventListener(event:String, handler):Void { var queueName:String = "__q_" + event; EventDispatcher._removeEventListener(this[queueName], event, handler); if (this[queueName].length == 0) // no more listeners { var ll = UIEventDispatcher.lowLevelEvents; for (var i in ll) { if (UIEventDispatcher[i][event] != undefined) { var s = ll[i][1]; UIEventDispatcher[ll[i][1]](this); } } } } } 9mx.events.EventDispatcher: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\events\EventDispatcher.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** /** * base class for event listening and dispatching * * @helpid 3295 * @tiptext */ class mx.events.EventDispatcher { // make a instance of ourself so we can add methods to other objects static var _fEventDispatcher:EventDispatcher = undefined; // these events do not get called via backdoor because of name collisions with other methods static var exceptions:Object = {move: 1, draw: 1, load:1}; // internal function for removing listeners static function _removeEventListener(queue:Object, event:String, handler):Void { if (queue != undefined) { var l:Number = queue.length; var i:Number; for (i = 0; i < l; i++) { var o = queue[i]; if (o == handler) { queue.splice(i, 1); return; } } } } /** * add listening and dispatching methods to an object * @param object the object to receive the methods */ static function initialize(object:Object):Void { if (_fEventDispatcher == undefined) { _fEventDispatcher = new EventDispatcher; } object.addEventListener = _fEventDispatcher.addEventListener; object.removeEventListener = _fEventDispatcher.removeEventListener; object.dispatchEvent = _fEventDispatcher.dispatchEvent; object.dispatchQueue = _fEventDispatcher.dispatchQueue; } // internal function for dispatching events function dispatchQueue(queueObj:Object, eventObj:Object):Void { var queueName:String = "__q_" + eventObj.type; var queue:Array = queueObj[queueName]; if (queue != undefined) { var i:String; // loop it as an object so it resists people removing listeners during dispatching for (i in queue) { var o = queue[i]; var oType:String = typeof(o); // a handler can be a function, object, or movieclip if (oType == "object" || oType == "movieclip") { // this is a backdoor implementation that // is not compliant with the standard if (o.handleEvent != undefined) { // this is the DOM3 way o.handleEvent(eventObj); } if (o[eventObj.type] != undefined) { if (EventDispatcher.exceptions[eventObj.type] == undefined) { // this is a backdoor implementation that // is not compliant with the standard o[eventObj.type](eventObj); } } } else // it is a function { o.apply(queueObj, [eventObj]); } } } } /** * dispatch the event to all listeners * @param eventObj an Event or one of its subclasses describing the event */ function dispatchEvent(eventObj:Object):Void { if (eventObj.target == undefined) eventObj.target = this; this[eventObj.type + "Handler"](eventObj); // Dispatch to objects that are registered as listeners for // this object. this.dispatchQueue(this, eventObj); } /** * add a listener for a particular event * @param event the name of the event ("click", "change", etc) * @param the function or object that should be called */ function addEventListener(event:String, handler):Void { var queueName:String = "__q_" + event; if (this[queueName] == undefined) { this[queueName] = new Array(); } _global.ASSetPropFlags(this, queueName,1); EventDispatcher._removeEventListener(this[queueName], event, handler); this[queueName].push(handler); } /** * remove a listener for a particular event * @param event the name of the event ("click", "change", etc) * @param the function or object that should be called */ function removeEventListener(event:String, handler):Void { var queueName:String = "__q_" + event; EventDispatcher._removeEventListener(this[queueName], event, handler); } } 9mx.managers.DepthManager: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\managers\DepthManager.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** import mx.core.UIObject; /** * Class for managing the depth (z-order) of objects. * * @helpid 3297 * @tiptext */ class mx.managers.DepthManager { // highest allowed depth is reserved for tooltips and cursors static var reservedDepth:Number = 1048575; // highest depth for all other objects static var highestDepth:Number = 1048574; // lowest allowed depth static var lowestDepth:Number = -16383; // lowest depth plus this number of layers is reserved // for statically placed content static var numberOfAuthortimeLayers:Number = 383; /** * constant used in calls to createClassObjectAtDepth/createObjectAtDepth * * @tiptext used as parameter to request placement in cursor depths * @helpid 3298 */ static var kCursor:Number = 101; /** * constant used in calls to createClassObjectAtDepth/createObjectAtDepth * * @tiptext used as parameter to request placement in tooltip depths * @helpid 3299 */ static var kTooltip:Number = 102; /** * constant used in calls to createClassChildtAtDepth/createChildAtDepth * * @tiptext used as parameter to request placement on top of other content * but below kTopMost content * @helpid 3300 */ static var kTop:Number = 201; /** * constant used in calls to createClassChildtAtDepth/createChildAtDepth * * @tiptext used as parameter to request placement on bottom of other content * @helpid 3301 */ static var kBottom:Number = 202; /** * constant used in calls to createClassChildtAtDepth/createChildAtDepth * * @tiptext used as parameter to request placement on top of other content * even above kTop objects * @helpid 3302 */ static var kTopmost:Number = 203; /** * constant used in calls to createClassChildtAtDepth/createChildAtDepth * * @tiptext used as parameter to request removal from the topmost layer * @helpid 3303 */ static var kNotopmost:Number = 204; // reserve the topmost layer for ourselves private static var holder:MovieClip = _root.createEmptyMovieClip("reserved", DepthManager.reservedDepth); // sort the depths in the array of depths. we don't need an equality test since depths can never be the same static function sortFunction(a:MovieClip, b:MovieClip):Number { if (a.getDepth() > b.getDepth()) return 1; return -1; } // true if it is the reserved depth static function test(depth:Number):Boolean { if (depth == DepthManager.reservedDepth) return false; else return true; } /** * create an instance of a class at a depth relative to other content * * @param className the name of the class * @param depthSpace either kCursor or kTooltip * @param initObj object containing initialization properties * @return reference to object * * @tiptext * @helpid 3304 */ static function createClassObjectAtDepth(className:Object, depthSpace:Number, initObj:Object):UIObject { var o:UIObject = undefined; switch (depthSpace) { case (DepthManager.kCursor): o = DepthManager.holder.createClassChildAtDepth( className, DepthManager.kTopmost, initObj ); break; case (DepthManager.kTooltip): o = DepthManager.holder.createClassChildAtDepth( className, DepthManager.kTop, initObj ); break; default: break; } return o; } /** * create an instance of a symbol at a depth relative to other content * * @param linkageName the linkage name of the symbol in the library * @param depthSpace either kCursor or kTooltip * @param initObj object containing initialization properties * @return reference to object * * @tiptext * @helpid 3305 */ static function createObjectAtDepth(linkageName:String, depthSpace:Number, initObj:Object):MovieClip { var o:MovieClip = undefined; switch (depthSpace) { case (DepthManager.kCursor): o = DepthManager.holder.createChildAtDepth( linkageName, DepthManager.kTopmost, initObj ); break; case (DepthManager.kTooltip): o = DepthManager.holder.createChildAtDepth( linkageName, DepthManager.kTop, initObj ); break; default: break; } return o; } /* the rest of these methods are added to UIObject */ // the methods use the following properties and methods on UIObject. var _childCounter:Number; var _topmost:Boolean; var createClassObject:Function; var createObject:Function; var swapDepths:Function; var getDepth:Function; var _parent:MovieClip; /** * create an instance of a class at a depth relative to other content * * @param className the name of the class * @param depthSpace one of kTop, kBottom, kTopmost, kNoTopmost * @param initObj object containing initialization properties * @return reference to object * * @tiptext * @helpid 3306 */ function createClassChildAtDepth( className:Function, depthFlag:Number, initObj:Object ):UIObject { if (_childCounter == undefined) _childCounter = 0; var dt:Array = buildDepthTable(); var depth:Number = getDepthByFlag( depthFlag, dt ); //trace("createClassChildAtDepth " + depth); var shuffleDir:String = "down"; if( depthFlag == mx.managers.DepthManager.kBottom) shuffleDir = "up"; var desiredDepth:Number = undefined; if (dt[depth] != undefined) { desiredDepth = depth; depth = findNextAvailableDepth( depth, dt, shuffleDir ); } //trace("createClassChildAtDepth " + depth); var o:UIObject = createClassObject(className, "depthChild" + _childCounter++, depth, initObj); //trace("createClassChildAtDepth created " + o); if (desiredDepth != undefined) { dt[depth] = o; shuffleDepths( o, desiredDepth, dt, shuffleDir ); } if ( depthFlag == mx.managers.DepthManager.kTopmost) o._topmost = true; //trace("createClassChildAtDepth " + depthFlag + " created " + o + " at " + depth); return o; } /** * create an instance of a symbol at a depth relative to other content * * @param linkageName the linkage name of the symbol in the library * @param depthSpace one of kTop, kBottom, kTopmost, kNoTopmost * @param initObj object containing initialization properties * @return reference to object * * @tiptext * @helpid 3307 */ function createChildAtDepth( linkageName:String, depthFlag:Number, initObj:Object ):MovieClip { //trace("createChildAtDepth"); if (_childCounter == undefined) _childCounter = 0; var dt:Array = buildDepthTable(); var depth:Number = getDepthByFlag( depthFlag, dt ); var shuffleDir:String = "down"; if( depthFlag == mx.managers.DepthManager.kBottom) shuffleDir = "up"; var desiredDepth:Number = undefined; if (dt[depth] != undefined) { desiredDepth = depth; depth = findNextAvailableDepth( depth, dt, shuffleDir ); } var o:MovieClip = createObject(linkageName, "depthChild" + _childCounter++, depth, initObj); if (desiredDepth != undefined) { dt[depth] = o; shuffleDepths( o, desiredDepth, dt, shuffleDir ); } if ( depthFlag == mx.managers.DepthManager.kTopmost) o._topmost = true; //trace("createChildAtDepth " + depthFlag + " created " + o + " at " + depth); return o; } /** * set this object at a particular depth, moving other objects to make room if needed * * @param depthFlag the desired depth * * @tiptext * @helpid 3308 */ function setDepthTo( depthFlag:Number ):Void { var dt:Array = _parent.buildDepthTable(); var depth:Number = _parent.getDepthByFlag( depthFlag, dt ); //trace("setDepthTo got depth by flag = " + depth); /* Shuffle is designed for relative movement like in setDepthAbove/Below. In this case we don't know what to do with something occupying the target slot. Do we move it up or down to make room? For now we just move it depending on its position relative to the target depth */ if (dt[depth] != undefined) { shuffleDepths( MovieClip(this), depth, dt, undefined); } else { swapDepths( depth ); } //trace("setDepthTo put " + this + " at " + depth); if ( depthFlag == mx.managers.DepthManager.kTopmost) _topmost = true; else delete _topmost; } /** * set this object above the target object, moving other objects including the target object to make room if needed * * @param targetInstance the target object * * @tiptext * @helpid 3309 */ function setDepthAbove( targetInstance:MovieClip ):Void { if (targetInstance._parent != _parent) return; // try to put it above var targetDepth:Number = targetInstance.getDepth() + 1; var dt:Array = _parent.buildDepthTable(); // if slot above is taken and we're coming from below, just // push the target down to make room for the source if (dt[targetDepth] != undefined && getDepth() < targetDepth) targetDepth -= 1; if (targetDepth > mx.managers.DepthManager.highestDepth) targetDepth = mx.managers.DepthManager.highestDepth; //trace("setDepthAbove wants to put " + this + " at " + targetDepth); if (targetDepth == mx.managers.DepthManager.highestDepth) _parent.shuffleDepths( this, targetDepth, dt, "down" ); else if (dt[targetDepth] != undefined) _parent.shuffleDepths( this, targetDepth, dt, undefined ); else swapDepths(targetDepth); //trace("setDepthAbove put " + this + " at " + targetDepth); } /** * set this object below the target object, moving other objects including the target object to make room if needed * * @param targetInstance the target object * * @tiptext * @helpid 3310 */ function setDepthBelow( targetInstance:MovieClip ):Void { if (targetInstance._parent != _parent) return; // try to put it above var targetDepth:Number = targetInstance.getDepth() - 1; var dt:Array = _parent.buildDepthTable(); // if slot below is taken and we're coming from above, just // shove the target up to make room for the source if (dt[targetDepth] != undefined && getDepth() > targetDepth) targetDepth += 1; var lowestDepth:Number = mx.managers.DepthManager.lowestDepth + mx.managers.DepthManager.numberOfAuthortimeLayers; // authortime shapes on layers don't show up in the depth table // we require that all shapes go below the components var i:String; for (i in dt) { var x = dt[i]; if (x._parent != undefined) lowestDepth = Math.min(lowestDepth, x.getDepth()); } if (targetDepth < lowestDepth) targetDepth = lowestDepth; //trace("setDepthBelow wants to put " + this + " at " + targetDepth); if (targetDepth == lowestDepth) _parent.shuffleDepths( this, targetDepth, dt, "up" ); else if (dt[targetDepth] != undefined) _parent.shuffleDepths( this, targetDepth, dt, undefined ); else swapDepths(targetDepth); //trace("setDepthBelow put " + this + " at " + targetDepth); } /** * @private * calculate the correct value to use for the new depth * * @param targetDepth desired depth * @param depthTable generated by call to buildDepthTable * @param direction "up" - look up if something occupies that depth, or "down" * @return Number next available depth */ function findNextAvailableDepth( targetDepth:Number, depthTable:Array, direction:String ):Number { var highestAuthoringDepth:Number = mx.managers.DepthManager.lowestDepth + mx.managers.DepthManager.numberOfAuthortimeLayers; // don't stick things into the authoring depths // static text and other content may be there. if (targetDepth < highestAuthoringDepth) targetDepth = highestAuthoringDepth; if (depthTable[targetDepth] == undefined) return targetDepth; // undefined; //trace("findNextAvailableDepth starting at " + targetDepth + " and packing stuff " + direction); var nextFreeAbove:Number = targetDepth; var nextFreeBelow:Number = targetDepth; if (direction == "down") { while(depthTable[nextFreeBelow] != undefined) { nextFreeBelow--; } return nextFreeBelow; } while(depthTable[nextFreeAbove] != undefined) { nextFreeAbove++; } return nextFreeAbove; } /** * @private * move objects to different depths in order to make room for subject at the targetDepth * * @param subject the object we want to move * @param targetDepth desired depth * @param depthTable generated by call to buildDepthTable * @param direction "up" - look up if something occupies that depth, or "down" or undefined - use best judgement */ function shuffleDepths( subject:MovieClip, targetDepth:Number, depthTable:Array, direction:String ):Void { // we have to take a movieclip and use it to give new depths to other clips and // textfields because textfields don't have depth swapping calls but can be // given new depths when swapped with a movie clip //trace("DepthManager:shuffleDepths"); var lowestDepth:Number = mx.managers.DepthManager.lowestDepth + mx.managers.DepthManager.numberOfAuthortimeLayers; var highestAuthoringDepth:Number = lowestDepth; // see note in first use of "lowestDepth++" var i:String; for (i in depthTable) { var x = depthTable[i]; if (x._parent != undefined) lowestDepth = Math.min(lowestDepth, x.getDepth()); } if (direction == undefined) { if (subject.getDepth() > targetDepth) direction = "up"; else direction = "down"; } // pack the array. Using shift on depthTable doesn't work because // shift and pop generate undefined for each hole in the array var dt:Array = new Array(); for (i in depthTable) { var x = depthTable[i]; if (x._parent != undefined) dt.push(x); } // sort the array by depth, [0] being the lowest. We can't count on the array being in order // even though the clip tells you about them in z-order. Additional // references to the clips can cause the array to be out of order dt.sort(mx.managers.DepthManager.sortFunction); if (direction == "up") { var a:Object = undefined; var lastd:Number; // pull things off the depth table until we find the subject while (dt.length > 0) { a = dt.pop(); // trace(a + " " + a.getDepth()); if (a == subject) { break; } } // move the rest of the array while (dt.length > 0) { lastd = subject.getDepth(); a = dt.pop(); var d:Number = a.getDepth(); // if there's a gap in the z order between the subject and the // current clip, move the subject just on top of the current // clip // trace(a + " is at " + d + " subject is at " + lastd); // don't do this if we're working with authoring content if (lastd > d + 1) { if (d >= 0) { subject.swapDepths(d+1); } else if (lastd > highestAuthoringDepth && d < highestAuthoringDepth) { subject.swapDepths(highestAuthoringDepth); } //trace("preswap put subject at " + subject.getDepth()); } // swap the subject below the current clip subject.swapDepths(a); // trace("swap put subject at " + subject.getDepth()); if (d == targetDepth) break; } } else if (direction == "down") { var a:Object = undefined; var lastd:Number; // pull things off the depth table until we find the subject while (dt.length > 0) { a = dt.shift(); if (a == subject) { break; } } // move the rest of the array while (dt.length > 0) { lastd = a.getDepth(); a = dt.shift(); var d:Number = a.getDepth(); // if there's a gap in the z order between the subject and the // current clip, move the subject just on top of the current // clip if ((lastd < d - 1) && (d > 0)) { subject.swapDepths(d - 1); } // swap the subject below the current clip subject.swapDepths(a); if (d == targetDepth) break; } } } /** * @private * calculate the correct depth based on the depthFlag. Does not guarantee that it * will be free -- you must test the depth and then shuffleDepths if necessary * * @param depthFlag either kTop, kBotton, kTopmost or kNoTopmost * @param depthTable generated by call to buildDepthTable * @return Number a good depth to start with */ function getDepthByFlag( depthFlag:Number, depthTable:Array ):Number { var depth:Number = 0; if ( depthFlag == mx.managers.DepthManager.kTop || depthFlag == mx.managers.DepthManager.kNotopmost) { var lowestTopmost:Number = 0; var anyTopmost:Boolean = false; var j:String; for (j in depthTable) { var i:Object = depthTable[j]; var t:String = typeof(i); if (t == "movieclip" || (t == "object" && i.__getTextFormat != undefined)) if (i.getDepth()<=DepthManager.highestDepth) { if (!i._topmost) { depth = Math.max(depth, i.getDepth()); } else { if (!anyTopmost) { lowestTopmost = i.getDepth(); anyTopmost = true; } else lowestTopmost = Math.min(lowestTopmost, i.getDepth()); } } } depth += 20; if (anyTopmost) if (depth >= lowestTopmost) depth = lowestTopmost -1; } else if (depthFlag == mx.managers.DepthManager.kBottom) { var j:String; for (j in depthTable) { var i:Object = depthTable[j]; var t:String = typeof(i); if (t == "movieclip" || (t == "object" && i.__getTextFormat != undefined)) if (i.getDepth()<=DepthManager.highestDepth) { depth = Math.min(depth, i.getDepth()); } } depth -= 20; } else if (depthFlag == mx.managers.DepthManager.kTopmost) { var j:String; for (j in depthTable) { var i:Object = depthTable[j]; var t:String = typeof(i); if (t == "movieclip" || (t == "object" && i.__getTextFormat != undefined)) if (i.getDepth()<=DepthManager.highestDepth) { depth = Math.max(depth, i.getDepth()); } } depth += 100; } if (depth >= mx.managers.DepthManager.highestDepth) depth = mx.managers.DepthManager.highestDepth; // see note in first use of "lowestDepth++" var lowestDepth:Number = mx.managers.DepthManager.lowestDepth + mx.managers.DepthManager.numberOfAuthortimeLayers; var i:String; for (i in depthTable) { var x:Object = depthTable[i]; if (x._parent != undefined) lowestDepth = Math.min(lowestDepth, x.getDepth()); } if (depth <= lowestDepth) depth = lowestDepth; return depth; } /** * @private * find all the children and build a table of their depths * * @return Array a table of the depths of the child objects */ function buildDepthTable(Void):Array { //trace("DepthManager:buildDepthTable"); var depthTable:Array = new Array(); var j:String; for (j in this) { var i = this[j]; var t:String = typeof(i); if (t == "movieclip" || (t == "object" && i.__getTextFormat != undefined)) if (i._parent == this) { depthTable[i.getDepth()] = i; } } return depthTable; } // Only one depth manager is needed. When created it adds the methods to the // base classes function DepthManager() { MovieClip.prototype.createClassChildAtDepth = createClassChildAtDepth; MovieClip.prototype.createChildAtDepth = createChildAtDepth; MovieClip.prototype.setDepthTo = setDepthTo; MovieClip.prototype.setDepthAbove = setDepthAbove; MovieClip.prototype.setDepthBelow = setDepthBelow; MovieClip.prototype.findNextAvailableDepth = findNextAvailableDepth; MovieClip.prototype.shuffleDepths = shuffleDepths; MovieClip.prototype.getDepthByFlag = getDepthByFlag; MovieClip.prototype.buildDepthTable = buildDepthTable; _global.ASSetPropFlags(MovieClip.prototype, "createClassChildAtDepth",1); _global.ASSetPropFlags(MovieClip.prototype, "createChildAtDepth",1); _global.ASSetPropFlags(MovieClip.prototype, "setDepthTo",1); _global.ASSetPropFlags(MovieClip.prototype, "setDepthAbove",1); _global.ASSetPropFlags(MovieClip.prototype, "setDepthBelow",1); _global.ASSetPropFlags(MovieClip.prototype, "findNextAvailableDepth",1); _global.ASSetPropFlags(MovieClip.prototype, "shuffleDepths",1); _global.ASSetPropFlags(MovieClip.prototype, "getDepthByFlag",1); _global.ASSetPropFlags(MovieClip.prototype, "buildDepthTable",1); // applyDepthSpaceProtection(); } // this technique guarantees that the depthManager is created and // adds to the base class when this package is included in a SWF static var __depthManager:DepthManager = new DepthManager(); /////////////////////////////////////////////////////////////////// // begin optional section for protected attachment and // depth space tracking (implements getInstanceAtDepth) // // this would allow considerable performance improvements for // some of the above methods, but incurs overhead at every // attach, swap, etc. /////////////////////////////////////////////////////////////////// /* function applyDepthSpaceProtection(Void):Void { MovieClip.prototype.attachProxy = MovieClip.prototype.attachMovie; MovieClip.prototype.swapProxy = MovieClip.prototype.swapDepths; // TBD: protect all of these // MovieClip.prototype.createEmptyMovieClip // MovieClip.prototype.createTextField // MovieClip.prototype.removeMovieClip // MovieClip.prototype.unloadMovie // MovieClip.prototype.duplicateMovieClip MovieClip.prototype.highestDepth = MovieClip.prototype.lowestDepth = 0; MovieClip.prototype.attachMovie = attachMovie; MovieClip.prototype.swapDepths = swapDepths; MovieClip.prototype.getInstanceAtDepth = getInstanceAtDepth; } function attachMovie(linkage:String, refName:String, depth:Number, init:Object):MovieClip { if (depthTable == undefined) depthTable = new Object(); var:Boolean doAttach = true; if (this == _level0) { doAttach = DepthManager.test(depth); //trace(refName + " will be attached " + doAttach); } if (doAttach) { // do the actual attachment var ref:MovieClip = attachProxy(linkage, refName, depth, init); depthTable[depth] = ref; highestDepth = Math.max(depth, MovieClip.highestDepth); lowestDepth = Math.min(depth, MovieClip.lowestDepth); return ref; } else return undefined; } function swapDepths(depthOrTarget):Void { if (depthTable == undefined) depthTable = new Object(); var original:Number = getDepth(); var doSwap:Boolean = true; var isInstance:Boolean = (typeof(depthOrTarget) == "movieclip"); if (typeof(getInstanceAtDepth(depthOrTarget)) == "movieclip") isInstance = true; if (this == _level0) { if (isInstance) doSwap = DepthManager.test(depthOrTarget); else doSwap = (depthOrTarget != DepthManager.holder); } if (doSwap) { swapProxy(depthOrTarget); if (isInstance) { var swapped:Number = depthOrTarget.getDepth(); _parent.depthTable[swapped] = this; _parent.depthTable[original] = depthOrTarget; } else { highestDepth = Math.max(depthOrTarget, MovieClip.highestDepth); lowestDepth = Math.min(depthOrTarget, MovieClip.lowestDepth); _parent.depthTable[depthOrTarget] = this; _parent.depthTable[original] = undefined; } } else return; } function getInstanceAtDepth(depth:Number):Number { return depthTable[depth]; } */ /////////////////////////////////////////////////////////////////// // end optional section /////////////////////////////////////////////////////////////////// } ;C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\core\ComponentVersion.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** static var version:String = "2.0.2.126"; Emx.core.ScrollView: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\core\ScrollView.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** /* EXTENDS View (formerly UIComponent) IMPLEMENTS Scroller Base class for components with scrollbars and a mask. This component implements the Scroller interface, which is the API that defines any control meant for scrolling Scrollable content. Any content to be scrolled by such a control must implement Scrollable, the complementary interface that speaks with Scroller Scroller INTERFACE =================== METHODS ------- setSize(x,y) - lays out the scroll controls and a mask setScrollProperties(numberOfCols, columnWidth, rowCount, rowHeight) - adjusts scroll controls to represent the content PROPERTIES ---------- scrollContent - property which sets the content of the pane. this usually sets a mask, positions content, and sets the scrollProperties of the scroll controls hPosition - the horizontal scroll position vPosition - the vertical scroll position hScrollPolicy - defines whether the Scroller will layout a horizontal control. Values are "on", "off", "auto" vScrollPolicy - ditto, but for vertical scrolling hScroller - a reference to the horizontal scroll control vScroller - a reference to the vertical scroll control EVENTS ------ Emits the scroll event, as documented in the listBox spec. */ import mx.core.View; import mx.controls.scrollClasses.ScrollBar; /** * @tiptext scroll event * @helpid 3269 */ [Event("scroll")] /** * @helpid 3270 * @tiptext base class for views/containers that support scrolling */ class mx.core.ScrollView extends View { /** * @private * SymbolName for object */ static var symbolName:String = "ScrollView"; /** * @private * Class used in createClassObject */ static var symbolOwner:Object = ScrollView; // Version string #include "../core/ComponentVersion.as" /** * name of this class */ var className:String = "ScrollView"; /* * @private * the horizontal scrollbar */ var hScroller:ScrollBar; /* * @private * the vertical scrollbar */ var vScroller:ScrollBar; /* * @private * the mask */ var mask_mc:MovieClip; // default values of the getter/setter properties var __vScrollPolicy:String = "auto"; var __hScrollPolicy:String = "off"; var __vPosition:Number = 0; var __hPosition:Number = 0; // cached values of the content parameters var numberOfCols:Number = 0; var rowC:Number = 0; var columnWidth:Number = 1; var rowH:Number = 0; var heightPadding:Number = 0; var widthPadding:Number = 0; var oldRndUp : Number; var __maxHPosition : Number; var viewableRows:Number; var viewableColumns:Number; var propsInited:Boolean; var scrollAreaChanged:Boolean; var invLayout:Boolean; var specialHScrollCase:Boolean; // offsets including borders and scrollbars var __viewMetrics:Object; // mask is placed up high and then made invisible var MASK_DEPTH:Number = 10000; // pointer to us when we get called in another scope var owner : MovieClip; function getHScrollPolicy(Void) { return __hScrollPolicy; } function setHScrollPolicy(policy) : Void { __hScrollPolicy = policy.toLowerCase(); if (__width==undefined) return; // from parameters setScrollProperties(numberOfCols, columnWidth, rowC, rowH, heightPadding, widthPadding); } /** * @tiptext whether the horizontal scrollbar is always on, always off or automatically changes * @helpid 3271 */ function get hScrollPolicy() : String { return getHScrollPolicy(); } function set hScrollPolicy(policy:String) { setHScrollPolicy(policy); } function getVScrollPolicy(Void) { return __vScrollPolicy; } function setVScrollPolicy(policy) : Void { __vScrollPolicy = policy.toLowerCase(); if (__width==undefined) return; // from parameters setScrollProperties(numberOfCols, columnWidth, rowC, rowH, heightPadding, widthPadding); } /** * @tiptext Whether the vertical scrollbar is always on, always off or automatically changes. * @helpid 3272 */ function get vScrollPolicy(): String { return getVScrollPolicy(); } function set vScrollPolicy(policy:Object) { setVScrollPolicy(policy); } /** * @tiptext The offset into the content from the left edge. * @helpid 3273 */ function get hPosition():Number { return getHPosition(); } //this only moves the scrollBars -- assumes the call emanated from the scrollable content function set hPosition(pos:Number) { setHPosition(pos); } function getHPosition(Void) : Number { return __hPosition; } function setHPosition(pos:Number) : Void { hScroller.scrollPosition = pos; __hPosition = pos; //EXTEND this method in ScrollPane to move the content. } /** * @tiptext the offset into the content from the top edge, usually in pixels or lines * @helpid 3274 */ function get vPosition():Number { return getVPosition(); } function set vPosition(pos:Number) { setVPosition(pos); } function getVPosition(Void) : Number { return __vPosition; } function setVPosition(pos:Number) : Void { vScroller.scrollPosition = pos; __vPosition = pos; //EXTEND this method in ScrollPane to move the content. } /** * @tiptext the maximum offset into the content from the top edge, not the bottom of content * @helpid 3275 */ function get maxVPosition():Number { var m:Number = vScroller.maxPos; return (m==undefined) ? 0 : m; } /** * @tiptext the maximum offset into the content from the left edge, not the right edge of content * @helpid 3276 */ function get maxHPosition():Number { return getMaxHPosition(); } function set maxHPosition(pos:Number) { setMaxHPosition(pos); } function getMaxHPosition(Void) : Number { if (__maxHPosition!=undefined) { return __maxHPosition; } var m:Number = hScroller.maxPos; return (m==undefined) ? 0 : m; } function setMaxHPosition(pos:Number) : Void { __maxHPosition = pos; } function ScrollView() { } // setScrollProperties // the problem here : if it is (discrete) scrolling list content, content's "virtual dimensions" needs // to represent the number of rows / columns. // in the case of list content : // numberOfCols = number of (model) data fields (in the case of grid content) // columnWidth = pixel width of (view) columns (grid content) // (column params only works for fixed-size columns) // rowCount = number of (model) items // rowHeight = pixel height of one (view) row // // in the case of analog content (swfs, jpgs, anything being scrolled strictly based on "physical" size) : // numberOfCols = number of pixels wide the content is // columnWidth = 1 (each column is typically 1 pixel) // rowCount = number of pixels wide // rowHeight = 1 (each row is typically 1 pixel) // note that for better scrolling experience w/ analog content, you should set the lineScrollSize // of .hScroller and .vScroller, so they scroll in more than 1-pixel increments with each arrow button click // // The padding params are optional, and are meant to allow the scrollPane to contain fixed content, // non-scrollable in one or both dimensions. An example is the column/row headers of a dataGrid, which // only scroll in one dimension, and shouldn't be taken as part of the scrollBars' calculations of position. /** * set the parameters for scrolling * @param colCount number of units to scroll horizontally * @param colWidth width in pixels of each of those units * @param rwCount number of untis to scroll vertically * @param rwHeight height in pixels of each of those units * @param hPadding pixels on the left edge that are not scrolled (for row headers) * @param wpadding pixels on the top edge that are not scrolled (for column headers) */ function setScrollProperties(colCount:Number, colWidth:Number, rwCount:Number, rwHeight:Number, hPadding:Number, wPadding:Number):Void { var vM = getViewMetrics(); if (hPadding == undefined) hPadding = 0; if (wPadding == undefined) wPadding = 0; propsInited = true; delete scrollAreaChanged; heightPadding = hPadding; widthPadding = wPadding; if(colWidth==0) colWidth=1; if(rwHeight==0) rwHeight=1; var viewableCols:Number = Math.ceil( (__width-vM.left-vM.right-widthPadding)/colWidth ); // trace("SSP : " + viewableCols + " " + colCount + " " + colWidth); if ( __hScrollPolicy=="on" || (viewableCols < colCount && (__hScrollPolicy=="auto")) ) { // we need a horizontal scrollBar. if (hScroller==undefined || specialHScrollCase) { delete specialHScrollCase; // nope, need to add it hScroller = ScrollBar(createObject("HScrollBar", "hSB", 1001)); hScroller.lineScrollSize = 20; hScroller.scrollHandler = scrollProxy; hScroller.scrollPosition = __hPosition; scrollAreaChanged = true; } if (numberOfCols!=colCount || columnWidth!=colWidth || viewableColumns!=viewableCols || scrollAreaChanged) { hScroller.setScrollProperties(viewableCols, 0, colCount-viewableCols); viewableColumns = viewableCols; numberOfCols = colCount; columnWidth = colWidth; } } else if ( (__hScrollPolicy=="auto" || __hScrollPolicy=="off") && hScroller!=undefined) { // we need to remove this scroller hScroller.removeMovieClip(); delete hScroller; scrollAreaChanged = true; } if (heightPadding==undefined) heightPadding=0; var viewableRws:Number = Math.ceil( (__height-vM.top-vM.bottom-heightPadding)/rwHeight ); var rndUp = ( (__height-vM.top-vM.bottom)%rwHeight != 0 ); // trace("SSP : " + viewableRws + " " + rwCount + " "); if ( __vScrollPolicy=="on" || (viewableRws < rwCount+rndUp && (__vScrollPolicy=="auto")) ) { // we need a vertical scroller. Does it exist? if (vScroller==undefined) { // no it doesn't, and we're allowed to add it. vScroller = ScrollBar(createObject("VScrollBar", "vSB", 1002)); vScroller.scrollHandler = scrollProxy; vScroller.scrollPosition = __vPosition; scrollAreaChanged = true; rowH = 0; } if (rowC!=rwCount || rowH!=rwHeight || ((viewableRows+rndUp)!=(viewableRws+oldRndUp)) || scrollAreaChanged) { vScroller.setScrollProperties(viewableRws, 0, rwCount-viewableRws + rndUp); viewableRows = viewableRws; rowC = rwCount; rowH = rwHeight; oldRndUp = rndUp; } } else if ( (__vScrollPolicy=="auto" || __vScrollPolicy=="off") && vScroller!=undefined) { vScroller.removeMovieClip(); delete vScroller; scrollAreaChanged = true; } numberOfCols = colCount; columnWidth = colWidth; // now, if any scroller came into or left existence, it's possible that the content // is occluded or revealed enough that the other scroller needs to appear or go away if (scrollAreaChanged) { doLayout(); // this is for content that conforms to the (discrete) scrollable interface. It just falls through // on analog content (I hope) var o:Object = __viewMetrics; var ownr:MovieClip = (owner!=undefined) ? owner : this; ownr.layoutContent(o.left, o.top, columnWidth*numberOfCols-o.left-o.right, rowC*rowH, __width-o.left-o.right, __height-o.top-o.bottom); } //EXTEND this method in ScrollPane to setLineScrollSize on .hScroller and .vScroller. // As well, if scrollAreaChanged is true, the ScrollPane will need to run another setScrollProps to see // if the change might force a change in the other scrollBar. if (!enabled) setEnabled(false); } /** * get the thickness of the edges of the object taking into account the border and scrollbars if visible * @return object with left, right, top and bottom edge thickness in pixels */ function getViewMetrics(Void):Object { var o:Object = __viewMetrics; var m:Object = border_mc.borderMetrics; o.left = m.left; o.right = m.right; if (vScroller != undefined) o.right += vScroller.minWidth; o.top = m.top; if (hScroller==undefined && (__hScrollPolicy=="on" || __hScrollPolicy==true)) { hScroller = ScrollBar(createObject("FHScrollBar", "hSB", 1001)); specialHScrollCase = true; } o.bottom = m.bottom; if (hScroller != undefined) o.bottom += hScroller.minHeight; return o; } /** * @private * layout the scrollbars and adjust the mask */ function doLayout(Void):Void { var w = width; var h = height; delete invLayout; var o:Object = __viewMetrics = getViewMetrics(); var lo = o.left; var ro = o.right; var to = o.top; var bo = o.bottom; var hsb = hScroller; var vsb = vScroller; hsb.setSize(w-lo-ro, hsb.minHeight + 0); hsb.move(lo, h-bo); vsb.setSize(vsb.minWidth + 0, h-to-bo); vsb.move(w-ro, to); var mask = mask_mc; mask._width = w-lo-ro; mask._height = h-to-bo; mask._x = lo; mask._y = to; } /** * @see mx.core.View */ // the id is not typed so that a ref can be passed function createChild(id, name:String, props:Object):MovieClip { var newObj:MovieClip = super.createChild(id, name, props); return newObj; } // init variables and create internal objects function init(Void):Void { super.init(); __viewMetrics = new Object(); if (_global.__SVMouseWheelManager==undefined) { var s = _global.__SVMouseWheelManager = new Object(); s.onMouseWheel = this.__onMouseWheel; Mouse.addListener(s); } } function __onMouseWheel(delta:Number, scrollTarget:MovieClip) : Void { var i = scrollTarget; var sT; while(i!=undefined) { if (i instanceof mx.core.ScrollView) { sT = i; delete i; } i = i._parent; } if (sT!=undefined) { var i = (delta<=0) ? 1 : -1; var l = sT.vScroller.lineScrollSize; if (l==undefined) l=0; l = Math.max(Math.abs(delta), l); var nPos = sT.vPosition + l*i; sT.vPosition = Math.max(0, Math.min(nPos, sT.maxVPosition)); sT.dispatchEvent({type:"scroll", direction:"vertical", position:sT.vPosition }); } } // create the mask and make it invisible function createChildren(Void):Void { super.createChildren(); if (mask_mc == undefined) mask_mc = createObject("BoundingBox", "mask_mc", MASK_DEPTH); mask_mc._visible = false; } // if we get invalidated just call super function invalidate(Void):Void { super.invalidate(); } // redraw by re-laying out function draw(Void):Void { size(); } // respond to size changes function size(Void):Void { super.size(); } // handle scroll events from the scrollbar // 'this' is actually the scrollbar so we just // pass it to the parent function scrollProxy(docObj:Object):Void { _parent.onScroll(docObj); } // process the scroll event function onScroll(docObj:Object):Void { var scroller:MovieClip = docObj.target; var pos:Number = scroller.scrollPosition; if (scroller==vScroller) { var d:String = "vertical"; var prop:String = "__vPosition"; } else { var d:String = "horizontal"; var prop:String = "__hPosition"; } this[prop] = pos; dispatchEvent({type:"scroll", direction:d, position:pos }); } // scrollbars must be enabled/disabled when we are function setEnabled(v:Boolean):Void { vScroller.enabled = hScroller.enabled = v; } /** * @private * this gets called when the child is finished loading * @param obj the loaded child */ function childLoaded(obj:MovieClip):Void { super.childLoaded(obj); obj.setMask(mask_mc); } } Jmx.styles.StyleManager: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\styles\StyleManager.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** /** * The class that manages: * -which CSS style properties are inheriting * -which style properties are colors and therefore get special handling * -a list of strings that are aliases for color values * * @helpid 3347 * @tiptext Management of CSS style properties. */ class mx.styles.StyleManager { // initialize set of inheriting non-color styles. This is not the complete set // from CSS. Some of the omitted we don't support at all, others may be added later // as needed. static var inheritingStyles:Object = { color: true, direction: true, fontFamily: true, fontSize: true, fontStyle: true, fontWeight: true, textAlign: true, textIndent: true }; // initialize set of inheriting color styles. static var colorStyles:Object = { barColor: true, trackColor: true, borderColor: true, buttonColor: true, color: true, dateHeaderColor: true, dateRollOverColor: true, disabledColor: true, fillColor: true, highlightColor: true, scrollTrackColor: true, selectedDateColor: true, shadowColor: true, strokeColor: true, symbolBackgroundColor: true, symbolBackgroundDisabledColor: true, symbolBackgroundPressedColor: true, symbolColor: true, symbolDisabledColor: true, themeColor:true, todayIndicatorColor: true, shadowCapColor:true, borderCapColor:true, focusColor:true }; // initialize set of color names. static var colorNames:Object = { black: 0x000000, white: 0xFFFFFF, red: 0xFF0000, green: 0x00FF00, blue: 0x0000FF, magenta: 0xFF00FF, yellow: 0xFFFF00, cyan: 0x00FFFF, haloGreen: 0x80FF4D, haloBlue: 0x2BF5F5, haloOrange: 0xFFC200 }; // object used to determine which Flash TextFormat property values are // inheriting (calculated by examining the parent if not defined on the child) static var TextFormatStyleProps:Object = { font: true, size: true, color: true, leftMargin: false, rightMargin: false, italic: true, bold: true, align: true, indent: true, underline: false, embedFonts: false }; // object used to map CSS style properties to Flash TextFormat properties static var TextStyleMap:Object = { textAlign: true, fontWeight: true, color: true, fontFamily: true, textIndent: true, fontStyle: true, lineHeight: true, marginLeft: true, marginRight: true, fontSize: true, textDecoration: true, // not really in TextFormat, but here as an optimization embedFonts: true }; /** * @private * add to the list of styles that can inherit values from their parents * * warning: watch out for name collisions otherwise you will * cause lots of extra processing if an already used style * becomes inheriting. * * @param styleName the style name */ static function registerInheritingStyle(styleName:String):Void { StyleManager.inheritingStyles[styleName] = true; } /** * @private * returns true if style is inheriting. * * @param styleName the style name * @return Boolean */ static function isInheritingStyle(styleName:String):Boolean { return (StyleManager.inheritingStyles[styleName] == true); } /** * @private * add to the list of styles that are colors so they can be specially handled * * @param styleName the style name */ static function registerColorStyle(styleName:String):Void { StyleManager.colorStyles[styleName] = true; } /** * @private * returns true if style is a color style. * * @param styleName the style name * @return Boolean */ static function isColorStyle(styleName:String):Boolean { return (StyleManager.colorStyles[styleName] == true); } /** * @private * add to the list of aliases for colors * * @param colorName the style name (e.g. "blue") * @param colorValue the color value (e.g. 0x0000FF) */ static function registerColorName(colorName:String, colorValue:Number):Void { StyleManager.colorNames[colorName] = colorValue; } /** * @private * returns true if colorName is an alias for a color. * * @param colorName the color name * @return Boolean */ static function isColorName(colorName:String):Boolean { return (StyleManager.colorNames[colorName] != undefined) } /** * @private * returns true if colorName is an alias for a color. * * @param colorName the color name * @return Number (the color value) */ static function getColorName(colorName:String):Number { return StyleManager.colorNames[colorName]; } } mOmx.controls.scrollClasses.ScrollBar: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\controls\scrollClasses\ScrollBar.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** //** Recipe for a component Search for //** in this file to see the things // you should think about //** 0) import all necessary classes import mx.core.UIObject; import mx.skins.SkinElement; import mx.core.UIComponent; import mx.controls.SimpleButton; import mx.controls.scrollClasses.ScrollThumb; /** * a window with a title bar, caption and optional close button * The title bar can be used to drag the window to a new location. * * @helpid 3263 * @tiptext */ class mx.controls.scrollClasses.ScrollBar extends UIComponent { //** 1) define either your movie clip name if you have a symbol for this class, // or just a symbolOwner pointing to the owner of the symbol for your // base class if you are a code-only class // static var symbolName:String = "ScrollBar"; // static var symbolOwner:Object = ScrollBar; /** * @private * Class used in createClassObject */ static var symbolOwner:Object = mx.core.UIComponent; //** 2) define your class name. /** * name of this class */ var className:String = "ScrollBar"; //** 3) stick in all your default member variables /** * @private * minimum scroll position */ var minPos:Number = 0; /** * @private * maximum scroll position */ var maxPos:Number = 0; /** * @private * amount to move when track is pressed */ var pageSize:Number = 0; /** * @private * if > 0, used as an override to the pageSize */ var largeScroll:Number = 0; /** * @private * amount to move when arrow buttons are pressed */ var smallScroll:Number = 1; /** * @private * stored value of the current position */ var _scrollPosition:Number = 0; //** 4) create variables for every skin element/linkage used in the component // This allows someone to set a different skin element just // by changing a parameter in the component /** * symbol name of skin element for the scroll track */ var scrollTrackName:String = "ScrollTrack"; /** * symbol name of skin element for the scroll track when mouse is over it */ var scrollTrackOverName:String = ""; /** * symbol name of skin element for the scroll track when pressed */ var scrollTrackDownName:String = ""; /** * symbol name of skin element for the disabled state of the upArrow button */ var upArrowName:String = "BtnUpArrow"; /** * symbol name of skin element for the up state of the upArrow button */ var upArrowUpName:String = "ScrollUpArrowUp"; /** * symbol name of skin element for the over state of the upArrow button */ var upArrowOverName:String = "ScrollUpArrowOver"; /** * symbol name of skin element for the down state of the upArrow button */ var upArrowDownName:String = "ScrollUpArrowDown"; /** * symbol name of skin element for the disabled state of the downArrow button */ var downArrowName:String = "BtnDownArrow"; /** * symbol name of skin element for the up state of the downArrow button */ var downArrowUpName:String = "ScrollDownArrowUp"; /** * symbol name of skin element for the over state of the downArrow button */ var downArrowOverName:String = "ScrollDownArrowOver"; /** * symbol name of skin element for the down state of the downArrow button */ var downArrowDownName:String = "ScrollDownArrowDown"; /** * symbol name of skin element for the top cap of the thumb in the up state */ var thumbTopName:String = "ScrollThumbTopUp"; /** * symbol name of skin element for the moddle piece of the thumb in the up state */ var thumbMiddleName:String = "ScrollThumbMiddleUp"; /** * symbol name of skin element for the bottom cap of the thumb in the up state */ var thumbBottomName:String = "ScrollThumbBottomUp"; /** * symbol name of skin element for the grip of the thumb in the up state */ var thumbGripName:String = "ScrollThumbGripUp"; //** 5) stick in your class constants. If you have more than one copy of // a particular subobject, you might want to create skinIDs to reference // them. /** * @private * index of track */ static var skinIDTrack:Number = 0; /** * @private * index of track in over state */ static var skinIDTrackOver:Number = 1; /** * @private * index of track when pressed */ static var skinIDTrackDown:Number = 2; /** * @private * index of up arrow */ static var skinIDUpArrow:Number = 3; /** * @private * index of down arrow */ static var skinIDDownArrow:Number = 4; /** * @private * index of thumb */ static var skinIDThumb:Number = 5; //** 6) skinID constants go hand-in-hand with an idNames array of instance names for the skins /** * @private * instance names for scrollbar skins */ var idNames:Array = new Array("scrollTrack_mc", "scrollTrackOver_mc", "scrollTrackDown_mc", "upArrow_mc", "downArrow_mc"); //** 7) add a clip parameter entry for every variable that has a getter/setter, or is specially handled in the // init to map to a function call /** * @private * list of clip parameters to check at init */ var clipParameters:Object = {minPos: 1, maxPos: 1, pageSize: 1, scrollPosition: 1, lineScrollSize: 1, pageScrollSize: 1, visible: 1, enabled: 1}; /** * @private * all components must use this mechanism to merge their clip parameters with their base class clip parameters */ static var mergedClipParameters:Boolean = UIObject.mergeClipParameters(ScrollBar.prototype.clipParameters, UIComponent.prototype.clipParameters); /** * @private * true until the component has finished initializing */ var initializing:Boolean = true; //** 8) define uninitialized member variables. There won't be a property slot on these at // runtime until someone assigns a property. // true if servicing a scroll event var isScrolling:Boolean; /** * @private * instance name of the scroll track */ var scrollTrack_mc:SkinElement; /** * @private * instance name of the scroll thumb */ var scrollThumb_mc:ScrollThumb; /** * @private * instance name of the up arrow button */ var upArrow_mc:SimpleButton; /** * @private * instance name of the down arrow button */ var downArrow_mc:SimpleButton; /** * @private * instance name of bounding box that gets destroyed at init time */ var boundingBox_mc:MovieClip; // strings used to build up the name of the detail property of the event object var minMode:String; var maxMode:String; var minusMode:String; var plusMode:String; // setInterval reference var scrolling; // interval reference // see mx.events.EventDispatcher var scrollHandler:Function; //** 9) define your getters and setters here /** * the current scroll position * * @tiptext * @helpid 3264 */ function get scrollPosition():Number { return _scrollPosition; } function set scrollPosition(pos:Number) { _scrollPosition = pos; if (isScrolling != true) { // update thumb pos = Math.min(pos, maxPos); pos = Math.max(pos, minPos); var y:Number = ((pos-minPos) * (scrollTrack_mc.height-scrollThumb_mc._height) / (maxPos - minPos)) + scrollTrack_mc.top; scrollThumb_mc.move(0,y); } } /** * the amount to move when the track is pressed * * @tiptext * @helpid 3265 */ function get pageScrollSize():Number { return largeScroll; } function set pageScrollSize(lScroll:Number) { largeScroll = lScroll; } /** * the amount to move when an arrow button is pressed * * @tiptext * @helpid 3266 */ function set lineScrollSize(sScroll:Number) { smallScroll = sScroll; } function get lineScrollSize():Number { return smallScroll; } // for internal use only. Used by horizontal bar to deal with rotation function get virtualHeight():Number { return __height; } //** 10) write a constructor. It should generally be empty function ScrollBar() { } //** 11) put in your init function. Init is called when the class is created // CreateChildren is called when the after all of the objects in the inheritance // chain have been initialized. You also have the option to not call // super.createChildren, where you must call super.init(); /** * @private * init variables. Components should implement this method and call super.init() at minimum */ function init(Void):Void { //** 11a) call super.init(). This adds your StyleDeclaration (if nobody gave you one // and sets initial values for width and height super.init(); //** 11b) finish other initialization of variables. _scrollPosition = 0; // most components are focusable, but the scrollbar isn't tabEnabled = false; focusEnabled = false; boundingBox_mc._visible = false; boundingBox_mc._width = boundingBox_mc._height = 0; } //** 12) load your graphics and sub objects in createChildren. Subclasses // will have had a chance to override the creation of your children // so check to see what isn't defined and create it now // It is recommended that you make things invisible at first so there // isn't flicker as the object is created. /** * @private * create child objects. */ function createChildren(Void):Void { // get the scroll tracking area if (scrollTrack_mc == undefined) { setSkin(skinIDTrack, scrollTrackName); } scrollTrack_mc.visible = false; // now that the track is loaded, setup the scrollbar track listener // even though the buttons aren't created yet. As an optimization, // we will set up the buttons in the correct enabled/disabled state // in their initialization routines // setScrollProperties(pageSize, minPos, maxPos); var o:Object = new Object(); o.enabled = false; //enabled && (maxPos - minPos > 0); o.preset = SimpleButton.falseDisabled; // o.enabled ? SimpleButton.falseUp : SimpleButton.falseDisabled; o.initProperties = 0; // make sure it doesn't go through clip parameter processing o.autoRepeat = true; o.tabEnabled = false; var b; // get the arrow buttons if (upArrow_mc == undefined) { b = createButton(upArrowName, "upArrow_mc", skinIDUpArrow, o); } b.buttonDownHandler = onUpArrow; b.clickHandler = onScrollChanged; _minHeight = b.height; _minWidth = b.width; // get the arrow buttons if (downArrow_mc == undefined) { b = createButton(downArrowName, "downArrow_mc", skinIDDownArrow, o); } b.buttonDownHandler = onDownArrow; b.clickHandler = onScrollChanged; _minHeight += b.height; //** 12b) the base class will automatically call invalidate to get things to display } // helper function to create the arrow buttons function createButton(linkageName:String, id:String, skinID:Number, o:Object):Object { // here's a situation where using a skinID saves os from a string compare if (skinID == skinIDUpArrow) { o.falseUpSkin = upArrowUpName; o.falseDownSkin = upArrowDownName; o.falseOverSkin = upArrowOverName; } else { o.falseUpSkin = downArrowUpName; o.falseDownSkin = downArrowDownName; o.falseOverSkin = downArrowOverName; } var b = createObject(linkageName, id, skinID, o); this[id].visible = false; this[id].useHandCursor = false; return b; } /** * @private * create the thumb */ function createThumb(Void):Void { //mr var o:Object = new Object(); o.validateNow = true; o.tabEnabled = false; o.leftSkin = thumbTopName; o.middleSkin = thumbMiddleName; o.rightSkin = thumbBottomName; o.gripSkin = thumbGripName; createClassObject(ScrollThumb, "scrollThumb_mc", skinIDThumb, o); } //** 13) add methods on your object. If you are converting an old // component, review it to see if anything needs // to change. Most things stay the same unless they involve // broadcasting events, or things that are now getter/setter // properties // ::: PUBLIC METHODS /** * resizes the thumb, enables/disables arrows if there is stuff to scroll * * @tiptext * @helpid 3267 */ function setScrollProperties(pSize:Number, mnPos:Number, mxPos:Number, ls:Number):Void { var thumbHeight:Number; var o:SkinElement = scrollTrack_mc; pageSize = pSize; largeScroll = (ls != undefined && ls > 0) ? ls : pSize; minPos = Math.max(mnPos, 0); maxPos = Math.max(mxPos,0); _scrollPosition = Math.max(minPos, _scrollPosition); _scrollPosition = Math.min(maxPos, _scrollPosition); if ((maxPos-minPos > 0) && enabled) { var tmp:Number = _scrollPosition; if (!initializing) { upArrow_mc.enabled = true; downArrow_mc.enabled = true; } o.onPress = o.onDragOver = startTrackScroller; o.onRelease = releaseScrolling; o.onDragOut = o["stopScrolling"] = stopScrolling; o.onReleaseOutside = releaseScrolling; o.useHandCursor = false; if (scrollThumb_mc == undefined) { createThumb(); } var st:ScrollThumb = scrollThumb_mc; if (scrollTrackOverName.length > 0) { o.onRollOver = trackOver; o.onRollOut = trackOut; } thumbHeight = pageSize / (maxPos-minPos+pageSize) * o.height; if (thumbHeight < st.minHeight) { if (o.height < st.minHeight) { st.visible = false; } else { thumbHeight = st.minHeight; st.visible = true; st.setSize(_minWidth, st.minHeight + 0); } } else { st.visible = true; st.setSize(_minWidth, thumbHeight); } st.setRange(upArrow_mc.height + 0, virtualHeight - downArrow_mc.height - st.height, minPos, maxPos); tmp = Math.min(tmp, maxPos); scrollPosition = Math.max(tmp, minPos); } else { scrollThumb_mc.visible = false; if (!initializing) { upArrow_mc.enabled = false; downArrow_mc.enabled = false; } delete o.onPress; delete o.onDragOver; delete o.onRelease; delete o.onDragOut; delete o.onRollOver; delete o.onRollOut; delete o.onReleaseOutside; } if (initializing) { scrollThumb_mc.visible = false; } } // turn off buttons, or turn on buttons and resync thumb function setEnabled(enabledFlag:Boolean):Void { super.setEnabled(enabledFlag); setScrollProperties(pageSize, minPos, maxPos, largeScroll); } //** 14) create a draw method. Most of the time, all you'll need to do // is force a layout of your objects, and make things visible if it // is the first time you are being drawn // draw by making everything visible, then laying out function draw(Void):Void { if (initializing) { initializing = false; scrollTrack_mc.visible = true; upArrow_mc.visible = true; downArrow_mc.visible = true; } // call size to get everything to display itself in the right place size(); } //** 15) create a size method or replace your old setSize with an size() // stretches the track, creates + positions arrows /** * @private * size changed to re-position everything */ function size(Void):Void { if (_height==1) return; if (upArrow_mc == undefined) return; var y1:Number = upArrow_mc.height; var y2:Number = downArrow_mc.height; upArrow_mc.move(0, 0); var st:SkinElement = scrollTrack_mc; st._y = y1; st._height = virtualHeight - y1 - y2; downArrow_mc.move(0, virtualHeight - y2); setScrollProperties(pageSize, minPos, maxPos, largeScroll); } /** * @private * create and dispatch a scroll event */ function dispatchScrollEvent(detail:String):Void { // don't type this as a UIEvent so we can overload the detail type dispatchEvent({type: "scroll", detail: detail}); } /** * @private * returns true if it is a scrollbar key. It will execute the equivalent code for that key as well */ function isScrollBarKey(k:Number):Boolean { if (k == Key.HOME) { if (scrollPosition != 0) { scrollPosition = 0; dispatchScrollEvent(minMode); } return true; } else if (k == Key.END) { if (scrollPosition < maxPos) { scrollPosition = maxPos; dispatchScrollEvent(maxMode); } return true; } return false; } // ::: PRIVATE METHODS /** * @private * figure out how much to move */ function scrollIt(inc:String, mode:Number):Void { var delt:Number = smallScroll; if (inc != "Line") { delt = (largeScroll==0) ? pageSize : largeScroll; } var newPos:Number = _scrollPosition + (mode*delt); if (newPos>maxPos) { newPos = maxPos; } else if (newPos 0) { if (_parent.scrollTrackDown_mc == undefined) { _parent.setSkin(skinIDTrackDown, scrollTrackDownName); } else { _parent.scrollTrackDown_mc.visible = true; } } _parent.trackScroller(); _parent.scrolling = setInterval(_parent, "scrollInterval", getStyle("repeatDelay"), "Page", -1); } /** * @private * this gets called at certain intervals to repeat the scroll event when pressing the track */ function scrollInterval(inc:String,mode:Number):Void { clearInterval(scrolling); if (inc=="Page") { trackScroller(); } else { scrollIt(inc,mode); } scrolling = setInterval(this, "scrollInterval", getStyle("repeatInterval"), inc, mode); } /** * @private * figure out which direction we're moving */ function trackScroller(Void):Void { if (scrollThumb_mc._y+scrollThumb_mc.height < _ymouse) { scrollIt("Page",1); } else if (scrollThumb_mc._y>_ymouse) { scrollIt("Page",-1); } } /** * @private * this event is used by scrollview contents so they know they can reset selection * after the user has clicked on the scroll bars */ function dispatchScrollChangedEvent(Void):Void { dispatchEvent({type:"scrollChanged"}); } /** * @private * stop repeating events because the track is no longer pressed */ function stopScrolling(Void):Void { clearInterval(_parent.scrolling); _parent.scrollTrackDown_mc.visible = false; } /** * @private * stop repeating events because the track is no longer pressed * special case to restore focus when we've released the mouse */ function releaseScrolling(Void):Void { _parent.releaseFocus(); stopScrolling(); _parent.dispatchScrollChangedEvent(); } /** * @private * switch to the over state of the track */ function trackOver(Void):Void { if (_parent.scrollTrackOverName.length > 0) { if (_parent.scrollTrackOver_mc == undefined) { _parent.setSkin(skinIDTrackOver, scrollTrackOverName); } else { _parent.scrollTrackOver_mc.visible = true; } } } /** * @private * the mouse has left the track */ function trackOut(Void):Void { _parent.scrollTrackOver_mc.visible = false; } /** * @private * callback when the uparrow is pressed */ function onUpArrow(Void):Void { _parent.scrollIt("Line",-1); } /** * @private * callback when the downarrow is pressed */ function onDownArrow(Void):Void { _parent.scrollIt("Line",1); } /** * @private * callback when the arrow is released */ function onScrollChanged(Void):Void { _parent.dispatchScrollChangedEvent(); } } Qmx.styles.CSSStyleDeclaration: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\styles\CSSStyleDeclaration.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** import mx.styles.CSSTextStyles; import mx.styles.StyleManager; /** * The class that represents a set of CSS style rules. Note that UIObject * also has a similar implementation. Styles may be set directly on UIObjects or * indirectly by referencing an instance of this class using the styleName property. * @see mx.core.UIObject * * @helpid 3334 * @tiptext A set of CSS style properties and values. */ class mx.styles.CSSStyleDeclaration { // local copy of the Flash TextFormat var _tf:TextFormat; // the name of a CSSStyleDeclaration as found on _global.styles. var styleName:String; // these get replaced by getters and setters via the TextStyles mixin var textAlign:String; var fontWeight:String; var color:Number; var fontFamily:String; var textIndent:Number; var fontStyle:String; var marginLeft:Number; var marginRight:Number; var fontSize:Number; var textDecoration:String; var embedFonts:Boolean; // used to calculate the Flash TextFormat object function __getTextFormat(tf:TextFormat, bAll:Boolean):Boolean { var bUndefined:Boolean = false; if (_tf != undefined) { var j:String; // for each field in the mapping for (j in StyleManager.TextFormatStyleProps) { if (bAll || StyleManager.TextFormatStyleProps[j]) { if (tf[j] == undefined) { // get the value from the textFormat var v = _tf[j]; // store it in the tf if not defined if (v != undefined) { tf[j] = v; } else bUndefined = true; } } } } else bUndefined = true; return bUndefined; } /** * get a style property * * @param String prop name of style property * @return Variant the style value * * @tiptext * @helpid 3335 */ function getStyle(styleProp:String) { var val = this[styleProp]; var c = StyleManager.getColorName(val); return (c==undefined) ? val : c; } static function classConstruct():Boolean { CSSTextStyles.addTextStyles(CSSStyleDeclaration.prototype, true); return true; } static var classConstructed:Boolean = classConstruct(); static var CSSTextStylesDependency = CSSTextStyles; } XC:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\core\ComponentVersion.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** static var version:String = "2.0.2.126"; [mx.containers.Window: C:\Documents and Settings\Alfonso\Configuración local\Datos de programa\Macromedia\Flash 8\es\Configuration\Classes\mx\containers\Window.as//**************************************************************************** //Copyright (C) 2003 Macromedia, Inc. All Rights Reserved. //The following is Sample Code and is subject to all restrictions on //such code as contained in the End User License Agreement accompanying //this product. //**************************************************************************** import mx.core.ScrollView; import mx.controls.SimpleButton; import mx.skins.SkinElement; import mx.core.UIObject; import mx.managers.DepthManager /** * @tiptext click event * @helpid 3985 */ [Event("click")] /** * @tiptext mouseDownOutside event * @helpid 3990 */ [Event("mouseDownOutside")] [TagName("Window")] [IconFile("Window.png")] /** * a window with a title bar, caption and optional close button * The title bar can be used to drag the window to a new location. * * @helpid 3033 * @tiptext A window with a title bar, caption and optional close button */ class mx.containers.Window extends ScrollView { /** * @private * SymbolName for object */ static var symbolName:String = "Window"; /** * @private * Class used in createClassObject */ static var symbolOwner:Object = Window; // Version string #include "../core/ComponentVersion.as" /** * name of this class */ var className:String = "Window"; /** * @private * index of border skin */ static var skinIDBorder:Number = 0; /** * @private * index of background of title bar */ static var skinIDTitleBackground:Number = 1; /** * @private * index of content */ static var skinIDForm:Number = 2; /** * @private * instance names for window skins */ var idNames:Array = new Array("border_mc", "back_mc", "content"); /** * symbol name of skin element for background of the title bar */ [Inspectable(verbose=1, category="Skins")] var skinTitleBackground:String = "TitleBackground"; /** * symbol name of skin element for the up state of the close button */ [Inspectable(verbose=1, category="Skins")] var skinCloseUp:String = "CloseButtonUp"; /** * symbol name of skin element for the over state of the close button */ [Inspectable(verbose=1, category="Skins")] var skinCloseOver:String = "CloseButtonOver"; /** * symbol name of skin element for the down state of the close button */ [Inspectable(verbose=1, category="Skins")] var skinCloseDown:String = "CloseButtonDown"; /** * symbol name of skin element for the disabled state of the close button */ [Inspectable(verbose=1, category="Skins")] var skinCloseDisabled:String = "CloseButtonDisabled"; /** * @private * list of clip parameters to check at init */ var clipParameters:Object = { title: 1, contentPath: 1, closeButton: 1}; /** * @private * all components must use this mechanism to merge their clip parameters with their base class clip parameters */ static var mergedClipParameters:Boolean = UIObject.mergeClipParameters(Window.prototype.clipParameters, ScrollView.prototype.clipParameters); /** * @private * true until the component has finished initializing */ var initializing:Boolean = true; /** * the location on the window the mouse was clicked */ var regX : Number; var regY : Number; /** * style declaration name for the text in the title bar * * @tiptext The CSSStyleDeclaration name for setting styles on the title bar's text * @helpid 3992 */ [Inspectable(defaultValue="", verbose=1, category="Skins")] var titleStyleDeclaration:String; /** * true if you want the close button displayed * * @tiptext If true, the close button is displayed * @helpid 3986 */ [Inspectable(defaultValue=false)] var closeButton:Boolean; var loadingChild:Boolean = false; // stored value of the contentPath property var __contentPath:String; // setup by PopUpManager var modalWindow:MovieClip; // these are just here so they can have helpids /** * The URL or linkage name of the SWF or JPEG has been loaded into the ScrollPane. * @tiptext Returns the content of the Window * @helpid 3987 */ var content:MovieClip; /** * modal windows must be destroyed via deletePopUp * @tiptext Deletes the Window and removes the modal state * @helpid 3989 */ var deletePopUp:Function; /** * name of the symbol or URL to the image or movie to display as the content * * @tiptext Specifies the name of the content to be loaded * @helpid 3988 */ [Inspectable(defaultValue="")] [Bindable] function set contentPath(scrollableContent:String) { if (!initializing) { // trace("Window :: setScrollContent " + scrollableContent); if (scrollableContent == undefined) { destroyChildAt(0); } else { if (this[childNameBase + 0] != undefined) destroyChildAt(0); createChild(scrollableContent, "content", {styleName:this}); } } __contentPath = scrollableContent; } function get contentPath():String { return __contentPath; } /** * @private * instance name of the title bar */ var back_mc:MovieClip; // alternate instance name of the content var _child0:MovieClip; /** * @private * instance name of bounding box that gets destroyed at init time */ var boundingBox_mc:MovieClip; /** * @private * instance name of the close button */ var button_mc:SimpleButton; /** * @private * stored value of the title text */ var _title:String; function Window() { } /** * @private * init variables. Components should implement this method and call super.init() at minimum */ function init(Void):Void { super.init(); boundingBox_mc._visible = false; boundingBox_mc._width = boundingBox_mc._height = 0; } // forward clicks to the listeners of the owner function delegateClick(obj:Object):Void { _parent.dispatchEvent({type:"click"}); } function startDragging(Void) : Void { if (this.modalWindow == undefined) { var o = this._parent.createChildAtDepth("BoundingBox", DepthManager.kTop, {_visible:false}); this.swapDepths(o); o.removeMovieClip(); } regX = _xmouse; regY = _ymouse; onMouseMove = dragTracking; } function stopDragging(Void) : Void { delete onMouseMove; } function dragTracking() : Void { var newX = _parent._xmouse - regX; var newY = _parent._ymouse - regY; var slop = 5; var scr = mx.managers.SystemManager.screen; if (newX < scr.x -regX + slop) newX = scr.x -regX + slop; if (newX > scr.width + scr.x - (regX + slop)) newX = scr.width + scr.x - (regX + slop); if (newY < scr.y -regY + slop) newY = scr.y -regY + slop; if (newY > scr.height + scr.y - (regY + slop)) newY = scr.height + scr.y - (regY + slop); move(newX, newY); updateAfterEvent(); } /** * @private * create child objects. */ function createChildren(Void):Void { super.createChildren(); if (back_mc == undefined) { createClassObject(UIObject, "back_mc", 1); back_mc.createObject(skinTitleBackground, "back_mc", 0); } back_mc.visible = false; depth = 3; // put first (only?) child at level 3 var l:Object = new Object(); back_mc.useHandCursor = false; back_mc.onPress = function() { if (_parent.enabled) _par