Exercise 1 データの簡単な操作

  1. データの表示

Rではデータフレームでデータセットを表現する

ここにいろいろな説明を書く 手順などをかく

mtcars
#データを表示する(データフレーム名を打ち込む)
mtcars
NA
  1. データのヘルプ(説明)の表示
? mtcars
  1. データの次元の表示
#データの桁数と列数を表示する
dim(mtcars)
[1] 32 11

32行・・・32個の観察がある サンプルサイズが32である

11列・・・属性や特徴をあらわす変数が11個ある

  1. データの概要の表示
#データの概要を表示する
summary(mtcars)
      mpg             cyl             disp             hp             drat             wt             qsec      
 Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0   Min.   :2.760   Min.   :1.513   Min.   :14.50  
 1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5   1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89  
 Median :19.20   Median :6.000   Median :196.3   Median :123.0   Median :3.695   Median :3.325   Median :17.71  
 Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7   Mean   :3.597   Mean   :3.217   Mean   :17.85  
 3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0   3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90  
 Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0   Max.   :4.930   Max.   :5.424   Max.   :22.90  
       vs               am              gear            carb      
 Min.   :0.0000   Min.   :0.0000   Min.   :3.000   Min.   :1.000  
 1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
 Median :0.0000   Median :0.0000   Median :4.000   Median :2.000  
 Mean   :0.4375   Mean   :0.4062   Mean   :3.688   Mean   :2.812  
 3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
 Max.   :1.0000   Max.   :1.0000   Max.   :5.000   Max.   :8.000  

燃費mpgの最小値は10.40で、最大値は33.90である 平均meanは20.09で、中央値medianは19.20である

四分位数:データを大きさ順に並べたときに25%、50%、75%に相当する位置の値。 第2四分位は中央値と同じになる。上の例では19.20 第1四分位数は25%に相当する位置の値。上の例では15.43 第3四分位数は75%に相当する位置の値。上の例では22.80


Exercise 2 データの抽出

条件に応じて、データを選択抽出する

抽出・選択にはいくつかの形式がある。 基本的には条件式と、抽出対象との組み合わせで、抽出データを表現し、データの抽出を行う。

$は、アクセス演算子。データフレーム内の変数にアクセスします。

  1. 条件式の表現

amはオートマチックギア・マニュアルギア表す

am = 0 のとき、オートマチックギア am = 1 のとき、マニュアルギア

mtcars$am = 0もしやると、mtcarsの中のam変数がすべて0になります。 = は代入演算子です。

以下にam = 0の時の条件式を示す


mtcars$am == 0
 [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE
[21]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

実行すると、FALSEとTRUEが並んだ結果が表示される。 FALSEはam=0ではないデータ、TRUEはam=0であるデータである。

Exercise 1の「データフレームの表示」で表示したデータと、上記のFALSEとTRUEを比較してください。きちんと条件式どおりになっていることが確認できます。

今度は逆にam = 1の条件を示す

mtcars$am == 1
 [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
[21] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

結果はam==0のときと反転しています。amは0 or 1のデータなので、am == 1は am == 0の反転した結果となります。

否定の条件を示すときは !=を使います。下記の条件式は「am == 0ではない」を示します。結果はam == 1と同じになります。

mtcars$am != 0
 [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[18]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
  1. 任意のデータを選択抽出する

まずデータフレームの任意のデータを選択抽出します $はアクセス演算子です [,]も、アクセス演算子です 以下のように、[,]演算子を使います。

(1行目・1列目)のデータにアクセスするには、[1,1]を指定します

mtcars[1,1]
[1] 21

(3行目・2列目)のデータにアクセスするには、[3,2]を指定します

mtcars[3,2]
[1] 4

3行目の全てのデータにアクセスするときには、[3,]を指定します

mtcars[3,]

1列目の全てのデータにアクセスするときには、[,1]を指定します

mtcars[,1]
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9
[21] 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4

列の指定のときには、列名を使うこともできます

mtcars[,"mpg"]
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9
[21] 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
  1. 条件式と抽出対象を組み合わせて選択抽出をする
#オートマチックギアのデータだけ表示する
mtcars[mtcars$am == 0, ]
NA
#マニュアルギアのデータだけ表示する
mtcars[mtcars$am == 1, ]
NA

条件式には不等式も使うことができます

以下では、mpgが20未満のデータを表示しています

mtcars[mtcars$mpg < 20, ]

Exercise 3 平均値の差の検定

オートマティック・ギア(am=0)の群と、マニュアル・ギアの群で燃費mpgの平均値を比較します。

オートマティック・ギアの群の燃費mpgの平均値を算出します

#オートマティックギアの群のmpgのデータ
mtcars[mtcars$am==0, "mpg"]
 [1] 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 21.5
[16] 15.5 15.2 13.3 19.2
#オートマティックギアの群のmpgのデータの個数
length(mtcars[mtcars$am==0, "mpg"])
[1] 19
#オートマティックギアの群のmpgの平均値
mean(mtcars[mtcars$am==0, "mpg"])
[1] 17.14737
#オートマティックの群のmpgの標準偏差
sd(mtcars[mtcars$am==0, "mpg"])
[1] 3.833966

マニュアルギアの軍の燃費mpgの平均値を算出します

#マニュアルギアの群のmpgのデータ
mtcars[mtcars$am==1, "mpg"]
 [1] 21.0 21.0 22.8 32.4 30.4 33.9 27.3 26.0 30.4 15.8 19.7 15.0 21.4
#マニュアルギアの群のmpgのデータの個数
length(mtcars[mtcars$am==1, "mpg"])
[1] 13
#マニュアルギアの群のmpgの平均値
mean(mtcars[mtcars$am==1, "mpg"])
[1] 24.39231
#マニュアルギアの群のmpgの標準偏差
sd(mtcars[mtcars$am==1, "mpg"])
[1] 6.166504

平均値の差の検定(t検定)をします

t.test(mtcars[mtcars$am==0, "mpg"], mtcars[mtcars$am==1, "mpg"])

    Welch Two Sample t-test

data:  mtcars[mtcars$am == 0, "mpg"] and mtcars[mtcars$am == 1, "mpg"]
t = -3.7671, df = 18.332, p-value = 0.001374
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -11.280194  -3.209684
sample estimates:
mean of x mean of y 
 17.14737  24.39231 

(参考)Welchの方法のt検定は、以下のようにt値を算出して、t分布からの乖離をみます https://ja.wikipedia.org/wiki/ウェルチのt検定

統計量tの算出は通常のt統計量の算出方法と同じです。 自由度νの算出がやや複雑ですが、手計算でも検算できます

一応、統計量tの算出だけ手計算で書いておくと、以下のようになります

 (17.14737 - 24.39231)/ sqrt(3.833966^2/19 +  6.166504^2/13)
[1] -3.767124

上記の手計算した統計量tは、t.test関数の出力の2行目にあるように、t=-3.7671とほぼ同じであることがわかります(違いは丸め誤差)。


Exercise 4 グラフのプロット

  1. パッケージのインストール

Rでは機能を追加するためにパッケージを追加する

#パッケージの追加 
install.packages("ggplot2")
 URL 'https://cran.rstudio.com/bin/macosx/el-capitan/contrib/3.6/ggplot2_3.3.3.tgz' を試しています 
Content type 'application/x-gzip' length 4072099 bytes (3.9 MB)
==================================================
downloaded 3.9 MB

The downloaded binary packages are in
    /var/folders/2b/yr0kxxc57712kvx0j2h0m7h00000gp/T//RtmpMJPSQY/downloaded_packages
  1. パッケージのロード

インストールしたパッケージは、一度、実行環境にロードする必要がある

#パッケージのロード
library(ggplot2)
  1. プロット図を作成する

#2変数のグラフ(散布図・プロット図)を作る
ggplot(data=mtcars) + geom_point(aes(x=wt, y=mpg))

  1. 第3変数の情報を追加する

2変数のプロット図に、第3変数の情報(am)を追加する

第3変数の情報は、カラー(プロット点の色)やシェイプ(プロット点の形状)を用いる

ggplot(data=mtcars) + geom_point(aes(x=wt, y=mpg, colour= am)) 

amは0 or 1の離散値であるが、連続量として処理されている。

一応、上のグラフでも意味はわかるが、本来は以下のように、as.factor関数を使うとよい

ggplot(data=mtcars) + geom_point(aes(x=wt, y=mpg, colour= as.factor(am)) )

凡例のタイトルが気持ち悪い人は、labs関数を使うとラベル(labels)のタイトルを変更できる

ggplot(data=mtcars) + geom_point(aes(x=wt, y=mpg, colour= as.factor(am)) ) + labs(color="am")

同様に、形状に情報を対応させることで、第4変数の情報も追加することが出来る

ggplot(data=mtcars) + geom_point(aes(x=wt, y=mpg, colour= as.factor(am), shape=as.factor(cyl))) + labs(color="am", shape="cyl")

もし、プロット点が小さい場合(見えにくい)は、sizeを指定してやると、プロット点のサイズを調節できる

ggplot(data=mtcars) + geom_point(aes(x=wt, y=mpg, colour= as.factor(am), shape=as.factor(cyl)), size=3) + labs(color="am", shape="cyl")


Exercise 5. 散布図行列を作成する

2変数間のプロット図を、複数の変数の組み合わせ散布図行列と呼ぶ

1.散布図行列のパッケージの追加

散布図行列を作成するためには、パッケージを追加し、ロードする。

install.packages("GGally")
 URL 'https://cran.rstudio.com/bin/macosx/el-capitan/contrib/3.6/GGally_2.1.0.tgz' を試しています 
Content type 'application/x-gzip' length 1636919 bytes (1.6 MB)
==================================================
downloaded 1.6 MB

The downloaded binary packages are in
    /var/folders/2b/yr0kxxc57712kvx0j2h0m7h00000gp/T//RtmpMJPSQY/downloaded_packages
  1. 散布図行列のパッケージをロードする
library(GGally)
Registered S3 method overwritten by 'GGally':
  method from   
  +.gg   ggplot2
  1. 散布図行列を作成する

散布図行列を作図する

・各変数の分布 ・相関係数 ・プロット図 が表示されていることを確認すること

ggpairs(mtcars)

  1. 適切な散布図行列を作成する

たくさんの変数で散布図行列を書くと、 ・処理が遅くなる ・変数間の関係をとらえるのが難しいくなる ので、変数を絞って散布図行列を作図する

変数を絞る際に、 ・何が目的変数になるのか ・何が説明変数になるのか を考えながら変数を絞り込んでいくこと

ggpairs(mtcars[, c("mpg","wt","am","cyl")])


Exercise 6 回帰分析をする(単回帰)

  1. プロット図を作成する

回帰分析に先立って、必ず 目的変数と説明変数の関係をプロット図で確認すること。

・変数間の大まかな関連性の把握 ・そもそも線形の関係なのか(2次や3次の関係ではないのか?) ・天井効果や床効果はあるのか ・外れ値の影響はあるのか

などは、プロット図を見ることですぐにわかる

今回の分析では 目的変数:燃費mpg 説明変数:それ以外の変数

library(ggplot2)

#グラフの描画
ggplot(data=mtcars) + geom_point(aes(x=wt, y=mpg))

NA
NA

より慎重にプロット図を作成するなら、散布図行列を作成しても良い

library(GGally)
ggpairs(mtcars[, c("mpg", "wt")])

散布図行列では、まず目的変数の分布に注目すること!

◯目的変数 目的変数の分布が正規分布に近ければ、通常の回帰分析を行えば良い

目的変数が特殊な分布をしてたときには、特殊な分析方法が必要になる

◯説明変数 説明変数に関しては、分布の仮定は特にない。 説明変数間の関係に注目すること。

説明変数の範囲についても注目すること。 もしグループごとに説明変数の範囲が異なる、ということがあれば注意すること。

もしも欠損値がある場合は欠損値のパターンについても考慮すること

  1. 回帰分析(単回帰)を行う

lm関数は最小二乗法によって回帰分析をおこなう関数である 最小二乗法による推定をOLS推定と呼んでいる

#回帰式の推定
m1 = lm(data=mtcars, mpg ~ wt)

#結果を表示する
m1

Call:
lm(formula = mpg ~ wt, data = mtcars)

Coefficients:
(Intercept)           wt  
     37.285       -5.344  

分析結果について、もうすこし多くの情報を表示する

summary(m1)

Call:
lm(formula = mpg ~ wt, data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.5432 -2.3647 -0.1252  1.4096  6.8727 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  37.2851     1.8776  19.858  < 2e-16 ***
wt           -5.3445     0.5591  -9.559 1.29e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.046 on 30 degrees of freedom
Multiple R-squared:  0.7528,    Adjusted R-squared:  0.7446 
F-statistic: 91.38 on 1 and 30 DF,  p-value: 1.294e-10

観測値、予測値、残差を表示する

cbind(observed=mtcars$mpg, predited=predict(m1), residual=resid(m1))
                    observed  predited   residual
Mazda RX4               21.0 23.282611 -2.2826106
Mazda RX4 Wag           21.0 21.919770 -0.9197704
Datsun 710              22.8 24.885952 -2.0859521
Hornet 4 Drive          21.4 20.102650  1.2973499
Hornet Sportabout       18.7 18.900144 -0.2001440
Valiant                 18.1 18.793255 -0.6932545
Duster 360              14.3 18.205363 -3.9053627
Merc 240D               24.4 20.236262  4.1637381
Merc 230                22.8 20.450041  2.3499593
Merc 280                19.2 18.900144  0.2998560
Merc 280C               17.8 18.900144 -1.1001440
Merc 450SE              16.4 15.533127  0.8668731
Merc 450SL              17.3 17.350247 -0.0502472
Merc 450SLC             15.2 17.083024 -1.8830236
Cadillac Fleetwood      10.4  9.226650  1.1733496
Lincoln Continental     10.4  8.296712  2.1032876
Chrysler Imperial       14.7  8.718926  5.9810744
Fiat 128                32.4 25.527289  6.8727113
Honda Civic             30.4 28.653805  1.7461954
Toyota Corolla          33.9 27.478021  6.4219792
Toyota Corona           21.5 24.111004 -2.6110037
Dodge Challenger        15.5 18.472586 -2.9725862
AMC Javelin             15.2 18.926866 -3.7268663
Camaro Z28              13.3 16.762355 -3.4623553
Pontiac Firebird        19.2 16.735633  2.4643670
Fiat X1-9               27.3 26.943574  0.3564263
Porsche 914-2           26.0 25.847957  0.1520430
Lotus Europa            30.4 29.198941  1.2010593
Ford Pantera L          15.8 20.343151 -4.5431513
Ferrari Dino            19.7 22.480940 -2.7809399
Maserati Bora           15.0 18.205363 -3.2053627
Volvo 142E              21.4 22.427495 -1.0274952

残差のヒストグラムを見る

残差が正規分布に従うように、回帰直線が推定される

hist(resid(m1))

  1. 回帰分析結果の見方

回帰分析の結果を見やすくするパッケージを追加する

install.packages("stargazer")
 URL 'https://cran.rstudio.com/bin/macosx/el-capitan/contrib/3.6/stargazer_5.2.2.tgz' を試しています 
Content type 'application/x-gzip' length 621898 bytes (607 KB)
==================================================
downloaded 607 KB

The downloaded binary packages are in
    /var/folders/2b/yr0kxxc57712kvx0j2h0m7h00000gp/T//RtmpMJPSQY/downloaded_packages
library(stargazer)

Please cite as: 

 Hlavac, Marek (2018). stargazer: Well-Formatted Regression and Summary Statistics Tables.
 R package version 5.2.2. https://CRAN.R-project.org/package=stargazer 
#回帰分析の結果を表(回帰テーブル)にして出力する
stargazer(m1, type="text")
length of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changed

===============================================
                        Dependent variable:    
                    ---------------------------
                                mpg            
-----------------------------------------------
wt                           -5.344***         
                              (0.559)          
                                               
Constant                     37.285***         
                              (1.878)          
                                               
-----------------------------------------------
Observations                    32             
R2                             0.753           
Adjusted R2                    0.745           
Residual Std. Error       3.046 (df = 30)      
F Statistic           91.375*** (df = 1; 30)   
===============================================
Note:               *p<0.1; **p<0.05; ***p<0.01

Exercise 7 重回帰分析を行う

  1. なぜ重回帰分析をするか?

第3変数の影響を調整するために重回帰分析を行う

第3変数が共通原因となっているとき、交絡変数と呼ぶ

交絡の影響を調整した上で、説明変数が目的変数に影響しているのかを推定する

#回帰式の推定
m1 = lm(data=mtcars, mpg ~ wt)
m2 = lm(data=mtcars, mpg ~ wt+ hp)

m1

Call:
lm(formula = mpg ~ wt, data = mtcars)

Coefficients:
(Intercept)           wt  
     37.285       -5.344  
m2

Call:
lm(formula = mpg ~ wt + hp, data = mtcars)

Coefficients:
(Intercept)           wt           hp  
   37.22727     -3.87783     -0.03177  
  1. 複数の回帰モデルの比較

分析結果を見やすく表示する。 重回帰分析の分析結果をみやすくまとめたテーブルを回帰テーブルと呼ぶ。

library(stargazer)
stargazer(m1,m2, type="text")
length of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changednumber of rows of result is not a multiple of vector length (arg 2)

=================================================================
                                 Dependent variable:             
                    ---------------------------------------------
                                         mpg                     
                             (1)                    (2)          
-----------------------------------------------------------------
wt                        -5.344***              -3.878***       
                           (0.559)                (0.633)        
                                                                 
hp                                               -0.032***       
                                                  (0.009)        
                                                                 
Constant                  37.285***              37.227***       
                           (1.878)                (1.599)        
                                                                 
-----------------------------------------------------------------
Observations                  32                     32          
R2                          0.753                  0.827         
Adjusted R2                 0.745                  0.815         
Residual Std. Error    3.046 (df = 30)        2.593 (df = 29)    
F Statistic         91.375*** (df = 1; 30) 69.211*** (df = 2; 29)
=================================================================
Note:                                 *p<0.1; **p<0.05; ***p<0.01
  1. (参考)階段的回帰

(参考)階段的回帰(hierarchical regression)

注意:階段的回帰(hierarchical regression)は、階層線形モデル(hierarchical linear model)とは全くの別物です

m1とm2では、m2の方が決定係数が大きくなった。 しかし、hpという変数を1つ加えて、複雑なモデルになっている。

なるべく簡潔なモデルで説明したほうがいいという意味ではm1の方がよい。

m1に対して、m2は良いモデルといえるだろうか?

これに答えるのが階段的回帰である。 (注意:階段的回帰(hierarchical regression)と階層的線形モデル(hierachical linear model)とは全く別物である)

anova(m1,m2)
Analysis of Variance Table

Model 1: mpg ~ wt
Model 2: mpg ~ wt + hp
  Res.Df    RSS Df Sum of Sq      F   Pr(>F)   
1     30 278.32                                
2     29 195.05  1    83.274 12.381 0.001451 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

分散テーブルは、統計的有意(0.001451)にm2がm1よりもデータを説明している、と示している

参考までにF値とその確率のの算出方法も付記する

F値の計算

{(278.32-195.05)/1} / (195.05/29)
[1] 12.38057

FよりもF値が大きい確率(Pr(>F))

 1- pf( 12.38057, 1, 29)
[1] 0.001451643

注意: データにフィットしたモデルが必ずしも良いかどうかはわからない。

データにフィットしていなくても、理論的に正しいモデルであれば、「なぜデータにフィットしなかったのか?」を考える事。

データにフィットしたから正しいとかんがえると、真のモデルからまったく遠いモデルになってしまう。

これは、対象としているデータが観察データであることが大きな原因である

  1. 星占いはやってはだめ

偏回帰係数が有意かどうかを見ながら、理論をつくるのは危険である(慎重に行わなくてはいけない)

# . は目的変数外のすべての変数を説明変数に投入する、という意味
m10 = lm(data=mtcars, mpg ~ .)
summary(m10)

Call:
lm(formula = mpg ~ ., data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4506 -1.6044 -0.1196  1.2193  4.6271 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept) 12.30337   18.71788   0.657   0.5181  
cyl         -0.11144    1.04502  -0.107   0.9161  
disp         0.01334    0.01786   0.747   0.4635  
hp          -0.02148    0.02177  -0.987   0.3350  
drat         0.78711    1.63537   0.481   0.6353  
wt          -3.71530    1.89441  -1.961   0.0633 .
qsec         0.82104    0.73084   1.123   0.2739  
vs           0.31776    2.10451   0.151   0.8814  
am           2.52023    2.05665   1.225   0.2340  
gear         0.65541    1.49326   0.439   0.6652  
carb        -0.19942    0.82875  -0.241   0.8122  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.65 on 21 degrees of freedom
Multiple R-squared:  0.869, Adjusted R-squared:  0.8066 
F-statistic: 13.93 on 10 and 21 DF,  p-value: 3.793e-07

僅かにwtが10%水準で有意である。

もしもmtcarsとまったく同じデータを1000回くりかえし取得したら、 すべての変数が統計的に優位になる

#データサイズを100倍にする
mtcars1000 = mtcars[rep(seq_len(nrow(mtcars)), 1000), ]

#データサイズを表示する
dim(mtcars1000)
[1] 32000    11
m10.1000 = lm(data=mtcars1000, mpg ~ .)

stargazer(m10, m10.1000, type="text")
length of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changed

==========================================================================
                                     Dependent variable:                  
                    ------------------------------------------------------
                                             mpg                          
                              (1)                        (2)              
--------------------------------------------------------------------------
cyl                         -0.111                    -0.111***           
                            (1.045)                    (0.027)            
                                                                          
disp                         0.013                     0.013***           
                            (0.018)                    (0.0005)           
                                                                          
hp                          -0.021                    -0.021***           
                            (0.022)                    (0.001)            
                                                                          
drat                         0.787                     0.787***           
                            (1.635)                    (0.042)            
                                                                          
wt                          -3.715*                   -3.715***           
                            (1.894)                    (0.049)            
                                                                          
qsec                         0.821                     0.821***           
                            (0.731)                    (0.019)            
                                                                          
vs                           0.318                     0.318***           
                            (2.105)                    (0.054)            
                                                                          
am                           2.520                     2.520***           
                            (2.057)                    (0.053)            
                                                                          
gear                         0.655                     0.655***           
                            (1.493)                    (0.038)            
                                                                          
carb                        -0.199                    -0.199***           
                            (0.829)                    (0.021)            
                                                                          
Constant                    12.303                    12.303***           
                           (18.718)                    (0.480)            
                                                                          
--------------------------------------------------------------------------
Observations                  32                        32,000            
R2                           0.869                      0.869             
Adjusted R2                  0.807                      0.869             
Residual Std. Error     2.650 (df = 21)           2.147 (df = 31989)      
F Statistic         13.932*** (df = 10; 21) 21,223.120*** (df = 10; 31989)
==========================================================================
Note:                                          *p<0.1; **p<0.05; ***p<0.01

上記の回帰テーブルで、2つのモデルはまったく同じ係数を推定している。 しかし、(2)はすべての係数が有意である。 その理由は、サンプルサイズが非常に大きいため、標準誤差が小さくなっているためである

統計的な有意検定は、サンプルサイズに大きく依存する。 だから、統計的な有意性だけをもとに因果性の有無を判断すると、大きく間違うことになる。 (間違う理由は他にももっとたくさんある)


Exercise 8 交互作用モデル

戦略分析を目的とした場合、交互作用モデルと媒介作用モデルは、とても重要なモデルである

交互作用モデルは、第三変数(moderator, 調整変数Z)の水準によって、変数Xの効果が変わることを意味している

変数Xの効果を、増大するためには、変数Zの水準をどのように設定すればよいか、は戦略上、とても有用である。

媒介作用モデルは、変数Xの効果が第3変数Z(媒介変数)を介して、Yに影響を及ぼすパスがあることを意味している (変数Xには間接効果と直接効果が存在することを意味している)

媒介モデルは、間接効果・直接効果を考慮することで、変数Xの総合効果を推定することが可能となる。

ここでは、交互作用モデルを推定してみます

  1. 交互作用モデルを推定する
m3 = lm(data=mtcars, mpg ~  wt + hp + wt:hp)

stargazer(m1,m2,m3, type="text")
length of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changednumber of rows of result is not a multiple of vector length (arg 2)number of rows of result is not a multiple of vector length (arg 2)

========================================================================================
                                            Dependent variable:                         
                    --------------------------------------------------------------------
                                                    mpg                                 
                             (1)                    (2)                    (3)          
----------------------------------------------------------------------------------------
wt                        -5.344***              -3.878***              -8.217***       
                           (0.559)                (0.633)                (1.270)        
                                                                                        
hp                                               -0.032***              -0.120***       
                                                  (0.009)                (0.025)        
                                                                                        
wt:hp                                                                    0.028***       
                                                                         (0.007)        
                                                                                        
Constant                  37.285***              37.227***              49.808***       
                           (1.878)                (1.599)                (3.605)        
                                                                                        
----------------------------------------------------------------------------------------
Observations                  32                     32                     32          
R2                          0.753                  0.827                  0.885         
Adjusted R2                 0.745                  0.815                  0.872         
Residual Std. Error    3.046 (df = 30)        2.593 (df = 29)        2.153 (df = 28)    
F Statistic         91.375*** (df = 1; 30) 69.211*** (df = 2; 29) 71.660*** (df = 3; 28)
========================================================================================
Note:                                                        *p<0.1; **p<0.05; ***p<0.01
  1. マージナル効果図を作図する

交互作用モデルのマージナル効果図を作図するパッケージを追加する

install.packages("interplot")
 URL 'https://cran.rstudio.com/bin/macosx/el-capitan/contrib/3.6/interplot_0.2.2.tgz' を試しています 
Content type 'application/x-gzip' length 223136 bytes (217 KB)
==================================================
downloaded 217 KB

The downloaded binary packages are in
    /var/folders/2b/yr0kxxc57712kvx0j2h0m7h00000gp/T//RtmpMJPSQY/downloaded_packages
  1. マージナル効果図を作成する
library(interplot)
 要求されたパッケージ abind をロード中です 
 要求されたパッケージ arm をロード中です 
 要求されたパッケージ MASS をロード中です 
 要求されたパッケージ Matrix をロード中です 
 要求されたパッケージ lme4 をロード中です 
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     

arm (Version 1.11-2, built: 2020-7-27)

Working directory is /Users/tatsu/Dropbox/2020 技術経営論/第3回 経営学でつかう回帰分析/2020-01-19_RSTUDIOでの実行例
interplot(m=m3, var1="wt", var2="hp", hist=TRUE) + 
  labs(x="hp", y="ME of wt") + 
  geom_hline(yintercept=0, colour="red")+ 
  geom_vline(xintercept=237, colour="red")

### Exercise 9 媒介モデル
媒介モデルの推定方法を説明します。
媒介モデルは、構造方程式モデル(SEM)の1つであると考えることができます。
構造方程式モデルは、複数の回帰モデル(構造方程式)から成り立っている統計モデルです。
媒介モデルの推定は、2つの方法が頻繁に使われます。
1つめは、複数の重回帰モデルの推定を行い、そこからSEMを推論する方法です。 この方法は、従来から利用されてきた重回帰モデルと連続性があるので、理解しやすい面がありますが、すべてのパラメータを推定しているわけではない点に注意が必要です。
2つめは、SEMとして推定する方法です。 SEMとして推定すれば、当然、SEMを構成するすべてのパラメータを推定することになります。 解釈が明確になる、という利点もあります。
RでSEMを推定する際には、lavaanを使います
lavaanでは、以下のようにモデル式(model_00)を記述します。 lavaanのモデル式については、 http://lavaan.ugent.be/tutorial/ を参照してください。
概要は以下のページにまとまっています http://lavaan.ugent.be/tutorial/syntax1.html
モデル式 model_00 = " y ~ b1x + b2z z ~ b3x ind := b2b3 total := b1 + (b2*b3) "
その後、モデル式をsem関数で推定します。 fit_sem_00 = sem(model_00, data=test_data_00)
推定した結果をsummary関数で表示します summary(fit_sem_00, fit.measure=TRUE)
### Exercise 9 媒介モデル(数値例1)
もし、lavaanをインストールしていなければ、 install.packages(“lavaan”) を実行します
r install.packages("lavaan")
### データの作成
媒介モデルのデータを作成する
```r library(lavaan)
```
This is lavaan 0.6-7 lavaan is BETA software! Please report any bugs.
###作成したデータを図示してみる
### 媒介モデルのデータを重回帰モデルで推定するとどうなるか
```r stargazer(fit_00_01,fit_00_02, type=“text”)
```
length of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changednumber of rows of result is not a multiple of vector length (arg 2)
```
===================================================================== Dependent variable: ————————————————- y (1) (2)

x 0.581*** 0.301***
(0.033) (0.036)

z 0.437***
(0.032)

Constant 0.029 0.025
(0.034) (0.031)

Observations 1,000 1,000 R2 0.236 0.358 Adjusted R2 0.235 0.357 Residual Std. Error 1.068 (df = 998) 0.979 (df = 997) F Statistic 308.370*** (df = 1; 998) 278.312*** (df = 2; 997) ===================================================================== Note: p<0.1; p<0.05; p<0.01 ```
本来、媒介モデルで生成されたデータを、重回帰モデルで推定すると、model(2)のように推定される
データ生成に使った構造方程式は以下のものである y = 0.3x + 0.5z …eq(1) z = 0.6x …eq(2)
model (2)では、eq1だけが推定されている。推定された値は y = 0.3x + 0.5z …eq(1) に対して y = 0.301x + 0.437z というように推定されている。
媒介モデルにおけるxの効果は、 (1) xからzを経由してyに影響するもの(間接効果) (2) xからyに直接的に影響するもの(直接効果) に分かれる。
xのyに対する効果は、(1)+(2)を合計した総合効果である
重回帰モデル(2)で推定されているxの効果は、x→yの間接効果だけであり、 x→yの効果(総合効果)は過小評価されていることがわかる。
データ生成で設定したパラメータは以下の通りである。 x→yの間接効果は、0.60.5=0.3である x→yの総合効果は、0.3 + 0.60.5 = 0.6である。
SEMでは、ind=0.280, total=0.581のように正しい値に近い値が推定されている。
x→yの効果(総合効果)を推定するために、重回帰モデル(2)を用いると、 直接効果のみを推定してしまい(0.3)、総合効果(0.6)と大きな違いが出てしまう。
x→yの総合効果を推定するためには、重回帰モデル(2)を使うのは間違いであり、 重回帰モデル(1)を使うのが正しい。重回帰モデルでは、x→yの総合効果が推定されている(0.581)。
本来x→yの効果(総合効果)を推定するためには、重回帰モデル(1)を用いるべきであるが、 その代わりに重回帰モデル(2)を用いると誤った値を推定してしまう。
このように、正しいモデルに対して、間違った統計モデルを推定することを 「モデルの特定化の誤り(model misspecification)」と呼ぶ。
特定化の誤りが生じていると、x→yの効果の大きさを正しく推定できない
媒介モデルでは、x→yの効果(総合効果)は、model(1)のような統計モデルを構築しないと、正しく推定できない
model (1)で推定された値は y = 0.581x である。
データ生成に使ったパラメータをもとにすると、 x→yの総合効果は、0.3 + 0.6*0.5 = 0.6 である
model(1)では、x→yの総合効果に近い値が推定されている

参考 サンプルサイズが小さいとどうなるか?

サンプルサイズが小さい場合に、重回帰モデル(1)と重回帰モデル(2)を比較する。

重回帰モデル(1)では、変数xの回帰係数は、統計的有意である しかし、重回帰モデル(2)では、変数xの回帰係数は、統計的有ではない

model_mod_00 = "
y ~ 0.3*x  + 0.5*z
z ~ 0.6*x
"

test_data_00b = simulateData(model_mod_00,sample.nobs = 50, seed=123)

stargazer(fit_00_01b,fit_00_02b, type="text")
length of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changednumber of rows of result is not a multiple of vector length (arg 2)

=================================================================
                                 Dependent variable:             
                    ---------------------------------------------
                                          y                      
                             (1)                    (2)          
-----------------------------------------------------------------
x                          0.525***                0.229         
                           (0.161)                (0.150)        
                                                                 
z                                                 0.608***       
                                                  (0.133)        
                                                                 
Constant                    0.134                  0.038         
                           (0.156)                (0.133)        
                                                                 
-----------------------------------------------------------------
Observations                  50                     50          
R2                          0.181                  0.432         
Adjusted R2                 0.164                  0.408         
Residual Std. Error    1.075 (df = 48)        0.904 (df = 47)    
F Statistic         10.618*** (df = 1; 48) 17.894*** (df = 2; 47)
=================================================================
Note:                                 *p<0.1; **p<0.05; ***p<0.01

SEMとして媒介モデルを推定する


model_00 = "
y ~ b1*x + b2*z
z ~ b3*x
ind := b2*b3
total := b1 + (b2*b3)
"

fit_sem_00 = sem(model_00, data=test_data_00)

summary(fit_sem_00,fit.measure=TRUE)
lavaan 0.6-7 ended normally after 11 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                          5
                                                      
  Number of observations                          1000
                                                      
Model Test User Model:
                                                      
  Test statistic                                 0.000
  Degrees of freedom                                 0

Model Test Baseline Model:

  Test statistic                               813.275
  Degrees of freedom                                 3
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000
  Tucker-Lewis Index (TLI)                       1.000

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -2790.937
  Loglikelihood unrestricted model (H1)      -2790.937
                                                      
  Akaike (AIC)                                5591.874
  Bayesian (BIC)                              5616.413
  Sample-size adjusted Bayesian (BIC)         5600.532

Root Mean Square Error of Approximation:

  RMSEA                                          0.000
  90 Percent confidence interval - lower         0.000
  90 Percent confidence interval - upper         0.000
  P-value RMSEA <= 0.05                             NA

Standardized Root Mean Square Residual:

  SRMR                                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  y ~                                                 
    x         (b1)    0.301    0.036    8.270    0.000
    z         (b2)    0.437    0.032   13.801    0.000
  z ~                                                 
    x         (b3)    0.639    0.030   21.149    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .y                 0.956    0.043   22.361    0.000
   .z                 0.953    0.043   22.361    0.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)
    ind               0.280    0.024   11.558    0.000
    total             0.581    0.033   17.578    0.000

設定したb1,b2,b3はそれぞれ以下のように推定された

推定値b1=0.301 設定したパラメータの値はb1=0.3
推定値b2=0.437 設定したパラメータの値はb2=0.5
推定値b3=0.639 設定したパラメータの値はb3=0.6

それぞれ、設定したパラメータに近い値が推定されている。 (誤差変数の影響があるので、パラメータはずれて推定される)

間接効果(ind=b2*b3)は0.280と推定されている

総合効果(total=b1+b2*b3)は0.581と推定されている


数値例(2):意図せざる行為を表す媒介モデル

媒介変数モデルがより重要なのは、b2(もしくはb3)が、マイナスのとき(直接効果b1と異符号のとき)である。このとき、意図せざる行為(間接効果が意図と逆の方向に作用するモデル)を表すモデルとなる

具体的には y = b1x + b2z z = b3*x のような媒介モデルで、b1,b3がプラス、b2がマイナスである媒介モデルを考える。

このとき、xは直接的にはyを増加させる(直接効果はプラス)であるが、 xの総合効果はゼロもしくはマイナスである可能性がある。

以下に数値例を掲げる

SEMで推定する

model_mod_01 = "
y ~ 0.3*x + (-0.5)*z
z ~ 0.6*x
"

test_data_01 = simulateData(model_mod_01,sample.nobs = 1000, seed=123)
ggpairs(test_data_01)

重回帰モデルで推定をしてみる


fit_01_01 = lm(data=test_data_01, y ~ x )
fit_01_02 = lm(data=test_data_01, y ~ x + z)

stargazer(fit_01_01, fit_01_02, type="text")
length of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changednumber of rows of result is not a multiple of vector length (arg 2)

================================================================
                                Dependent variable:             
                    --------------------------------------------
                                         y                      
                            (1)                   (2)           
----------------------------------------------------------------
x                          0.013                0.337***        
                          (0.038)               (0.037)         
                                                                
z                                              -0.582***        
                                                (0.032)         
                                                                
Constant                   0.052                 0.048          
                          (0.037)               (0.032)         
                                                                
----------------------------------------------------------------
Observations               1,000                 1,000          
R2                        0.0001                 0.248          
Adjusted R2               -0.001                 0.246          
Residual Std. Error  1.162 (df = 998)       1.008 (df = 997)    
F Statistic         0.112 (df = 1; 998) 164.324*** (df = 2; 997)
================================================================
Note:                                *p<0.1; **p<0.05; ***p<0.01

データ生成に用いたパラメータを元にすると、 x→yの直接効果は0.3 x→yの総合効果は0.3 + 0.6*(-0.5) = 0.0 である

重回帰モデル(2)をではx→yの効果は0.337と推定されている。 この値を、x→yの効果(総合効果)だと考えると、間違いを起こす。

重回帰モデル(2)で推定された0.337は、x→yの直接効果(x→yの総合効果の一部分) である。

x→yの効果(総合効果)は、重回帰モデル(1)で正しく推定されている。

さらに留意する点がある。 重回帰モデル(1)の決定係数R2が0.0001であり、著しく低い、という点である。

決定係数だけを頼りにして、モデルを選択すると、重回帰モデル(2)を選択してしまう(R2=0.248)。

しかし、いままで見てきたように、x→yの総合効果を表すモデルとして、重回帰モデル(2)は間違っている。 重回帰モデル(2)は、x→yの直接効果(0.3)を推定しているだけで、x→yの総合効果(0.0)を示していない。

つまり、決定係数の大小では、正しいモデルを選択できない。

さらに、誤ったモデルである重回帰モデル(2)の回帰係数が統計的有意である点も注意してほしい。

誤ったモデルであっても、回帰係数は統計的有意になる。

つまり、回帰係数が「有意である」「有意でない」といういことと、x→yの効果が正しく推定されているかどうか、とは関係がない。

「モデル特定化の誤り」は、理論構築上の問題である。 どのようなモデル式を作るか?の段階で起こる問題で、「モデル特定化の誤り」は起こる。

モデル特定化の誤りが起こっている時でも、統計的有意になることはある。

だから、「統計的有意になった」→「モデル(因果関係を考察する)」というのは、大変危険であり、(統計的な手法によほど熟達していない限り)、やめたほうがいい。

SEMで推定する


model_01 = "
y ~ b1*x + b2*z
z ~ b3*x
ind := b2*b3
total := b1 + (b2*b3)
"

fit_sem_01 = sem(model_01, data=test_data_01)

summary(fit_sem_01,fit.measure=TRUE)
lavaan 0.6-7 ended normally after 11 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                          5
                                                      
  Number of observations                          1000
                                                      
Model Test User Model:
                                                      
  Test statistic                                 0.000
  Degrees of freedom                                 0

Model Test Baseline Model:

  Test statistic                               545.526
  Degrees of freedom                                 3
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000
  Tucker-Lewis Index (TLI)                       1.000

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -2838.466
  Loglikelihood unrestricted model (H1)      -2838.466
                                                      
  Akaike (AIC)                                5686.932
  Bayesian (BIC)                              5711.471
  Sample-size adjusted Bayesian (BIC)         5695.590

Root Mean Square Error of Approximation:

  RMSEA                                          0.000
  90 Percent confidence interval - lower         0.000
  90 Percent confidence interval - upper         0.000
  P-value RMSEA <= 0.05                             NA

Standardized Root Mean Square Residual:

  SRMR                                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  y ~                                                 
    x         (b1)    0.337    0.037    9.034    0.000
    z         (b2)   -0.582    0.032  -18.152    0.000
  z ~                                                 
    x         (b3)    0.557    0.032   17.255    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .y                 1.014    0.045   22.361    0.000
   .z                 0.988    0.044   22.361    0.000

Defined Parameters:
                   Estimate  Std.Err  z-value  P(>|z|)
    ind              -0.324    0.026  -12.506    0.000
    total             0.013    0.038    0.335    0.738

参考

重回帰モデルでは、R2(適合度)やp値(統計的有意性)から、正しいモデルを選択することができなかった。

しかし、SEMならば適合度指標を使って、正しいモデルを選択することができるだろうか?

SEMの適合度指標には、CFIやRMSEAがある。

結論から言うと、適合度指標を使ったとしても、SEMでも正しいモデルを選択することはできない

以下は、データ生成とは異なる分析モデルで、SEMを適用した事例。 生成モデルとは異なるモデルであるにもかかわらず、適合度指標は目安をクリアしている。

model_01b = "
y ~ b1*x + b2*z
"

fit_sem_00c = sem(model_01b, data=test_data_01)

summary(fit_sem_00c,fit.measure=TRUE)
lavaan 0.6-7 ended normally after 11 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of free parameters                          3
                                                      
  Number of observations                          1000
                                                      
Model Test User Model:
                                                      
  Test statistic                                 0.000
  Degrees of freedom                                 0

Model Test Baseline Model:

  Test statistic                               284.906
  Degrees of freedom                                 2
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000
  Tucker-Lewis Index (TLI)                       1.000

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -1425.764
  Loglikelihood unrestricted model (H1)      -1425.764
                                                      
  Akaike (AIC)                                2857.528
  Bayesian (BIC)                              2872.251
  Sample-size adjusted Bayesian (BIC)         2862.723

Root Mean Square Error of Approximation:

  RMSEA                                          0.000
  90 Percent confidence interval - lower         0.000
  90 Percent confidence interval - upper         0.000
  P-value RMSEA <= 0.05                             NA

Standardized Root Mean Square Residual:

  SRMR                                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)
  y ~                                                 
    x         (b1)    0.337    0.037    9.034    0.000
    z         (b2)   -0.582    0.032  -18.152    0.000

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .y                 1.014    0.045   22.361    0.000
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCgotLS0KCiMjIyBFeGVyY2lzZSAxIOODh+ODvOOCv+OBruewoeWNmOOBquaTjeS9nAoKMS4g44OH44O844K/44Gu6KGo56S6CgpS44Gn44Gv44OH44O844K/44OV44Os44O844Og44Gn44OH44O844K/44K744OD44OI44KS6KGo54++44GZ44KLCgoK44GT44GT44Gr44GE44KN44GE44KN44Gq6Kqs5piO44KS5pu444GPCuaJi+mghuOBquOBqeOCkuOBi+OBjwoKYGBge3J9Cm10Y2FycwpgYGAKCgpgYGB7cn0KI+ODh+ODvOOCv+OCkuihqOekuuOBmeOCiyjjg4fjg7zjgr/jg5Xjg6zjg7zjg6DlkI3jgpLmiZPjgaHovrzjgoApCm10Y2FycwoKYGBgCgoKMi4g44OH44O844K/44Gu44OY44Or44OXKOiqrOaYjinjga7ooajnpLoKCmBgYHtyfQo/IG10Y2FycwpgYGAKCgozLiDjg4fjg7zjgr/jga7mrKHlhYPjga7ooajnpLoKCmBgYHtyfQoj44OH44O844K/44Gu5qGB5pWw44Go5YiX5pWw44KS6KGo56S644GZ44KLCmRpbShtdGNhcnMpCmBgYAoKMzLooYzjg7vjg7vjg7szMuWAi+OBruims+Wvn+OBjOOBguOCiwrjgrXjg7Pjg5fjg6vjgrXjgqTjgrrjgYwzMuOBp+OBguOCiwoKMTHliJfjg7vjg7vjg7vlsZ7mgKfjgoTnibnlvrTjgpLjgYLjgonjgo/jgZnlpInmlbDjgYwxMeWAi+OBguOCiwoKCgo0LiDjg4fjg7zjgr/jga7mpoLopoHjga7ooajnpLoKCmBgYHtyfQoj44OH44O844K/44Gu5qaC6KaB44KS6KGo56S644GZ44KLCnN1bW1hcnkobXRjYXJzKQpgYGAKCueHg+iyu21wZ+OBruacgOWwj+WApOOBrzEwLjQw44Gn44CB5pyA5aSn5YCk44GvMzMuOTDjgafjgYLjgosK5bmz5Z2HbWVhbuOBrzIwLjA544Gn44CB5Lit5aSu5YCkbWVkaWFu44GvMTkuMjDjgafjgYLjgosKCuWbm+WIhuS9jeaVsO+8muODh+ODvOOCv+OCkuWkp+OBjeOBlemghuOBq+S4puOBueOBn+OBqOOBjeOBqzI1JeOAgTUw77yF44CBNzUl44Gr55u45b2T44GZ44KL5L2N572u44Gu5YCk44CCCuesrDLlm5vliIbkvY3jga/kuK3lpK7lgKTjgajlkIzjgZjjgavjgarjgovjgILkuIrjga7kvovjgafjga8xOS4yMArnrKwx5Zub5YiG5L2N5pWw44GvMjUl44Gr55u45b2T44GZ44KL5L2N572u44Gu5YCk44CC5LiK44Gu5L6L44Gn44GvMTUuNDMK56ysM+Wbm+WIhuS9jeaVsOOBrzc1JeOBq+ebuOW9k+OBmeOCi+S9jee9ruOBruWApOOAguS4iuOBruS+i+OBp+OBrzIyLjgwCgoKLS0tCgojIyMgRXhlcmNpc2UgMiDjg4fjg7zjgr/jga7mir3lh7oKCuadoeS7tuOBq+W/nOOBmOOBpuOAgeODh+ODvOOCv+OCkumBuOaKnuaKveWHuuOBmeOCiwoK5oq95Ye644O76YG45oqe44Gr44Gv44GE44GP44Gk44GL44Gu5b2i5byP44GM44GC44KL44CCCuWfuuacrOeahOOBq+OBr+adoeS7tuW8j+OBqOOAgeaKveWHuuWvvuixoeOBqOOBrue1hOOBv+WQiOOCj+OBm+OBp+OAgeaKveWHuuODh+ODvOOCv+OCkuihqOePvuOBl+OAgeODh+ODvOOCv+OBruaKveWHuuOCkuihjOOBhuOAggoKJOOBr+OAgeOCouOCr+OCu+OCuea8lOeul+WtkOOAguODh+ODvOOCv+ODleODrOODvOODoOWGheOBruWkieaVsOOBq+OCouOCr+OCu+OCueOBl+OBvuOBmeOAggoKMS4g5p2h5Lu25byP44Gu6KGo54++CgphbeOBr+OCquODvOODiOODnuODgeODg+OCr+OCruOCouODu+ODnuODi+ODpeOCouODq+OCruOCouihqOOBmQoKYW0gPSAwIOOBruOBqOOBjeOAgeOCquODvOODiOODnuODgeODg+OCr+OCruOCogphbSA9IDEg44Gu44Go44GN44CB44Oe44OL44Ol44Ki44Or44Ku44KiCgptdGNhcnMkYW0gPSAw44KC44GX44KE44KL44Go44CBbXRjYXJz44Gu5Lit44GuYW3lpInmlbDjgYzjgZnjgbnjgaYw44Gr44Gq44KK44G+44GZ44CCCj0g44Gv5Luj5YWl5ryU566X5a2Q44Gn44GZ44CCCgrku6XkuIvjgathbSA9IDDjga7mmYLjga7mnaHku7blvI/jgpLnpLrjgZkKYGBge3J9CgptdGNhcnMkYW0gPT0gMAoKYGBgCgrlrp/ooYzjgZnjgovjgajjgIFGQUxTReOBqFRSVUXjgYzkuKbjgpPjgaDntZDmnpzjgYzooajnpLrjgZXjgozjgovjgIIKRkFMU0Xjga9hbT0w44Gn44Gv44Gq44GE44OH44O844K/44CBVFJVReOBr2FtPTDjgafjgYLjgovjg4fjg7zjgr/jgafjgYLjgovjgIIKCkV4ZXJjaXNlIDHjga7jgIzjg4fjg7zjgr/jg5Xjg6zjg7zjg6Djga7ooajnpLrjgI3jgafooajnpLrjgZfjgZ/jg4fjg7zjgr/jgajjgIHkuIroqJjjga5GQUxTReOBqFRSVUXjgpLmr5TovIPjgZfjgabjgY/jgaDjgZXjgYTjgILjgY3jgaHjgpPjgajmnaHku7blvI/jganjgYrjgorjgavjgarjgaPjgabjgYTjgovjgZPjgajjgYznorroqo3jgafjgY3jgb7jgZnjgIIKCgrku4rluqbjga/pgIbjgathbSA9IDHjga7mnaHku7bjgpLnpLrjgZkKYGBge3J9Cm10Y2FycyRhbSA9PSAxCmBgYAoK57WQ5p6c44GvYW09PTDjga7jgajjgY3jgajlj43ou6LjgZfjgabjgYTjgb7jgZnjgIJhbeOBrzAgb3IgMeOBruODh+ODvOOCv+OBquOBruOBp+OAgWFtID09IDHjga8gYW0gPT0gMOOBruWPjei7ouOBl+OBn+e1kOaenOOBqOOBquOCiuOBvuOBmeOAggoKCuWQpuWumuOBruadoeS7tuOCkuekuuOBmeOBqOOBjeOBryAhPeOCkuS9v+OBhOOBvuOBmeOAguS4i+iomOOBruadoeS7tuW8j+OBr+OAjGFtID09IDDjgafjga/jgarjgYTjgI3jgpLnpLrjgZfjgb7jgZnjgILntZDmnpzjga9hbSA9PSAx44Go5ZCM44GY44Gr44Gq44KK44G+44GZ44CCCgpgYGB7cn0KbXRjYXJzJGFtICE9IDAKYGBgCgoKMi4g5Lu75oSP44Gu44OH44O844K/44KS6YG45oqe5oq95Ye644GZ44KLCgoKCuOBvuOBmuODh+ODvOOCv+ODleODrOODvOODoOOBruS7u+aEj+OBruODh+ODvOOCv+OCkumBuOaKnuaKveWHuuOBl+OBvuOBmQok44Gv44Ki44Kv44K744K55ryU566X5a2Q44Gn44GZClssXeOCguOAgeOCouOCr+OCu+OCuea8lOeul+WtkOOBp+OBmQrku6XkuIvjga7jgojjgYbjgavjgIFbLF3mvJTnrpflrZDjgpLkvb/jgYTjgb7jgZnjgIIKCu+8iDHooYznm67jg7vvvJHliJfnm67vvInjga7jg4fjg7zjgr/jgavjgqLjgq/jgrvjgrnjgZnjgovjgavjga/jgIFbMSwxXeOCkuaMh+WumuOBl+OBvuOBmQpgYGB7cn0KbXRjYXJzWzEsMV0KYGBgCgoK77yIM+ihjOebruODuzLliJfnm67vvInjga7jg4fjg7zjgr/jgavjgqLjgq/jgrvjgrnjgZnjgovjgavjga/jgIFbMywyXeOCkuaMh+WumuOBl+OBvuOBmQpgYGB7cn0KbXRjYXJzWzMsMl0KYGBgCgoK77yT6KGM55uu44Gu5YWo44Gm44Gu44OH44O844K/44Gr44Ki44Kv44K744K544GZ44KL44Go44GN44Gr44Gv44CBWzMsXeOCkuaMh+WumuOBl+OBvuOBmQpgYGB7cn0KbXRjYXJzWzMsXQpgYGAKCgox5YiX55uu44Gu5YWo44Gm44Gu44OH44O844K/44Gr44Ki44Kv44K744K544GZ44KL44Go44GN44Gr44Gv44CBWywxXeOCkuaMh+WumuOBl+OBvuOBmQoKYGBge3J9Cm10Y2Fyc1ssMV0KYGBgCgrliJfjga7mjIflrprjga7jgajjgY3jgavjga/jgIHliJflkI3jgpLkvb/jgYbjgZPjgajjgoLjgafjgY3jgb7jgZkKYGBge3J9Cm10Y2Fyc1ssIm1wZyJdCmBgYAoKCgozLiDmnaHku7blvI/jgajmir3lh7rlr77osaHjgpLntYTjgb/lkIjjgo/jgZvjgabpgbjmip7mir3lh7rjgpLjgZnjgosKCgpgYGB7cn0KI+OCquODvOODiOODnuODgeODg+OCr+OCruOCouOBruODh+ODvOOCv+OBoOOBkeihqOekuuOBmeOCiwptdGNhcnNbbXRjYXJzJGFtID09IDAsIF0KCmBgYAoKCmBgYHtyfQoj44Oe44OL44Ol44Ki44Or44Ku44Ki44Gu44OH44O844K/44Gg44GR6KGo56S644GZ44KLCm10Y2Fyc1ttdGNhcnMkYW0gPT0gMSwgXQoKYGBgCgrmnaHku7blvI/jgavjga/kuI3nrYnlvI/jgoLkvb/jgYbjgZPjgajjgYzjgafjgY3jgb7jgZkKCuS7peS4i+OBp+OBr+OAgW1wZ+OBjDIw5pyq5rqA44Gu44OH44O844K/44KS6KGo56S644GX44Gm44GE44G+44GZCgpgYGB7cn0KbXRjYXJzW210Y2FycyRtcGcgPCAyMCwgXQpgYGAKCgoKLS0tCgojIyMgRXhlcmNpc2UgMyDlubPlnYflgKTjga7lt67jga7mpJzlrpoKCgrjgqrjg7zjg4jjg57jg4bjgqPjg4Pjgq/jg7vjgq7jgqIoYW09MCnjga7nvqTjgajjgIHjg57jg4vjg6XjgqLjg6vjg7vjgq7jgqLjga7nvqTjgafnh4PosrttcGfjga7lubPlnYflgKTjgpLmr5TovIPjgZfjgb7jgZnjgIIKCuOCquODvOODiOODnuODhuOCo+ODg+OCr+ODu+OCruOCouOBrue+pOOBrueHg+iyu21wZ+OBruW5s+Wdh+WApOOCkueul+WHuuOBl+OBvuOBmQpgYGB7cn0KI+OCquODvOODiOODnuODhuOCo+ODg+OCr+OCruOCouOBrue+pOOBrm1wZ+OBruODh+ODvOOCvwptdGNhcnNbbXRjYXJzJGFtPT0wLCAibXBnIl0KCmBgYAoKCmBgYHtyfQoj44Kq44O844OI44Oe44OG44Kj44OD44Kv44Ku44Ki44Gu576k44GubXBn44Gu44OH44O844K/44Gu5YCL5pWwCmxlbmd0aChtdGNhcnNbbXRjYXJzJGFtPT0wLCAibXBnIl0pCmBgYAoKCmBgYHtyfQoj44Kq44O844OI44Oe44OG44Kj44OD44Kv44Ku44Ki44Gu576k44GubXBn44Gu5bmz5Z2H5YCkCm1lYW4obXRjYXJzW210Y2FycyRhbT09MCwgIm1wZyJdKQpgYGAKCmBgYHtyfQoj44Kq44O844OI44Oe44OG44Kj44OD44Kv44Gu576k44GubXBn44Gu5qiZ5rqW5YGP5beuCnNkKG10Y2Fyc1ttdGNhcnMkYW09PTAsICJtcGciXSkKYGBgCgoKCuODnuODi+ODpeOCouODq+OCruOCouOBrui7jeOBrueHg+iyu21wZ+OBruW5s+Wdh+WApOOCkueul+WHuuOBl+OBvuOBmQoKYGBge3J9CiPjg57jg4vjg6XjgqLjg6vjgq7jgqLjga7nvqTjga5tcGfjga7jg4fjg7zjgr8KbXRjYXJzW210Y2FycyRhbT09MSwgIm1wZyJdCmBgYAoKCgpgYGB7cn0KI+ODnuODi+ODpeOCouODq+OCruOCouOBrue+pOOBrm1wZ+OBruODh+ODvOOCv+OBruWAi+aVsApsZW5ndGgobXRjYXJzW210Y2FycyRhbT09MSwgIm1wZyJdKQoKYGBgCgoKYGBge3J9CiPjg57jg4vjg6XjgqLjg6vjgq7jgqLjga7nvqTjga5tcGfjga7lubPlnYflgKQKbWVhbihtdGNhcnNbbXRjYXJzJGFtPT0xLCAibXBnIl0pCmBgYAoKCmBgYHtyfQoj44Oe44OL44Ol44Ki44Or44Ku44Ki44Gu576k44GubXBn44Gu5qiZ5rqW5YGP5beuCnNkKG10Y2Fyc1ttdGNhcnMkYW09PTEsICJtcGciXSkKCmBgYAoKCgrlubPlnYflgKTjga7lt67jga7mpJzlrpoodOaknOWuminjgpLjgZfjgb7jgZkKCmBgYHtyfQp0LnRlc3QobXRjYXJzW210Y2FycyRhbT09MCwgIm1wZyJdLCBtdGNhcnNbbXRjYXJzJGFtPT0xLCAibXBnIl0pCmBgYAoKKOWPguiAgylXZWxjaOOBruaWueazleOBrnTmpJzlrprjga/jgIHku6XkuIvjga7jgojjgYbjgat05YCk44KS566X5Ye644GX44Gm44CBdOWIhuW4g+OBi+OCieOBruS5lumbouOCkuOBv+OBvuOBmQpodHRwczovL2phLndpa2lwZWRpYS5vcmcvd2lraS/jgqbjgqfjg6vjg4Hjga505qSc5a6aCgrntbHoqIjph49044Gu566X5Ye644Gv6YCa5bi444GudOe1seioiOmHj+OBrueul+WHuuaWueazleOBqOWQjOOBmOOBp+OBmeOAggroh6rnlLHluqbOveOBrueul+WHuuOBjOOChOOChOikh+mbkeOBp+OBmeOBjOOAgeaJi+ioiOeul+OBp+OCguaknOeul+OBp+OBjeOBvuOBmQoK5LiA5b+c44CB57Wx6KiI6YePdOOBrueul+WHuuOBoOOBkeaJi+ioiOeul+OBp+abuOOBhOOBpuOBiuOBj+OBqOOAgeS7peS4i+OBruOCiOOBhuOBq+OBquOCiuOBvuOBmQpgYGB7cn0KICgxNy4xNDczNyAtIDI0LjM5MjMxKS8gc3FydCgzLjgzMzk2Nl4yLzE5ICsgIDYuMTY2NTA0XjIvMTMpCmBgYAoK5LiK6KiY44Gu5omL6KiI566X44GX44Gf57Wx6KiI6YePdOOBr+OAgXQudGVzdOmWouaVsOOBruWHuuWKm+OBru+8kuihjOebruOBq+OBguOCi+OCiOOBhuOBq+OAgXQ9LTMuNzY3MeOBqOOBu+OBvOWQjOOBmOOBp+OBguOCi+OBk+OBqOOBjOOCj+OBi+OCiuOBvuOBme+8iOmBleOBhOOBr+S4uOOCgeiqpOW3ru+8ieOAggoKCi0tLQoKIyMjIEV4ZXJjaXNlIDQg44Kw44Op44OV44Gu44OX44Ot44OD44OICgoxLiDjg5Hjg4PjgrHjg7zjgrjjga7jgqTjg7Pjgrnjg4jjg7zjg6sKClLjgafjga/mqZ/og73jgpLov73liqDjgZnjgovjgZ/jgoHjgavjg5Hjg4PjgrHjg7zjgrjjgpLov73liqDjgZnjgosKCgpgYGB7cn0KI+ODkeODg+OCseODvOOCuOOBrui/veWKoOOAgAppbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikKYGBgCgoyLiDjg5Hjg4PjgrHjg7zjgrjjga7jg63jg7zjg4kKCuOCpOODs+OCueODiOODvOODq+OBl+OBn+ODkeODg+OCseODvOOCuOOBr+OAgeS4gOW6puOAgeWun+ihjOeSsOWig+OBq+ODreODvOODieOBmeOCi+W/heimgeOBjOOBguOCiwoKYGBge3J9CiPjg5Hjg4PjgrHjg7zjgrjjga7jg63jg7zjg4kKbGlicmFyeShnZ3Bsb3QyKQpgYGAKCgozLiDjg5fjg63jg4Pjg4jlm7PjgpLkvZzmiJDjgZnjgosKCmBgYHtyfQoKIzLlpInmlbDjga7jgrDjg6njg5Uo5pWj5biD5Zuz44O744OX44Ot44OD44OI5ZuzKeOCkuS9nOOCiwpnZ3Bsb3QoZGF0YT1tdGNhcnMpICsgZ2VvbV9wb2ludChhZXMoeD13dCwgeT1tcGcpKQoKYGBgCgoKCjQuIOesrO+8k+WkieaVsOOBruaDheWgseOCkui/veWKoOOBmeOCiwoKMuWkieaVsOOBruODl+ODreODg+ODiOWbs+OBq+OAgeesrO+8k+WkieaVsOOBruaDheWgsShhbSnjgpLov73liqDjgZnjgosKCuesrO+8k+WkieaVsOOBruaDheWgseOBr+OAgeOCq+ODqeODvO+8iOODl+ODreODg+ODiOeCueOBruiJsu+8ieOChOOCt+OCp+OCpOODl++8iOODl+ODreODg+ODiOeCueOBruW9oueKtu+8ieOCkueUqOOBhOOCiwoKYGBge3J9CmdncGxvdChkYXRhPW10Y2FycykgKyBnZW9tX3BvaW50KGFlcyh4PXd0LCB5PW1wZywgY29sb3VyPSBhbSkpIApgYGAKCgphbeOBrzAgb3IgMeOBrumbouaVo+WApOOBp+OBguOCi+OBjOOAgemAo+e2mumHj+OBqOOBl+OBpuWHpueQhuOBleOCjOOBpuOBhOOCi+OAggoK5LiA5b+c44CB5LiK44Gu44Kw44Op44OV44Gn44KC5oSP5ZGz44Gv44KP44GL44KL44GM44CB5pys5p2l44Gv5Lul5LiL44Gu44KI44GG44Gr44CBYXMuZmFjdG9y6Zai5pWw44KS5L2/44GG44Go44KI44GECgoKYGBge3J9CmdncGxvdChkYXRhPW10Y2FycykgKyBnZW9tX3BvaW50KGFlcyh4PXd0LCB5PW1wZywgY29sb3VyPSBhcy5mYWN0b3IoYW0pKSApCmBgYAoK5Yeh5L6L44Gu44K/44Kk44OI44Or44GM5rCX5oyB44Gh5oKq44GE5Lq644Gv44CBbGFic+mWouaVsOOCkuS9v+OBhuOBqOODqeODmeODqyhsYWJlbHMp44Gu44K/44Kk44OI44Or44KS5aSJ5pu044Gn44GN44KLCgpgYGB7cn0KZ2dwbG90KGRhdGE9bXRjYXJzKSArIGdlb21fcG9pbnQoYWVzKHg9d3QsIHk9bXBnLCBjb2xvdXI9IGFzLmZhY3RvcihhbSkpICkgKyBsYWJzKGNvbG9yPSJhbSIpCmBgYAoKCuWQjOanmOOBq+OAgeW9oueKtuOBq+aDheWgseOCkuWvvuW/nOOBleOBm+OCi+OBk+OBqOOBp+OAgeesrO+8lOWkieaVsOOBruaDheWgseOCgui/veWKoOOBmeOCi+OBk+OBqOOBjOWHuuadpeOCiwoKYGBge3J9CmdncGxvdChkYXRhPW10Y2FycykgKyBnZW9tX3BvaW50KGFlcyh4PXd0LCB5PW1wZywgY29sb3VyPSBhcy5mYWN0b3IoYW0pLCBzaGFwZT1hcy5mYWN0b3IoY3lsKSkpICsgbGFicyhjb2xvcj0iYW0iLCBzaGFwZT0iY3lsIikKYGBgCgrjgoLjgZfjgIHjg5fjg63jg4Pjg4jngrnjgYzlsI/jgZXjgYTloLTlkIjvvIjopovjgYjjgavjgY/jgYTvvInjga/jgIFzaXpl44KS5oyH5a6a44GX44Gm44KE44KL44Go44CB44OX44Ot44OD44OI54K544Gu44K144Kk44K644KS6Kq/56+A44Gn44GN44KLCgpgYGB7cn0KZ2dwbG90KGRhdGE9bXRjYXJzKSArIGdlb21fcG9pbnQoYWVzKHg9d3QsIHk9bXBnLCBjb2xvdXI9IGFzLmZhY3RvcihhbSksIHNoYXBlPWFzLmZhY3RvcihjeWwpKSwgc2l6ZT0zKSArIGxhYnMoY29sb3I9ImFtIiwgc2hhcGU9ImN5bCIpCmBgYAoKCgotLS0tLQoKIyMjIEV4ZXJjaXNlIDUuIOaVo+W4g+Wbs+ihjOWIl+OCkuS9nOaIkOOBmeOCiwoK77yS5aSJ5pWw6ZaT44Gu44OX44Ot44OD44OI5Zuz44KS44CB6KSH5pWw44Gu5aSJ5pWw44Gu57WE44G/5ZCI44KP44Gb5pWj5biD5Zuz6KGM5YiX44Go5ZG844G2CgoKMS7mlaPluIPlm7PooYzliJfjga7jg5Hjg4PjgrHjg7zjgrjjga7ov73liqAKCuaVo+W4g+Wbs+ihjOWIl+OCkuS9nOaIkOOBmeOCi+OBn+OCgeOBq+OBr+OAgeODkeODg+OCseODvOOCuOOCkui/veWKoOOBl+OAgeODreODvOODieOBmeOCi+OAggoKYGBge3J9Cmluc3RhbGwucGFja2FnZXMoIkdHYWxseSIpCmBgYAoKCgoyLiDmlaPluIPlm7PooYzliJfjga7jg5Hjg4PjgrHjg7zjgrjjgpLjg63jg7zjg4njgZnjgosKCmBgYHtyfQpsaWJyYXJ5KEdHYWxseSkKYGBgCgoKCjMuIOaVo+W4g+Wbs+ihjOWIl+OCkuS9nOaIkOOBmeOCiwoK5pWj5biD5Zuz6KGM5YiX44KS5L2c5Zuz44GZ44KLCgrjg7vlkITlpInmlbDjga7liIbluIMK44O755u46Zai5L+C5pWwCuODu+ODl+ODreODg+ODiOWbswrjgYzooajnpLrjgZXjgozjgabjgYTjgovjgZPjgajjgpLnorroqo3jgZnjgovjgZPjgagKCmBgYHtyfQpnZ3BhaXJzKG10Y2FycykKYGBgCgoKNC4g6YGp5YiH44Gq5pWj5biD5Zuz6KGM5YiX44KS5L2c5oiQ44GZ44KLCgrjgZ/jgY/jgZXjgpPjga7lpInmlbDjgafmlaPluIPlm7PooYzliJfjgpLmm7jjgY/jgajjgIEK44O75Yem55CG44GM6YGF44GP44Gq44KLCuODu+WkieaVsOmWk+OBrumWouS/guOCkuOBqOOCieOBiOOCi+OBruOBjOmbo+OBl+OBhOOBj+OBquOCiwrjga7jgafjgIHlpInmlbDjgpLntZ7jgaPjgabmlaPluIPlm7PooYzliJfjgpLkvZzlm7PjgZnjgosKCuWkieaVsOOCkue1nuOCi+mam+OBq+OAgQrjg7vkvZXjgYznm67nmoTlpInmlbDjgavjgarjgovjga7jgYsK44O75L2V44GM6Kqs5piO5aSJ5pWw44Gr44Gq44KL44Gu44GLCuOCkuiAg+OBiOOBquOBjOOCieWkieaVsOOCkue1nuOCiui+vOOCk+OBp+OBhOOBj+OBk+OBqAoKYGBge3J9CmdncGFpcnMobXRjYXJzWywgYygibXBnIiwid3QiLCJhbSIsImN5bCIpXSkKYGBgCgotLS0tLQoKIyMjIEV4ZXJjaXNlIDYgIOWbnuW4sOWIhuaekOOCkuOBmeOCi++8iOWNmOWbnuW4sO+8iQoKCjEuIOODl+ODreODg+ODiOWbs+OCkuS9nOaIkOOBmeOCiwoK5Zue5biw5YiG5p6Q44Gr5YWI56uL44Gj44Gm44CBKirlv4XjgZoqKiDnm67nmoTlpInmlbDjgajoqqzmmI7lpInmlbDjga7plqLkv4LjgpLjg5fjg63jg4Pjg4jlm7Pjgafnorroqo3jgZnjgovjgZPjgajjgIIKCuODu+WkieaVsOmWk+OBruWkp+OBvuOBi+OBqumWoumAo+aAp+OBruaKiuaPoQrjg7vjgZ3jgoLjgZ3jgoLnt5rlvaLjga7plqLkv4Ljgarjga7jgYvvvIjvvJLmrKHjgoTvvJPmrKHjga7plqLkv4Ljgafjga/jgarjgYTjga7jgYvvvJ/vvIkK44O75aSp5LqV5Yq55p6c44KE5bqK5Yq55p6c44Gv44GC44KL44Gu44GLCuODu+WkluOCjOWApOOBruW9semfv+OBr+OBguOCi+OBruOBiwoK44Gq44Gp44Gv44CB44OX44Ot44OD44OI5Zuz44KS6KaL44KL44GT44Go44Gn44GZ44GQ44Gr44KP44GL44KLCgrku4rlm57jga7liIbmnpDjgafjga8K55uu55qE5aSJ5pWw77ya54eD6LK7bXBnCuiqrOaYjuWkieaVsO+8muOBneOCjOS7peWkluOBruWkieaVsAoKYGBge3J9CmxpYnJhcnkoZ2dwbG90MikKCiPjgrDjg6njg5Xjga7mj4/nlLsKZ2dwbG90KGRhdGE9bXRjYXJzKSArIGdlb21fcG9pbnQoYWVzKHg9d3QsIHk9bXBnKSkKCgpgYGAKCgrjgojjgormhY7ph43jgavjg5fjg63jg4Pjg4jlm7PjgpLkvZzmiJDjgZnjgovjgarjgonjgIHmlaPluIPlm7PooYzliJfjgpLkvZzmiJDjgZfjgabjgoLoia/jgYQKYGBge3J9CmxpYnJhcnkoR0dhbGx5KQpnZ3BhaXJzKG10Y2Fyc1ssIGMoIm1wZyIsICJ3dCIpXSkKYGBgCgrmlaPluIPlm7PooYzliJfjgafjga/jgIHjgb7jgZrnm67nmoTlpInmlbDjga7liIbluIPjgavms6jnm67jgZnjgovjgZPjgaghCgril6/nm67nmoTlpInmlbAK55uu55qE5aSJ5pWw44Gu5YiG5biD44GM5q2j6KaP5YiG5biD44Gr6L+R44GR44KM44Gw44CB6YCa5bi444Gu5Zue5biw5YiG5p6Q44KS6KGM44GI44Gw6Imv44GECgrnm67nmoTlpInmlbDjgYznibnmrorjgarliIbluIPjgpLjgZfjgabjgZ/jgajjgY3jgavjga/jgIHnibnmrorjgarliIbmnpDmlrnms5XjgYzlv4XopoHjgavjgarjgosKCuKXr+iqrOaYjuWkieaVsAroqqzmmI7lpInmlbDjgavplqLjgZfjgabjga/jgIHliIbluIPjga7ku67lrprjga/nibnjgavjgarjgYTjgIIK6Kqs5piO5aSJ5pWw6ZaT44Gu6Zai5L+C44Gr5rOo55uu44GZ44KL44GT44Go44CCCgroqqzmmI7lpInmlbDjga7nr4Tlm7LjgavjgaTjgYTjgabjgoLms6jnm67jgZnjgovjgZPjgajjgIIK44KC44GX44Kw44Or44O844OX44GU44Go44Gr6Kqs5piO5aSJ5pWw44Gu56+E5Zuy44GM55Ww44Gq44KL44CB44Go44GE44GG44GT44Go44GM44GC44KM44Gw5rOo5oSP44GZ44KL44GT44Go44CCCgrjgoLjgZfjgoLmrKDmkI3lgKTjgYzjgYLjgovloLTlkIjjga/mrKDmkI3lgKTjga7jg5Hjgr/jg7zjg7PjgavjgaTjgYTjgabjgoLogIPmha7jgZnjgovjgZPjgagKCgoKMi4g5Zue5biw5YiG5p6QKOWNmOWbnuW4sCnjgpLooYzjgYYKCmxt6Zai5pWw44Gv5pyA5bCP5LqM5LmX5rOV44Gr44KI44Gj44Gm5Zue5biw5YiG5p6Q44KS44GK44GT44Gq44GG6Zai5pWw44Gn44GC44KLCuacgOWwj+S6jOS5l+azleOBq+OCiOOCi+aOqOWumuOCkk9MU+aOqOWumuOBqOWRvOOCk+OBp+OBhOOCiwoKYGBge3J9CiPlm57luLDlvI/jga7mjqjlrpoKbTEgPSBsbShkYXRhPW10Y2FycywgbXBnIH4gd3QpCgoj57WQ5p6c44KS6KGo56S644GZ44KLCm0xCmBgYAoK5YiG5p6Q57WQ5p6c44Gr44Gk44GE44Gm44CB44KC44GG44GZ44GT44GX5aSa44GP44Gu5oOF5aCx44KS6KGo56S644GZ44KLCgpgYGB7cn0Kc3VtbWFyeShtMSkKYGBgCgoK6Kaz5ris5YCk44CB5LqI5ris5YCk44CB5q6L5beu44KS6KGo56S644GZ44KLCmBgYHtyfQpjYmluZChvYnNlcnZlZD1tdGNhcnMkbXBnLCBwcmVkaXRlZD1wcmVkaWN0KG0xKSwgcmVzaWR1YWw9cmVzaWQobTEpKQoKYGBgCgrmrovlt67jga7jg5Ljgrnjg4jjgrDjg6njg6DjgpLopovjgosKCuaui+W3ruOBjOato+imj+WIhuW4g+OBq+W+k+OBhuOCiOOBhuOBq+OAgeWbnuW4sOebtOe3muOBjOaOqOWumuOBleOCjOOCiwpgYGB7cn0KaGlzdChyZXNpZChtMSkpCmBgYAoKCgozLiDlm57luLDliIbmnpDntZDmnpzjga7opovmlrkgCgrlm57luLDliIbmnpDjga7ntZDmnpzjgpLopovjgoTjgZnjgY/jgZnjgovjg5Hjg4PjgrHjg7zjgrjjgpLov73liqDjgZnjgosKCmBgYHtyfQppbnN0YWxsLnBhY2thZ2VzKCJzdGFyZ2F6ZXIiKQpgYGAKCgoKYGBge3J9CmxpYnJhcnkoc3RhcmdhemVyKQoKI+WbnuW4sOWIhuaekOOBrue1kOaenOOCkuihqO+8iOWbnuW4sOODhuODvOODluODq++8ieOBq+OBl+OBpuWHuuWKm+OBmeOCiwpzdGFyZ2F6ZXIobTEsIHR5cGU9InRleHQiKQoKYGBgCgotLS0tLQoKIyMjIEV4ZXJjaXNlIDcgIOmHjeWbnuW4sOWIhuaekOOCkuihjOOBhgoKMS4g44Gq44Gc6YeN5Zue5biw5YiG5p6Q44KS44GZ44KL44GLPwoK56ys77yT5aSJ5pWw44Gu5b2x6Z+/44KS6Kq/5pW044GZ44KL44Gf44KB44Gr6YeN5Zue5biw5YiG5p6Q44KS6KGM44GGCgrnrKzvvJPlpInmlbDjgYzlhbHpgJrljp/lm6DjgajjgarjgaPjgabjgYTjgovjgajjgY3jgIHkuqTntaHlpInmlbDjgajlkbzjgbYKCuS6pOe1oeOBruW9semfv+OCkuiqv+aVtOOBl+OBn+S4iuOBp+OAgeiqrOaYjuWkieaVsOOBjOebrueahOWkieaVsOOBq+W9semfv+OBl+OBpuOBhOOCi+OBruOBi+OCkuaOqOWumuOBmeOCiwoKCgpgYGB7cn0KI+WbnuW4sOW8j+OBruaOqOWumgptMSA9IGxtKGRhdGE9bXRjYXJzLCBtcGcgfiB3dCkKbTIgPSBsbShkYXRhPW10Y2FycywgbXBnIH4gd3QrIGhwKQoKbTEKbTIKYGBgCgoKMi4g6KSH5pWw44Gu5Zue5biw44Oi44OH44Or44Gu5q+U6LyDCgrliIbmnpDntZDmnpzjgpLopovjgoTjgZnjgY/ooajnpLrjgZnjgovjgIIK6YeN5Zue5biw5YiG5p6Q44Gu5YiG5p6Q57WQ5p6c44KS44G/44KE44GZ44GP44G+44Go44KB44Gf44OG44O844OW44Or44KS5Zue5biw44OG44O844OW44Or44Go5ZG844G244CCCgpgYGB7cn0KbGlicmFyeShzdGFyZ2F6ZXIpCnN0YXJnYXplcihtMSxtMiwgdHlwZT0idGV4dCIpCmBgYAoKMy4gKOWPguiAgynpmo7mrrXnmoTlm57luLAKCijlj4LogIMp6ZqO5q6155qE5Zue5biwKGhpZXJhcmNoaWNhbCByZWdyZXNzaW9uKQoK5rOo5oSP77ya6ZqO5q6155qE5Zue5biwKGhpZXJhcmNoaWNhbCByZWdyZXNzaW9uKeOBr+OAgemajuWxpOe3muW9ouODouODh+ODqyhoaWVyYXJjaGljYWwgbGluZWFyIG1vZGVsKeOBqOOBr+WFqOOBj+OBruWIpeeJqeOBp+OBmQoKbTHjgahtMuOBp+OBr+OAgW0y44Gu5pa544GM5rG65a6a5L+C5pWw44GM5aSn44GN44GP44Gq44Gj44Gf44CCCuOBl+OBi+OBl+OAgWhw44Go44GE44GG5aSJ5pWw44KS77yR44Gk5Yqg44GI44Gm44CB6KSH6ZuR44Gq44Oi44OH44Or44Gr44Gq44Gj44Gm44GE44KL44CCCgrjgarjgovjgbnjgY/nsKHmvZTjgarjg6Ljg4fjg6vjgafoqqzmmI7jgZfjgZ/jgbvjgYbjgYzjgYTjgYTjgajjgYTjgYbmhI/lkbPjgafjga9tMeOBruaWueOBjOOCiOOBhOOAggoKbTHjgavlr77jgZfjgabjgIFtMuOBr+iJr+OBhOODouODh+ODq+OBqOOBhOOBiOOCi+OBoOOCjeOBhuOBiz8KCgrjgZPjgozjgavnrZTjgYjjgovjga7jgYzpmo7mrrXnmoTlm57luLDjgafjgYLjgovjgIIK77yI5rOo5oSP77ya6ZqO5q6155qE5Zue5biwKGhpZXJhcmNoaWNhbCByZWdyZXNzaW9uKeOBqOmajuWxpOeahOe3muW9ouODouODh+ODqyhoaWVyYWNoaWNhbCBsaW5lYXIgbW9kZWwp44Go44Gv5YWo44GP5Yil54mp44Gn44GC44KL77yJCgpgYGB7cn0KYW5vdmEobTEsbTIpCmBgYAoK5YiG5pWj44OG44O844OW44Or44Gv44CB57Wx6KiI55qE5pyJ5oSPKDAuMDAxNDUxKeOBq20y44GMbTHjgojjgorjgoLjg4fjg7zjgr/jgpLoqqzmmI7jgZfjgabjgYTjgovjgIHjgajnpLrjgZfjgabjgYTjgosKCgrlj4LogIPjgb7jgafjgatG5YCk44Go44Gd44Gu56K6546H44Gu44Gu566X5Ye65pa55rOV44KC5LuY6KiY44GZ44KLCgpG5YCk44Gu6KiI566XCmBgYHtyfQp7KDI3OC4zMi0xOTUuMDUpLzF9IC8gKDE5NS4wNS8yOSkKYGBgCgpG44KI44KK44KCRuWApOOBjOWkp+OBjeOBhOeiuueOhyhQcig+RikpCmBgYHtyfQogMS0gcGYoIDEyLjM4MDU3LCAxLCAyOSkKYGBgCgrms6jmhI/vvJoK44OH44O844K/44Gr44OV44Kj44OD44OI44GX44Gf44Oi44OH44Or44GM5b+F44Ga44GX44KC6Imv44GE44GL44Gp44GG44GL44Gv44KP44GL44KJ44Gq44GE44CCCgrjg4fjg7zjgr/jgavjg5XjgqPjg4Pjg4jjgZfjgabjgYTjgarjgY/jgabjgoLjgIHnkIboq5bnmoTjgavmraPjgZfjgYTjg6Ljg4fjg6vjgafjgYLjgozjgbDjgIHjgIzjgarjgZzjg4fjg7zjgr/jgavjg5XjgqPjg4Pjg4jjgZfjgarjgYvjgaPjgZ/jga7jgYvvvJ/jgI3jgpLogIPjgYjjgovkuovjgIIKCuODh+ODvOOCv+OBq+ODleOCo+ODg+ODiOOBl+OBn+OBi+OCieato+OBl+OBhOOBqOOBi+OCk+OBjOOBiOOCi+OBqOOAgeecn+OBruODouODh+ODq+OBi+OCieOBvuOBo+OBn+OBj+mBoOOBhOODouODh+ODq+OBq+OBquOBo+OBpuOBl+OBvuOBhuOAggoK44GT44KM44Gv44CB5a++6LGh44Go44GX44Gm44GE44KL44OH44O844K/44GM6Kaz5a+f44OH44O844K/44Gn44GC44KL44GT44Go44GM5aSn44GN44Gq5Y6f5Zug44Gn44GC44KLCgoKCjQuIOaYn+WNoOOBhOOBr+OChOOBo+OBpuOBr+OBoOOCgQoKCuWBj+WbnuW4sOS/guaVsOOBjOacieaEj+OBi+OBqeOBhuOBi+OCkuimi+OBquOBjOOCieOAgeeQhuirluOCkuOBpOOBj+OCi+OBruOBr+WNsemZuuOBp+OBguOCi++8iOaFjumHjeOBq+ihjOOCj+OBquOBj+OBpuOBr+OBhOOBkeOBquOBhO+8iQoKCmBgYHtyfQojIC4g44Gv55uu55qE5aSJ5pWw5aSW44Gu44GZ44G544Gm44Gu5aSJ5pWw44KS6Kqs5piO5aSJ5pWw44Gr5oqV5YWl44GZ44KL44CB44Go44GE44GG5oSP5ZGzCm0xMCA9IGxtKGRhdGE9bXRjYXJzLCBtcGcgfiAuKQpzdW1tYXJ5KG0xMCkKYGBgCgrlg4XjgYvjgat3dOOBjDEwJeawtOa6luOBp+acieaEj+OBp+OBguOCi+OAggoK44KC44GX44KCbXRjYXJz44Go44G+44Gj44Gf44GP5ZCM44GY44OH44O844K/44KSMTAwMOWbnuOBj+OCiuOBi+OBiOOBl+WPluW+l+OBl+OBn+OCieOAgQrjgZnjgbnjgabjga7lpInmlbDjgYzntbHoqIjnmoTjgavlhKrkvY3jgavjgarjgosKCgpgYGB7cn0KI+ODh+ODvOOCv+OCteOCpOOCuuOCkjEwMOWAjeOBq+OBmeOCiwptdGNhcnMxMDAwID0gbXRjYXJzW3JlcChzZXFfbGVuKG5yb3cobXRjYXJzKSksIDEwMDApLCBdCgoj44OH44O844K/44K144Kk44K644KS6KGo56S644GZ44KLCmRpbShtdGNhcnMxMDAwKQpgYGAKCgpgYGB7cn0KbTEwLjEwMDAgPSBsbShkYXRhPW10Y2FyczEwMDAsIG1wZyB+IC4pCgpzdGFyZ2F6ZXIobTEwLCBtMTAuMTAwMCwgdHlwZT0idGV4dCIpCmBgYAoKCuS4iuiomOOBruWbnuW4sOODhuODvOODluODq+OBp+OAge+8kuOBpOOBruODouODh+ODq+OBr+OBvuOBo+OBn+OBj+WQjOOBmOS/guaVsOOCkuaOqOWumuOBl+OBpuOBhOOCi+OAggrjgZfjgYvjgZfjgIEoMinjga/jgZnjgbnjgabjga7kv4LmlbDjgYzmnInmhI/jgafjgYLjgovjgIIK44Gd44Gu55CG55Sx44Gv44CB44K144Oz44OX44Or44K144Kk44K644GM6Z2e5bi444Gr5aSn44GN44GE44Gf44KB44CB5qiZ5rqW6Kqk5beu44GM5bCP44GV44GP44Gq44Gj44Gm44GE44KL44Gf44KB44Gn44GC44KLCgrntbHoqIjnmoTjgarmnInmhI/mpJzlrprjga/jgIHjgrXjg7Pjg5fjg6vjgrXjgqTjgrrjgavlpKfjgY3jgY/kvp3lrZjjgZnjgovjgIIK44Gg44GL44KJ44CB57Wx6KiI55qE44Gq5pyJ5oSP5oCn44Gg44GR44KS44KC44Go44Gr5Zug5p6c5oCn44Gu5pyJ54Sh44KS5Yik5pat44GZ44KL44Go44CB5aSn44GN44GP6ZaT6YGV44GG44GT44Go44Gr44Gq44KL44CCCu+8iOmWk+mBleOBhueQhueUseOBr+S7luOBq+OCguOCguOBo+OBqOOBn+OBj+OBleOCk+OBguOCi++8iQoKCgoKLS0tLS0KCiMjIyBFeGVyY2lzZSA4ICDkuqTkupLkvZznlKjjg6Ljg4fjg6sKCuaIpueVpeWIhuaekOOCkuebrueahOOBqOOBl+OBn+WgtOWQiOOAgeS6pOS6kuS9nOeUqOODouODh+ODq+OBqOWqkuS7i+S9nOeUqOODouODh+ODq+OBr+OAgeOBqOOBpuOCgumHjeimgeOBquODouODh+ODq+OBp+OBguOCiwoK5Lqk5LqS5L2c55So44Oi44OH44Or44Gv44CB56ys5LiJ5aSJ5pWw77yIbW9kZXJhdG9yLCDoqr/mlbTlpInmlbBa77yJ44Gu5rC05rqW44Gr44KI44Gj44Gm44CB5aSJ5pWwWOOBruWKueaenOOBjOWkieOCj+OCi+OBk+OBqOOCkuaEj+WRs+OBl+OBpuOBhOOCiwoK5aSJ5pWwWOOBruWKueaenOOCkuOAgeWil+Wkp+OBmeOCi+OBn+OCgeOBq+OBr+OAgeWkieaVsFrjga7msLTmupbjgpLjganjga7jgojjgYbjgavoqK3lrprjgZnjgozjgbDjgojjgYTjgYvjgIHjga/miKbnlaXkuIrjgIHjgajjgabjgoLmnInnlKjjgafjgYLjgovjgIIKCgrlqpLku4vkvZznlKjjg6Ljg4fjg6vjga/jgIHlpInmlbBY44Gu5Yq55p6c44GM56ys77yT5aSJ5pWwWijlqpLku4vlpInmlbAp44KS5LuL44GX44Gm44CBWeOBq+W9semfv+OCkuWPiuOBvOOBmeODkeOCueOBjOOBguOCi+OBk+OBqOOCkuaEj+WRs+OBl+OBpuOBhOOCiwrvvIjlpInmlbBY44Gr44Gv6ZaT5o6l5Yq55p6c44Go55u05o6l5Yq55p6c44GM5a2Y5Zyo44GZ44KL44GT44Go44KS5oSP5ZGz44GX44Gm44GE44KL77yJCgrlqpLku4vjg6Ljg4fjg6vjga/jgIHplpPmjqXlirnmnpzjg7vnm7TmjqXlirnmnpzjgpLogIPmha7jgZnjgovjgZPjgajjgafjgIHlpInmlbBY44Gu57eP5ZCI5Yq55p6c44KS5o6o5a6a44GZ44KL44GT44Go44GM5Y+v6IO944Go44Gq44KL44CCCgrjgZPjgZPjgafjga/jgIHkuqTkupLkvZznlKjjg6Ljg4fjg6vjgpLmjqjlrprjgZfjgabjgb/jgb7jgZkKCgoKMS4g5Lqk5LqS5L2c55So44Oi44OH44Or44KS5o6o5a6a44GZ44KLCgpgYGB7cn0KbTMgPSBsbShkYXRhPW10Y2FycywgbXBnIH4gIHd0ICsgaHAgKyB3dDpocCkKCnN0YXJnYXplcihtMSxtMixtMywgdHlwZT0idGV4dCIpCgpgYGAKCgoyLiDjg57jg7zjgrjjg4rjg6vlirnmnpzlm7PjgpLkvZzlm7PjgZnjgosKCgrkuqTkupLkvZznlKjjg6Ljg4fjg6vjga7jg57jg7zjgrjjg4rjg6vlirnmnpzlm7PjgpLkvZzlm7PjgZnjgovjg5Hjg4PjgrHjg7zjgrjjgpLov73liqDjgZnjgosKYGBge3J9Cmluc3RhbGwucGFja2FnZXMoImludGVycGxvdCIpCmBgYAoKCjIuIOODnuODvOOCuOODiuODq+WKueaenOWbs+OCkuS9nOaIkOOBmeOCiwoKYGBge3J9CmxpYnJhcnkoaW50ZXJwbG90KQppbnRlcnBsb3QobT1tMywgdmFyMT0id3QiLCB2YXIyPSJocCIsIGhpc3Q9VFJVRSkgKyAKICBsYWJzKHg9ImhwIiwgeT0iTUUgb2Ygd3QiKSArIAogIGdlb21faGxpbmUoeWludGVyY2VwdD0wLCBjb2xvdXI9InJlZCIpKyAKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9MjM3LCBjb2xvdXI9InJlZCIpCmBgYAoKCi0tLS0tLQojIyMgRXhlcmNpc2UgOSDlqpLku4vjg6Ljg4fjg6sKCuWqkuS7i+ODouODh+ODq+OBruaOqOWumuaWueazleOCkuiqrOaYjuOBl+OBvuOBmeOAggoKCuWqkuS7i+ODouODh+ODq+OBr+OAgeani+mAoOaWueeoi+W8j+ODouODh+ODqyhTRU0p44Gu77yR44Gk44Gn44GC44KL44Go6ICD44GI44KL44GT44Go44GM44Gn44GN44G+44GZ44CCCgrmp4vpgKDmlrnnqIvlvI/jg6Ljg4fjg6vjga/jgIHopIfmlbDjga7lm57luLDjg6Ljg4fjg6vvvIjmp4vpgKDmlrnnqIvlvI/vvInjgYvjgonmiJDjgornq4vjgaPjgabjgYTjgovntbHoqIjjg6Ljg4fjg6vjgafjgZnjgIIKCgrlqpLku4vjg6Ljg4fjg6vjga7mjqjlrprjga/jgIEy44Gk44Gu5pa55rOV44GM6aC757mB44Gr5L2/44KP44KM44G+44GZ44CCCgox44Gk44KB44Gv44CB6KSH5pWw44Gu6YeN5Zue5biw44Oi44OH44Or44Gu5o6o5a6a44KS6KGM44GE44CB44Gd44GT44GL44KJU0VN44KS5o6o6KuW44GZ44KL5pa55rOV44Gn44GZ44CCCuOBk+OBruaWueazleOBr+OAgeW+k+adpeOBi+OCieWIqeeUqOOBleOCjOOBpuOBjeOBn+mHjeWbnuW4sOODouODh+ODq+OBqOmAo+e2muaAp+OBjOOBguOCi+OBruOBp+OAgeeQhuino+OBl+OChOOBmeOBhOmdouOBjOOBguOCiuOBvuOBmeOBjOOAgeOBmeOBueOBpuOBruODkeODqeODoeODvOOCv+OCkuaOqOWumuOBl+OBpuOBhOOCi+OCj+OBkeOBp+OBr+OBquOBhOeCueOBq+azqOaEj+OBjOW/heimgeOBp+OBmeOAggoKCjLjgaTjgoHjga/jgIFTRU3jgajjgZfjgabmjqjlrprjgZnjgovmlrnms5XjgafjgZnjgIIKU0VN44Go44GX44Gm5o6o5a6a44GZ44KM44Gw44CB5b2T54S244CBU0VN44KS5qeL5oiQ44GZ44KL44GZ44G544Gm44Gu44OR44Op44Oh44O844K/44KS5o6o5a6a44GZ44KL44GT44Go44Gr44Gq44KK44G+44GZ44CCCuino+mHiOOBjOaYjueiuuOBq+OBquOCi+OAgeOBqOOBhOOBhuWIqeeCueOCguOBguOCiuOBvuOBmeOAggoKUuOBp1NFTeOCkuaOqOWumuOBmeOCi+mam+OBq+OBr+OAgWxhdmFhbuOCkuS9v+OBhOOBvuOBmQoKbGF2YWFu44Gn44Gv44CB5Lul5LiL44Gu44KI44GG44Gr44Oi44OH44Or5byPKG1vZGVsXzAwKeOCkuiomOi/sOOBl+OBvuOBmeOAggpsYXZhYW7jga7jg6Ljg4fjg6vlvI/jgavjgaTjgYTjgabjga/jgIEKaHR0cDovL2xhdmFhbi51Z2VudC5iZS90dXRvcmlhbC8K44KS5Y+C54Wn44GX44Gm44GP44Gg44GV44GE44CCCgrmpoLopoHjga/ku6XkuIvjga7jg5rjg7zjgrjjgavjgb7jgajjgb7jgaPjgabjgYTjgb7jgZkKaHR0cDovL2xhdmFhbi51Z2VudC5iZS90dXRvcmlhbC9zeW50YXgxLmh0bWwKCuODouODh+ODq+W8jwptb2RlbF8wMCA9ICIKeSB+IGIxKnggKyBiMip6CnogfiBiMyp4CmluZCA6PSBiMipiMwp0b3RhbCA6PSBiMSArIChiMipiMykKIgoK44Gd44Gu5b6M44CB44Oi44OH44Or5byP44KSc2Vt6Zai5pWw44Gn5o6o5a6a44GX44G+44GZ44CCCmZpdF9zZW1fMDAgPSBzZW0obW9kZWxfMDAsIGRhdGE9dGVzdF9kYXRhXzAwKQoK5o6o5a6a44GX44Gf57WQ5p6c44KSc3VtbWFyeemWouaVsOOBp+ihqOekuuOBl+OBvuOBmQpzdW1tYXJ5KGZpdF9zZW1fMDAsIGZpdC5tZWFzdXJlPVRSVUUpCgoKCiMjIyBFeGVyY2lzZSA5IOWqkuS7i+ODouODh+ODqyjmlbDlgKTkvosxKQoK44KC44GX44CBbGF2YWFu44KS44Kk44Oz44K544OI44O844Or44GX44Gm44GE44Gq44GR44KM44Gw44CBCmluc3RhbGwucGFja2FnZXMoImxhdmFhbiIpICAK44KS5a6f6KGM44GX44G+44GZCgoKYGBge3J9Cmluc3RhbGwucGFja2FnZXMoImxhdmFhbiIpICAKYGBgCgoKIyMjIOODh+ODvOOCv+OBruS9nOaIkAoK5aqS5LuL44Oi44OH44Or44Gu44OH44O844K/44KS5L2c5oiQ44GZ44KLCgpgYGB7cn0KbGlicmFyeShsYXZhYW4pCgptb2RlbF9tb2RfMDAgPSAiCnkgfiAwLjMqeCAgKyAwLjUqegp6IH4gMC42KngKIgoKdGVzdF9kYXRhXzAwID0gc2ltdWxhdGVEYXRhKG1vZGVsX21vZF8wMCxzYW1wbGUubm9icyA9IDEwMDAsIHNlZWQ9MTIzKQoKCgpgYGAKCgoKIyMj5L2c5oiQ44GX44Gf44OH44O844K/44KS5Zuz56S644GX44Gm44G/44KLCgpgYGB7cn0KbGlicmFyeShHR2FsbHkpCmdncGFpcnModGVzdF9kYXRhXzAwKQoKYGBgCgoKCiMjIyDlqpLku4vjg6Ljg4fjg6vjga7jg4fjg7zjgr/jgpLph43lm57luLDjg6Ljg4fjg6vjgafmjqjlrprjgZnjgovjgajjganjgYbjgarjgovjgYsKCmBgYHtyfQpsaWJyYXJ5KHN0YXJnYXplcikKCmZpdF8wMF8wMSA9IGxtKGRhdGE9dGVzdF9kYXRhXzAwLCB5IH4geCApCmZpdF8wMF8wMiA9IGxtKGRhdGE9dGVzdF9kYXRhXzAwLCB5IH4geCArIHopCgpzdGFyZ2F6ZXIoZml0XzAwXzAxLGZpdF8wMF8wMiwgdHlwZT0idGV4dCIpCgpgYGAKCuacrOadpeOAgeWqkuS7i+ODouODh+ODq+OBp+eUn+aIkOOBleOCjOOBn+ODh+ODvOOCv+OCkuOAgemHjeWbnuW4sOODouODh+ODq+OBp+aOqOWumuOBmeOCi+OBqOOAgW1vZGVsKDIp44Gu44KI44GG44Gr5o6o5a6a44GV44KM44KLCgrjg4fjg7zjgr/nlJ/miJDjgavkvb/jgaPjgZ/mp4vpgKDmlrnnqIvlvI/jga/ku6XkuIvjga7jgoLjga7jgafjgYLjgosKICB5ID0gMC4zeCAgKyAwLjV6ICAgIC4uLmVxKDEpCiAgeiA9IDAuNnggICAgICAgICAgICAuLi5lcSgyKQoKbW9kZWwgKDIp44Gn44Gv44CBZXEx44Gg44GR44GM5o6o5a6a44GV44KM44Gm44GE44KL44CC5o6o5a6a44GV44KM44Gf5YCk44GvCiAgeSA9IDAuM3ggICsgMC41eiAgICAuLi5lcSgxKQrjgavlr77jgZfjgaYKICB5ID0gMC4zMDF4ICArIDAuNDM3eiAgIArjgajjgYTjgYbjgojjgYbjgavmjqjlrprjgZXjgozjgabjgYTjgovjgIIKCgrlqpLku4vjg6Ljg4fjg6vjgavjgYrjgZHjgot444Gu5Yq55p6c44Gv44CBCigxKSAgIHjjgYvjgol644KS57WM55Sx44GX44GmeeOBq+W9semfv+OBmeOCi+OCguOBru+8iOmWk+aOpeWKueaenO+8iQooMikgICB444GL44KJeeOBq+ebtOaOpeeahOOBq+W9semfv+OBmeOCi+OCguOBru+8iOebtOaOpeWKueaenO+8iQrjgavliIbjgYvjgozjgovjgIIKCnjjga5544Gr5a++44GZ44KL5Yq55p6c44Gv44CBKDEpKygyKeOCkuWQiOioiOOBl+OBn+e3j+WQiOWKueaenOOBp+OBguOCiwoK6YeN5Zue5biw44Oi44OH44OrKDIp44Gn5o6o5a6a44GV44KM44Gm44GE44KLeOOBruWKueaenOOBr+OAgXjihpJ544Gu6ZaT5o6l5Yq55p6c44Gg44GR44Gn44GC44KK44CBCnjihpJ544Gu5Yq55p6cKOe3j+WQiOWKueaenCnjga/pgY7lsI/oqZXkvqHjgZXjgozjgabjgYTjgovjgZPjgajjgYzjgo/jgYvjgovjgIIKCuODh+ODvOOCv+eUn+aIkOOBp+ioreWumuOBl+OBn+ODkeODqeODoeODvOOCv+OBr+S7peS4i+OBrumAmuOCiuOBp+OBguOCi+OAggp44oaSeeOBrumWk+aOpeWKueaenOOBr+OAgTAuNiowLjU9MC4z44Gn44GC44KLCnjihpJ544Gu57eP5ZCI5Yq55p6c44Gv44CBMC4zICsgMC42KjAuNSA9IDAuNuOBp+OBguOCi+OAggoKU0VN44Gn44Gv44CBaW5kPTAuMjgwLCB0b3RhbD0wLjU4MeOBruOCiOOBhuOBq+ato+OBl+OBhOWApOOBq+i/keOBhOWApOOBjOaOqOWumuOBleOCjOOBpuOBhOOCi+OAggoKeOKGknnjga7lirnmnpzvvIjnt4/lkIjlirnmnpzvvInjgpLmjqjlrprjgZnjgovjgZ/jgoHjgavjgIHph43lm57luLDjg6Ljg4fjg6soMinjgpLnlKjjgYTjgovjgajjgIEK55u05o6l5Yq55p6c44Gu44G/44KS5o6o5a6a44GX44Gm44GX44G+44GEKDAuMynjgIHnt4/lkIjlirnmnpwoMC42KeOBqOWkp+OBjeOBqumBleOBhOOBjOWHuuOBpuOBl+OBvuOBhuOAggoKeOKGknnjga7nt4/lkIjlirnmnpzjgpLmjqjlrprjgZnjgovjgZ/jgoHjgavjga/jgIHph43lm57luLDjg6Ljg4fjg6soMinjgpLkvb/jgYbjga7jga/plpPpgZXjgYTjgafjgYLjgorjgIEK6YeN5Zue5biw44Oi44OH44OrKDEp44KS5L2/44GG44Gu44GM5q2j44GX44GE44CC6YeN5Zue5biw44Oi44OH44Or44Gn44Gv44CBeOKGknnjga7nt4/lkIjlirnmnpzjgYzmjqjlrprjgZXjgozjgabjgYTjgosoMC41ODEp44CCCgrmnKzmnaV44oaSeeOBruWKueaenCjnt4/lkIjlirnmnpwp44KS5o6o5a6a44GZ44KL44Gf44KB44Gr44Gv44CB6YeN5Zue5biw44Oi44OH44OrKDEp44KS55So44GE44KL44G544GN44Gn44GC44KL44GM44CBCuOBneOBruS7o+OCj+OCiuOBq+mHjeWbnuW4sOODouODh+ODqygyKeOCkueUqOOBhOOCi+OBqOiqpOOBo+OBn+WApOOCkuaOqOWumuOBl+OBpuOBl+OBvuOBhuOAggoK44GT44Gu44KI44GG44Gr44CB5q2j44GX44GE44Oi44OH44Or44Gr5a++44GX44Gm44CB6ZaT6YGV44Gj44Gf57Wx6KiI44Oi44OH44Or44KS5o6o5a6a44GZ44KL44GT44Go44KSCuOAjOODouODh+ODq+OBrueJueWumuWMluOBruiqpOOCiihtb2RlbCBtaXNzcGVjaWZpY2F0aW9uKeOAjeOBqOWRvOOBtuOAggoK54m55a6a5YyW44Gu6Kqk44KK44GM55Sf44GY44Gm44GE44KL44Go44CBeOKGknnjga7lirnmnpzjga7lpKfjgY3jgZXjgpLmraPjgZfjgY/mjqjlrprjgafjgY3jgarjgYQKCuWqkuS7i+ODouODh+ODq+OBp+OBr+OAgXjihpJ544Gu5Yq55p6c77yI57eP5ZCI5Yq55p6c77yJ44Gv44CBbW9kZWwoMSnjga7jgojjgYbjgarntbHoqIjjg6Ljg4fjg6vjgpLmp4vnr4njgZfjgarjgYTjgajjgIHmraPjgZfjgY/mjqjlrprjgafjgY3jgarjgYQKCm1vZGVsICgxKeOBp+aOqOWumuOBleOCjOOBn+WApOOBrwogIHkgPSAwLjU4MXgK44Gn44GC44KL44CCCgrjg4fjg7zjgr/nlJ/miJDjgavkvb/jgaPjgZ/jg5Hjg6njg6Hjg7zjgr/jgpLjgoLjgajjgavjgZnjgovjgajjgIEKICB44oaSeeOBrue3j+WQiOWKueaenOOBr+OAgTAuMyArIDAuNiowLjUgPSAwLjYK44Gn44GC44KLCgptb2RlbCgxKeOBp+OBr+OAgXjihpJ544Gu57eP5ZCI5Yq55p6c44Gr6L+R44GE5YCk44GM5o6o5a6a44GV44KM44Gm44GE44KLCgotLS0tLS0tLS0tLS0tCgojIyMg5Y+C6ICDIOOCteODs+ODl+ODq+OCteOCpOOCuuOBjOWwj+OBleOBhOOBqOOBqeOBhuOBquOCi+OBiz8KCuOCteODs+ODl+ODq+OCteOCpOOCuuOBjOWwj+OBleOBhOWgtOWQiOOBq+OAgemHjeWbnuW4sOODouODh+ODqygxKeOBqOmHjeWbnuW4sOODouODh+ODqygyKeOCkuavlOi8g+OBmeOCi+OAggoK6YeN5Zue5biw44Oi44OH44OrKDEp44Gn44Gv44CB5aSJ5pWweOOBruWbnuW4sOS/guaVsOOBr+OAgee1seioiOeahOacieaEj+OBp+OBguOCiwrjgZfjgYvjgZfjgIHph43lm57luLDjg6Ljg4fjg6soMinjgafjga/jgIHlpInmlbB444Gu5Zue5biw5L+C5pWw44Gv44CB57Wx6KiI55qE5pyJ44Gn44Gv44Gq44GECgoKYGBge3J9Cm1vZGVsX21vZF8wMCA9ICIKeSB+IDAuMyp4ICArIDAuNSp6CnogfiAwLjYqeAoiCgp0ZXN0X2RhdGFfMDBiID0gc2ltdWxhdGVEYXRhKG1vZGVsX21vZF8wMCxzYW1wbGUubm9icyA9IDUwLCBzZWVkPTEyMykKCmBgYAoKYGBge3J9CmdncGFpcnModGVzdF9kYXRhXzAwYikKYGBgCgoKYGBge3J9CmZpdF8wMF8wMWIgPSBsbShkYXRhPXRlc3RfZGF0YV8wMGIsIHkgfiB4ICkKZml0XzAwXzAyYiA9IGxtKGRhdGE9dGVzdF9kYXRhXzAwYiwgeSB+IHggKyB6KQoKc3RhcmdhemVyKGZpdF8wMF8wMWIsZml0XzAwXzAyYiwgdHlwZT0idGV4dCIpCmBgYAoKCgojIyMgU0VN44Go44GX44Gm5aqS5LuL44Oi44OH44Or44KS5o6o5a6a44GZ44KLCgpgYGB7cn0KCm1vZGVsXzAwID0gIgp5IH4gYjEqeCArIGIyKnoKeiB+IGIzKngKaW5kIDo9IGIyKmIzCnRvdGFsIDo9IGIxICsgKGIyKmIzKQoiCgpmaXRfc2VtXzAwID0gc2VtKG1vZGVsXzAwLCBkYXRhPXRlc3RfZGF0YV8wMCkKCnN1bW1hcnkoZml0X3NlbV8wMCxmaXQubWVhc3VyZT1UUlVFKQpgYGAKCuioreWumuOBl+OBn2IxLGIyLGIz44Gv44Gd44KM44Ge44KM5Lul5LiL44Gu44KI44GG44Gr5o6o5a6a44GV44KM44GfCgrmjqjlrprlgKRiMT0wLjMwMSAgIOioreWumuOBl+OBn+ODkeODqeODoeODvOOCv+OBruWApOOBr2IxPTAuMyAgCuaOqOWumuWApGIyPTAuNDM3ICAg6Kit5a6a44GX44Gf44OR44Op44Oh44O844K/44Gu5YCk44GvYjI9MC41ICAK5o6o5a6a5YCkYjM9MC42MzkgICDoqK3lrprjgZfjgZ/jg5Hjg6njg6Hjg7zjgr/jga7lgKTjga9iMz0wLjYgIAoK44Gd44KM44Ge44KM44CB6Kit5a6a44GX44Gf44OR44Op44Oh44O844K/44Gr6L+R44GE5YCk44GM5o6o5a6a44GV44KM44Gm44GE44KL44CCCu+8iOiqpOW3ruWkieaVsOOBruW9semfv+OBjOOBguOCi+OBruOBp+OAgeODkeODqeODoeODvOOCv+OBr+OBmuOCjOOBpuaOqOWumuOBleOCjOOCi++8iQoKCumWk+aOpeWKueaenChpbmQ9YjIqYjMp44GvMC4yODDjgajmjqjlrprjgZXjgozjgabjgYTjgosgCgrnt4/lkIjlirnmnpwodG90YWw9YjErYjIqYjMp44GvMC41ODHjgajmjqjlrprjgZXjgozjgabjgYTjgosgIAoKCgotLS0tLQoKIyMjIOaVsOWApOS+iygyKe+8muaEj+Wbs+OBm+OBluOCi+ihjOeCuuOCkuihqOOBmeWqkuS7i+ODouODh+ODqwoK5aqS5LuL5aSJ5pWw44Oi44OH44Or44GM44KI44KK6YeN6KaB44Gq44Gu44Gv44CBYjLvvIjjgoLjgZfjgY/jga9iM++8ieOBjOOAgeODnuOCpOODiuOCueOBruOBqOOBjSjnm7TmjqXlirnmnpxiMeOBqOeVsOespuWPt+OBruOBqOOBjSnjgafjgYLjgovjgILjgZPjga7jgajjgY3jgIHmhI/lm7PjgZvjgZbjgovooYzngroo6ZaT5o6l5Yq55p6c44GM5oSP5Zuz44Go6YCG44Gu5pa55ZCR44Gr5L2c55So44GZ44KL44Oi44OH44OrKeOCkuihqOOBmeODouODh+ODq+OBqOOBquOCiwoKCgrlhbfkvZPnmoTjgavjga8KeSA9IGIxKnggKyBiMip6CnogPSBiMyp4CuOBruOCiOOBhuOBquWqkuS7i+ODouODh+ODq+OBp+OAgWIxLGIz44GM44OX44Op44K544CBYjLjgYzjg57jgqTjg4rjgrnjgafjgYLjgovlqpLku4vjg6Ljg4fjg6vjgpLogIPjgYjjgovjgIIKCuOBk+OBruOBqOOBjeOAgXjjga/nm7TmjqXnmoTjgavjga9544KS5aKX5Yqg44GV44Gb44KL77yI55u05o6l5Yq55p6c44Gv44OX44Op44K5KeOBp+OBguOCi+OBjOOAgQp444Gu57eP5ZCI5Yq55p6c44Gv44K844Ot44KC44GX44GP44Gv44Oe44Kk44OK44K544Gn44GC44KL5Y+v6IO95oCn44GM44GC44KL44CCCgrku6XkuIvjgavmlbDlgKTkvovjgpLmjrLjgZLjgosKCgojIyMgU0VN44Gn5o6o5a6a44GZ44KLCgpgYGB7cn0KbW9kZWxfbW9kXzAxID0gIgp5IH4gMC4zKnggKyAoLTAuNSkqegp6IH4gMC42KngKIgoKdGVzdF9kYXRhXzAxID0gc2ltdWxhdGVEYXRhKG1vZGVsX21vZF8wMSxzYW1wbGUubm9icyA9IDEwMDAsIHNlZWQ9MTIzKQoKYGBgCgoKYGBge3J9CmdncGFpcnModGVzdF9kYXRhXzAxKQpgYGAKCgoKIyMjIOmHjeWbnuW4sOODouODh+ODq+OBp+aOqOWumuOCkuOBl+OBpuOBv+OCiwoKYGBge3J9CgpmaXRfMDFfMDEgPSBsbShkYXRhPXRlc3RfZGF0YV8wMSwgeSB+IHggKQpmaXRfMDFfMDIgPSBsbShkYXRhPXRlc3RfZGF0YV8wMSwgeSB+IHggKyB6KQoKc3RhcmdhemVyKGZpdF8wMV8wMSwgZml0XzAxXzAyLCB0eXBlPSJ0ZXh0IikKYGBgCgrjg4fjg7zjgr/nlJ/miJDjgavnlKjjgYTjgZ/jg5Hjg6njg6Hjg7zjgr/jgpLlhYPjgavjgZnjgovjgajjgIEKICB44oaSeeOBruebtOaOpeWKueaenOOBrzAuMwogIHjihpJ544Gu57eP5ZCI5Yq55p6c44GvMC4zICsgMC42KigtMC41KSA9IDAuMArjgafjgYLjgosKCumHjeWbnuW4sOODouODh+ODqygyKeOCkuOBp+OBr3jihpJ544Gu5Yq55p6c44GvMC4zMzfjgajmjqjlrprjgZXjgozjgabjgYTjgovjgIIK44GT44Gu5YCk44KS44CBeOKGknnjga7lirnmnpwo57eP5ZCI5Yq55p6cKeOBoOOBqOiAg+OBiOOCi+OBqOOAgemWk+mBleOBhOOCkui1t+OBk+OBmeOAggoK6YeN5Zue5biw44Oi44OH44OrKDIp44Gn5o6o5a6a44GV44KM44GfMC4zMzfjga/jgIF44oaSeeOBruebtOaOpeWKueaenCh44oaSeeOBrue3j+WQiOWKueaenOOBruS4gOmDqOWIhikK44Gn44GC44KL44CCCgp44oaSeeOBruWKueaenCjnt4/lkIjlirnmnpwp44Gv44CB6YeN5Zue5biw44Oi44OH44OrKDEp44Gn5q2j44GX44GP5o6o5a6a44GV44KM44Gm44GE44KL44CCCgoK44GV44KJ44Gr55WZ5oSP44GZ44KL54K544GM44GC44KL44CCCumHjeWbnuW4sOODouODh+ODqygxKeOBruaxuuWumuS/guaVsFIy44GMMC4wMDAx44Gn44GC44KK44CB6JGX44GX44GP5L2O44GE44CB44Go44GE44GG54K544Gn44GC44KL44CCCgrmsbrlrprkv4LmlbDjgaDjgZHjgpLpoLzjgorjgavjgZfjgabjgIHjg6Ljg4fjg6vjgpLpgbjmip7jgZnjgovjgajjgIHph43lm57luLDjg6Ljg4fjg6soMinjgpLpgbjmip7jgZfjgabjgZfjgb7jgYYoUjI9MC4yNDgp44CCCgrjgZfjgYvjgZfjgIHjgYTjgb7jgb7jgafopovjgabjgY3jgZ/jgojjgYbjgavjgIF44oaSeeOBrue3j+WQiOWKueaenOOCkuihqOOBmeODouODh+ODq+OBqOOBl+OBpuOAgemHjeWbnuW4sOODouODh+ODqygyKeOBr+mWk+mBleOBo+OBpuOBhOOCi+OAggrph43lm57luLDjg6Ljg4fjg6soMinjga/jgIF44oaSeeOBruebtOaOpeWKueaenCgwLjMp44KS5o6o5a6a44GX44Gm44GE44KL44Gg44GR44Gn44CBeOKGknnjga7nt4/lkIjlirnmnpwoMC4wKeOCkuekuuOBl+OBpuOBhOOBquOBhOOAggoKCuOBpOOBvuOCiuOAgeaxuuWumuS/guaVsOOBruWkp+Wwj+OBp+OBr+OAgeato+OBl+OBhOODouODh+ODq+OCkumBuOaKnuOBp+OBjeOBquOBhOOAggoKCuOBleOCieOBq+OAgeiqpOOBo+OBn+ODouODh+ODq+OBp+OBguOCi+mHjeWbnuW4sOODouODh+ODqygyKeOBruWbnuW4sOS/guaVsOOBjOe1seioiOeahOacieaEj+OBp+OBguOCi+eCueOCguazqOaEj+OBl+OBpuOBu+OBl+OBhOOAggoK6Kqk44Gj44Gf44Oi44OH44Or44Gn44GC44Gj44Gm44KC44CB5Zue5biw5L+C5pWw44Gv57Wx6KiI55qE5pyJ5oSP44Gr44Gq44KL44CCCgrjgaTjgb7jgorjgIHlm57luLDkv4LmlbDjgYzjgIzmnInmhI/jgafjgYLjgovjgI3jgIzmnInmhI/jgafjgarjgYTjgI3jgajjgYTjgYbjgYTjgZPjgajjgajjgIF44oaSeeOBruWKueaenOOBjOato+OBl+OBj+aOqOWumuOBleOCjOOBpuOBhOOCi+OBi+OBqeOBhuOBi+OAgeOBqOOBr+mWouS/guOBjOOBquOBhOOAggoKCuOAjOODouODh+ODq+eJueWumuWMluOBruiqpOOCiuOAjeOBr+OAgeeQhuirluani+evieS4iuOBruWVj+mhjOOBp+OBguOCi+OAggrjganjga7jgojjgYbjgarjg6Ljg4fjg6vlvI/jgpLkvZzjgovjgYvvvJ/jga7mrrXpmo7jgafotbfjgZPjgovllY/poYzjgafjgIHjgIzjg6Ljg4fjg6vnibnlrprljJbjga7oqqTjgorjgI3jga/otbfjgZPjgovjgIIKCuODouODh+ODq+eJueWumuWMluOBruiqpOOCiuOBjOi1t+OBk+OBo+OBpuOBhOOCi+aZguOBp+OCguOAgee1seioiOeahOacieaEj+OBq+OBquOCi+OBk+OBqOOBr+OBguOCi+OAggoK44Gg44GL44KJ44CB44CM57Wx6KiI55qE5pyJ5oSP44Gr44Gq44Gj44Gf44CN4oaS44CM44Oi44OH44Or77yI5Zug5p6c6Zai5L+C44KS6ICD5a+f44GZ44KL77yJ44CN44Go44GE44GG44Gu44Gv44CB5aSn5aSJ5Y2x6Zm644Gn44GC44KK44CB77yI57Wx6KiI55qE44Gq5omL5rOV44Gr44KI44G744Gp54af6YGU44GX44Gm44GE44Gq44GE6ZmQ44KK77yJ44CB44KE44KB44Gf44G744GG44GM44GE44GE44CCCgoKIyMjIFNFTeOBp+aOqOWumuOBmeOCiwoKYGBge3J9Cgptb2RlbF8wMSA9ICIKeSB+IGIxKnggKyBiMip6CnogfiBiMyp4CmluZCA6PSBiMipiMwp0b3RhbCA6PSBiMSArIChiMipiMykKIgoKZml0X3NlbV8wMSA9IHNlbShtb2RlbF8wMSwgZGF0YT10ZXN0X2RhdGFfMDEpCgpzdW1tYXJ5KGZpdF9zZW1fMDEsZml0Lm1lYXN1cmU9VFJVRSkKCmBgYAoKCi0tLS0tCuWPguiAgwoK6YeN5Zue5biw44Oi44OH44Or44Gn44Gv44CBUjIo6YGp5ZCI5bqmKeOChHDlgKQo57Wx6KiI55qE5pyJ5oSP5oCnKeOBi+OCieOAgeato+OBl+OBhOODouODh+ODq+OCkumBuOaKnuOBmeOCi+OBk+OBqOOBjOOBp+OBjeOBquOBi+OBo+OBn+OAggoK44GX44GL44GX44CBU0VN44Gq44KJ44Gw6YGp5ZCI5bqm5oyH5qiZ44KS5L2/44Gj44Gm44CB5q2j44GX44GE44Oi44OH44Or44KS6YG45oqe44GZ44KL44GT44Go44GM44Gn44GN44KL44Gg44KN44GG44GL77yfCgpTRU3jga7pganlkIjluqbmjIfmqJnjgavjga/jgIFDRknjgoRSTVNFQeOBjOOBguOCi+OAggoK57WQ6KuW44GL44KJ6KiA44GG44Go44CB6YGp5ZCI5bqm5oyH5qiZ44KS5L2/44Gj44Gf44Go44GX44Gm44KC44CBU0VN44Gn44KC5q2j44GX44GE44Oi44OH44Or44KS6YG45oqe44GZ44KL44GT44Go44Gv44Gn44GN44Gq44GECgrku6XkuIvjga/jgIHjg4fjg7zjgr/nlJ/miJDjgajjga/nlbDjgarjgovliIbmnpDjg6Ljg4fjg6vjgafjgIFTRU3jgpLpgannlKjjgZfjgZ/kuovkvovjgIIK55Sf5oiQ44Oi44OH44Or44Go44Gv55Ww44Gq44KL44Oi44OH44Or44Gn44GC44KL44Gr44KC44GL44GL44KP44KJ44Ga44CB6YGp5ZCI5bqm5oyH5qiZ44Gv55uu5a6J44KS44Kv44Oq44Ki44GX44Gm44GE44KL44CCCgpgYGB7cn0KbW9kZWxfMDFiID0gIgp5IH4gYjEqeCArIGIyKnoKIgoKZml0X3NlbV8wMGMgPSBzZW0obW9kZWxfMDFiLCBkYXRhPXRlc3RfZGF0YV8wMSkKCnN1bW1hcnkoZml0X3NlbV8wMGMsZml0Lm1lYXN1cmU9VFJVRSkKYGBgCgoKCg==