jh191002-NWJ 財務ビッグデータの 可視化と統計モ …...Hardware: FENNEL (東京大学...

242
財務ビッグデータの 可視化と統計モデリング 地道 正行*, 宮本大輔**, 智香*, 永田 修一* * 関西学院大学 商学部, **東京大学大学院情報理工学系研究科 [email protected] 12JHPCN シンポジウム 202079() オンライン開催 jh191002-NWJ

Transcript of jh191002-NWJ 財務ビッグデータの 可視化と統計モ …...Hardware: FENNEL (東京大学...

  • 財務ビッグデータの 可視化と統計モデリング

    地道 正行*, 宮本大輔**, 阪 智香*, 永田 修一* * 関西学院大学 商学部, **東京大学大学院情報理工学系研究科

    [email protected] 第12回 JHPCN シンポジウム

    2020年7月9日(木) オンライン開催

    jh191002-NWJ

  • Preprocessing, Data Wrangling, Exploratory Data Analysis, and Reproducibility

    Raw Data Set File

    Importable Data Set

    FilePreprocessing

    Statistical Inference

    and Decision

    Exploratory Data Analysis

    J. W. Tukey (1977)

    Analyzable Object

    Data Wrangling

    Reproducibility

  • Computational Environments

  • Hardware: Local

    • macOS • Mac Pro • iMac • MacBook Pro

    • Ubuntu • Dell Precision T7910

  • Hardware: FENNEL (東京大学 専有利用型リアルタイムデータ解析ノード)

    node name OS node num.

    cores memory disk GPU memoryGPU node Ubuntu16.04 2 8 16GB 1TB 8GB

    CPU node Ubuntu16.04 2 8 12GB 1TB -total 4 32 56GB 4TB 16GB

  • Setup / Software• OS: macOS, Ubuntu

    • UNIX shell: bash, zsh

    • UNIX command: make, GNU parallel, (g)sed, grep, dos2unix,sftp,etc

    • Apache Spark

    • R, RStudio

    • R Packages: tidyverse, SparkR, GGally, rgl, sn, xtable

    • Reproducibility: Sweave

  • 2019 Articles and Presentations

  • 学術論文 (2019年度)(1) , , –

    – , 79 , 2 , pp. 118–128, , 2019 7 .

    (2) , –

    – , , 2019 8 13 , .

    (3) – – , , 67 , 1 , pp. 27 –

    46, , 2019 10 .

    (4) C. Saka, T. Oshika, and M. Jimichi, Visualization of Tax Avoidance and Tax Rate Convergence:

    Exploratory Analysis of World-scale Accounting Data, Meditari Accountancy Research, Vol. 27 No.

    5, 2019, pp. 695–724, Emerald Publishing Limited.

    (5) , , ,

    , 2019-28, pp. 1–35, 2020 1 .

    (6) , , , ,

    , 72 , 1 , pp. 74–80, , 2020 1 .

    (7) – – , 67 , 3 , pp. 1–19,

    , 2020 3 .

    1

  • 国際会議発表 (2019年度)(1) M. Jimichi∗, D. Miyamoto, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and

    Reproducible Research, DSSV 2019, Doshisha University, Imadegawa Campus, August 14th, 2019.

    (2) C. Saka∗ and M. Jimichi, Visualization of Corporate Tax Avoidance and Value Added Distribution:

    Exploratory Analysis of Financial Big Data, DSSV 2019, Doshisha University, Imadegawa Campus,

    August 14th, 2019.

    (1) , , , – , ,

    – , , , 2018 11 11

    ( ).

    (2) ∗, , , ,

    41 ( 61 ) , , 2019 6 1 ( ).

    (3) ∗, Visualization of tax avoidance and tax rate convergence: Exploratory analysis of world-scale

    accounting data,

    , , 2019 7 6 ( ).

    (4) ∗, , ∗, ,

    (JHPCN) 11 , THE GRAND HALL( , 2019

    7 11 ( ).

    (5) ∗, , , – – ,

    , 2019 ,

    , 2019 8 24 ( ).

    (6) ∗, R GIS , 2019

    , , 2019 8 24 ( ).

    (7) ∗, , – – , ,

    78 , , 2019 9 9 ( ).

    (8) M. Jimichi, D. Miyamoto∗, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and

    Reproducible Research, 2019 , , 2019 9 10

    ( ).

    (9) ∗, , ∗, , RIMS

    , , 2019 10 17 ( ).

    (10) ∗, , , – – ,

    33 , , 2019 11 30 ( ).

    (11) ∗ – – ,

    , 7 , , 2019 12 5

    ( ).

    (12) ∗, , , – – , 2019

    , , 2019 12 7 ( ).

    (13) ∗, , , –

    – , 2019 R , ,

    2019 12 21 ( ).

    2

  • 国内会議発表(1) (2019年度)

    (1) M. Jimichi∗, D. Miyamoto, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and

    Reproducible Research, DSSV 2019, Doshisha University, Imadegawa Campus, August 14th, 2019.

    (2) C. Saka∗ and M. Jimichi, Visualization of Corporate Tax Avoidance and Value Added Distribution:

    Exploratory Analysis of Financial Big Data, DSSV 2019, Doshisha University, Imadegawa Campus,

    August 14th, 2019.

    (1) , , , – , ,

    – , , , 2018 11 11

    ( ).

    (2) ∗, , , ,

    41 ( 61 ) , , 2019 6 1 ( ).

    (3) ∗, Visualization of tax avoidance and tax rate convergence: Exploratory analysis of world-scale

    accounting data,

    , , 2019 7 6 ( ).

    (4) ∗, , ∗, ,

    (JHPCN) 11 , THE GRAND HALL( , 2019

    7 11 ( ).

    (5) ∗, , , – – ,

    , 2019 ,

    , 2019 8 24 ( ).

    (6) ∗, R GIS , 2019

    , , 2019 8 24 ( ).

    (7) ∗, , – – , ,

    78 , , 2019 9 9 ( ).

    (8) M. Jimichi, D. Miyamoto∗, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and

    Reproducible Research, 2019 , , 2019 9 10

    ( ).

    (9) ∗, , ∗, , RIMS

    , , 2019 10 17 ( ).

    (10) ∗, , , – – ,

    33 , , 2019 11 30 ( ).

    (11) ∗ – – ,

    , 7 , , 2019 12 5

    ( ).

    (12) ∗, , , – – , 2019

    , , 2019 12 7 ( ).

    (13) ∗, , , –

    – , 2019 R , ,

    2019 12 21 ( ).

    2

  • 国内会議発表(2) (2019年度)

    (1) M. Jimichi∗, D. Miyamoto, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and

    Reproducible Research, DSSV 2019, Doshisha University, Imadegawa Campus, August 14th, 2019.

    (2) C. Saka∗ and M. Jimichi, Visualization of Corporate Tax Avoidance and Value Added Distribution:

    Exploratory Analysis of Financial Big Data, DSSV 2019, Doshisha University, Imadegawa Campus,

    August 14th, 2019.

    (1) , , , – , ,

    – , , , 2018 11 11

    ( ).

    (2) ∗, , , ,

    41 ( 61 ) , , 2019 6 1 ( ).

    (3) ∗, Visualization of tax avoidance and tax rate convergence: Exploratory analysis of world-scale

    accounting data,

    , , 2019 7 6 ( ).

    (4) ∗, , ∗, ,

    (JHPCN) 11 , THE GRAND HALL( , 2019

    7 11 ( ).

    (5) ∗, , , – – ,

    , 2019 ,

    , 2019 8 24 ( ).

    (6) ∗, R GIS , 2019

    , , 2019 8 24 ( ).

    (7) ∗, , – – , ,

    78 , , 2019 9 9 ( ).

    (8) M. Jimichi, D. Miyamoto∗, C. Saka, and S. Nagata, Exploratory Financial Big Data Analysis and

    Reproducible Research, 2019 , , 2019 9 10

    ( ).

    (9) ∗, , ∗, , RIMS

    , , 2019 10 17 ( ).

    (10) ∗, , , – – ,

    33 , , 2019 11 30 ( ).

    (11) ∗ – – ,

    , 7 , , 2019 12 5

    ( ).

    (12) ∗, , , – – , 2019

    , , 2019 12 7 ( ).

    (13) ∗, , , –

    – , 2019 R , ,

    2019 12 21 ( ).

    2

  • Database, Preprocessing of Osiris2018 Data Set (Consolidate Version)

  • Database• Bureau van Dijk (ビューロー・ヴァン・ダイク)社 (以下 BvD と略) 全世界上場・上場廃止企業データベース Osiris (オシリス)

    • 世界の全上場企業90,000社強の情報を 国際比較可能な統一のフォームで収録

    【収録情報】 世界の上場企業・一般事業会社の以下のデータ

    • 財務情報(BS/PL/CF)- 平均15年(最長30年)

    • 株主/関連会社情報 - 出資比率・種別・アーカイブ

    • 株価情報 - 時価総額、β値、EPS、インデックス

    • 企業概要 - 事業内容、業種分類、創業年、IPO Date 統一のフォームで収録

  • Data Set Information: Osiris2018•世界160カ国の上場企業 (93,836社) の主要財務情報 (売上高, 営業利益, 総資産など84項目) を33年分 (最長30年分) 抽出 →パネルデータ(経時観測データ)

    •前処理後のデータセットは社名, 社名+BvD ID, 決算年を新たに変数として加えたため, 87項目になっている.

    No_ VariableName(data7) R Variable name 変数説明

    1 year(USD) year_USD 年(通貨単位)

    2 BvD ID number ID 企業コード

    3 Address of incorp_ - Country country 国

    4 US SIC, Primary code(s) (M) SIC_code 業種コード

    5 US SIC, primary code(s) description

    SIC_name 業種名

    6 Main exchange exchange 主取引所

    7 Consolidation code cons 連結・単独

    8 Closing date date 決算日

    9 Number of months month 月数

    10 Audit Status audit 監査

    11 Accounting standard practice 会計基準

    12 Source source データの出所

    13 Statement unit units 単位(価格)

    14 : : :

    : Market price - July market_price7 市場価格7月末分

    78 Market price - August market_price8 市場価格8月末分

    79 Market price - September market_price9 市場価格9月末分

    80 Market price - October market_price10 市場価格10月末分

    81 Market price - November market_price11 市場価格11月末分

    82 Market price - December market_price12 市場価格12月末分

    83 Market Cap market_cap 時価総額

    84 Dividend dividend 配当金

  • Data File Informations by Unix Commands

    $ ls -l dataC.txt -rwxr-xr-x 1 masa staff 1548270085 4 9 20:56 dataC.txt

    $ wc -l dataC.txt 3190424 dataC.txt

  • Raw Data FileCOURTAULDS PLC BvD ID number Address of incorp. - Country US SIC, Primary code(s) (M) US SIC, primary code(s) description Main exchange Consolidation code Closing date Number of months Audit Status Accounting standard Source Statement unit Currency of the statement Exchange Rate from Local Currency Fixed Assets Intangible Fixed Assets Tangible Fixed Assets Other Fixed Assets Current Assets Stock Debtors Others Cash & Cash Equivalent Total Assets Shareholders Funds Capital Other Non Current Liabilities Long Term Debt Other Non Current Liabilities Provisions Current Liabilities Loans Creditors Other Total Shareh. Funds & Liab. Working Capital Net Current Assets Enterprise Value Number of Employees Operating Revenue / Turnover Sales Costs of Goods Sold Gross Profit Other Operating Items Operating P/L Financial Revenue Financial P/L Other non Oper./Financial Items P/L before Tax Taxation P/L after Tax Extraord. & Oth. Items P/L for Period Material Costs Costs of Employees Depreciation/Amortization Financial Expenses Research & Development expenses (memo) Cash Flow Added Value EBITDA Income taxes Income Tax Payable Deferred Taxes Def. Inc. Taxes & Invest. Tax Credit Date of current Market capitalisation Current market capitalisation Market price - Year Market price - January Market price - February Market price - March Market price - April Market price - May Market price - June Market price - July Market price - August Market price - September Market price - October Market price - November Market price - December Market Cap. Cash Dividends Paid - Total 1985 (th USD) GB01605EX UNITED KINGDOM 2899 Chemicals and chemical preparations, not elsewhere specified manufacturing Unlisted C1 31/03/1986 12 Qualif n.a. Acc. Std na AR th GBP 1.48531 640,317 n.a. 595,164 45,153 1,429,166 583,281 492,083 353,801 313,400 2,069,483 844,547 146,006 698,541 387,369 276,862 110,507 n.a. 837,566 90,307 508,719 238,541 2,069,483 566,646 591,599 n.a. 68,000 3,227,134 3,227,134 -2,411,104 816,029 -510,353 229,480 n.a. -17,081 n.a. 212,399 -39,064 173,336 -18,715 154,621 n.a. -778,006 -76,196 -17,081 0 230,817 1,064,967 305,677 -39,064 28,369 n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. 1986 (th USD) GB01605EX UNITED KINGDOM Unlisted C1 31/03/1987 12 Qualif n.a. Acc. Std na AR th GBP 1.60501 842,148 n.a. 795,281 46,866 1,636,947 637,188 558,864 440,896 396,918 2,479,095 1,058,663 160,982 897,681 434,315 301,420 132,895 n.a. 986,117 70,620 611,508 303,988 2,479,095 584,544 650,831 n.a. 65,400 3,630,367 3,630,367 -2,564,963 1,065,404 -628,200 342,830 n.a. -20,063 n.a. 322,767 -74,793 247,974 -33,224 214,750 n.a. -879,063 -94,374 -20,063 0 309,124 1,283,043 437,204 -74,793 59,867 n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. 1987 (th USD) GB01605EX UNITED KINGDOM Unlisted C1 31/03/1988 12 Qualif n.a. Acc. Std na AR th GBP 1.87981 1,149,877 n.a. 1,089,723 60,154 1,897,287 790,458 713,386 393,443 347,388 3,047,164 1,154,388 190,048 964,340 648,533 515,443 133,090 33,461 1,244,243 113,540 517,510 613,192 3,047,164 986,334 653,044 n.a. n.a. 4,551,384 4,551,384 -3,211,083 1,340,301 -774,292 437,619 40,416 -22,934 n.a. 414,685 -95,682 319,003 -49,627 269,376 n.a. -1,128,823 -128,391 -63,349 0 397,767 1,685,621 566,009 -95,682 91,171 11,091 n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a.

  • Problems• 粗データセット(raw dataset)をそのままソフトウェア環境で解析することが難しい. ★ Byte Order Mark (BOM) コードの存在 ★ OS間での行末コードの相違 ★ 欠測値の存在 (NA記号が存在しない欠測値の存在) ★ レイアウトの不統一 ★ 金額に関するフォーマット(カンマ区切り) ★ 特殊記号の存在 (#など) ★ ファイルはある程度の規模があるので通常のエディタでは整形が難しい.

  • Solutions1.UNIX コマンドやインタプリター (grep,dos2unix, |, >, (g)sed など) を利用してファイルを整形

    2. データ解析環境Rを用いてデータファイルをRに読み込むことができる形式(CSV, RDSファイル)に変換

  • Preprocessing

    dataC.txt

    Unix Shell ScriptsdataC.rda

    nameC.rda

    firmfinC2018.csv

    firmfinC2018.frame.rds

  • Parallelization of Preprocessing of Osiris2018 (Consolidate Version)

    Data Set

  • ビッグデータの前処理に関する経験則

    •「前処理には, 分析・解析を行う全工程の50%~90%の時間を費やす」(e.g. Patil(2012))

  • GNU parallel https://www.gnu.org/software/parallel/• GNU parallel is a shell tool for executing jobs in parallel using one or

    more computers. A job can be a single command or a small script that has to be run for each of the lines in the input. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables. A job can also be a command that reads from a pipe. GNU parallel can then split the input and pipe it into commands in parallel

  • Makefileall: date > start.txt /bin/bash ./script.sh Rscript datadump.R "dataC.rda" "nameC.rda" "firmfinC2018.csv" "firmfinC2018.frame.rds" date > end.txt all-p: date > start-p.txt /bin/bash ./script-p.sh Rscript datadump.R "dataC.rda" "nameC.rda" "firmfinC2018.csv" "firmfinC2018.frame.rds" date > end-p.txt rda: date > start-rda.txt /bin/bash ./script.sh date > end-rda.txt rda-p: date > start-rda-p.txt /bin/bash ./script-p.sh date > end-rda-p.txt csv: Rscript datadump.R "dataC.rda" "nameC.rda" "firmfinC2018.csv" "firmfinC2018.frame.rds" clean-data: rm *.rda *.rda-e *.part clean-csv: rm firmfinC2018.csv

  • script.sh$ cat script.sh 
#!/bin/bash 
# 
#echo "Remove BOM codes" 
gsed -i -s -e '1s/^\xef\xbb\xbf//' dataC.txt 
#echo "dos2unix" 
dos2unix dataC.txt 
echo "separate data file" 
grep -E "th\sUSD\)" dataC.txt > dataC.part 
grep -v -E "th\sUSD\)" dataC.txt > nameC.part 
echo "replacement special character" 
sed -f sedscr dataC.part > dataC.rda 
sed -i -e s/^$'\t'//g dataC.rda 
sed -e s/#//g nameC.part > nameC.rda

  • script-p.sh$ cat script-p.sh 
#!/bin/bash 
#echo "Remove BOM codes" 
gsed -i -s -e '1s/^\xef\xbb\xbf//' dataC.txt 
echo "dos2unix" 
parallel --pipepart -k --block 100M -a dataC.txt "dos2unix" > tmp 
echo "separate data file" 
echo "separate data file" 
parallel --pipepart -k --block 100M -a tmp 'grep -E "th\sUSD\)"' > dataC.part 
parallel --pipepart -k --block 100M -a tmp 'grep -v -E "th\sUSD\)"' > nameC.part 
echo "replacement special character" 
parallel --pipepart -k --block 100M -a dataC.part "sed -f sedscr" > tmp 
parallel --pipepart -k --block 100M -a tmp "sed s/^$'\t'//g" > dataC.rda 
parallel --pipepart -k --block 100M -a nameC.part "sed s/#//g" > nameC.rda 
rm tmp

  • Parallelized Preprocessing

    dataC.txt

    Unix Shell ScriptsdataC.rda

    nameC.rda

    firmfinC2018.csv

    firmfinC2018.frame.rds

  • Apache Spark and R Packages

  • Apache Spark• Apache Spark is a fast and general-purpose cluster computing system. • It provides high-level APIs in Java, Scala, Python and R, and an

    optimized engine that supports general execution graphs. • It also supports a rich set of higher-level tools including Spark SQL for

    SQL and structured data processing, MLlib for machine learning, GraphX for graph processing, and Spark Streaming.

    Quotation: http://spark.apache.org/docs/latest/index.html

  • SparkR (R on Spark)• SparkR is an R package that provides a light-weight frontend to use

    Apache Spark from R. • In Spark 2.1.0, SparkR provides a distributed data frame

    implementation that supports operations like selection, filtering, aggregation etc. (similar to R data frames, dplyr) but on large datasets.

    • SparkR also supports distributed machine learning using MLlib. • Quotation: http://spark.apache.org/docs/latest/sparkr.html#overview

  • Connect to Spark from R by SparkR on RStudio

    > Sys.setenv(SPARK_HOME = "/usr/local/Cellar/apache-spark/2.4.1/libexec") > library(SparkR, lib.loc = c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"))) > sparkR.session(master = "local[*]", sparkConfig = list(spark.driver.memory =

    "2g"))

    SparkR

  • Data Wrangling and Transformation

  • Comparison of Data Manipulations by SparkR, dplyr, R

    Manipulations Spark Style dplyr Style R Style

    Selection of Columns select select df[,"colName"]

    Filtering of Rows filter filter df[condition,]

    Addition of Columns withColumn mutate df$colName

  • Data Wrangling of Financial Data by Spark Environments

  • Data Set: firmfinC2018.csv

  • Data File Information$ head -n 2 firmfinC2018.csv firm,year_USD,ID,country,SIC_code,SIC_name,exchange,cons,date,month,audit,practice,source,units,currncy,exchange_rate,assets_fix,assets_int,assets_tang,assets_other_fix,assets_cur,stock,debtors,assets_other_cur,cash,assets_total,shareholders,capital,shareholders_other,liabilities_non_cur,debt_long,liabilities_other_non_cur,provisions,liabilities_cur,loans,creditors,liabilities_other_cur,total_s_l,capital_working,assets_net_cur,enterprise_value,employees,operating_revenue,sales,costs_goods,profit_gross,expenses_other,EBIT,revenue_fin,PL_fin,PL_other,PL_before_tax,tax,PL_after_tax,PL_extr,net_income,costs_material,costs_employees,depr_amor,interest_paid,R_D,cash_flow,add_value,EBITDA,tax_income,tax_pay_income,tax_deferred,tax_credit,date_cur_market_cap,market_cap_cur,year_mp,market_price1,market_price2,market_price3,market_price4,market_price5,market_price6,market_price7,market_price8,market_price9,market_price10,market_price11,market_price12,market_cap,dividend,firmID,year COURTAULDS PLC,1985 (th USD),GB01605EX,UNITED KINGDOM,2899,Chemicals and chemical preparations not elsewhere specified manufacturing,Unlisted,C1,1986-03-31,12,Qualif NA,Acc. Std na,AR,th,GBP,1.48531,640317,NA,595164,45153,1429166,583281,492083,353801,313400,2069483,844547,146006,698541,387369,276862,110507,NA,837566,90307,508719,238541,2069483,566646,591599,NA,68000,3227134,3227134,2411104,816029,510353,229480,NA,-17081,NA,212399,39064,173336,-18715,154621,NA,778006,76196,17081,-0,230817,1064967,305677,39064,28369,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,COURTAULDS PLC GB01605EX,1985

  • SparkR on RStudio

  • Data Wrangling as SparkDataFrame and Transform SparkDataFrame to R data.frame:

    SparkR on R and RStudio

    RStudio

    firmfinC2018.csv

    SparkR read.df

    firmfin.sdf

    SparkDataFrameSpark

    filter,select, collect firmfin2015

    R data.frame

  • Preprocessing and Data Wrangling

    dataC.txt

    Unix Shell Scripts dataC.rda

    nameC.rda

    firmfinC2018.csv

    firmfinC2018.frame.rds

    SparkR read.df firmfin

    .sdf

    SparkDataFrame

    Spark filter,select,

    collectfirmfin2015

    R data.frame

  • Parallelized Preprocessing and Data Wrangling

    firmfinC2018.csv

    firmfinC2018.frame.rds

    SparkR read.df firmfin

    .sdf

    SparkDataFrame

    Spark filter,select,

    collectfirmfin2015

    R data.frame

    dataC.txt

    Unix Shell ScriptsdataC.rda

    nameC.rda

  • Statistical Modeling with Osiris2018 Data: Verification of Reproducibility

  • Modeling of Distribution of log(sales)

  • Skew-Normal Distribution and Related Families

    • Azzalini (1985) generalized the normal distribution to have non-zero skewness.

    • It is called the skew-normal distribution. • It has been used for modeling and analyzing skewed data. • Additionally, some related families of distributions included the skew-t

    distribution are also studied in Azzalini and Capitanio (2014).

  • Skew-Normal DistributionSkew-normal DistributionNotation of Distribution: If the distribution of the random variable (r.v.) X is the

    skew-normal, then we write as follows:

    X ∼ SN(ξ,ω2,α)

    where (ξ,ω2,α) are called direct parameters (DP).

    Probability Density Function:

    fSN(x | ξ,ω,α) :=2

    ωφ

    (x− ξω

    (αx− ξω

    )(4.1)

    where x ∈ R := (−∞,∞), ξ ∈ R, ω ∈ R+ := (0,∞), α ∈ R, and

    φ(x) :=1√2π

    exp

    (−x

    2

    2

    ); p.d.f. of Standard Normal Distribution,

    Φ(x) :=

    ∫ x

    −∞φ(z)dz; c.d.f. of Standard Normal Distribution.

    15 / 77

  • Fitting Skew-Normal Distribution to log(sales)Fitting Skew-normal Distribution to Log of Sales

    ! Maximum Likelihood Estimates:(ξ̂, ω̂, α̂) = (13.01, 3.29,−1.15)

    ! Statistical Model:

    fSN(log(sales) | ξ̂, ω̂, α̂) :=2

    ω̂φ

    (log(sales)− ξ̂

    ω̂

    (α̂log(sales)− ξ̂

    ω̂

    )

    ! Histogram with Statistical Model and Q-Q Plot:

    Figure: Histogram of log(sales) withStatistical Model fSN(log(sales) | ξ̂, ω̂, α̂) Figure: Q-Q Plot of log(sales)

    17 / 77

  • Skew-t DistributionSkew-t DistributionNotation of Distribution: If the distribution of X is the skew-t, then we write as

    follows:X ∼ ST(ξ,ω2,α, ν)

    where (ξ,ω2,α, ν) are called the direct parameters.

    Probability Density Function:

    fST(x | ξ,ω,α, ν) =2

    ωft

    (x− ξiω

    ∣∣∣∣ ν)Ft

    αx− ξω

    √√√√ν + 1

    (x−ξω

    )2+ ν

    ∣∣∣∣∣∣∣ν + 1

    (4.2)where x ∈ R := (−∞,∞), ξ ∈ R, ω ∈ R+ := (0,∞), α ∈ R, ν ∈ R+, and

    ft(x | ν) :=Γ(ν+12

    )

    Γ(ν2

    )√πν

    (1 +

    x2

    ν

    )− ν+12; p.d.f. of t distribution,

    Ft(x | ν) :=∫ x

    −∞ft(u | ν)du; c.d.f. of t distribution

    18 / 77

  • Fitting Skew-t Distribution to log(sales)Fitting Skew-t Distribution to Log of Sales! Maximum Likelihood Estimates:

    (ξ̂, ω̂, α̂, ν̂) = (12.57, 2.9,−0.83, 22.42)! Statistical Model:

    fST(log(sales) | ξ̂, ω̂, α̂, ν̂) =2

    ω̂ft

    (log(sales) − ξ̂

    ω̂| ν̂)

    Ft

    α̂

    log(sales) − ξ̂

    ω̂

    √√√√√√

    ν̂ + 1(

    log(sales)−ξ̂ω̂

    )2+ ν̂

    | ν̂ + 1

    ! Histogram with Statistical Model and Q-Q Plot:

    Figure: Histogram of log(sales) withStatistical ModelfST(log(sales) | ξ̂, ω̂, α̂, ν̂)

    Figure: Q-Q Plot of log(sales)20 / 77

  • Box-Cox Transformation of log(sales)and Maximum Log-likelihood

    Box-Cox

    Box and Cox (1964):

    X (λ) :=

    Xλ − 1λ

    , λ "= 0,log(X ), λ = 0

    (3)

    ! Box-Cox , (power normal transformation)! Box-Cox : Carroll and Ruppert (1988),

    Draper and Smith (1998), Fox and Weisberg (2019)

    ! :X (λ) ∼ N(µ,σ2) (; µ, σ2 ) (4)

    Box-Cox

    Box and Cox (1964):

    X (λ) :=

    Xλ − 1λ

    , λ "= 0,log(X ), λ = 0

    (3)

    ! Box-Cox , (power normal transformation)! Box-Cox : Carroll and Ruppert (1988),

    Draper and Smith (1998), Fox and Weisberg (2019)

    ! :X (λ) ∼ N(µ,σ2) (; µ, σ2 ) (4)

    ! λ; (transformation parameter)! (Maximum Likelihood: ML) ;

    (profile log-likelihood function) λ

    "profile(λ) := −n

    2log(2πσ̂2(λ))−

    n∑

    i=1

    (x (λ)i − µ̂(λ))2

    2σ̂2(λ)+ (λ− 1)

    n∑

    i=1

    log xi

    = c − n2log(σ̂2(λ)) + (λ− 1)

    n∑

    i=1

    log xi (5)

    ,

    µ̂(λ) :=1

    n

    n∑

    i=1

    x (λ)i (6)

    σ̂2(λ) :=1

    n

    n∑

    i=1

    (x (λ)i − µ̂(λ))2 (7)

  • Histogram and Normal Q-Q Plot for Box-Cox Transformation of log(sales)( ) Q-Q

    Figure: Box-Cox ( )Q-Q

  • Web Application for Box-Cox Transformation

  • Double-log Modeling for log(sales)

  • Double-log Model• Cobb-Daglas Type Model:

    • Log-linear Model:

    • Assumptions of Error Distributions:

    0 5 10 15 20

    0.00

    0.05

    0.10

    0.15

    observed variable

    probability density

    Empirical values and fitted distribution

    ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●�