From 8070dc963753142bb86c4ed698d91fd623ed28e7 Mon Sep 17 00:00:00 2001 From: ziejd2 Date: Thu, 28 Sep 2017 15:04:40 -0500 Subject: BNW using Octave instead of Matlab. This version of BNW should perform the same as the original version. The only difference is that it uses Octave instead of Matlab when running BayesNet Toolbox during parameter learning. I am calling this BNW_1.02. It can be accessed at: compbio.uthsc.edu/BNW_1.02 --- .../bnt-master/docs/ChangeLog.Sourceforge.txt | 4436 +++++++++ sourcecodes/bnt-master/docs/Eqns/lin_reg_eqn.gif | Bin 0 -> 747 bytes sourcecodes/bnt-master/docs/Figures/CPTgrass.gif | Bin 0 -> 1144 bytes .../bnt-master/docs/Figures/HMEforMatlab.jpg | Bin 0 -> 43717 bytes sourcecodes/bnt-master/docs/Figures/ar1.fig | 13 + sourcecodes/bnt-master/docs/Figures/ar1.gif | Bin 0 -> 651 bytes sourcecodes/bnt-master/docs/Figures/batnet.fig | 318 + sourcecodes/bnt-master/docs/Figures/batnet.gif | Bin 0 -> 223092 bytes .../bnt-master/docs/Figures/batnet_numbered.fig | 345 + sourcecodes/bnt-master/docs/Figures/bic.png | Bin 0 -> 2614 bytes sourcecodes/bnt-master/docs/Figures/cg1.fig | 60 + sourcecodes/bnt-master/docs/Figures/cg1.gif | Bin 0 -> 3155 bytes sourcecodes/bnt-master/docs/Figures/chmm5.T5.fig | 323 + sourcecodes/bnt-master/docs/Figures/chmm5.fig | 187 + sourcecodes/bnt-master/docs/Figures/chmm5.gif | Bin 0 -> 1725 bytes .../bnt-master/docs/Figures/chmm5.influence.fig | 200 + sourcecodes/bnt-master/docs/Figures/chmm5.jpg | Bin 0 -> 112167 bytes .../bnt-master/docs/Figures/chmm5.named.fig | 192 + .../bnt-master/docs/Figures/chmm5.small.fig | 181 + .../bnt-master/docs/Figures/chmm5_circle.fig | 162 + .../bnt-master/docs/Figures/chmm5_nobold.fig | 187 + sourcecodes/bnt-master/docs/Figures/fa.eps | 356 + sourcecodes/bnt-master/docs/Figures/fa.fig | 16 + sourcecodes/bnt-master/docs/Figures/fa.gif | Bin 0 -> 669 bytes sourcecodes/bnt-master/docs/Figures/fa_caption.fig | 13 + .../bnt-master/docs/Figures/fa_discrete.fig | 43 + .../bnt-master/docs/Figures/fa_discrete.gif | Bin 0 -> 1362 bytes .../bnt-master/docs/Figures/fa_discrete_single.fig | 18 + sourcecodes/bnt-master/docs/Figures/fa_regular.fig | 36 + sourcecodes/bnt-master/docs/Figures/fa_regular.gif | Bin 0 -> 2089 bytes sourcecodes/bnt-master/docs/Figures/fa_scalar.eps | 414 + sourcecodes/bnt-master/docs/Figures/fa_scalar.fig | 41 + sourcecodes/bnt-master/docs/Figures/fa_scalar.gif | Bin 0 -> 1374 bytes .../bnt-master/docs/Figures/fa_scalar_caption.fig | 38 + .../bnt-master/docs/Figures/factorial_hmm3.fig | 81 + sourcecodes/bnt-master/docs/Figures/filter.eps | 9861 ++++++++++++++++++++ sourcecodes/bnt-master/docs/Figures/filter.fig | 74 + sourcecodes/bnt-master/docs/Figures/filter.gif | Bin 0 -> 5185 bytes sourcecodes/bnt-master/docs/Figures/filter.tex | 51 + sourcecodes/bnt-master/docs/Figures/gaussplot.png | Bin 0 -> 1602 bytes sourcecodes/bnt-master/docs/Figures/hme.fig | 35 + sourcecodes/bnt-master/docs/Figures/hme.gif | Bin 0 -> 1566 bytes .../bnt-master/docs/Figures/hme_dec_boundary.gif | Bin 0 -> 99625 bytes .../bnt-master/docs/Figures/hme_dec_boundary.png | Bin 0 -> 13636 bytes sourcecodes/bnt-master/docs/Figures/hmm3.fig | 39 + sourcecodes/bnt-master/docs/Figures/hmm3.gif | Bin 0 -> 680 bytes sourcecodes/bnt-master/docs/Figures/hmm3letter.fig | 39 + sourcecodes/bnt-master/docs/Figures/hmm3letter.gif | Bin 0 -> 735 bytes sourcecodes/bnt-master/docs/Figures/hmm3letter.jpg | Bin 0 -> 3684 bytes sourcecodes/bnt-master/docs/Figures/hmm4.fig | 55 + sourcecodes/bnt-master/docs/Figures/hmm4.gif | Bin 0 -> 994 bytes .../bnt-master/docs/Figures/hmm4_params.fig | 81 + .../bnt-master/docs/Figures/hmm4_params.gif | Bin 0 -> 1579 bytes .../bnt-master/docs/Figures/hmm4_paramsX.fig | 81 + .../bnt-master/docs/Figures/hmm4_square.fig | 55 + sourcecodes/bnt-master/docs/Figures/hmm_ar.fig | 30 + sourcecodes/bnt-master/docs/Figures/hmm_ar.gif | Bin 0 -> 915 bytes .../bnt-master/docs/Figures/hmm_coupled.fig | 65 + .../bnt-master/docs/Figures/hmm_coupled.gif | Bin 0 -> 1573 bytes .../bnt-master/docs/Figures/hmm_factorial.fig | 50 + .../bnt-master/docs/Figures/hmm_factorial.gif | Bin 0 -> 1354 bytes sourcecodes/bnt-master/docs/Figures/hmm_gauss.fig | 27 + sourcecodes/bnt-master/docs/Figures/hmm_gauss.gif | Bin 0 -> 959 bytes sourcecodes/bnt-master/docs/Figures/hmm_io.fig | 44 + sourcecodes/bnt-master/docs/Figures/hmm_io.gif | Bin 0 -> 1497 bytes .../bnt-master/docs/Figures/hmm_mixgauss.fig | 52 + .../bnt-master/docs/Figures/hmm_mixgauss.gif | Bin 0 -> 1501 bytes sourcecodes/bnt-master/docs/Figures/hmm_zoo.fig | 162 + sourcecodes/bnt-master/docs/Figures/hmm_zoo.gif | Bin 0 -> 6013 bytes .../bnt-master/docs/Figures/hmm_zoo_names.fig | 169 + .../bnt-master/docs/Figures/hmm_zoo_small.fig | 104 + sourcecodes/bnt-master/docs/Figures/ifa.eps | 470 + sourcecodes/bnt-master/docs/Figures/ifa.fig | 59 + sourcecodes/bnt-master/docs/Figures/ifa.gif | Bin 0 -> 1918 bytes sourcecodes/bnt-master/docs/Figures/kf.fig | 27 + sourcecodes/bnt-master/docs/Figures/kf.gif | Bin 0 -> 927 bytes sourcecodes/bnt-master/docs/Figures/kf_input.fig | 40 + sourcecodes/bnt-master/docs/Figures/kf_input.gif | Bin 0 -> 1590 bytes sourcecodes/bnt-master/docs/Figures/kf_notime.fig | 26 + .../bnt-master/docs/Figures/kf_obs_track.fig | 43 + .../bnt-master/docs/Figures/kf_scalar_track.fig | 59 + sourcecodes/bnt-master/docs/Figures/kfhead.jpg | Bin 0 -> 53607 bytes .../bnt-master/docs/Figures/mathbymatlab.gif | Bin 0 -> 3737 bytes .../bnt-master/docs/Figures/mcmc_accept.jpg | Bin 0 -> 44464 bytes sourcecodes/bnt-master/docs/Figures/mcmc_post.jpg | Bin 0 -> 46888 bytes sourcecodes/bnt-master/docs/Figures/mfa.eps | 347 + sourcecodes/bnt-master/docs/Figures/mfa.fig | 24 + sourcecodes/bnt-master/docs/Figures/mfa.gif | Bin 0 -> 736 bytes sourcecodes/bnt-master/docs/Figures/mixexp.fig | 23 + sourcecodes/bnt-master/docs/Figures/mixexp.gif | Bin 0 -> 929 bytes .../bnt-master/docs/Figures/mixexp_after.gif | Bin 0 -> 260378 bytes .../bnt-master/docs/Figures/mixexp_before.gif | Bin 0 -> 256987 bytes .../bnt-master/docs/Figures/mixexp_data.gif | Bin 0 -> 252431 bytes .../bnt-master/docs/Figures/model_select.png | Bin 0 -> 1808 bytes sourcecodes/bnt-master/docs/Figures/qmr.fig | 50 + sourcecodes/bnt-master/docs/Figures/qmr.gif | Bin 0 -> 2562 bytes sourcecodes/bnt-master/docs/Figures/qmr.jpg | Bin 0 -> 48177 bytes sourcecodes/bnt-master/docs/Figures/qmr.rnd.jpg | Bin 0 -> 15703 bytes sourcecodes/bnt-master/docs/Figures/rainer_dbn.jpg | Bin 0 -> 118061 bytes .../bnt-master/docs/Figures/rainer_tied.fig | 88 + .../bnt-master/docs/Figures/rainer_tied.gif | Bin 0 -> 3158 bytes sourcecodes/bnt-master/docs/Figures/sar.fig | 37 + sourcecodes/bnt-master/docs/Figures/sar.gif | Bin 0 -> 1018 bytes sourcecodes/bnt-master/docs/Figures/skf.fig | 48 + sourcecodes/bnt-master/docs/Figures/skf.gif | Bin 0 -> 1620 bytes sourcecodes/bnt-master/docs/Figures/skf3.fig | 71 + .../bnt-master/docs/Figures/skf3_nobold.fig | 66 + .../bnt-master/docs/Figures/skf3_nosolid.fig | 66 + .../bnt-master/docs/Figures/skf3_polytree.fig | 60 + sourcecodes/bnt-master/docs/Figures/sprinkler.fig | 73 + sourcecodes/bnt-master/docs/Figures/sprinkler.gif | Bin 0 -> 3001 bytes sourcecodes/bnt-master/docs/Figures/sprinkler.jpg | Bin 0 -> 10547 bytes .../bnt-master/docs/Figures/sprinkler.noparams.fig | 31 + .../bnt-master/docs/Figures/sprinkler_bar.gif | Bin 0 -> 3313 bytes .../bnt-master/docs/Figures/sprinkler_bar.jpg | Bin 0 -> 34926 bytes .../bnt-master/docs/Figures/sprinkler_bar.png | Bin 0 -> 2217 bytes sourcecodes/bnt-master/docs/Figures/water3.cts.fig | 266 + sourcecodes/bnt-master/docs/Figures/water3.fig | 279 + sourcecodes/bnt-master/docs/Figures/water3.gif | Bin 0 -> 9658 bytes sourcecodes/bnt-master/docs/Figures/water3_75.gif | Bin 0 -> 6642 bytes .../bnt-master/docs/Figures/water3_circle.fig | 231 + .../bnt-master/docs/Figures/water3_named_nodes.fig | 279 + .../bnt-master/docs/Figures/water3_nolabels.fig | 243 + sourcecodes/bnt-master/docs/GR03~1.PDF | Bin 0 -> 311327 bytes .../bnt-master/docs/Talks/BNT_mathworks.ppt | Bin 0 -> 1189376 bytes sourcecodes/bnt-master/docs/Talks/gR03.ppt | Bin 0 -> 6582272 bytes .../bnt-master/docs/Talks/stair_BNT_mathworks.ppt | Bin 0 -> 2010624 bytes sourcecodes/bnt-master/docs/adj2pajek2.m | 86 + sourcecodes/bnt-master/docs/bnsoftOld.html | 1078 +++ sourcecodes/bnt-master/docs/bnt.html | 359 + sourcecodes/bnt-master/docs/bnt_download.html | 16 + sourcecodes/bnt-master/docs/bnt_pre_sf.html | 350 + sourcecodes/bnt-master/docs/cellarray.html | 59 + sourcecodes/bnt-master/docs/changelog.html | 1617 ++++ sourcecodes/bnt-master/docs/dbn_hmm_demo.m | 37 + sourcecodes/bnt-master/docs/gr03.pdf | Bin 0 -> 311327 bytes sourcecodes/bnt-master/docs/graph_to_dot.m | 86 + sourcecodes/bnt-master/docs/graphviz.html | 66 + sourcecodes/bnt-master/docs/install.html | 32 + sourcecodes/bnt-master/docs/join.gif | Bin 0 -> 1443 bytes sourcecodes/bnt-master/docs/license.gpl | 450 + sourcecodes/bnt-master/docs/majorFeatures.html | 113 + sourcecodes/bnt-master/docs/mathbymatlab.gif | Bin 0 -> 3737 bytes sourcecodes/bnt-master/docs/matlab_comparison.html | 62 + sourcecodes/bnt-master/docs/numDAGsEqn.png | Bin 0 -> 2375 bytes sourcecodes/bnt-master/docs/numDAGsEqn2.png | Bin 0 -> 2139 bytes sourcecodes/bnt-master/docs/param_tieing.html | 47 + sourcecodes/bnt-master/docs/supportedModels.html | 32 + sourcecodes/bnt-master/docs/usage.html | 3072 ++++++ sourcecodes/bnt-master/docs/usage_02nov13.html | 3215 +++++++ sourcecodes/bnt-master/docs/usage_cropped.html | 3232 +++++++ sourcecodes/bnt-master/docs/usage_dbn.html | 719 ++ sourcecodes/bnt-master/docs/usage_dbn_02nov13.html | 715 ++ sourcecodes/bnt-master/docs/usage_sf.html | 3242 +++++++ sourcecodes/bnt-master/docs/whyNotSourceforge.html | 17 + 155 files changed, 40442 insertions(+) create mode 100644 sourcecodes/bnt-master/docs/ChangeLog.Sourceforge.txt create mode 100644 sourcecodes/bnt-master/docs/Eqns/lin_reg_eqn.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/CPTgrass.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/HMEforMatlab.jpg create mode 100644 sourcecodes/bnt-master/docs/Figures/ar1.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/ar1.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/batnet.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/batnet.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/batnet_numbered.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/bic.png create mode 100644 sourcecodes/bnt-master/docs/Figures/cg1.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/cg1.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/chmm5.T5.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/chmm5.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/chmm5.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/chmm5.influence.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/chmm5.jpg create mode 100644 sourcecodes/bnt-master/docs/Figures/chmm5.named.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/chmm5.small.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/chmm5_circle.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/chmm5_nobold.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/fa.eps create mode 100644 sourcecodes/bnt-master/docs/Figures/fa.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/fa.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/fa_caption.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/fa_discrete.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/fa_discrete.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/fa_discrete_single.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/fa_regular.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/fa_regular.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/fa_scalar.eps create mode 100644 sourcecodes/bnt-master/docs/Figures/fa_scalar.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/fa_scalar.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/fa_scalar_caption.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/factorial_hmm3.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/filter.eps create mode 100644 sourcecodes/bnt-master/docs/Figures/filter.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/filter.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/filter.tex create mode 100644 sourcecodes/bnt-master/docs/Figures/gaussplot.png create mode 100644 sourcecodes/bnt-master/docs/Figures/hme.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hme.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.png create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm3.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm3.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm3letter.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm3letter.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm3letter.jpg create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm4.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm4.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm4_params.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm4_params.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm4_paramsX.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm4_square.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_ar.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_ar.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_coupled.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_coupled.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_factorial.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_factorial.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_gauss.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_gauss.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_io.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_io.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_zoo.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_zoo.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_zoo_names.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/hmm_zoo_small.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/ifa.eps create mode 100644 sourcecodes/bnt-master/docs/Figures/ifa.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/ifa.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/kf.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/kf.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/kf_input.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/kf_input.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/kf_notime.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/kf_obs_track.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/kf_scalar_track.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/kfhead.jpg create mode 100644 sourcecodes/bnt-master/docs/Figures/mathbymatlab.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/mcmc_accept.jpg create mode 100644 sourcecodes/bnt-master/docs/Figures/mcmc_post.jpg create mode 100644 sourcecodes/bnt-master/docs/Figures/mfa.eps create mode 100644 sourcecodes/bnt-master/docs/Figures/mfa.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/mfa.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/mixexp.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/mixexp.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/mixexp_after.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/mixexp_before.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/mixexp_data.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/model_select.png create mode 100644 sourcecodes/bnt-master/docs/Figures/qmr.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/qmr.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/qmr.jpg create mode 100644 sourcecodes/bnt-master/docs/Figures/qmr.rnd.jpg create mode 100644 sourcecodes/bnt-master/docs/Figures/rainer_dbn.jpg create mode 100644 sourcecodes/bnt-master/docs/Figures/rainer_tied.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/rainer_tied.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/sar.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/sar.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/skf.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/skf.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/skf3.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/skf3_nobold.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/skf3_nosolid.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/skf3_polytree.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/sprinkler.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/sprinkler.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/sprinkler.jpg create mode 100644 sourcecodes/bnt-master/docs/Figures/sprinkler.noparams.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/sprinkler_bar.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/sprinkler_bar.jpg create mode 100644 sourcecodes/bnt-master/docs/Figures/sprinkler_bar.png create mode 100644 sourcecodes/bnt-master/docs/Figures/water3.cts.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/water3.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/water3.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/water3_75.gif create mode 100644 sourcecodes/bnt-master/docs/Figures/water3_circle.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/water3_named_nodes.fig create mode 100644 sourcecodes/bnt-master/docs/Figures/water3_nolabels.fig create mode 100644 sourcecodes/bnt-master/docs/GR03~1.PDF create mode 100644 sourcecodes/bnt-master/docs/Talks/BNT_mathworks.ppt create mode 100644 sourcecodes/bnt-master/docs/Talks/gR03.ppt create mode 100644 sourcecodes/bnt-master/docs/Talks/stair_BNT_mathworks.ppt create mode 100644 sourcecodes/bnt-master/docs/adj2pajek2.m create mode 100644 sourcecodes/bnt-master/docs/bnsoftOld.html create mode 100644 sourcecodes/bnt-master/docs/bnt.html create mode 100644 sourcecodes/bnt-master/docs/bnt_download.html create mode 100644 sourcecodes/bnt-master/docs/bnt_pre_sf.html create mode 100644 sourcecodes/bnt-master/docs/cellarray.html create mode 100644 sourcecodes/bnt-master/docs/changelog.html create mode 100644 sourcecodes/bnt-master/docs/dbn_hmm_demo.m create mode 100644 sourcecodes/bnt-master/docs/gr03.pdf create mode 100644 sourcecodes/bnt-master/docs/graph_to_dot.m create mode 100644 sourcecodes/bnt-master/docs/graphviz.html create mode 100644 sourcecodes/bnt-master/docs/install.html create mode 100644 sourcecodes/bnt-master/docs/join.gif create mode 100644 sourcecodes/bnt-master/docs/license.gpl create mode 100644 sourcecodes/bnt-master/docs/majorFeatures.html create mode 100644 sourcecodes/bnt-master/docs/mathbymatlab.gif create mode 100644 sourcecodes/bnt-master/docs/matlab_comparison.html create mode 100644 sourcecodes/bnt-master/docs/numDAGsEqn.png create mode 100644 sourcecodes/bnt-master/docs/numDAGsEqn2.png create mode 100644 sourcecodes/bnt-master/docs/param_tieing.html create mode 100644 sourcecodes/bnt-master/docs/supportedModels.html create mode 100644 sourcecodes/bnt-master/docs/usage.html create mode 100644 sourcecodes/bnt-master/docs/usage_02nov13.html create mode 100644 sourcecodes/bnt-master/docs/usage_cropped.html create mode 100644 sourcecodes/bnt-master/docs/usage_dbn.html create mode 100644 sourcecodes/bnt-master/docs/usage_dbn_02nov13.html create mode 100644 sourcecodes/bnt-master/docs/usage_sf.html create mode 100644 sourcecodes/bnt-master/docs/whyNotSourceforge.html (limited to 'sourcecodes/bnt-master/docs') diff --git a/sourcecodes/bnt-master/docs/ChangeLog.Sourceforge.txt b/sourcecodes/bnt-master/docs/ChangeLog.Sourceforge.txt new file mode 100644 index 00000000..17ec3df1 --- /dev/null +++ b/sourcecodes/bnt-master/docs/ChangeLog.Sourceforge.txt @@ -0,0 +1,4436 @@ + + +2007-02-11 17:12 nsaunier + + * BNT/learning/learn_struct_pdag_pc.m: Bug submitted by Imme Ebert-Uphoff (ebert@tree.com) (see Thu Feb 8, 2007 email on the BNT mailing list). + +2005-11-26 12:12 yozhik + + * BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: merged + fwdback_twoslice.m to release branch + +2005-11-25 17:24 nsaunier + + * BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: adding + old missing fwdback_twoslice.m + +2005-11-25 17:24 yozhik + + * BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: file + fwdback_twoslice.m was added on branch release-1_0 on 2005-11-26 + 20:12:05 +0000 + +2005-09-25 15:54 yozhik + + * BNT/add_BNT_to_path.m: fix paths + +2005-09-25 15:30 yozhik + + * BNT/add_BNT_to_path.m: Restored directories to path. + +2005-09-25 15:29 yozhik + + * HMM/fwdback_twoslice.m: added missing fwdback_twoslice + +2005-09-17 11:14 yozhik + + * ChangeLog, BNT/add_BNT_to_path.m, BNT/test_BNT.m, + BNT/examples/static/cmp_inference_static.m, + BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Merged + bug fixes from HEAD. + +2005-09-17 11:11 yozhik + + * ChangeLog: added change log + +2005-09-17 11:11 yozhik + + * ChangeLog: file ChangeLog was added on branch release-1_0 on + 2005-09-17 18:14:47 +0000 + +2005-09-17 10:00 yozhik + + * BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Temporary + rollback to fix error, per Kevin. + +2005-09-17 09:59 yozhik + + * BNT/examples/static/cmp_inference_static.m: Commented out + erroneous line, per Kevin. + +2005-09-17 09:58 yozhik + + * BNT/add_BNT_to_path.m: Changed to require BNT_HOME to be + predefined. + +2005-09-17 09:56 yozhik + + * BNT/test_BNT.m: Commented out problematic tests. + +2005-09-17 09:38 yozhik + + * BNT/test_BNT.m: renable tests + +2005-09-12 22:18 yozhik + + * KPMtools/pca_kpm.m: Initial import of code base from Kevin + Murphy. + +2005-09-12 22:18 yozhik + + * KPMtools/pca_kpm.m: Initial revision + +2005-08-29 10:44 yozhik + + * graph/: README.txt, Old/best_first_elim_order.m, + Old/dag_to_jtree.m, Old/dfs.m, Old/dsep_test.m, + Old/mk_2D_lattice_slow.m, acyclic.m, assignEdgeNums.m, + best_first_elim_order.m, check_jtree_property.m, + check_triangulated.m, children.m, cliques_to_jtree.m, + cliques_to_strong_jtree.m, connected_graph.m, + dag_to_essential_graph.m, dfs.m, dfs_test.m, dijkstra.m, + family.m, graph_separated.m, graph_to_jtree.m, + min_subtree_con_nodes.m, minimum_spanning_tree.m, minspan.m, + mk_2D_lattice.m, mk_2D_lattice_slow.m, mk_adj_mat.m, + mk_adjmat_chain.m, mk_all_dags.m, mk_nbrs_of_dag.m, + mk_nbrs_of_digraph.m, mk_nbrs_of_digraph_broken.m, + mk_nbrs_of_digraph_not_vectorized.m, mk_rnd_dag.m, + mk_rnd_dag_given_edge_prob.m, mk_rooted_tree.m, mk_undirected.m, + moralize.m, neighbors.m, parents.m, pred2path.m, + reachability_graph.m, scc.m, strong_elim_order.m, test.m, + test_strong_root.m, topological_sort.m, trees.txt, triangulate.c, + triangulate.m, triangulate_2Dlattice_demo.m, triangulate_test.m: + Initial import of code base from Kevin Murphy. + +2005-08-29 10:44 yozhik + + * graph/: README.txt, Old/best_first_elim_order.m, + Old/dag_to_jtree.m, Old/dfs.m, Old/dsep_test.m, + Old/mk_2D_lattice_slow.m, acyclic.m, assignEdgeNums.m, + best_first_elim_order.m, check_jtree_property.m, + check_triangulated.m, children.m, cliques_to_jtree.m, + cliques_to_strong_jtree.m, connected_graph.m, + dag_to_essential_graph.m, dfs.m, dfs_test.m, dijkstra.m, + family.m, graph_separated.m, graph_to_jtree.m, + min_subtree_con_nodes.m, minimum_spanning_tree.m, minspan.m, + mk_2D_lattice.m, mk_2D_lattice_slow.m, mk_adj_mat.m, + mk_adjmat_chain.m, mk_all_dags.m, mk_nbrs_of_dag.m, + mk_nbrs_of_digraph.m, mk_nbrs_of_digraph_broken.m, + mk_nbrs_of_digraph_not_vectorized.m, mk_rnd_dag.m, + mk_rnd_dag_given_edge_prob.m, mk_rooted_tree.m, mk_undirected.m, + moralize.m, neighbors.m, parents.m, pred2path.m, + reachability_graph.m, scc.m, strong_elim_order.m, test.m, + test_strong_root.m, topological_sort.m, trees.txt, triangulate.c, + triangulate.m, triangulate_2Dlattice_demo.m, triangulate_test.m: + Initial revision + +2005-08-26 18:08 yozhik + + * KPMtools/fullfileKPM.m: Initial import of code base from Kevin + Murphy. + +2005-08-26 18:08 yozhik + + * KPMtools/fullfileKPM.m: Initial revision + +2005-08-21 13:00 yozhik + + * + BNT/inference/static/@pearl_inf_engine/private/parallel_protocol.m: + Initial import of code base from Kevin Murphy. + +2005-08-21 13:00 yozhik + + * + BNT/inference/static/@pearl_inf_engine/private/parallel_protocol.m: + Initial revision + +2005-07-11 12:07 yozhik + + * KPMtools/plotcov2New.m: Initial import of code base from Kevin + Murphy. + +2005-07-11 12:07 yozhik + + * KPMtools/plotcov2New.m: Initial revision + +2005-07-06 12:32 yozhik + + * KPMtools/montageKPM2.m: Initial import of code base from Kevin + Murphy. + +2005-07-06 12:32 yozhik + + * KPMtools/montageKPM2.m: Initial revision + +2005-06-27 18:35 yozhik + + * KPMtools/montageKPM3.m: Initial import of code base from Kevin + Murphy. + +2005-06-27 18:35 yozhik + + * KPMtools/montageKPM3.m: Initial revision + +2005-06-27 18:30 yozhik + + * KPMtools/cell2matPad.m: Initial import of code base from Kevin + Murphy. + +2005-06-27 18:30 yozhik + + * KPMtools/cell2matPad.m: Initial revision + +2005-06-15 14:13 yozhik + + * BNT/CPDs/@gaussian_CPD/gaussian_CPD.m: Initial import of code + base from Kevin Murphy. + +2005-06-15 14:13 yozhik + + * BNT/CPDs/@gaussian_CPD/gaussian_CPD.m: Initial revision + +2005-06-08 18:56 yozhik + + * Kalman/testKalman.m: Initial import of code base from Kevin + Murphy. + +2005-06-08 18:56 yozhik + + * Kalman/testKalman.m: Initial revision + +2005-06-08 18:25 yozhik + + * HMM/: testHMM.m, fixed_lag_smoother_demo.m: Initial import of + code base from Kevin Murphy. + +2005-06-08 18:25 yozhik + + * HMM/: testHMM.m, fixed_lag_smoother_demo.m: Initial revision + +2005-06-08 18:22 yozhik + + * HMM/: README.txt, dhmm_em.m: Initial import of code base from + Kevin Murphy. + +2005-06-08 18:22 yozhik + + * HMM/: README.txt, dhmm_em.m: Initial revision + +2005-06-08 18:17 yozhik + + * HMM/fwdback.m: Initial import of code base from Kevin Murphy. + +2005-06-08 18:17 yozhik + + * HMM/fwdback.m: Initial revision + +2005-06-05 11:46 yozhik + + * KPMtools/: rectintLoopC.c, rectintLoopC.dll: Initial import of + code base from Kevin Murphy. + +2005-06-05 11:46 yozhik + + * KPMtools/: rectintLoopC.c, rectintLoopC.dll: Initial revision + +2005-06-01 12:39 yozhik + + * KPMtools/montageKPM.m: Initial import of code base from Kevin + Murphy. + +2005-06-01 12:39 yozhik + + * KPMtools/montageKPM.m: Initial revision + +2005-05-31 21:49 yozhik + + * KPMtools/initFigures.m: Initial import of code base from Kevin + Murphy. + +2005-05-31 21:49 yozhik + + * KPMtools/initFigures.m: Initial revision + +2005-05-31 11:19 yozhik + + * KPMstats/unidrndKPM.m: Initial import of code base from Kevin + Murphy. + +2005-05-31 11:19 yozhik + + * KPMstats/unidrndKPM.m: Initial revision + +2005-05-30 15:08 yozhik + + * KPMtools/filepartsLast.m: Initial import of code base from Kevin + Murphy. + +2005-05-30 15:08 yozhik + + * KPMtools/filepartsLast.m: Initial revision + +2005-05-29 23:01 yozhik + + * KPMtools/plotBox.m: Initial import of code base from Kevin + Murphy. + +2005-05-29 23:01 yozhik + + * KPMtools/plotBox.m: Initial revision + +2005-05-25 18:31 yozhik + + * KPMtools/plotColors.m: Initial import of code base from Kevin + Murphy. + +2005-05-25 18:31 yozhik + + * KPMtools/plotColors.m: Initial revision + +2005-05-25 12:11 yozhik + + * KPMtools/genpathKPM.m: Initial import of code base from Kevin + Murphy. + +2005-05-25 12:11 yozhik + + * KPMtools/genpathKPM.m: Initial revision + +2005-05-23 17:03 yozhik + + * netlab3.3/demhmc1.m: Initial import of code base from Kevin + Murphy. + +2005-05-23 17:03 yozhik + + * netlab3.3/demhmc1.m: Initial revision + +2005-05-23 16:44 yozhik + + * netlab3.3/gmminit.m: Initial import of code base from Kevin + Murphy. + +2005-05-23 16:44 yozhik + + * netlab3.3/gmminit.m: Initial revision + +2005-05-23 16:07 yozhik + + * netlab3.3/metrop.m: Initial import of code base from Kevin + Murphy. + +2005-05-23 16:07 yozhik + + * netlab3.3/metrop.m: Initial revision + +2005-05-22 23:23 yozhik + + * netlab3.3/demmet1.m: Initial import of code base from Kevin + Murphy. + +2005-05-22 23:23 yozhik + + * netlab3.3/demmet1.m: Initial revision + +2005-05-22 16:32 yozhik + + * KPMstats/: dirichletrnd.m, dirichletpdf.m, test_dir.m, + multirnd.m, multipdf.m: Initial import of code base from Kevin + Murphy. + +2005-05-22 16:32 yozhik + + * KPMstats/: dirichletrnd.m, dirichletpdf.m, test_dir.m, + multirnd.m, multipdf.m: Initial revision + +2005-05-13 13:52 yozhik + + * KPMtools/: asort.m, dirKPM.m: Initial import of code base from + Kevin Murphy. + +2005-05-13 13:52 yozhik + + * KPMtools/: asort.m, dirKPM.m: Initial revision + +2005-05-09 18:32 yozhik + + * netlab3.3/dem2ddat.m: Initial import of code base from Kevin + Murphy. + +2005-05-09 18:32 yozhik + + * netlab3.3/dem2ddat.m: Initial revision + +2005-05-09 15:20 yozhik + + * KPMtools/: mkdirKPM.m, optimalMatching.m, optimalMatchingTest.m, + subsets1.m: Initial import of code base from Kevin Murphy. + +2005-05-09 15:20 yozhik + + * KPMtools/: mkdirKPM.m, optimalMatching.m, optimalMatchingTest.m, + subsets1.m: Initial revision + +2005-05-09 09:47 yozhik + + * KPMtools/bipartiteMatchingDemo.m: Initial import of code base + from Kevin Murphy. + +2005-05-09 09:47 yozhik + + * KPMtools/bipartiteMatchingDemo.m: Initial revision + +2005-05-08 22:25 yozhik + + * KPMtools/bipartiteMatchingIntProg.m: Initial import of code base + from Kevin Murphy. + +2005-05-08 22:25 yozhik + + * KPMtools/bipartiteMatchingIntProg.m: Initial revision + +2005-05-08 21:45 yozhik + + * KPMtools/bipartiteMatchingDemoPlot.m: Initial import of code base + from Kevin Murphy. + +2005-05-08 21:45 yozhik + + * KPMtools/bipartiteMatchingDemoPlot.m: Initial revision + +2005-05-08 19:55 yozhik + + * KPMtools/subsetsFixedSize.m: Initial import of code base from + Kevin Murphy. + +2005-05-08 19:55 yozhik + + * KPMtools/subsetsFixedSize.m: Initial revision + +2005-05-08 15:48 yozhik + + * KPMtools/centeringMatrix.m: Initial import of code base from + Kevin Murphy. + +2005-05-08 15:48 yozhik + + * KPMtools/centeringMatrix.m: Initial revision + +2005-05-08 10:51 yozhik + + * netlab3.3/demgmm1.m: Initial import of code base from Kevin + Murphy. + +2005-05-08 10:51 yozhik + + * netlab3.3/demgmm1.m: Initial revision + +2005-05-06 18:09 yozhik + + * BNT/add_BNT_to_path.m: Initial import of code base from Kevin + Murphy. + +2005-05-06 18:09 yozhik + + * BNT/add_BNT_to_path.m: Initial revision + +2005-05-03 21:35 yozhik + + * KPMstats/standardize.m: Initial import of code base from Kevin + Murphy. + +2005-05-03 21:35 yozhik + + * KPMstats/standardize.m: Initial revision + +2005-05-03 13:18 yozhik + + * KPMstats/histCmpChi2.m: Initial import of code base from Kevin + Murphy. + +2005-05-03 13:18 yozhik + + * KPMstats/histCmpChi2.m: Initial revision + +2005-05-03 12:01 yozhik + + * KPMtools/strsplit.m: Initial import of code base from Kevin + Murphy. + +2005-05-03 12:01 yozhik + + * KPMtools/strsplit.m: Initial revision + +2005-05-02 13:19 yozhik + + * KPMtools/hsvKPM.m: Initial import of code base from Kevin Murphy. + +2005-05-02 13:19 yozhik + + * KPMtools/hsvKPM.m: Initial revision + +2005-04-27 11:34 yozhik + + * BNT/potentials/@dpot/: subsasgn.m, subsref.m: Initial import of + code base from Kevin Murphy. + +2005-04-27 11:34 yozhik + + * BNT/potentials/@dpot/: subsasgn.m, subsref.m: Initial revision + +2005-04-27 10:58 yozhik + + * KPMtools/mahal2conf.m, nethelp3.3/conffig.htm, + nethelp3.3/confmat.htm, nethelp3.3/conjgrad.htm, + nethelp3.3/consist.htm, nethelp3.3/convertoldnet.htm, + nethelp3.3/datread.htm, nethelp3.3/datwrite.htm, + nethelp3.3/dem2ddat.htm, nethelp3.3/demard.htm, + nethelp3.3/demev1.htm, nethelp3.3/demev2.htm, + nethelp3.3/demev3.htm, nethelp3.3/demgauss.htm, + nethelp3.3/demglm1.htm, nethelp3.3/demglm2.htm, + nethelp3.3/demgmm1.htm, nethelp3.3/demgmm2.htm, + nethelp3.3/demgmm3.htm, nethelp3.3/demgmm4.htm, + nethelp3.3/demgmm5.htm, nethelp3.3/demgp.htm, + nethelp3.3/demgpard.htm, nethelp3.3/demgpot.htm, + nethelp3.3/demgtm1.htm, nethelp3.3/demgtm2.htm, + nethelp3.3/demhint.htm, nethelp3.3/demhmc1.htm, + nethelp3.3/demhmc2.htm, nethelp3.3/demhmc3.htm, + nethelp3.3/demkmn1.htm, nethelp3.3/demknn1.htm, + nethelp3.3/demmdn1.htm, nethelp3.3/demmet1.htm, + nethelp3.3/demmlp1.htm, nethelp3.3/demmlp2.htm, + nethelp3.3/demnlab.htm, nethelp3.3/demns1.htm, + nethelp3.3/demolgd1.htm, nethelp3.3/demopt1.htm, + nethelp3.3/dempot.htm, nethelp3.3/demprgp.htm, + nethelp3.3/demprior.htm, nethelp3.3/demrbf1.htm, + nethelp3.3/demsom1.htm, nethelp3.3/demtrain.htm, + nethelp3.3/dist2.htm, nethelp3.3/eigdec.htm, + nethelp3.3/errbayes.htm, nethelp3.3/evidence.htm, + nethelp3.3/fevbayes.htm, nethelp3.3/gauss.htm, + nethelp3.3/gbayes.htm, nethelp3.3/glm.htm, + nethelp3.3/glmderiv.htm, nethelp3.3/glmerr.htm, + nethelp3.3/glmevfwd.htm, nethelp3.3/glmfwd.htm, + nethelp3.3/glmgrad.htm, nethelp3.3/glmhess.htm, + nethelp3.3/glminit.htm, nethelp3.3/glmpak.htm, + nethelp3.3/glmtrain.htm, nethelp3.3/glmunpak.htm, + nethelp3.3/gmm.htm, nethelp3.3/gmmactiv.htm, + nethelp3.3/gmmem.htm, nethelp3.3/gmminit.htm, + nethelp3.3/gmmpak.htm, nethelp3.3/gmmpost.htm, + nethelp3.3/gmmprob.htm, nethelp3.3/gmmsamp.htm, + nethelp3.3/gmmunpak.htm, nethelp3.3/gp.htm, + nethelp3.3/gpcovar.htm, nethelp3.3/gpcovarf.htm, + nethelp3.3/gpcovarp.htm, nethelp3.3/gperr.htm, + nethelp3.3/gpfwd.htm, nethelp3.3/gpgrad.htm, + nethelp3.3/gpinit.htm, nethelp3.3/gppak.htm, + nethelp3.3/gpunpak.htm, nethelp3.3/gradchek.htm, + nethelp3.3/graddesc.htm, nethelp3.3/gsamp.htm, + nethelp3.3/gtm.htm, nethelp3.3/gtmem.htm, nethelp3.3/gtmfwd.htm, + nethelp3.3/gtminit.htm, nethelp3.3/gtmlmean.htm, + nethelp3.3/gtmlmode.htm, nethelp3.3/gtmmag.htm, + nethelp3.3/gtmpost.htm, nethelp3.3/gtmprob.htm, + nethelp3.3/hbayes.htm, nethelp3.3/hesschek.htm, + nethelp3.3/hintmat.htm, nethelp3.3/hinton.htm, + nethelp3.3/histp.htm, nethelp3.3/hmc.htm, nethelp3.3/index.htm, + nethelp3.3/kmeans.htm, nethelp3.3/knn.htm, nethelp3.3/knnfwd.htm, + nethelp3.3/linef.htm, nethelp3.3/linemin.htm, + nethelp3.3/maxitmess.htm, nethelp3.3/mdn.htm, + nethelp3.3/mdn2gmm.htm, nethelp3.3/mdndist2.htm, + nethelp3.3/mdnerr.htm, nethelp3.3/mdnfwd.htm, + nethelp3.3/mdngrad.htm, nethelp3.3/mdninit.htm, + nethelp3.3/mdnpak.htm, nethelp3.3/mdnpost.htm, + nethelp3.3/mdnprob.htm, nethelp3.3/mdnunpak.htm, + nethelp3.3/metrop.htm, nethelp3.3/minbrack.htm, + nethelp3.3/mlp.htm, nethelp3.3/mlpbkp.htm, + nethelp3.3/mlpderiv.htm, nethelp3.3/mlperr.htm, + nethelp3.3/mlpevfwd.htm, nethelp3.3/mlpfwd.htm, + nethelp3.3/mlpgrad.htm, nethelp3.3/mlphdotv.htm, + nethelp3.3/mlphess.htm, nethelp3.3/mlphint.htm, + nethelp3.3/mlpinit.htm, nethelp3.3/mlppak.htm, + nethelp3.3/mlpprior.htm, nethelp3.3/mlptrain.htm, + nethelp3.3/mlpunpak.htm, nethelp3.3/netderiv.htm, + nethelp3.3/neterr.htm, nethelp3.3/netevfwd.htm, + nethelp3.3/netgrad.htm, nethelp3.3/nethelp3.3.zip, + nethelp3.3/nethess.htm, nethelp3.3/netinit.htm, + nethelp3.3/netopt.htm, nethelp3.3/netpak.htm, + nethelp3.3/netunpak.htm, nethelp3.3/olgd.htm, nethelp3.3/pca.htm, + nethelp3.3/plotmat.htm, nethelp3.3/ppca.htm, + nethelp3.3/quasinew.htm, nethelp3.3/rbf.htm, + nethelp3.3/rbfbkp.htm, nethelp3.3/rbfderiv.htm, + nethelp3.3/rbferr.htm, nethelp3.3/rbfevfwd.htm, + nethelp3.3/rbffwd.htm, nethelp3.3/rbfgrad.htm, + nethelp3.3/rbfhess.htm, nethelp3.3/rbfjacob.htm, + nethelp3.3/rbfpak.htm, nethelp3.3/rbfprior.htm, + nethelp3.3/rbfsetbf.htm, nethelp3.3/rbfsetfw.htm, + nethelp3.3/rbftrain.htm, nethelp3.3/rbfunpak.htm, + nethelp3.3/rosegrad.htm, nethelp3.3/rosen.htm, + nethelp3.3/scg.htm, nethelp3.3/som.htm, nethelp3.3/somfwd.htm, + nethelp3.3/sompak.htm, nethelp3.3/somtrain.htm, + nethelp3.3/somunpak.htm, netlab3.3/Contents.m, netlab3.3/LICENSE, + netlab3.3/conffig.m, netlab3.3/confmat.m, netlab3.3/conjgrad.m, + netlab3.3/consist.m, netlab3.3/convertoldnet.m, + netlab3.3/datread.m, netlab3.3/datwrite.m, netlab3.3/demard.m, + netlab3.3/demev1.m, netlab3.3/demev2.m, netlab3.3/demev3.m, + netlab3.3/demgauss.m, netlab3.3/demglm1.m, netlab3.3/demglm2.m, + netlab3.3/demgmm2.m, netlab3.3/demgmm3.m, netlab3.3/demgmm4.m, + netlab3.3/demgmm5.m, netlab3.3/demgp.m, netlab3.3/demgpard.m, + netlab3.3/demgpot.m, netlab3.3/demgtm1.m, netlab3.3/demgtm2.m, + netlab3.3/demhint.m, netlab3.3/demhmc2.m, netlab3.3/demhmc3.m, + netlab3.3/demkmn1.m, netlab3.3/demknn1.m, netlab3.3/demmdn1.m, + netlab3.3/demmlp1.m, netlab3.3/demmlp2.m, netlab3.3/demnlab.m, + netlab3.3/demns1.m, netlab3.3/demolgd1.m, netlab3.3/demopt1.m, + netlab3.3/dempot.m, netlab3.3/demprgp.m, netlab3.3/demprior.m, + netlab3.3/demrbf1.m, netlab3.3/demsom1.m, netlab3.3/demtrain.m, + netlab3.3/dist2.m, netlab3.3/eigdec.m, netlab3.3/errbayes.m, + netlab3.3/evidence.m, netlab3.3/fevbayes.m, netlab3.3/gauss.m, + netlab3.3/gbayes.m, netlab3.3/glm.m, netlab3.3/glmderiv.m, + netlab3.3/glmerr.m, netlab3.3/glmevfwd.m, netlab3.3/glmfwd.m, + netlab3.3/glmgrad.m, netlab3.3/glmhess.m, netlab3.3/glminit.m, + netlab3.3/glmpak.m, netlab3.3/glmtrain.m, netlab3.3/glmunpak.m, + netlab3.3/gmm.m, netlab3.3/gmmactiv.m, netlab3.3/gmmem.m, + netlab3.3/gmmpak.m, netlab3.3/gmmpost.m, netlab3.3/gmmprob.m, + netlab3.3/gmmsamp.m, netlab3.3/gmmunpak.m, netlab3.3/gp.m, + netlab3.3/gpcovar.m, netlab3.3/gpcovarf.m, netlab3.3/gpcovarp.m, + netlab3.3/gperr.m, netlab3.3/gpfwd.m, netlab3.3/gpgrad.m, + netlab3.3/gpinit.m, netlab3.3/gppak.m, netlab3.3/gpunpak.m, + netlab3.3/gradchek.m, netlab3.3/graddesc.m, netlab3.3/gsamp.m, + netlab3.3/gtm.m, netlab3.3/gtmem.m, netlab3.3/gtmfwd.m, + netlab3.3/gtminit.m, netlab3.3/gtmlmean.m, netlab3.3/gtmlmode.m, + netlab3.3/gtmmag.m, netlab3.3/gtmpost.m, netlab3.3/gtmprob.m, + netlab3.3/hbayes.m, netlab3.3/hesschek.m, netlab3.3/hintmat.m, + netlab3.3/hinton.m, netlab3.3/histp.m, netlab3.3/hmc.m, + netlab3.3/kmeansNetlab.m, netlab3.3/knn.m, netlab3.3/knnfwd.m, + netlab3.3/linef.m, netlab3.3/linemin.m, netlab3.3/maxitmess.m, + netlab3.3/mdn.m, netlab3.3/mdn2gmm.m, netlab3.3/mdndist2.m, + netlab3.3/mdnerr.m, netlab3.3/mdnfwd.m, netlab3.3/mdngrad.m, + netlab3.3/mdninit.m, netlab3.3/mdnnet.mat, netlab3.3/mdnpak.m, + netlab3.3/mdnpost.m, netlab3.3/mdnprob.m, netlab3.3/mdnunpak.m, + netlab3.3/minbrack.m, netlab3.3/mlp.m, netlab3.3/mlpbkp.m, + netlab3.3/mlpderiv.m, netlab3.3/mlperr.m, netlab3.3/mlpevfwd.m, + netlab3.3/mlpfwd.m, netlab3.3/mlpgrad.m, netlab3.3/mlphdotv.m, + netlab3.3/mlphess.m, netlab3.3/mlphint.m, netlab3.3/mlpinit.m, + netlab3.3/mlppak.m, netlab3.3/mlpprior.m, netlab3.3/mlptrain.m, + netlab3.3/mlpunpak.m, netlab3.3/netderiv.m, netlab3.3/neterr.m, + netlab3.3/netevfwd.m, netlab3.3/netgrad.m, netlab3.3/nethess.m, + netlab3.3/netinit.m, netlab3.3/netlab3.3.zip, + netlab3.3/netlogo.mat, netlab3.3/netopt.m, netlab3.3/netpak.m, + netlab3.3/netunpak.m, netlab3.3/oilTrn.dat, netlab3.3/oilTst.dat, + netlab3.3/olgd.m, netlab3.3/pca.m, netlab3.3/plotmat.m, + netlab3.3/ppca.m, netlab3.3/quasinew.m, netlab3.3/rbf.m, + netlab3.3/rbfbkp.m, netlab3.3/rbfderiv.m, netlab3.3/rbferr.m, + netlab3.3/rbfevfwd.m, netlab3.3/rbffwd.m, netlab3.3/rbfgrad.m, + netlab3.3/rbfhess.m, netlab3.3/rbfjacob.m, netlab3.3/rbfpak.m, + netlab3.3/rbfprior.m, netlab3.3/rbfsetbf.m, netlab3.3/rbfsetfw.m, + netlab3.3/rbftrain.m, netlab3.3/rbfunpak.m, netlab3.3/rosegrad.m, + netlab3.3/rosen.m, netlab3.3/scg.m, netlab3.3/som.m, + netlab3.3/somfwd.m, netlab3.3/sompak.m, netlab3.3/somtrain.m, + netlab3.3/somunpak.m, netlab3.3/xor.dat, netlabKPM/README.txt, + netlabKPM/demgmm1_movie.m, netlabKPM/evidence_weighted.m, + netlabKPM/glmerr_weighted.m, netlabKPM/glmgrad_weighted.m, + netlabKPM/glmhess_weighted.m, netlabKPM/glmtrain_weighted.m, + netlabKPM/gmm1.avi, netlabKPM/gmmem2.m, + netlabKPM/gmmem_multi_restart.m, netlabKPM/kmeans_demo.m, + netlabKPM/mlperr_weighted.m, netlabKPM/mlpgrad_weighted.m, + netlabKPM/mlphdotv_weighted.m, netlabKPM/mlphess_weighted.m, + netlabKPM/neterr_weighted.m, netlabKPM/netgrad_weighted.m, + netlabKPM/nethess_weighted.m, netlabKPM/netopt_weighted.m, + netlabKPM/process_options.m: Initial import of code base from + Kevin Murphy. + +2005-04-27 10:58 yozhik + + * KPMtools/mahal2conf.m, nethelp3.3/conffig.htm, + nethelp3.3/confmat.htm, nethelp3.3/conjgrad.htm, + nethelp3.3/consist.htm, nethelp3.3/convertoldnet.htm, + nethelp3.3/datread.htm, nethelp3.3/datwrite.htm, + nethelp3.3/dem2ddat.htm, nethelp3.3/demard.htm, + nethelp3.3/demev1.htm, nethelp3.3/demev2.htm, + nethelp3.3/demev3.htm, nethelp3.3/demgauss.htm, + nethelp3.3/demglm1.htm, nethelp3.3/demglm2.htm, + nethelp3.3/demgmm1.htm, nethelp3.3/demgmm2.htm, + nethelp3.3/demgmm3.htm, nethelp3.3/demgmm4.htm, + nethelp3.3/demgmm5.htm, nethelp3.3/demgp.htm, + nethelp3.3/demgpard.htm, nethelp3.3/demgpot.htm, + nethelp3.3/demgtm1.htm, nethelp3.3/demgtm2.htm, + nethelp3.3/demhint.htm, nethelp3.3/demhmc1.htm, + nethelp3.3/demhmc2.htm, nethelp3.3/demhmc3.htm, + nethelp3.3/demkmn1.htm, nethelp3.3/demknn1.htm, + nethelp3.3/demmdn1.htm, nethelp3.3/demmet1.htm, + nethelp3.3/demmlp1.htm, nethelp3.3/demmlp2.htm, + nethelp3.3/demnlab.htm, nethelp3.3/demns1.htm, + nethelp3.3/demolgd1.htm, nethelp3.3/demopt1.htm, + nethelp3.3/dempot.htm, nethelp3.3/demprgp.htm, + nethelp3.3/demprior.htm, nethelp3.3/demrbf1.htm, + nethelp3.3/demsom1.htm, nethelp3.3/demtrain.htm, + nethelp3.3/dist2.htm, nethelp3.3/eigdec.htm, + nethelp3.3/errbayes.htm, nethelp3.3/evidence.htm, + nethelp3.3/fevbayes.htm, nethelp3.3/gauss.htm, + nethelp3.3/gbayes.htm, nethelp3.3/glm.htm, + nethelp3.3/glmderiv.htm, nethelp3.3/glmerr.htm, + nethelp3.3/glmevfwd.htm, nethelp3.3/glmfwd.htm, + nethelp3.3/glmgrad.htm, nethelp3.3/glmhess.htm, + nethelp3.3/glminit.htm, nethelp3.3/glmpak.htm, + nethelp3.3/glmtrain.htm, nethelp3.3/glmunpak.htm, + nethelp3.3/gmm.htm, nethelp3.3/gmmactiv.htm, + nethelp3.3/gmmem.htm, nethelp3.3/gmminit.htm, + nethelp3.3/gmmpak.htm, nethelp3.3/gmmpost.htm, + nethelp3.3/gmmprob.htm, nethelp3.3/gmmsamp.htm, + nethelp3.3/gmmunpak.htm, nethelp3.3/gp.htm, + nethelp3.3/gpcovar.htm, nethelp3.3/gpcovarf.htm, + nethelp3.3/gpcovarp.htm, nethelp3.3/gperr.htm, + nethelp3.3/gpfwd.htm, nethelp3.3/gpgrad.htm, + nethelp3.3/gpinit.htm, nethelp3.3/gppak.htm, + nethelp3.3/gpunpak.htm, nethelp3.3/gradchek.htm, + nethelp3.3/graddesc.htm, nethelp3.3/gsamp.htm, + nethelp3.3/gtm.htm, nethelp3.3/gtmem.htm, nethelp3.3/gtmfwd.htm, + nethelp3.3/gtminit.htm, nethelp3.3/gtmlmean.htm, + nethelp3.3/gtmlmode.htm, nethelp3.3/gtmmag.htm, + nethelp3.3/gtmpost.htm, nethelp3.3/gtmprob.htm, + nethelp3.3/hbayes.htm, nethelp3.3/hesschek.htm, + nethelp3.3/hintmat.htm, nethelp3.3/hinton.htm, + nethelp3.3/histp.htm, nethelp3.3/hmc.htm, nethelp3.3/index.htm, + nethelp3.3/kmeans.htm, nethelp3.3/knn.htm, nethelp3.3/knnfwd.htm, + nethelp3.3/linef.htm, nethelp3.3/linemin.htm, + nethelp3.3/maxitmess.htm, nethelp3.3/mdn.htm, + nethelp3.3/mdn2gmm.htm, nethelp3.3/mdndist2.htm, + nethelp3.3/mdnerr.htm, nethelp3.3/mdnfwd.htm, + nethelp3.3/mdngrad.htm, nethelp3.3/mdninit.htm, + nethelp3.3/mdnpak.htm, nethelp3.3/mdnpost.htm, + nethelp3.3/mdnprob.htm, nethelp3.3/mdnunpak.htm, + nethelp3.3/metrop.htm, nethelp3.3/minbrack.htm, + nethelp3.3/mlp.htm, nethelp3.3/mlpbkp.htm, + nethelp3.3/mlpderiv.htm, nethelp3.3/mlperr.htm, + nethelp3.3/mlpevfwd.htm, nethelp3.3/mlpfwd.htm, + nethelp3.3/mlpgrad.htm, nethelp3.3/mlphdotv.htm, + nethelp3.3/mlphess.htm, nethelp3.3/mlphint.htm, + nethelp3.3/mlpinit.htm, nethelp3.3/mlppak.htm, + nethelp3.3/mlpprior.htm, nethelp3.3/mlptrain.htm, + nethelp3.3/mlpunpak.htm, nethelp3.3/netderiv.htm, + nethelp3.3/neterr.htm, nethelp3.3/netevfwd.htm, + nethelp3.3/netgrad.htm, nethelp3.3/nethelp3.3.zip, + nethelp3.3/nethess.htm, nethelp3.3/netinit.htm, + nethelp3.3/netopt.htm, nethelp3.3/netpak.htm, + nethelp3.3/netunpak.htm, nethelp3.3/olgd.htm, nethelp3.3/pca.htm, + nethelp3.3/plotmat.htm, nethelp3.3/ppca.htm, + nethelp3.3/quasinew.htm, nethelp3.3/rbf.htm, + nethelp3.3/rbfbkp.htm, nethelp3.3/rbfderiv.htm, + nethelp3.3/rbferr.htm, nethelp3.3/rbfevfwd.htm, + nethelp3.3/rbffwd.htm, nethelp3.3/rbfgrad.htm, + nethelp3.3/rbfhess.htm, nethelp3.3/rbfjacob.htm, + nethelp3.3/rbfpak.htm, nethelp3.3/rbfprior.htm, + nethelp3.3/rbfsetbf.htm, nethelp3.3/rbfsetfw.htm, + nethelp3.3/rbftrain.htm, nethelp3.3/rbfunpak.htm, + nethelp3.3/rosegrad.htm, nethelp3.3/rosen.htm, + nethelp3.3/scg.htm, nethelp3.3/som.htm, nethelp3.3/somfwd.htm, + nethelp3.3/sompak.htm, nethelp3.3/somtrain.htm, + nethelp3.3/somunpak.htm, netlab3.3/Contents.m, netlab3.3/LICENSE, + netlab3.3/conffig.m, netlab3.3/confmat.m, netlab3.3/conjgrad.m, + netlab3.3/consist.m, netlab3.3/convertoldnet.m, + netlab3.3/datread.m, netlab3.3/datwrite.m, netlab3.3/demard.m, + netlab3.3/demev1.m, netlab3.3/demev2.m, netlab3.3/demev3.m, + netlab3.3/demgauss.m, netlab3.3/demglm1.m, netlab3.3/demglm2.m, + netlab3.3/demgmm2.m, netlab3.3/demgmm3.m, netlab3.3/demgmm4.m, + netlab3.3/demgmm5.m, netlab3.3/demgp.m, netlab3.3/demgpard.m, + netlab3.3/demgpot.m, netlab3.3/demgtm1.m, netlab3.3/demgtm2.m, + netlab3.3/demhint.m, netlab3.3/demhmc2.m, netlab3.3/demhmc3.m, + netlab3.3/demkmn1.m, netlab3.3/demknn1.m, netlab3.3/demmdn1.m, + netlab3.3/demmlp1.m, netlab3.3/demmlp2.m, netlab3.3/demnlab.m, + netlab3.3/demns1.m, netlab3.3/demolgd1.m, netlab3.3/demopt1.m, + netlab3.3/dempot.m, netlab3.3/demprgp.m, netlab3.3/demprior.m, + netlab3.3/demrbf1.m, netlab3.3/demsom1.m, netlab3.3/demtrain.m, + netlab3.3/dist2.m, netlab3.3/eigdec.m, netlab3.3/errbayes.m, + netlab3.3/evidence.m, netlab3.3/fevbayes.m, netlab3.3/gauss.m, + netlab3.3/gbayes.m, netlab3.3/glm.m, netlab3.3/glmderiv.m, + netlab3.3/glmerr.m, netlab3.3/glmevfwd.m, netlab3.3/glmfwd.m, + netlab3.3/glmgrad.m, netlab3.3/glmhess.m, netlab3.3/glminit.m, + netlab3.3/glmpak.m, netlab3.3/glmtrain.m, netlab3.3/glmunpak.m, + netlab3.3/gmm.m, netlab3.3/gmmactiv.m, netlab3.3/gmmem.m, + netlab3.3/gmmpak.m, netlab3.3/gmmpost.m, netlab3.3/gmmprob.m, + netlab3.3/gmmsamp.m, netlab3.3/gmmunpak.m, netlab3.3/gp.m, + netlab3.3/gpcovar.m, netlab3.3/gpcovarf.m, netlab3.3/gpcovarp.m, + netlab3.3/gperr.m, netlab3.3/gpfwd.m, netlab3.3/gpgrad.m, + netlab3.3/gpinit.m, netlab3.3/gppak.m, netlab3.3/gpunpak.m, + netlab3.3/gradchek.m, netlab3.3/graddesc.m, netlab3.3/gsamp.m, + netlab3.3/gtm.m, netlab3.3/gtmem.m, netlab3.3/gtmfwd.m, + netlab3.3/gtminit.m, netlab3.3/gtmlmean.m, netlab3.3/gtmlmode.m, + netlab3.3/gtmmag.m, netlab3.3/gtmpost.m, netlab3.3/gtmprob.m, + netlab3.3/hbayes.m, netlab3.3/hesschek.m, netlab3.3/hintmat.m, + netlab3.3/hinton.m, netlab3.3/histp.m, netlab3.3/hmc.m, + netlab3.3/kmeansNetlab.m, netlab3.3/knn.m, netlab3.3/knnfwd.m, + netlab3.3/linef.m, netlab3.3/linemin.m, netlab3.3/maxitmess.m, + netlab3.3/mdn.m, netlab3.3/mdn2gmm.m, netlab3.3/mdndist2.m, + netlab3.3/mdnerr.m, netlab3.3/mdnfwd.m, netlab3.3/mdngrad.m, + netlab3.3/mdninit.m, netlab3.3/mdnnet.mat, netlab3.3/mdnpak.m, + netlab3.3/mdnpost.m, netlab3.3/mdnprob.m, netlab3.3/mdnunpak.m, + netlab3.3/minbrack.m, netlab3.3/mlp.m, netlab3.3/mlpbkp.m, + netlab3.3/mlpderiv.m, netlab3.3/mlperr.m, netlab3.3/mlpevfwd.m, + netlab3.3/mlpfwd.m, netlab3.3/mlpgrad.m, netlab3.3/mlphdotv.m, + netlab3.3/mlphess.m, netlab3.3/mlphint.m, netlab3.3/mlpinit.m, + netlab3.3/mlppak.m, netlab3.3/mlpprior.m, netlab3.3/mlptrain.m, + netlab3.3/mlpunpak.m, netlab3.3/netderiv.m, netlab3.3/neterr.m, + netlab3.3/netevfwd.m, netlab3.3/netgrad.m, netlab3.3/nethess.m, + netlab3.3/netinit.m, netlab3.3/netlab3.3.zip, + netlab3.3/netlogo.mat, netlab3.3/netopt.m, netlab3.3/netpak.m, + netlab3.3/netunpak.m, netlab3.3/oilTrn.dat, netlab3.3/oilTst.dat, + netlab3.3/olgd.m, netlab3.3/pca.m, netlab3.3/plotmat.m, + netlab3.3/ppca.m, netlab3.3/quasinew.m, netlab3.3/rbf.m, + netlab3.3/rbfbkp.m, netlab3.3/rbfderiv.m, netlab3.3/rbferr.m, + netlab3.3/rbfevfwd.m, netlab3.3/rbffwd.m, netlab3.3/rbfgrad.m, + netlab3.3/rbfhess.m, netlab3.3/rbfjacob.m, netlab3.3/rbfpak.m, + netlab3.3/rbfprior.m, netlab3.3/rbfsetbf.m, netlab3.3/rbfsetfw.m, + netlab3.3/rbftrain.m, netlab3.3/rbfunpak.m, netlab3.3/rosegrad.m, + netlab3.3/rosen.m, netlab3.3/scg.m, netlab3.3/som.m, + netlab3.3/somfwd.m, netlab3.3/sompak.m, netlab3.3/somtrain.m, + netlab3.3/somunpak.m, netlab3.3/xor.dat, netlabKPM/README.txt, + netlabKPM/demgmm1_movie.m, netlabKPM/evidence_weighted.m, + netlabKPM/glmerr_weighted.m, netlabKPM/glmgrad_weighted.m, + netlabKPM/glmhess_weighted.m, netlabKPM/glmtrain_weighted.m, + netlabKPM/gmm1.avi, netlabKPM/gmmem2.m, + netlabKPM/gmmem_multi_restart.m, netlabKPM/kmeans_demo.m, + netlabKPM/mlperr_weighted.m, netlabKPM/mlpgrad_weighted.m, + netlabKPM/mlphdotv_weighted.m, netlabKPM/mlphess_weighted.m, + netlabKPM/neterr_weighted.m, netlabKPM/netgrad_weighted.m, + netlabKPM/nethess_weighted.m, netlabKPM/netopt_weighted.m, + netlabKPM/process_options.m: Initial revision + +2005-04-25 19:29 yozhik + + * KPMstats/KLgauss.m, KPMstats/README.txt, KPMstats/beta_sample.m, + KPMstats/chisquared_histo.m, KPMstats/chisquared_prob.m, + KPMstats/chisquared_readme.txt, KPMstats/chisquared_table.m, + KPMstats/clg_Mstep.m, KPMstats/clg_Mstep_simple.m, + KPMstats/clg_prob.m, KPMstats/condGaussToJoint.m, + KPMstats/cond_indep_fisher_z.m, + KPMstats/condgaussTrainObserved.m, KPMstats/condgauss_sample.m, + KPMstats/convertBinaryLabels.m, KPMstats/cwr_demo.m, + KPMstats/cwr_em.m, KPMstats/cwr_predict.m, KPMstats/cwr_prob.m, + KPMstats/cwr_readme.txt, KPMstats/cwr_test.m, + KPMstats/dirichlet_sample.m, KPMstats/distchck.m, + KPMstats/eigdec.m, KPMstats/est_transmat.m, + KPMstats/fit_paritioned_model_testfn.m, + KPMstats/fit_partitioned_model.m, KPMstats/gamma_sample.m, + KPMstats/gaussian_prob.m, KPMstats/gaussian_sample.m, + KPMstats/linear_regression.m, KPMstats/logist2.m, + KPMstats/logist2Apply.m, KPMstats/logist2ApplyRegularized.m, + KPMstats/logist2Fit.m, KPMstats/logist2FitRegularized.m, + KPMstats/logistK.m, KPMstats/logistK_eval.m, + KPMstats/marginalize_gaussian.m, KPMstats/matrix_T_pdf.m, + KPMstats/matrix_normal_pdf.m, KPMstats/mc_stat_distrib.m, + KPMstats/mixgauss_Mstep.m, KPMstats/mixgauss_classifier_apply.m, + KPMstats/mixgauss_classifier_train.m, KPMstats/mixgauss_em.m, + KPMstats/mixgauss_init.m, KPMstats/mixgauss_prob.m, + KPMstats/mixgauss_prob_test.m, KPMstats/mixgauss_sample.m, + KPMstats/mkPolyFvec.m, KPMstats/mk_unit_norm.m, + KPMstats/multinomial_prob.m, KPMstats/multinomial_sample.m, + KPMstats/normal_coef.m, KPMstats/partial_corr_coef.m, + KPMstats/parzen.m, KPMstats/parzenC.c, KPMstats/parzenC.dll, + KPMstats/parzenC.mexglx, KPMstats/parzenC_test.m, + KPMstats/parzen_fit_select_unif.m, KPMstats/pca.m, + KPMstats/rndcheck.m, KPMstats/sample.m, + KPMstats/sample_discrete.m, KPMstats/sample_gaussian.m, + KPMstats/student_t_logprob.m, KPMstats/student_t_prob.m, + KPMstats/unif_discrete_sample.m, KPMstats/weightedRegression.m, + KPMtools/README.txt, KPMtools/approx_unique.m, + KPMtools/approxeq.m, KPMtools/argmax.m, KPMtools/argmin.m, + KPMtools/assert.m, KPMtools/assignEdgeNums.m, + KPMtools/assign_cols.m, KPMtools/axis_pct.m, KPMtools/block.m, + KPMtools/cell2num.m, KPMtools/chi2inv.m, KPMtools/choose.m, + KPMtools/collapse_mog.m, KPMtools/colmult.c, + KPMtools/colmult.mexglx, KPMtools/computeROC.m, + KPMtools/compute_counts.m, KPMtools/conf2mahal.m, + KPMtools/cross_entropy.m, KPMtools/div.m, KPMtools/draw_circle.m, + KPMtools/draw_ellipse.m, KPMtools/draw_ellipse_axes.m, + KPMtools/em_converged.m, KPMtools/entropy.m, + KPMtools/exportfig.m, KPMtools/extend_domain_table.m, + KPMtools/factorial.m, KPMtools/find_equiv_posns.m, + KPMtools/hash_add.m, KPMtools/hash_del.m, KPMtools/hash_lookup.m, + KPMtools/hungarian.m, KPMtools/image_rgb.m, + KPMtools/imresizeAspect.m, KPMtools/ind2subv.c, + KPMtools/ind2subv.m, KPMtools/installC_KPMtools.m, + KPMtools/is_psd.m, KPMtools/is_stochastic.m, + KPMtools/isemptycell.m, KPMtools/isposdef.m, KPMtools/isscalar.m, + KPMtools/isvector.m, KPMtools/junk.c, KPMtools/loadcell.m, + KPMtools/logb.m, KPMtools/logdet.m, KPMtools/logsum.m, + KPMtools/logsum_simple.m, KPMtools/logsum_test.m, + KPMtools/logsumexp.m, KPMtools/logsumexpv.m, + KPMtools/marg_table.m, KPMtools/marginalize_table.m, + KPMtools/matprint.m, KPMtools/max_mult.c, KPMtools/max_mult.m, + KPMtools/mexutil.c, KPMtools/mexutil.h, + KPMtools/mk_multi_index.m, KPMtools/mk_stochastic.m, + KPMtools/mult_by_table.m, KPMtools/myintersect.m, + KPMtools/myismember.m, KPMtools/myones.m, KPMtools/myplot.m, + KPMtools/myrand.m, KPMtools/myrepmat.m, KPMtools/myreshape.m, + KPMtools/mysetdiff.m, KPMtools/mysize.m, KPMtools/mysubset.m, + KPMtools/mysymsetdiff.m, KPMtools/bipartiteMatchingHungarian.m, + KPMtools/myunion.m, KPMtools/nchoose2.m, KPMtools/ncols.m, + KPMtools/nonmaxsup.m, KPMtools/normalise.m, + KPMtools/normaliseC.c, KPMtools/normaliseC.dll, + KPMtools/normalize.m, KPMtools/nrows.m, KPMtools/num2strcell.m, + KPMtools/partitionData.m, KPMtools/partition_matrix_vec.m, + KPMtools/pca_netlab.m, KPMtools/pick.m, KPMtools/plotROC.m, + KPMtools/plotROCkpm.m, KPMtools/plot_axis_thru_origin.m, + KPMtools/plot_ellipse.m, KPMtools/plot_matrix.m, + KPMtools/plot_polygon.m, KPMtools/plotcov2.m, + KPMtools/plotcov3.m, KPMtools/plotgauss1d.m, + KPMtools/plotgauss2d.m, KPMtools/plotgauss2d_old.m, + KPMtools/polygon_area.m, KPMtools/polygon_centroid.m, + KPMtools/polygon_intersect.m, KPMtools/previewfig.m, + KPMtools/process_options.m, KPMtools/rand_psd.m, + KPMtools/rectintC.m, KPMtools/rectintLoopC.mexglx, + KPMtools/rectintSparse.m, KPMtools/rectintSparseC.m, + KPMtools/rectintSparseLoopC.c, KPMtools/rectintSparseLoopC.dll, + KPMtools/repmatC.c, KPMtools/repmatC.dll, + KPMtools/repmatC.mexglx, KPMtools/rgb2grayKPM.m, + KPMtools/rnd_partition.m, KPMtools/rotate_xlabel.m, + KPMtools/safeStr.m, KPMtools/sampleUniformInts.m, + KPMtools/sample_discrete.m, KPMtools/set_xtick_label.m, + KPMtools/set_xtick_label_demo.m, KPMtools/setdiag.m, + KPMtools/softeye.m, KPMtools/sort_evec.m, + KPMtools/splitLongSeqIntoManyShort.m, KPMtools/sprintf_intvec.m, + KPMtools/sqdist.m, KPMtools/strmatch_multi.m, + KPMtools/strmatch_substr.m, KPMtools/subplot2.m, + KPMtools/subplot3.m, KPMtools/subsets.m, KPMtools/subv2ind.c, + KPMtools/subv2ind.m, KPMtools/sumv.m, KPMtools/suptitle.m, + KPMtools/unaryEncoding.m, KPMtools/wrap.m, + KPMtools/xticklabel_rotate90.m, KPMtools/zipload.m, + KPMtools/zipsave.m: Initial import of code base from Kevin + Murphy. + +2005-04-25 19:29 yozhik + + * KPMstats/KLgauss.m, KPMstats/README.txt, KPMstats/beta_sample.m, + KPMstats/chisquared_histo.m, KPMstats/chisquared_prob.m, + KPMstats/chisquared_readme.txt, KPMstats/chisquared_table.m, + KPMstats/clg_Mstep.m, KPMstats/clg_Mstep_simple.m, + KPMstats/clg_prob.m, KPMstats/condGaussToJoint.m, + KPMstats/cond_indep_fisher_z.m, + KPMstats/condgaussTrainObserved.m, KPMstats/condgauss_sample.m, + KPMstats/convertBinaryLabels.m, KPMstats/cwr_demo.m, + KPMstats/cwr_em.m, KPMstats/cwr_predict.m, KPMstats/cwr_prob.m, + KPMstats/cwr_readme.txt, KPMstats/cwr_test.m, + KPMstats/dirichlet_sample.m, KPMstats/distchck.m, + KPMstats/eigdec.m, KPMstats/est_transmat.m, + KPMstats/fit_paritioned_model_testfn.m, + KPMstats/fit_partitioned_model.m, KPMstats/gamma_sample.m, + KPMstats/gaussian_prob.m, KPMstats/gaussian_sample.m, + KPMstats/linear_regression.m, KPMstats/logist2.m, + KPMstats/logist2Apply.m, KPMstats/logist2ApplyRegularized.m, + KPMstats/logist2Fit.m, KPMstats/logist2FitRegularized.m, + KPMstats/logistK.m, KPMstats/logistK_eval.m, + KPMstats/marginalize_gaussian.m, KPMstats/matrix_T_pdf.m, + KPMstats/matrix_normal_pdf.m, KPMstats/mc_stat_distrib.m, + KPMstats/mixgauss_Mstep.m, KPMstats/mixgauss_classifier_apply.m, + KPMstats/mixgauss_classifier_train.m, KPMstats/mixgauss_em.m, + KPMstats/mixgauss_init.m, KPMstats/mixgauss_prob.m, + KPMstats/mixgauss_prob_test.m, KPMstats/mixgauss_sample.m, + KPMstats/mkPolyFvec.m, KPMstats/mk_unit_norm.m, + KPMstats/multinomial_prob.m, KPMstats/multinomial_sample.m, + KPMstats/normal_coef.m, KPMstats/partial_corr_coef.m, + KPMstats/parzen.m, KPMstats/parzenC.c, KPMstats/parzenC.dll, + KPMstats/parzenC.mexglx, KPMstats/parzenC_test.m, + KPMstats/parzen_fit_select_unif.m, KPMstats/pca.m, + KPMstats/rndcheck.m, KPMstats/sample.m, + KPMstats/sample_discrete.m, KPMstats/sample_gaussian.m, + KPMstats/student_t_logprob.m, KPMstats/student_t_prob.m, + KPMstats/unif_discrete_sample.m, KPMstats/weightedRegression.m, + KPMtools/README.txt, KPMtools/approx_unique.m, + KPMtools/approxeq.m, KPMtools/argmax.m, KPMtools/argmin.m, + KPMtools/assert.m, KPMtools/assignEdgeNums.m, + KPMtools/assign_cols.m, KPMtools/axis_pct.m, KPMtools/block.m, + KPMtools/cell2num.m, KPMtools/chi2inv.m, KPMtools/choose.m, + KPMtools/collapse_mog.m, KPMtools/colmult.c, + KPMtools/colmult.mexglx, KPMtools/computeROC.m, + KPMtools/compute_counts.m, KPMtools/conf2mahal.m, + KPMtools/cross_entropy.m, KPMtools/div.m, KPMtools/draw_circle.m, + KPMtools/draw_ellipse.m, KPMtools/draw_ellipse_axes.m, + KPMtools/em_converged.m, KPMtools/entropy.m, + KPMtools/exportfig.m, KPMtools/extend_domain_table.m, + KPMtools/factorial.m, KPMtools/find_equiv_posns.m, + KPMtools/hash_add.m, KPMtools/hash_del.m, KPMtools/hash_lookup.m, + KPMtools/hungarian.m, KPMtools/image_rgb.m, + KPMtools/imresizeAspect.m, KPMtools/ind2subv.c, + KPMtools/ind2subv.m, KPMtools/installC_KPMtools.m, + KPMtools/is_psd.m, KPMtools/is_stochastic.m, + KPMtools/isemptycell.m, KPMtools/isposdef.m, KPMtools/isscalar.m, + KPMtools/isvector.m, KPMtools/junk.c, KPMtools/loadcell.m, + KPMtools/logb.m, KPMtools/logdet.m, KPMtools/logsum.m, + KPMtools/logsum_simple.m, KPMtools/logsum_test.m, + KPMtools/logsumexp.m, KPMtools/logsumexpv.m, + KPMtools/marg_table.m, KPMtools/marginalize_table.m, + KPMtools/matprint.m, KPMtools/max_mult.c, KPMtools/max_mult.m, + KPMtools/mexutil.c, KPMtools/mexutil.h, + KPMtools/mk_multi_index.m, KPMtools/mk_stochastic.m, + KPMtools/mult_by_table.m, KPMtools/myintersect.m, + KPMtools/myismember.m, KPMtools/myones.m, KPMtools/myplot.m, + KPMtools/myrand.m, KPMtools/myrepmat.m, KPMtools/myreshape.m, + KPMtools/mysetdiff.m, KPMtools/mysize.m, KPMtools/mysubset.m, + KPMtools/mysymsetdiff.m, KPMtools/bipartiteMatchingHungarian.m, + KPMtools/myunion.m, KPMtools/nchoose2.m, KPMtools/ncols.m, + KPMtools/nonmaxsup.m, KPMtools/normalise.m, + KPMtools/normaliseC.c, KPMtools/normaliseC.dll, + KPMtools/normalize.m, KPMtools/nrows.m, KPMtools/num2strcell.m, + KPMtools/partitionData.m, KPMtools/partition_matrix_vec.m, + KPMtools/pca_netlab.m, KPMtools/pick.m, KPMtools/plotROC.m, + KPMtools/plotROCkpm.m, KPMtools/plot_axis_thru_origin.m, + KPMtools/plot_ellipse.m, KPMtools/plot_matrix.m, + KPMtools/plot_polygon.m, KPMtools/plotcov2.m, + KPMtools/plotcov3.m, KPMtools/plotgauss1d.m, + KPMtools/plotgauss2d.m, KPMtools/plotgauss2d_old.m, + KPMtools/polygon_area.m, KPMtools/polygon_centroid.m, + KPMtools/polygon_intersect.m, KPMtools/previewfig.m, + KPMtools/process_options.m, KPMtools/rand_psd.m, + KPMtools/rectintC.m, KPMtools/rectintLoopC.mexglx, + KPMtools/rectintSparse.m, KPMtools/rectintSparseC.m, + KPMtools/rectintSparseLoopC.c, KPMtools/rectintSparseLoopC.dll, + KPMtools/repmatC.c, KPMtools/repmatC.dll, + KPMtools/repmatC.mexglx, KPMtools/rgb2grayKPM.m, + KPMtools/rnd_partition.m, KPMtools/rotate_xlabel.m, + KPMtools/safeStr.m, KPMtools/sampleUniformInts.m, + KPMtools/sample_discrete.m, KPMtools/set_xtick_label.m, + KPMtools/set_xtick_label_demo.m, KPMtools/setdiag.m, + KPMtools/softeye.m, KPMtools/sort_evec.m, + KPMtools/splitLongSeqIntoManyShort.m, KPMtools/sprintf_intvec.m, + KPMtools/sqdist.m, KPMtools/strmatch_multi.m, + KPMtools/strmatch_substr.m, KPMtools/subplot2.m, + KPMtools/subplot3.m, KPMtools/subsets.m, KPMtools/subv2ind.c, + KPMtools/subv2ind.m, KPMtools/sumv.m, KPMtools/suptitle.m, + KPMtools/unaryEncoding.m, KPMtools/wrap.m, + KPMtools/xticklabel_rotate90.m, KPMtools/zipload.m, + KPMtools/zipsave.m: Initial revision + +2005-04-03 18:39 yozhik + + * BNT/learning/score_dags.m: Initial import of code base from Kevin + Murphy. + +2005-04-03 18:39 yozhik + + * BNT/learning/score_dags.m: Initial revision + +2005-03-31 11:20 yozhik + + * BNT/installC_BNT.m: Initial import of code base from Kevin + Murphy. + +2005-03-31 11:20 yozhik + + * BNT/installC_BNT.m: Initial revision + +2005-03-30 11:59 yozhik + + * KPMtools/asdemo.html: Initial import of code base from Kevin + Murphy. + +2005-03-30 11:59 yozhik + + * KPMtools/asdemo.html: Initial revision + +2005-03-26 18:51 yozhik + + * KPMtools/asdemo.m: Initial import of code base from Kevin Murphy. + +2005-03-26 18:51 yozhik + + * KPMtools/asdemo.m: Initial revision + +2005-01-15 18:27 yozhik + + * BNT/CPDs/@tabular_CPD/: get_field.m, set_fields.m, tabular_CPD.m: + Initial import of code base from Kevin Murphy. + +2005-01-15 18:27 yozhik + + * BNT/CPDs/@tabular_CPD/: get_field.m, set_fields.m, tabular_CPD.m: + Initial revision + +2004-11-24 12:12 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/junk: Initial import of + code base from Kevin Murphy. + +2004-11-24 12:12 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/junk: Initial revision + +2004-11-22 14:41 yozhik + + * BNT/examples/dynamic/orig_water1.m: Initial import of code base + from Kevin Murphy. + +2004-11-22 14:41 yozhik + + * BNT/examples/dynamic/orig_water1.m: Initial revision + +2004-11-22 14:15 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/cbk_inf_engine.m: Initial + import of code base from Kevin Murphy. + +2004-11-22 14:15 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/cbk_inf_engine.m: Initial + revision + +2004-11-06 13:52 yozhik + + * BNT/examples/static/StructLearn/model_select2.m: Initial import + of code base from Kevin Murphy. + +2004-11-06 13:52 yozhik + + * BNT/examples/static/StructLearn/model_select2.m: Initial revision + +2004-11-06 12:55 yozhik + + * BNT/examples/static/StructLearn/model_select1.m: Initial import + of code base from Kevin Murphy. + +2004-11-06 12:55 yozhik + + * BNT/examples/static/StructLearn/model_select1.m: Initial revision + +2004-10-22 18:18 yozhik + + * HMM/viterbi_path.m: Initial import of code base from Kevin + Murphy. + +2004-10-22 18:18 yozhik + + * HMM/viterbi_path.m: Initial revision + +2004-09-29 20:09 yozhik + + * BNT/inference/static/@var_elim_inf_engine/marginal_nodes.m: + Initial import of code base from Kevin Murphy. + +2004-09-29 20:09 yozhik + + * BNT/inference/static/@var_elim_inf_engine/marginal_nodes.m: + Initial revision + +2004-09-12 20:21 yozhik + + * BNT/examples/limids/amnio.m: Initial import of code base from + Kevin Murphy. + +2004-09-12 20:21 yozhik + + * BNT/examples/limids/amnio.m: Initial revision + +2004-09-12 19:27 yozhik + + * BNT/examples/limids/oil1.m: Initial import of code base from + Kevin Murphy. + +2004-09-12 19:27 yozhik + + * BNT/examples/limids/oil1.m: Initial revision + +2004-09-12 14:01 yozhik + + * BNT/examples/static/sprinkler1.m: Initial import of code base + from Kevin Murphy. + +2004-09-12 14:01 yozhik + + * BNT/examples/static/sprinkler1.m: Initial revision + +2004-08-29 05:41 yozhik + + * HMM/transmat_train_observed.m: Initial import of code base from + Kevin Murphy. + +2004-08-29 05:41 yozhik + + * HMM/transmat_train_observed.m: Initial revision + +2004-08-05 08:25 yozhik + + * BNT/potentials/: @dpot/divide_by_pot.m, Tables/divide_by_table.m: + Initial import of code base from Kevin Murphy. + +2004-08-05 08:25 yozhik + + * BNT/potentials/: @dpot/divide_by_pot.m, Tables/divide_by_table.m: + Initial revision + +2004-08-04 12:59 yozhik + + * BNT/potentials/@dpot/: marginalize_pot.m, multiply_by_pot.m: + Initial import of code base from Kevin Murphy. + +2004-08-04 12:59 yozhik + + * BNT/potentials/@dpot/: marginalize_pot.m, multiply_by_pot.m: + Initial revision + +2004-08-04 12:36 yozhik + + * BNT/@assocarray/subsref.m: Initial import of code base from Kevin + Murphy. + +2004-08-04 12:36 yozhik + + * BNT/@assocarray/subsref.m: Initial revision + +2004-08-04 08:54 yozhik + + * BNT/potentials/@dpot/normalize_pot.m: Initial import of code base + from Kevin Murphy. + +2004-08-04 08:54 yozhik + + * BNT/potentials/@dpot/normalize_pot.m: Initial revision + +2004-08-04 08:51 yozhik + + * BNT/potentials/Tables/: marg_table.m, mult_by_table.m, + extend_domain_table.m: Initial import of code base from Kevin + Murphy. + +2004-08-04 08:51 yozhik + + * BNT/potentials/Tables/: marg_table.m, mult_by_table.m, + extend_domain_table.m: Initial revision + +2004-08-02 15:23 yozhik + + * BNT/CPDs/@noisyor_CPD/CPD_to_CPT.m: Initial import of code base + from Kevin Murphy. + +2004-08-02 15:23 yozhik + + * BNT/CPDs/@noisyor_CPD/CPD_to_CPT.m: Initial revision + +2004-08-02 15:05 yozhik + + * BNT/general/noisyORtoTable.m: Initial import of code base from + Kevin Murphy. + +2004-08-02 15:05 yozhik + + * BNT/general/noisyORtoTable.m: Initial revision + +2004-06-29 10:46 yozhik + + * BNT/learning/learn_struct_pdag_pc.m: Initial import of code base + from Kevin Murphy. + +2004-06-29 10:46 yozhik + + * BNT/learning/learn_struct_pdag_pc.m: Initial revision + +2004-06-15 10:50 yozhik + + * GraphViz/graph_to_dot.m: Initial import of code base from Kevin + Murphy. + +2004-06-15 10:50 yozhik + + * GraphViz/graph_to_dot.m: Initial revision + +2004-06-11 14:16 yozhik + + * BNT/CPDs/@tabular_CPD/log_marg_prob_node.m: Initial import of + code base from Kevin Murphy. + +2004-06-11 14:16 yozhik + + * BNT/CPDs/@tabular_CPD/log_marg_prob_node.m: Initial revision + +2004-06-09 18:56 yozhik + + * BNT/README.txt: Initial import of code base from Kevin Murphy. + +2004-06-09 18:56 yozhik + + * BNT/README.txt: Initial revision + +2004-06-09 18:53 yozhik + + * BNT/CPDs/@generic_CPD/learn_params.m: Initial import of code base + from Kevin Murphy. + +2004-06-09 18:53 yozhik + + * BNT/CPDs/@generic_CPD/learn_params.m: Initial revision + +2004-06-09 18:42 yozhik + + * BNT/examples/static/nodeorderExample.m: Initial import of code + base from Kevin Murphy. + +2004-06-09 18:42 yozhik + + * BNT/examples/static/nodeorderExample.m: Initial revision + +2004-06-09 18:33 yozhik + + * BNT/: learning/score_family.m, test_BNT.m: Initial import of code + base from Kevin Murphy. + +2004-06-09 18:33 yozhik + + * BNT/: learning/score_family.m, test_BNT.m: Initial revision + +2004-06-09 18:28 yozhik + + * BNT/: learning/learn_params.m, CPDs/@gaussian_CPD/learn_params.m, + examples/static/gaussian2.m: Initial import of code base from + Kevin Murphy. + +2004-06-09 18:28 yozhik + + * BNT/: learning/learn_params.m, CPDs/@gaussian_CPD/learn_params.m, + examples/static/gaussian2.m: Initial revision + +2004-06-09 18:25 yozhik + + * BNT/CPDs/@tabular_CPD/learn_params.m: Initial import of code base + from Kevin Murphy. + +2004-06-09 18:25 yozhik + + * BNT/CPDs/@tabular_CPD/learn_params.m: Initial revision + +2004-06-09 18:17 yozhik + + * BNT/general/sample_bnet.m: Initial import of code base from Kevin + Murphy. + +2004-06-09 18:17 yozhik + + * BNT/general/sample_bnet.m: Initial revision + +2004-06-07 12:45 yozhik + + * BNT/examples/static/discrete1.m: Initial import of code base from + Kevin Murphy. + +2004-06-07 12:45 yozhik + + * BNT/examples/static/discrete1.m: Initial revision + +2004-06-07 12:04 yozhik + + * BNT/: inference/static/@global_joint_inf_engine/marginal_nodes.m, + inference/static/@global_joint_inf_engine/enter_evidence.m, + examples/dynamic/mk_bat_dbn.m: Initial import of code base from + Kevin Murphy. + +2004-06-07 12:04 yozhik + + * BNT/: inference/static/@global_joint_inf_engine/marginal_nodes.m, + inference/static/@global_joint_inf_engine/enter_evidence.m, + examples/dynamic/mk_bat_dbn.m: Initial revision + +2004-06-07 08:53 yozhik + + * BNT/examples/limids/asia_dt1.m: Initial import of code base from + Kevin Murphy. + +2004-06-07 08:53 yozhik + + * BNT/examples/limids/asia_dt1.m: Initial revision + +2004-06-07 08:48 yozhik + + * BNT/general/: solve_limid.m, compute_joint_pot.m: Initial import + of code base from Kevin Murphy. + +2004-06-07 08:48 yozhik + + * BNT/general/: solve_limid.m, compute_joint_pot.m: Initial + revision + +2004-06-07 07:39 yozhik + + * Kalman/README.txt: Initial import of code base from Kevin Murphy. + +2004-06-07 07:39 yozhik + + * Kalman/README.txt: Initial revision + +2004-06-07 07:33 yozhik + + * GraphViz/README.txt: Initial import of code base from Kevin + Murphy. + +2004-06-07 07:33 yozhik + + * GraphViz/README.txt: Initial revision + +2004-05-31 15:19 yozhik + + * HMM/dhmm_sample.m: Initial import of code base from Kevin Murphy. + +2004-05-31 15:19 yozhik + + * HMM/dhmm_sample.m: Initial revision + +2004-05-25 17:32 yozhik + + * HMM/mhmm_sample.m: Initial import of code base from Kevin Murphy. + +2004-05-25 17:32 yozhik + + * HMM/mhmm_sample.m: Initial revision + +2004-05-24 15:26 yozhik + + * HMM/mc_sample.m: Initial import of code base from Kevin Murphy. + +2004-05-24 15:26 yozhik + + * HMM/mc_sample.m: Initial revision + +2004-05-18 07:50 yozhik + + * BNT/installC_graph.m: Initial import of code base from Kevin + Murphy. + +2004-05-18 07:50 yozhik + + * BNT/installC_graph.m: Initial revision + +2004-05-13 18:13 yozhik + + * BNT/inference/static/@gaussian_inf_engine/gaussian_inf_engine.m: + Initial import of code base from Kevin Murphy. + +2004-05-13 18:13 yozhik + + * BNT/inference/static/@gaussian_inf_engine/gaussian_inf_engine.m: + Initial revision + +2004-05-11 12:23 yozhik + + * BNT/examples/dynamic/mk_chmm.m: Initial import of code base from + Kevin Murphy. + +2004-05-11 12:23 yozhik + + * BNT/examples/dynamic/mk_chmm.m: Initial revision + +2004-05-11 11:45 yozhik + + * BNT/examples/dynamic/mk_water_dbn.m: Initial import of code base + from Kevin Murphy. + +2004-05-11 11:45 yozhik + + * BNT/examples/dynamic/mk_water_dbn.m: Initial revision + +2004-05-05 06:32 yozhik + + * GraphViz/draw_dot.m: Initial import of code base from Kevin + Murphy. + +2004-05-05 06:32 yozhik + + * GraphViz/draw_dot.m: Initial revision + +2004-03-30 09:18 yozhik + + * BNT/: general/mk_named_CPT.m, + CPDs/@softmax_CPD/convert_to_table.m: Initial import of code base + from Kevin Murphy. + +2004-03-30 09:18 yozhik + + * BNT/: general/mk_named_CPT.m, + CPDs/@softmax_CPD/convert_to_table.m: Initial revision + +2004-03-22 14:32 yozhik + + * GraphViz/draw_graph.m: Initial import of code base from Kevin + Murphy. + +2004-03-22 14:32 yozhik + + * GraphViz/draw_graph.m: Initial revision + +2004-03-12 15:21 yozhik + + * GraphViz/dot_to_graph.m: Initial import of code base from Kevin + Murphy. + +2004-03-12 15:21 yozhik + + * GraphViz/dot_to_graph.m: Initial revision + +2004-03-04 14:34 yozhik + + * BNT/examples/static/burglary.m: Initial import of code base from + Kevin Murphy. + +2004-03-04 14:34 yozhik + + * BNT/examples/static/burglary.m: Initial revision + +2004-03-04 14:27 yozhik + + * BNT/examples/static/burglar-alarm-net.lisp.txt: Initial import of + code base from Kevin Murphy. + +2004-03-04 14:27 yozhik + + * BNT/examples/static/burglar-alarm-net.lisp.txt: Initial revision + +2004-02-28 09:25 yozhik + + * BNT/examples/static/learn1.m: Initial import of code base from + Kevin Murphy. + +2004-02-28 09:25 yozhik + + * BNT/examples/static/learn1.m: Initial revision + +2004-02-22 11:43 yozhik + + * BNT/examples/static/brainy.m: Initial import of code base from + Kevin Murphy. + +2004-02-22 11:43 yozhik + + * BNT/examples/static/brainy.m: Initial revision + +2004-02-20 14:00 yozhik + + * BNT/CPDs/@discrete_CPD/convert_to_pot.m: Initial import of code + base from Kevin Murphy. + +2004-02-20 14:00 yozhik + + * BNT/CPDs/@discrete_CPD/convert_to_pot.m: Initial revision + +2004-02-18 17:12 yozhik + + * + BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_soft_evidence.m: + Initial import of code base from Kevin Murphy. + +2004-02-18 17:12 yozhik + + * + BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_soft_evidence.m: + Initial revision + +2004-02-13 18:06 yozhik + + * HMM/mhmmParzen_train_observed.m: Initial import of code base from + Kevin Murphy. + +2004-02-13 18:06 yozhik + + * HMM/mhmmParzen_train_observed.m: Initial revision + +2004-02-12 15:08 yozhik + + * HMM/gausshmm_train_observed.m: Initial import of code base from + Kevin Murphy. + +2004-02-12 15:08 yozhik + + * HMM/gausshmm_train_observed.m: Initial revision + +2004-02-12 04:57 yozhik + + * BNT/examples/static/HME/hmemenu.m: Initial import of code base + from Kevin Murphy. + +2004-02-12 04:57 yozhik + + * BNT/examples/static/HME/hmemenu.m: Initial revision + +2004-02-07 20:52 yozhik + + * HMM/mhmm_em.m: Initial import of code base from Kevin Murphy. + +2004-02-07 20:52 yozhik + + * HMM/mhmm_em.m: Initial revision + +2004-02-04 15:53 yozhik + + * BNT/examples/dynamic/mk_orig_bat_dbn.m: Initial import of code + base from Kevin Murphy. + +2004-02-04 15:53 yozhik + + * BNT/examples/dynamic/mk_orig_bat_dbn.m: Initial revision + +2004-02-03 23:42 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/enter_soft_evidence.m: + Initial import of code base from Kevin Murphy. + +2004-02-03 23:42 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/enter_soft_evidence.m: + Initial revision + +2004-02-03 09:15 yozhik + + * GraphViz/Old/graphToDot.m: Initial import of code base from Kevin + Murphy. + +2004-02-03 09:15 yozhik + + * GraphViz/Old/graphToDot.m: Initial revision + +2004-01-30 18:57 yozhik + + * BNT/examples/dynamic/mk_orig_water_dbn.m: Initial import of code + base from Kevin Murphy. + +2004-01-30 18:57 yozhik + + * BNT/examples/dynamic/mk_orig_water_dbn.m: Initial revision + +2004-01-27 13:08 yozhik + + * GraphViz/: my_call.m, editGraphGUI.m: Initial import of code base + from Kevin Murphy. + +2004-01-27 13:08 yozhik + + * GraphViz/: my_call.m, editGraphGUI.m: Initial revision + +2004-01-27 13:01 yozhik + + * GraphViz/Old/: dot_to_graph.m, draw_graph.m: Initial import of + code base from Kevin Murphy. + +2004-01-27 13:01 yozhik + + * GraphViz/Old/: dot_to_graph.m, draw_graph.m: Initial revision + +2004-01-27 12:47 yozhik + + * GraphViz/Old/pre_pesha_graph_to_dot.m: Initial import of code + base from Kevin Murphy. + +2004-01-27 12:47 yozhik + + * GraphViz/Old/pre_pesha_graph_to_dot.m: Initial revision + +2004-01-27 12:42 yozhik + + * GraphViz/Old/draw_dot.m: Initial import of code base from Kevin + Murphy. + +2004-01-27 12:42 yozhik + + * GraphViz/Old/draw_dot.m: Initial revision + +2004-01-14 17:06 yozhik + + * BNT/examples/static/Models/mk_hmm_bnet.m: Initial import of code + base from Kevin Murphy. + +2004-01-14 17:06 yozhik + + * BNT/examples/static/Models/mk_hmm_bnet.m: Initial revision + +2004-01-12 12:53 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/enter_evidence.m: Initial + import of code base from Kevin Murphy. + +2004-01-12 12:53 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/enter_evidence.m: Initial + revision + +2004-01-04 17:23 yozhik + + * BNT/inference/static/@belprop_mrf2_inf_engine/bp_mrf2.m: Initial + import of code base from Kevin Murphy. + +2004-01-04 17:23 yozhik + + * BNT/inference/static/@belprop_mrf2_inf_engine/bp_mrf2.m: Initial + revision + +2003-12-15 22:17 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/marginal_nodes.m: Initial + import of code base from Kevin Murphy. + +2003-12-15 22:17 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/marginal_nodes.m: Initial + revision + +2003-10-31 14:37 yozhik + + * BNT/inference/static/@jtree_inf_engine/jtree_inf_engine.m: + Initial import of code base from Kevin Murphy. + +2003-10-31 14:37 yozhik + + * BNT/inference/static/@jtree_inf_engine/jtree_inf_engine.m: + Initial revision + +2003-09-05 07:06 yozhik + + * BNT/learning/learn_struct_mcmc.m: Initial import of code base + from Kevin Murphy. + +2003-09-05 07:06 yozhik + + * BNT/learning/learn_struct_mcmc.m: Initial revision + +2003-08-18 14:50 yozhik + + * BNT/learning/learn_params_dbn_em.m: Initial import of code base + from Kevin Murphy. + +2003-08-18 14:50 yozhik + + * BNT/learning/learn_params_dbn_em.m: Initial revision + +2003-07-30 06:37 yozhik + + * BNT/potentials/: @mpot/set_domain_pot.m, + @cgpot/Old/set_domain_pot.m, @cgpot/set_domain_pot.m: Initial + import of code base from Kevin Murphy. + +2003-07-30 06:37 yozhik + + * BNT/potentials/: @mpot/set_domain_pot.m, + @cgpot/Old/set_domain_pot.m, @cgpot/set_domain_pot.m: Initial + revision + +2003-07-28 19:44 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/: dbn_init_bel.m, + dbn_marginal_from_bel.m, dbn_update_bel.m, dbn_update_bel1.m, + marginal_family.m, update_engine.m: Initial import of code base + from Kevin Murphy. + +2003-07-28 19:44 yozhik + + * BNT/inference/dynamic/@cbk_inf_engine/: dbn_init_bel.m, + dbn_marginal_from_bel.m, dbn_update_bel.m, dbn_update_bel1.m, + marginal_family.m, update_engine.m: Initial revision + +2003-07-28 15:44 yozhik + + * GraphViz/: approxeq.m, process_options.m: Initial import of code + base from Kevin Murphy. + +2003-07-28 15:44 yozhik + + * GraphViz/: approxeq.m, process_options.m: Initial revision + +2003-07-24 06:41 yozhik + + * BNT/CPDs/@hhmmQ_CPD/update_ess.m: Initial import of code base + from Kevin Murphy. + +2003-07-24 06:41 yozhik + + * BNT/CPDs/@hhmmQ_CPD/update_ess.m: Initial revision + +2003-07-22 15:55 yozhik + + * BNT/CPDs/@gaussian_CPD/update_ess.m: Initial import of code base + from Kevin Murphy. + +2003-07-22 15:55 yozhik + + * BNT/CPDs/@gaussian_CPD/update_ess.m: Initial revision + +2003-07-06 13:57 yozhik + + * BNT/inference/static/@pearl_inf_engine/bethe_free_energy.m: + Initial import of code base from Kevin Murphy. + +2003-07-06 13:57 yozhik + + * BNT/inference/static/@pearl_inf_engine/bethe_free_energy.m: + Initial revision + +2003-05-21 06:49 yozhik + + * BNT/potentials/@scgpot/: complement_pot.m, normalize_pot.m, + recursive_combine_pots.m: Initial import of code base from Kevin + Murphy. + +2003-05-21 06:49 yozhik + + * BNT/potentials/@scgpot/: complement_pot.m, normalize_pot.m, + recursive_combine_pots.m: Initial revision + +2003-05-20 07:10 yozhik + + * BNT/CPDs/@gaussian_CPD/maximize_params.m: Initial import of code + base from Kevin Murphy. + +2003-05-20 07:10 yozhik + + * BNT/CPDs/@gaussian_CPD/maximize_params.m: Initial revision + +2003-05-13 09:11 yozhik + + * HMM/mhmm_em_demo.m: Initial import of code base from Kevin + Murphy. + +2003-05-13 09:11 yozhik + + * HMM/mhmm_em_demo.m: Initial revision + +2003-05-13 07:35 yozhik + + * BNT/examples/dynamic/viterbi1.m: Initial import of code base from + Kevin Murphy. + +2003-05-13 07:35 yozhik + + * BNT/examples/dynamic/viterbi1.m: Initial revision + +2003-05-11 16:31 yozhik + + * BNT/CPDs/@gaussian_CPD/convert_to_table.m: Initial import of code + base from Kevin Murphy. + +2003-05-11 16:31 yozhik + + * BNT/CPDs/@gaussian_CPD/convert_to_table.m: Initial revision + +2003-05-11 16:13 yozhik + + * BNT/CPDs/@gaussian_CPD/gaussian_CPD_params_given_dps.m: Initial + import of code base from Kevin Murphy. + +2003-05-11 16:13 yozhik + + * BNT/CPDs/@gaussian_CPD/gaussian_CPD_params_given_dps.m: Initial + revision + +2003-05-11 08:39 yozhik + + * BNT/inference/static/@stab_cond_gauss_inf_engine/README: Initial + import of code base from Kevin Murphy. + +2003-05-11 08:39 yozhik + + * BNT/inference/static/@stab_cond_gauss_inf_engine/README: Initial + revision + +2003-05-04 15:31 yozhik + + * BNT/uninstallC_BNT.m: Initial import of code base from Kevin + Murphy. + +2003-05-04 15:31 yozhik + + * BNT/uninstallC_BNT.m: Initial revision + +2003-05-04 15:23 yozhik + + * BNT/examples/dynamic/: dhmm1.m, ghmm1.m, mhmm1.m: Initial import + of code base from Kevin Murphy. + +2003-05-04 15:23 yozhik + + * BNT/examples/dynamic/: dhmm1.m, ghmm1.m, mhmm1.m: Initial + revision + +2003-05-04 15:11 yozhik + + * HMM/mhmm_logprob.m: Initial import of code base from Kevin + Murphy. + +2003-05-04 15:11 yozhik + + * HMM/mhmm_logprob.m: Initial revision + +2003-05-04 15:01 yozhik + + * HMM/: dhmm_logprob.m, dhmm_em_online.m, dhmm_em_online_demo.m: + Initial import of code base from Kevin Murphy. + +2003-05-04 15:01 yozhik + + * HMM/: dhmm_logprob.m, dhmm_em_online.m, dhmm_em_online_demo.m: + Initial revision + +2003-05-04 14:58 yozhik + + * HMM/: pomdp_sample.m, dhmm_sample_endstate.m, dhmm_em_demo.m: + Initial import of code base from Kevin Murphy. + +2003-05-04 14:58 yozhik + + * HMM/: pomdp_sample.m, dhmm_sample_endstate.m, dhmm_em_demo.m: + Initial revision + +2003-05-04 14:47 yozhik + + * + BNT/inference/online/@hmm_2TBN_inf_engine/private/mk_hmm_obs_lik_vec.m: + Initial import of code base from Kevin Murphy. + +2003-05-04 14:47 yozhik + + * + BNT/inference/online/@hmm_2TBN_inf_engine/private/mk_hmm_obs_lik_vec.m: + Initial revision + +2003-05-04 14:42 yozhik + + * + BNT/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_matrix.m: + Initial import of code base from Kevin Murphy. + +2003-05-04 14:42 yozhik + + * + BNT/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_matrix.m: + Initial revision + +2003-04-22 14:00 yozhik + + * BNT/CPDs/@tabular_CPD/display.m: Initial import of code base from + Kevin Murphy. + +2003-04-22 14:00 yozhik + + * BNT/CPDs/@tabular_CPD/display.m: Initial revision + +2003-03-28 09:22 yozhik + + * BNT/examples/dynamic/ho1.m: Initial import of code base from + Kevin Murphy. + +2003-03-28 09:22 yozhik + + * BNT/examples/dynamic/ho1.m: Initial revision + +2003-03-28 09:12 yozhik + + * + BNT/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m: + Initial import of code base from Kevin Murphy. + +2003-03-28 09:12 yozhik + + * + BNT/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m: + Initial revision + +2003-03-28 08:35 yozhik + + * GraphViz/arrow.m: Initial import of code base from Kevin Murphy. + +2003-03-28 08:35 yozhik + + * GraphViz/arrow.m: Initial revision + +2003-03-25 16:06 yozhik + + * BNT/examples/static/Models/mk_asia_bnet.m: Initial import of code + base from Kevin Murphy. + +2003-03-25 16:06 yozhik + + * BNT/examples/static/Models/mk_asia_bnet.m: Initial revision + +2003-03-20 07:07 yozhik + + * BNT/potentials/@scgpot/README: Initial import of code base from + Kevin Murphy. + +2003-03-20 07:07 yozhik + + * BNT/potentials/@scgpot/README: Initial revision + +2003-03-14 01:45 yozhik + + * + BNT/inference/dynamic/@stable_ho_inf_engine/stable_ho_inf_engine.m: + Initial import of code base from Kevin Murphy. + +2003-03-14 01:45 yozhik + + * + BNT/inference/dynamic/@stable_ho_inf_engine/stable_ho_inf_engine.m: + Initial revision + +2003-03-12 02:38 yozhik + + * + BNT/inference/static/@stab_cond_gauss_inf_engine/enter_evidence.m: + Initial import of code base from Kevin Murphy. + +2003-03-12 02:38 yozhik + + * + BNT/inference/static/@stab_cond_gauss_inf_engine/enter_evidence.m: + Initial revision + +2003-03-11 10:07 yozhik + + * BNT/potentials/@scgpot/reduce_pot.m: Initial import of code base + from Kevin Murphy. + +2003-03-11 10:07 yozhik + + * BNT/potentials/@scgpot/reduce_pot.m: Initial revision + +2003-03-11 09:49 yozhik + + * BNT/potentials/@scgpot/combine_pots.m: Initial import of code + base from Kevin Murphy. + +2003-03-11 09:49 yozhik + + * BNT/potentials/@scgpot/combine_pots.m: Initial revision + +2003-03-11 09:37 yozhik + + * BNT/potentials/@scgcpot/reduce_pot.m: Initial import of code base + from Kevin Murphy. + +2003-03-11 09:37 yozhik + + * BNT/potentials/@scgcpot/reduce_pot.m: Initial revision + +2003-03-11 09:06 yozhik + + * BNT/potentials/@scgpot/marginalize_pot.m: Initial import of code + base from Kevin Murphy. + +2003-03-11 09:06 yozhik + + * BNT/potentials/@scgpot/marginalize_pot.m: Initial revision + +2003-03-11 06:04 yozhik + + * BNT/potentials/@scgpot/scgpot.m: Initial import of code base from + Kevin Murphy. + +2003-03-11 06:04 yozhik + + * BNT/potentials/@scgpot/scgpot.m: Initial revision + +2003-03-09 15:03 yozhik + + * BNT/CPDs/@gaussian_CPD/convert_to_pot.m: Initial import of code + base from Kevin Murphy. + +2003-03-09 15:03 yozhik + + * BNT/CPDs/@gaussian_CPD/convert_to_pot.m: Initial revision + +2003-03-09 14:44 yozhik + + * BNT/CPDs/@tabular_CPD/maximize_params.m: Initial import of code + base from Kevin Murphy. + +2003-03-09 14:44 yozhik + + * BNT/CPDs/@tabular_CPD/maximize_params.m: Initial revision + +2003-02-21 03:20 yozhik + + * + BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_difclq_nodes.m: + Initial import of code base from Kevin Murphy. + +2003-02-21 03:20 yozhik + + * + BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_difclq_nodes.m: + Initial revision + +2003-02-21 03:13 yozhik + + * + BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_nodes.m: + Initial import of code base from Kevin Murphy. + +2003-02-21 03:13 yozhik + + * + BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_nodes.m: + Initial revision + +2003-02-19 01:52 yozhik + + * BNT/inference/dynamic/@stable_ho_inf_engine/: enter_evidence.m, + marginal_family.m, marginal_nodes.m, test_ho_inf_enginge.m, + update_engine.m: Initial import of code base from Kevin Murphy. + +2003-02-19 01:52 yozhik + + * BNT/inference/dynamic/@stable_ho_inf_engine/: enter_evidence.m, + marginal_family.m, marginal_nodes.m, test_ho_inf_enginge.m, + update_engine.m: Initial revision + +2003-02-10 07:38 yozhik + + * BNT/inference/static/@stab_cond_gauss_inf_engine/push.m: Initial + import of code base from Kevin Murphy. + +2003-02-10 07:38 yozhik + + * BNT/inference/static/@stab_cond_gauss_inf_engine/push.m: Initial + revision + +2003-02-06 18:25 yozhik + + * KPMtools/checkpsd.m: Initial import of code base from Kevin + Murphy. + +2003-02-06 18:25 yozhik + + * KPMtools/checkpsd.m: Initial revision + +2003-02-05 19:16 yozhik + + * GraphViz/draw_hmm.m: Initial import of code base from Kevin + Murphy. + +2003-02-05 19:16 yozhik + + * GraphViz/draw_hmm.m: Initial revision + +2003-02-01 16:23 yozhik + + * BNT/: general/dbn_to_hmm.m, learning/learn_params_dbn.m: Initial + import of code base from Kevin Murphy. + +2003-02-01 16:23 yozhik + + * BNT/: general/dbn_to_hmm.m, learning/learn_params_dbn.m: Initial + revision + +2003-02-01 11:42 yozhik + + * BNT/general/mk_dbn.m: Initial import of code base from Kevin + Murphy. + +2003-02-01 11:42 yozhik + + * BNT/general/mk_dbn.m: Initial revision + +2003-01-30 16:13 yozhik + + * BNT/CPDs/@gaussian_CPD/maximize_params_debug.m: Initial import of + code base from Kevin Murphy. + +2003-01-30 16:13 yozhik + + * BNT/CPDs/@gaussian_CPD/maximize_params_debug.m: Initial revision + +2003-01-30 14:38 yozhik + + * BNT/CPDs/@gaussian_CPD/Old/maximize_params.m: Initial import of + code base from Kevin Murphy. + +2003-01-30 14:38 yozhik + + * BNT/CPDs/@gaussian_CPD/Old/maximize_params.m: Initial revision + +2003-01-29 03:23 yozhik + + * + BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_singleclq_nodes.m: + Initial import of code base from Kevin Murphy. + +2003-01-29 03:23 yozhik + + * + BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_singleclq_nodes.m: + Initial revision + +2003-01-24 11:36 yozhik + + * Kalman/sample_lds.m: Initial import of code base from Kevin + Murphy. + +2003-01-24 11:36 yozhik + + * Kalman/sample_lds.m: Initial revision + +2003-01-24 04:52 yozhik + + * BNT/potentials/@scgpot/extension_pot.m: Initial import of code + base from Kevin Murphy. + +2003-01-24 04:52 yozhik + + * BNT/potentials/@scgpot/extension_pot.m: Initial revision + +2003-01-23 10:49 yozhik + + * BNT/: general/convert_dbn_CPDs_to_tables1.m, + inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_vec.m: + Initial import of code base from Kevin Murphy. + +2003-01-23 10:49 yozhik + + * BNT/: general/convert_dbn_CPDs_to_tables1.m, + inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_vec.m: + Initial revision + +2003-01-23 10:44 yozhik + + * BNT/general/convert_dbn_CPDs_to_tables.m: Initial import of code + base from Kevin Murphy. + +2003-01-23 10:44 yozhik + + * BNT/general/convert_dbn_CPDs_to_tables.m: Initial revision + +2003-01-22 13:38 yozhik + + * BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Initial + import of code base from Kevin Murphy. + +2003-01-22 13:38 yozhik + + * BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Initial + revision + +2003-01-22 12:32 yozhik + + * HMM/mc_sample_endstate.m: Initial import of code base from Kevin + Murphy. + +2003-01-22 12:32 yozhik + + * HMM/mc_sample_endstate.m: Initial revision + +2003-01-22 09:56 yozhik + + * HMM/fixed_lag_smoother.m: Initial import of code base from Kevin + Murphy. + +2003-01-22 09:56 yozhik + + * HMM/fixed_lag_smoother.m: Initial revision + +2003-01-20 08:56 yozhik + + * GraphViz/draw_graph_test.m: Initial import of code base from + Kevin Murphy. + +2003-01-20 08:56 yozhik + + * GraphViz/draw_graph_test.m: Initial revision + +2003-01-18 15:10 yozhik + + * BNT/general/dsep_test.m: Initial import of code base from Kevin + Murphy. + +2003-01-18 15:10 yozhik + + * BNT/general/dsep_test.m: Initial revision + +2003-01-18 15:00 yozhik + + * BNT/copyright.txt: Initial import of code base from Kevin Murphy. + +2003-01-18 15:00 yozhik + + * BNT/copyright.txt: Initial revision + +2003-01-18 14:49 yozhik + + * Kalman/tracking_demo.m: Initial import of code base from Kevin + Murphy. + +2003-01-18 14:49 yozhik + + * Kalman/tracking_demo.m: Initial revision + +2003-01-18 14:22 yozhik + + * BNT/: examples/dummy, inference/dummy, inference/dynamic/dummy, + inference/online/dummy, inference/static/dummy: Initial import of + code base from Kevin Murphy. + +2003-01-18 14:22 yozhik + + * BNT/: examples/dummy, inference/dummy, inference/dynamic/dummy, + inference/online/dummy, inference/static/dummy: Initial revision + +2003-01-18 14:16 yozhik + + * BNT/examples/dynamic/: ehmm1.m, jtree_clq_test.m: Initial import + of code base from Kevin Murphy. + +2003-01-18 14:16 yozhik + + * BNT/examples/dynamic/: ehmm1.m, jtree_clq_test.m: Initial + revision + +2003-01-18 14:11 yozhik + + * BNT/inference/static/: + @jtree_sparse_inf_engine/jtree_sparse_inf_engine.m, + @jtree_mnet_inf_engine/jtree_mnet_inf_engine.m: Initial import of + code base from Kevin Murphy. + +2003-01-18 14:11 yozhik + + * BNT/inference/static/: + @jtree_sparse_inf_engine/jtree_sparse_inf_engine.m, + @jtree_mnet_inf_engine/jtree_mnet_inf_engine.m: Initial revision + +2003-01-18 13:17 yozhik + + * GraphViz/draw_dbn_test.m: Initial import of code base from Kevin + Murphy. + +2003-01-18 13:17 yozhik + + * GraphViz/draw_dbn_test.m: Initial revision + +2003-01-11 10:53 yozhik + + * BNT/inference/static/@pearl_inf_engine/pearl_inf_engine.m: + Initial import of code base from Kevin Murphy. + +2003-01-11 10:53 yozhik + + * BNT/inference/static/@pearl_inf_engine/pearl_inf_engine.m: + Initial revision + +2003-01-11 10:48 yozhik + + * BNT/examples/dynamic/HHMM/Map/learn_map.m: Initial import of code + base from Kevin Murphy. + +2003-01-11 10:48 yozhik + + * BNT/examples/dynamic/HHMM/Map/learn_map.m: Initial revision + +2003-01-11 10:41 yozhik + + * BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_evidence.m: + Initial import of code base from Kevin Murphy. + +2003-01-11 10:41 yozhik + + * BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_evidence.m: + Initial revision + +2003-01-11 10:13 yozhik + + * BNT/inference/dynamic/@bk_inf_engine/enter_soft_evidence.m: + Initial import of code base from Kevin Murphy. + +2003-01-11 10:13 yozhik + + * BNT/inference/dynamic/@bk_inf_engine/enter_soft_evidence.m: + Initial revision + +2003-01-07 08:25 yozhik + + * BNT/CPDs/@softmax_CPD/softmax_CPD.m: Initial import of code base + from Kevin Murphy. + +2003-01-07 08:25 yozhik + + * BNT/CPDs/@softmax_CPD/softmax_CPD.m: Initial revision + +2003-01-03 14:01 yozhik + + * + BNT/inference/static/@belprop_mrf2_inf_engine/belprop_mrf2_inf_engine.m: + Initial import of code base from Kevin Murphy. + +2003-01-03 14:01 yozhik + + * + BNT/inference/static/@belprop_mrf2_inf_engine/belprop_mrf2_inf_engine.m: + Initial revision + +2003-01-02 09:49 yozhik + + * BNT/inference/static/@belprop_mrf2_inf_engine/find_mpe.m: Initial + import of code base from Kevin Murphy. + +2003-01-02 09:49 yozhik + + * BNT/inference/static/@belprop_mrf2_inf_engine/find_mpe.m: Initial + revision + +2003-01-02 09:28 yozhik + + * BNT/inference/static/@belprop_mrf2_inf_engine/: set_params.m, + enter_soft_evidence.m: Initial import of code base from Kevin + Murphy. + +2003-01-02 09:28 yozhik + + * BNT/inference/static/@belprop_mrf2_inf_engine/: set_params.m, + enter_soft_evidence.m: Initial revision + +2002-12-31 14:06 yozhik + + * BNT/general/mk_mrf2.m: Initial import of code base from Kevin + Murphy. + +2002-12-31 14:06 yozhik + + * BNT/general/mk_mrf2.m: Initial revision + +2002-12-31 13:24 yozhik + + * BNT/inference/static/@belprop_mrf2_inf_engine/marginal_nodes.m: + Initial import of code base from Kevin Murphy. + +2002-12-31 13:24 yozhik + + * BNT/inference/static/@belprop_mrf2_inf_engine/marginal_nodes.m: + Initial revision + +2002-12-31 11:00 yozhik + + * BNT/inference/static/@belprop_inf_engine/belprop_inf_engine.m: + Initial import of code base from Kevin Murphy. + +2002-12-31 11:00 yozhik + + * BNT/inference/static/@belprop_inf_engine/belprop_inf_engine.m: + Initial revision + +2002-12-16 11:16 yozhik + + * BNT/examples/dynamic/HHMM/remove_hhmm_end_state.m: Initial import + of code base from Kevin Murphy. + +2002-12-16 11:16 yozhik + + * BNT/examples/dynamic/HHMM/remove_hhmm_end_state.m: Initial + revision + +2002-12-16 09:57 yozhik + + * BNT/general/unroll_set.m: Initial import of code base from Kevin + Murphy. + +2002-12-16 09:57 yozhik + + * BNT/general/unroll_set.m: Initial revision + +2002-11-26 14:14 yozhik + + * BNT/examples/dynamic/HHMM/Mgram/mgram3.m: Initial import of code + base from Kevin Murphy. + +2002-11-26 14:14 yozhik + + * BNT/examples/dynamic/HHMM/Mgram/mgram3.m: Initial revision + +2002-11-26 14:04 yozhik + + * BNT/examples/dynamic/HHMM/Mgram/mgram2.m: Initial import of code + base from Kevin Murphy. + +2002-11-26 14:04 yozhik + + * BNT/examples/dynamic/HHMM/Mgram/mgram2.m: Initial revision + +2002-11-22 16:44 yozhik + + * BNT/examples/dynamic/HHMM/Mgram/Old/mgram2.m: Initial import of + code base from Kevin Murphy. + +2002-11-22 16:44 yozhik + + * BNT/examples/dynamic/HHMM/Mgram/Old/mgram2.m: Initial revision + +2002-11-22 15:59 yozhik + + * BNT/examples/dynamic/HHMM/Mgram/mgram1.m: Initial import of code + base from Kevin Murphy. + +2002-11-22 15:59 yozhik + + * BNT/examples/dynamic/HHMM/Mgram/mgram1.m: Initial revision + +2002-11-22 15:51 yozhik + + * BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_nodes.m: + Initial import of code base from Kevin Murphy. + +2002-11-22 15:51 yozhik + + * BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_nodes.m: + Initial revision + +2002-11-22 15:07 yozhik + + * BNT/examples/dynamic/HHMM/Mgram/: num2letter.m, letter2num.m: + Initial import of code base from Kevin Murphy. + +2002-11-22 15:07 yozhik + + * BNT/examples/dynamic/HHMM/Mgram/: num2letter.m, letter2num.m: + Initial revision + +2002-11-22 14:35 yozhik + + * BNT/general/convert_dbn_CPDs_to_pots.m: Initial import of code + base from Kevin Murphy. + +2002-11-22 14:35 yozhik + + * BNT/general/convert_dbn_CPDs_to_pots.m: Initial revision + +2002-11-22 13:45 yozhik + + * HMM/mk_rightleft_transmat.m: Initial import of code base from + Kevin Murphy. + +2002-11-22 13:45 yozhik + + * HMM/mk_rightleft_transmat.m: Initial revision + +2002-11-14 12:33 yozhik + + * BNT/examples/dynamic/water2.m: Initial import of code base from + Kevin Murphy. + +2002-11-14 12:33 yozhik + + * BNT/examples/dynamic/water2.m: Initial revision + +2002-11-14 12:07 yozhik + + * BNT/examples/dynamic/water1.m: Initial import of code base from + Kevin Murphy. + +2002-11-14 12:07 yozhik + + * BNT/examples/dynamic/water1.m: Initial revision + +2002-11-14 12:02 yozhik + + * BNT/inference/: online/@hmm_2TBN_inf_engine/marginal_nodes.m, + dynamic/@hmm_inf_engine/marginal_nodes.m, + online/@hmm_2TBN_inf_engine/hmm_2TBN_inf_engine.m, + dynamic/@hmm_inf_engine/hmm_inf_engine.m, + dynamic/@hmm_inf_engine/marginal_family.m, + online/@hmm_2TBN_inf_engine/marginal_family.m: Initial import of + code base from Kevin Murphy. + +2002-11-14 12:02 yozhik + + * BNT/inference/: online/@hmm_2TBN_inf_engine/marginal_nodes.m, + dynamic/@hmm_inf_engine/marginal_nodes.m, + online/@hmm_2TBN_inf_engine/hmm_2TBN_inf_engine.m, + dynamic/@hmm_inf_engine/hmm_inf_engine.m, + dynamic/@hmm_inf_engine/marginal_family.m, + online/@hmm_2TBN_inf_engine/marginal_family.m: Initial revision + +2002-11-14 08:31 yozhik + + * BNT/inference/: + online/@jtree_2TBN_inf_engine/jtree_2TBN_inf_engine.m, + dynamic/@jtree_dbn_inf_engine/jtree_dbn_inf_engine.m: Initial + import of code base from Kevin Murphy. + +2002-11-14 08:31 yozhik + + * BNT/inference/: + online/@jtree_2TBN_inf_engine/jtree_2TBN_inf_engine.m, + dynamic/@jtree_dbn_inf_engine/jtree_dbn_inf_engine.m: Initial + revision + +2002-11-13 17:01 yozhik + + * BNT/examples/: static/qmr2.m, dynamic/arhmm1.m: Initial import of + code base from Kevin Murphy. + +2002-11-13 17:01 yozhik + + * BNT/examples/: static/qmr2.m, dynamic/arhmm1.m: Initial revision + +2002-11-03 08:44 yozhik + + * BNT/examples/static/Models/mk_alarm_bnet.m: Initial import of + code base from Kevin Murphy. + +2002-11-03 08:44 yozhik + + * BNT/examples/static/Models/mk_alarm_bnet.m: Initial revision + +2002-11-01 16:32 yozhik + + * Kalman/kalman_forward_backward.m: Initial import of code base + from Kevin Murphy. + +2002-11-01 16:32 yozhik + + * Kalman/kalman_forward_backward.m: Initial revision + +2002-10-23 08:17 yozhik + + * Kalman/learning_demo.m: Initial import of code base from Kevin + Murphy. + +2002-10-23 08:17 yozhik + + * Kalman/learning_demo.m: Initial revision + +2002-10-18 13:05 yozhik + + * BNT/inference/static/@pearl_inf_engine/marginal_family.m: Initial + import of code base from Kevin Murphy. + +2002-10-18 13:05 yozhik + + * BNT/inference/static/@pearl_inf_engine/marginal_family.m: Initial + revision + +2002-10-10 16:45 yozhik + + * BNT/examples/dynamic/jtree_clq_test2.m: Initial import of code + base from Kevin Murphy. + +2002-10-10 16:45 yozhik + + * BNT/examples/dynamic/jtree_clq_test2.m: Initial revision + +2002-10-10 16:14 yozhik + + * BNT/examples/dynamic/: mk_mildew_dbn.m, mk_uffe_dbn.m: Initial + import of code base from Kevin Murphy. + +2002-10-10 16:14 yozhik + + * BNT/examples/dynamic/: mk_mildew_dbn.m, mk_uffe_dbn.m: Initial + revision + +2002-10-09 13:36 yozhik + + * BNT/examples/dynamic/mk_ps_from_clqs.m: Initial import of code + base from Kevin Murphy. + +2002-10-09 13:36 yozhik + + * BNT/examples/dynamic/mk_ps_from_clqs.m: Initial revision + +2002-10-07 06:26 yozhik + + * BNT/CPDs/@deterministic_CPD/deterministic_CPD.m: Initial import + of code base from Kevin Murphy. + +2002-10-07 06:26 yozhik + + * BNT/CPDs/@deterministic_CPD/deterministic_CPD.m: Initial revision + +2002-10-02 08:39 yozhik + + * BNT/potentials/Tables/marg_tableC.c: Initial import of code base + from Kevin Murphy. + +2002-10-02 08:39 yozhik + + * BNT/potentials/Tables/marg_tableC.c: Initial revision + +2002-10-02 08:28 yozhik + + * BNT/potentials/Tables/: mult_by_tableM.m, mult_by_table2.m: + Initial import of code base from Kevin Murphy. + +2002-10-02 08:28 yozhik + + * BNT/potentials/Tables/: mult_by_tableM.m, mult_by_table2.m: + Initial revision + +2002-10-01 14:33 yozhik + + * BNT/potentials/Tables/mult_by_tableC.c: Initial import of code + base from Kevin Murphy. + +2002-10-01 14:33 yozhik + + * BNT/potentials/Tables/mult_by_tableC.c: Initial revision + +2002-10-01 14:23 yozhik + + * BNT/potentials/Tables/mult_by_table.c: Initial import of code + base from Kevin Murphy. + +2002-10-01 14:23 yozhik + + * BNT/potentials/Tables/mult_by_table.c: Initial revision + +2002-10-01 14:20 yozhik + + * BNT/potentials/Tables/repmat_and_mult.c: Initial import of code + base from Kevin Murphy. + +2002-10-01 14:20 yozhik + + * BNT/potentials/Tables/repmat_and_mult.c: Initial revision + +2002-10-01 12:04 yozhik + + * BNT/potentials/@dpot/dpot.m: Initial import of code base from + Kevin Murphy. + +2002-10-01 12:04 yozhik + + * BNT/potentials/@dpot/dpot.m: Initial revision + +2002-10-01 11:21 yozhik + + * BNT/examples/static/Belprop/belprop_polytree_discrete.m: Initial + import of code base from Kevin Murphy. + +2002-10-01 11:21 yozhik + + * BNT/examples/static/Belprop/belprop_polytree_discrete.m: Initial + revision + +2002-10-01 11:16 yozhik + + * BNT/examples/static/cmp_inference_static.m: Initial import of + code base from Kevin Murphy. + +2002-10-01 11:16 yozhik + + * BNT/examples/static/cmp_inference_static.m: Initial revision + +2002-10-01 10:39 yozhik + + * BNT/potentials/Tables/marg_tableM.m: Initial import of code base + from Kevin Murphy. + +2002-10-01 10:39 yozhik + + * BNT/potentials/Tables/marg_tableM.m: Initial revision + +2002-09-29 03:21 yozhik + + * BNT/potentials/Tables/mult_by_table_global.m: Initial import of + code base from Kevin Murphy. + +2002-09-29 03:21 yozhik + + * BNT/potentials/Tables/mult_by_table_global.m: Initial revision + +2002-09-26 01:39 yozhik + + * BNT/learning/learn_struct_K2.m: Initial import of code base from + Kevin Murphy. + +2002-09-26 01:39 yozhik + + * BNT/learning/learn_struct_K2.m: Initial revision + +2002-09-24 15:43 yozhik + + * BNT/: CPDs/@hhmm2Q_CPD/update_ess.m, + CPDs/@hhmm2Q_CPD/maximize_params.m, + examples/dynamic/HHMM/Map/disp_map_hhmm.m: Initial import of code + base from Kevin Murphy. + +2002-09-24 15:43 yozhik + + * BNT/: CPDs/@hhmm2Q_CPD/update_ess.m, + CPDs/@hhmm2Q_CPD/maximize_params.m, + examples/dynamic/HHMM/Map/disp_map_hhmm.m: Initial revision + +2002-09-24 15:34 yozhik + + * BNT/CPDs/@hhmm2Q_CPD/: hhmm2Q_CPD.m, reset_ess.m: Initial import + of code base from Kevin Murphy. + +2002-09-24 15:34 yozhik + + * BNT/CPDs/@hhmm2Q_CPD/: hhmm2Q_CPD.m, reset_ess.m: Initial + revision + +2002-09-24 15:13 yozhik + + * BNT/examples/dynamic/HHMM/Map/mk_rnd_map_hhmm.m: Initial import + of code base from Kevin Murphy. + +2002-09-24 15:13 yozhik + + * BNT/examples/dynamic/HHMM/Map/mk_rnd_map_hhmm.m: Initial revision + +2002-09-24 06:10 yozhik + + * BNT/CPDs/@hhmmQ_CPD/maximize_params.m: Initial import of code + base from Kevin Murphy. + +2002-09-24 06:10 yozhik + + * BNT/CPDs/@hhmmQ_CPD/maximize_params.m: Initial revision + +2002-09-24 06:02 yozhik + + * BNT/examples/dynamic/HHMM/Map/sample_from_map.m: Initial import + of code base from Kevin Murphy. + +2002-09-24 06:02 yozhik + + * BNT/examples/dynamic/HHMM/Map/sample_from_map.m: Initial revision + +2002-09-24 05:46 yozhik + + * BNT/CPDs/@hhmm2Q_CPD/CPD_to_CPT.m: Initial import of code base + from Kevin Murphy. + +2002-09-24 05:46 yozhik + + * BNT/CPDs/@hhmm2Q_CPD/CPD_to_CPT.m: Initial revision + +2002-09-24 03:49 yozhik + + * BNT/examples/dynamic/HHMM/Map/mk_map_hhmm.m: Initial import of + code base from Kevin Murphy. + +2002-09-24 03:49 yozhik + + * BNT/examples/dynamic/HHMM/Map/mk_map_hhmm.m: Initial revision + +2002-09-24 00:02 yozhik + + * BNT/examples/dynamic/HHMM/Map/Old/mk_map_hhmm.m: Initial import + of code base from Kevin Murphy. + +2002-09-24 00:02 yozhik + + * BNT/examples/dynamic/HHMM/Map/Old/mk_map_hhmm.m: Initial revision + +2002-09-23 21:19 yozhik + + * BNT/CPDs/@hhmmQ_CPD/hhmmQ_CPD.m: Initial import of code base from + Kevin Murphy. + +2002-09-23 21:19 yozhik + + * BNT/CPDs/@hhmmQ_CPD/hhmmQ_CPD.m: Initial revision + +2002-09-23 19:58 yozhik + + * BNT/CPDs/@hhmmQ_CPD/update_CPT.m: Initial import of code base + from Kevin Murphy. + +2002-09-23 19:58 yozhik + + * BNT/CPDs/@hhmmQ_CPD/update_CPT.m: Initial revision + +2002-09-23 19:30 yozhik + + * BNT/CPDs/@hhmmQ_CPD/Old/update_CPT.m: Initial import of code base + from Kevin Murphy. + +2002-09-23 19:30 yozhik + + * BNT/CPDs/@hhmmQ_CPD/Old/update_CPT.m: Initial revision + +2002-09-21 14:37 yozhik + + * BNT/examples/dynamic/HHMM/abcd_hhmm.m: Initial import of code + base from Kevin Murphy. + +2002-09-21 14:37 yozhik + + * BNT/examples/dynamic/HHMM/abcd_hhmm.m: Initial revision + +2002-09-21 13:58 yozhik + + * BNT/examples/dynamic/HHMM/mk_hhmm.m: Initial import of code base + from Kevin Murphy. + +2002-09-21 13:58 yozhik + + * BNT/examples/dynamic/HHMM/mk_hhmm.m: Initial revision + +2002-09-10 10:44 yozhik + + * BNT/CPDs/@gaussian_CPD/log_prob_node.m: Initial import of code + base from Kevin Murphy. + +2002-09-10 10:44 yozhik + + * BNT/CPDs/@gaussian_CPD/log_prob_node.m: Initial revision + +2002-07-28 16:09 yozhik + + * BNT/learning/: learn_struct_pdag_pc_constrain.m, CovMat.m: + Initial import of code base from Kevin Murphy. + +2002-07-28 16:09 yozhik + + * BNT/learning/: learn_struct_pdag_pc_constrain.m, CovMat.m: + Initial revision + +2002-07-24 07:48 yozhik + + * BNT/general/hodbn_to_bnet.m: Initial import of code base from + Kevin Murphy. + +2002-07-24 07:48 yozhik + + * BNT/general/hodbn_to_bnet.m: Initial revision + +2002-07-23 06:17 yozhik + + * BNT/general/mk_higher_order_dbn.m: Initial import of code base + from Kevin Murphy. + +2002-07-23 06:17 yozhik + + * BNT/general/mk_higher_order_dbn.m: Initial revision + +2002-07-20 18:25 yozhik + + * BNT/inference/online/@jtree_2TBN_inf_engine/set_fields.m: Initial + import of code base from Kevin Murphy. + +2002-07-20 18:25 yozhik + + * BNT/inference/online/@jtree_2TBN_inf_engine/set_fields.m: Initial + revision + +2002-07-20 17:32 yozhik + + * BNT/inference/online/@jtree_2TBN_inf_engine/back_mpe.m: Initial + import of code base from Kevin Murphy. + +2002-07-20 17:32 yozhik + + * BNT/inference/online/@jtree_2TBN_inf_engine/back_mpe.m: Initial + revision + +2002-07-02 15:56 yozhik + + * BNT/examples/dynamic/HHMM/Motif/learn_motif_hhmm.m: Initial + import of code base from Kevin Murphy. + +2002-07-02 15:56 yozhik + + * BNT/examples/dynamic/HHMM/Motif/learn_motif_hhmm.m: Initial + revision + +2002-06-27 13:34 yozhik + + * BNT/general/add_ev_to_dmarginal.m: Initial import of code base + from Kevin Murphy. + +2002-06-27 13:34 yozhik + + * BNT/general/add_ev_to_dmarginal.m: Initial revision + +2002-06-24 16:54 yozhik + + * BNT/CPDs/@hhmmF_CPD/update_ess.m: Initial import of code base + from Kevin Murphy. + +2002-06-24 16:54 yozhik + + * BNT/CPDs/@hhmmF_CPD/update_ess.m: Initial revision + +2002-06-24 16:38 yozhik + + * BNT/CPDs/@hhmmF_CPD/hhmmF_CPD.m: Initial import of code base from + Kevin Murphy. + +2002-06-24 16:38 yozhik + + * BNT/CPDs/@hhmmF_CPD/hhmmF_CPD.m: Initial revision + +2002-06-24 15:45 yozhik + + * BNT/CPDs/@hhmmF_CPD/update_CPT.m: Initial import of code base + from Kevin Murphy. + +2002-06-24 15:45 yozhik + + * BNT/CPDs/@hhmmF_CPD/update_CPT.m: Initial revision + +2002-06-24 15:35 yozhik + + * BNT/CPDs/@hhmmF_CPD/Old/: hhmmF_CPD.m, log_prior.m, + maximize_params.m, reset_ess.m, update_CPT.m, update_ess.m: + Initial import of code base from Kevin Murphy. + +2002-06-24 15:35 yozhik + + * BNT/CPDs/@hhmmF_CPD/Old/: hhmmF_CPD.m, log_prior.m, + maximize_params.m, reset_ess.m, update_CPT.m, update_ess.m: + Initial revision + +2002-06-24 15:23 yozhik + + * BNT/CPDs/@hhmmQ_CPD/Old/update_ess4.m: Initial import of code + base from Kevin Murphy. + +2002-06-24 15:23 yozhik + + * BNT/CPDs/@hhmmQ_CPD/Old/update_ess4.m: Initial revision + +2002-06-24 15:08 yozhik + + * BNT/CPDs/@hhmmQ_CPD/Old/update_ess3.m: Initial import of code + base from Kevin Murphy. + +2002-06-24 15:08 yozhik + + * BNT/CPDs/@hhmmQ_CPD/Old/update_ess3.m: Initial revision + +2002-06-24 14:20 yozhik + + * BNT/CPDs/@hhmmQ_CPD/Old/update_ess2.m: Initial import of code + base from Kevin Murphy. + +2002-06-24 14:20 yozhik + + * BNT/CPDs/@hhmmQ_CPD/Old/update_ess2.m: Initial revision + +2002-06-24 11:56 yozhik + + * BNT/: general/mk_fgraph_given_ev.m, + CPDs/mk_isolated_tabular_CPD.m: Initial import of code base from + Kevin Murphy. + +2002-06-24 11:56 yozhik + + * BNT/: general/mk_fgraph_given_ev.m, + CPDs/mk_isolated_tabular_CPD.m: Initial revision + +2002-06-24 11:19 yozhik + + * BNT/CPDs/@hhmmQ_CPD/Old/: hhmmQ_CPD.m, log_prior.m, + maximize_params.m, reset_ess.m, update_ess.m: Initial import of + code base from Kevin Murphy. + +2002-06-24 11:19 yozhik + + * BNT/CPDs/@hhmmQ_CPD/Old/: hhmmQ_CPD.m, log_prior.m, + maximize_params.m, reset_ess.m, update_ess.m: Initial revision + +2002-06-20 13:30 yozhik + + * BNT/examples/dynamic/mildew1.m: Initial import of code base from + Kevin Murphy. + +2002-06-20 13:30 yozhik + + * BNT/examples/dynamic/mildew1.m: Initial revision + +2002-06-19 17:18 yozhik + + * BNT/: inference/dynamic/@hmm_inf_engine/find_mpe.m, + examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m: Initial + import of code base from Kevin Murphy. + +2002-06-19 17:18 yozhik + + * BNT/: inference/dynamic/@hmm_inf_engine/find_mpe.m, + examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m: Initial + revision + +2002-06-19 17:03 yozhik + + * BNT/examples/static/fgraph/fg1.m: Initial import of code base + from Kevin Murphy. + +2002-06-19 17:03 yozhik + + * BNT/examples/static/fgraph/fg1.m: Initial revision + +2002-06-19 16:59 yozhik + + * BNT/: examples/static/softev1.m, + inference/static/@belprop_fg_inf_engine/find_mpe.m: Initial + import of code base from Kevin Murphy. + +2002-06-19 16:59 yozhik + + * BNT/: examples/static/softev1.m, + inference/static/@belprop_fg_inf_engine/find_mpe.m: Initial + revision + +2002-06-19 15:11 yozhik + + * BNT/inference/static/@var_elim_inf_engine/find_mpe.m: Initial + import of code base from Kevin Murphy. + +2002-06-19 15:11 yozhik + + * BNT/inference/static/@var_elim_inf_engine/find_mpe.m: Initial + revision + +2002-06-19 15:08 yozhik + + * BNT/: inference/static/@belprop_inf_engine/find_mpe.m, + examples/static/mpe1.m, examples/static/mpe2.m: Initial import of + code base from Kevin Murphy. + +2002-06-19 15:08 yozhik + + * BNT/: inference/static/@belprop_inf_engine/find_mpe.m, + examples/static/mpe1.m, examples/static/mpe2.m: Initial revision + +2002-06-19 15:04 yozhik + + * BNT/inference/static/@var_elim_inf_engine/: + var_elim_inf_engine.m, enter_evidence.m: Initial import of code + base from Kevin Murphy. + +2002-06-19 15:04 yozhik + + * BNT/inference/static/@var_elim_inf_engine/: + var_elim_inf_engine.m, enter_evidence.m: Initial revision + +2002-06-19 14:56 yozhik + + * BNT/inference/static/@global_joint_inf_engine/find_mpe.m: Initial + import of code base from Kevin Murphy. + +2002-06-19 14:56 yozhik + + * BNT/inference/static/@global_joint_inf_engine/find_mpe.m: Initial + revision + +2002-06-17 16:49 yozhik + + * BNT/inference/online/: @jtree_2TBN_inf_engine/back1_mpe.m, + @smoother_engine/find_mpe.m: Initial import of code base from + Kevin Murphy. + +2002-06-17 16:49 yozhik + + * BNT/inference/online/: @jtree_2TBN_inf_engine/back1_mpe.m, + @smoother_engine/find_mpe.m: Initial revision + +2002-06-17 16:46 yozhik + + * BNT/inference/online/: @jtree_2TBN_inf_engine/fwd.m, + @jtree_2TBN_inf_engine/fwd1.m, @smoother_engine/enter_evidence.m: + Initial import of code base from Kevin Murphy. + +2002-06-17 16:46 yozhik + + * BNT/inference/online/: @jtree_2TBN_inf_engine/fwd.m, + @jtree_2TBN_inf_engine/fwd1.m, @smoother_engine/enter_evidence.m: + Initial revision + +2002-06-17 16:38 yozhik + + * BNT/inference/online/@jtree_2TBN_inf_engine/backT_mpe.m: Initial + import of code base from Kevin Murphy. + +2002-06-17 16:38 yozhik + + * BNT/inference/online/@jtree_2TBN_inf_engine/backT_mpe.m: Initial + revision + +2002-06-17 16:34 yozhik + + * BNT/inference/online/@jtree_2TBN_inf_engine/: back.m, backT.m, + back1.m: Initial import of code base from Kevin Murphy. + +2002-06-17 16:34 yozhik + + * BNT/inference/online/@jtree_2TBN_inf_engine/: back.m, backT.m, + back1.m: Initial revision + +2002-06-17 16:14 yozhik + + * BNT/inference/static/@jtree_inf_engine/: find_mpe.m, + find_max_config.m: Initial import of code base from Kevin Murphy. + +2002-06-17 16:14 yozhik + + * BNT/inference/static/@jtree_inf_engine/: find_mpe.m, + find_max_config.m: Initial revision + +2002-06-17 14:58 yozhik + + * BNT/general/Old/calc_mpe.m: Initial import of code base from + Kevin Murphy. + +2002-06-17 14:58 yozhik + + * BNT/general/Old/calc_mpe.m: Initial revision + +2002-06-17 13:59 yozhik + + * BNT/inference/static/@jtree_inf_engine/: enter_evidence.m, + distribute_evidence.m: Initial import of code base from Kevin + Murphy. + +2002-06-17 13:59 yozhik + + * BNT/inference/static/@jtree_inf_engine/: enter_evidence.m, + distribute_evidence.m: Initial revision + +2002-06-17 13:29 yozhik + + * BNT/inference/static/@jtree_mnet_inf_engine/: find_mpe.m, + enter_evidence.m: Initial import of code base from Kevin Murphy. + +2002-06-17 13:29 yozhik + + * BNT/inference/static/@jtree_mnet_inf_engine/: find_mpe.m, + enter_evidence.m: Initial revision + +2002-06-16 13:01 yozhik + + * BNT/general/is_mnet.m: Initial import of code base from Kevin + Murphy. + +2002-06-16 13:01 yozhik + + * BNT/general/is_mnet.m: Initial revision + +2002-06-16 12:52 yozhik + + * BNT/general/mk_mnet.m: Initial import of code base from Kevin + Murphy. + +2002-06-16 12:52 yozhik + + * BNT/general/mk_mnet.m: Initial revision + +2002-06-16 12:34 yozhik + + * BNT/inference/static/@jtree_inf_engine/init_pot.m: Initial import + of code base from Kevin Murphy. + +2002-06-16 12:34 yozhik + + * BNT/inference/static/@jtree_inf_engine/init_pot.m: Initial + revision + +2002-06-16 12:06 yozhik + + * BNT/potentials/@dpot/find_most_prob_entry.m: Initial import of + code base from Kevin Murphy. + +2002-06-16 12:06 yozhik + + * BNT/potentials/@dpot/find_most_prob_entry.m: Initial revision + +2002-05-31 03:25 yozhik + + * BNT/general/unroll_higher_order_topology.m: Initial import of + code base from Kevin Murphy. + +2002-05-31 03:25 yozhik + + * BNT/general/unroll_higher_order_topology.m: Initial revision + +2002-05-29 08:59 yozhik + + * BNT/@assocarray/assocarray.m, + BNT/CPDs/@boolean_CPD/boolean_CPD.m, + BNT/CPDs/@discrete_CPD/CPD_to_lambda_msg.m, + BNT/CPDs/@discrete_CPD/CPD_to_pi.m, + BNT/CPDs/@discrete_CPD/CPD_to_scgpot.m, + BNT/CPDs/@discrete_CPD/README, + BNT/CPDs/@discrete_CPD/convert_CPD_to_table_hidden_ps.m, + BNT/CPDs/@discrete_CPD/convert_obs_CPD_to_table.m, + BNT/CPDs/@discrete_CPD/convert_to_sparse_table.c, + BNT/CPDs/@discrete_CPD/convert_to_table.m, + BNT/CPDs/@discrete_CPD/discrete_CPD.m, + BNT/CPDs/@discrete_CPD/dom_sizes.m, + BNT/CPDs/@discrete_CPD/log_prob_node.m, + BNT/CPDs/@discrete_CPD/prob_node.m, + BNT/CPDs/@discrete_CPD/sample_node.m, + BNT/CPDs/@discrete_CPD/Old/convert_to_pot.m, + BNT/CPDs/@discrete_CPD/Old/convert_to_table.m, + BNT/CPDs/@discrete_CPD/Old/prob_CPD.m, + BNT/CPDs/@discrete_CPD/Old/prob_node.m, + BNT/CPDs/@discrete_CPD/private/prod_CPT_and_pi_msgs.m, + BNT/CPDs/@gaussian_CPD/CPD_to_lambda_msg.m, + BNT/CPDs/@gaussian_CPD/CPD_to_pi.m, + BNT/CPDs/@gaussian_CPD/CPD_to_scgpot.m, + BNT/CPDs/@gaussian_CPD/adjustable_CPD.m, + BNT/CPDs/@gaussian_CPD/convert_CPD_to_table_hidden_ps.m, + BNT/CPDs/@gaussian_CPD/display.m, + BNT/CPDs/@gaussian_CPD/get_field.m, + BNT/CPDs/@gaussian_CPD/reset_ess.m, + BNT/CPDs/@gaussian_CPD/sample_node.m, + BNT/CPDs/@gaussian_CPD/set_fields.m, + BNT/CPDs/@gaussian_CPD/Old/CPD_to_lambda_msg.m, + BNT/CPDs/@gaussian_CPD/Old/gaussian_CPD.m, + BNT/CPDs/@gaussian_CPD/Old/log_prob_node.m, + BNT/CPDs/@gaussian_CPD/Old/update_ess.m, + BNT/CPDs/@gaussian_CPD/Old/update_tied_ess.m, + BNT/CPDs/@gaussian_CPD/private/CPD_to_linear_gaussian.m, + BNT/CPDs/@generic_CPD/README, + BNT/CPDs/@generic_CPD/adjustable_CPD.m, + BNT/CPDs/@generic_CPD/display.m, + BNT/CPDs/@generic_CPD/generic_CPD.m, + BNT/CPDs/@generic_CPD/log_prior.m, + BNT/CPDs/@generic_CPD/set_clamped.m, + BNT/CPDs/@generic_CPD/Old/BIC_score_CPD.m, + BNT/CPDs/@generic_CPD/Old/CPD_to_dpots.m, + BNT/CPDs/@gmux_CPD/CPD_to_lambda_msg.m, + BNT/CPDs/@gmux_CPD/convert_to_pot.m, + BNT/CPDs/@gmux_CPD/CPD_to_pi.m, BNT/CPDs/@gmux_CPD/display.m, + BNT/CPDs/@gmux_CPD/gmux_CPD.m, BNT/CPDs/@gmux_CPD/sample_node.m, + BNT/CPDs/@gmux_CPD/Old/gmux_CPD.m, + BNT/CPDs/@hhmmF_CPD/log_prior.m, + BNT/CPDs/@hhmmF_CPD/maximize_params.m, + BNT/CPDs/@hhmmF_CPD/reset_ess.m, BNT/CPDs/@hhmmQ_CPD/log_prior.m, + BNT/CPDs/@hhmmQ_CPD/reset_ess.m, + BNT/CPDs/@mlp_CPD/convert_to_table.m, + BNT/CPDs/@mlp_CPD/maximize_params.m, BNT/CPDs/@mlp_CPD/mlp_CPD.m, + BNT/CPDs/@mlp_CPD/reset_ess.m, BNT/CPDs/@mlp_CPD/update_ess.m, + BNT/CPDs/@noisyor_CPD/CPD_to_lambda_msg.m, + BNT/CPDs/@noisyor_CPD/CPD_to_pi.m, + BNT/CPDs/@noisyor_CPD/noisyor_CPD.m, + BNT/CPDs/@noisyor_CPD/private/sum_prod_CPD_and_pi_msgs.m, + BNT/CPDs/@root_CPD/CPD_to_pi.m, + BNT/CPDs/@root_CPD/convert_to_pot.m, + BNT/CPDs/@root_CPD/log_marg_prob_node.m, + BNT/CPDs/@root_CPD/log_prob_node.m, + BNT/CPDs/@root_CPD/root_CPD.m, BNT/CPDs/@root_CPD/sample_node.m, + BNT/CPDs/@root_CPD/Old/CPD_to_CPT.m, + BNT/CPDs/@softmax_CPD/convert_to_pot.m, + BNT/CPDs/@softmax_CPD/display.m, + BNT/CPDs/@softmax_CPD/get_field.m, + BNT/CPDs/@softmax_CPD/maximize_params.m, + BNT/CPDs/@softmax_CPD/reset_ess.m, + BNT/CPDs/@softmax_CPD/sample_node.m, + BNT/CPDs/@softmax_CPD/set_fields.m, + BNT/CPDs/@softmax_CPD/update_ess.m, + BNT/CPDs/@softmax_CPD/private/extract_params.m, + BNT/CPDs/@tabular_CPD/CPD_to_CPT.m, + BNT/CPDs/@tabular_CPD/bayes_update_params.m, + BNT/CPDs/@tabular_CPD/log_nextcase_prob_node.m, + BNT/CPDs/@tabular_CPD/log_prior.m, + BNT/CPDs/@tabular_CPD/reset_ess.m, + BNT/CPDs/@tabular_CPD/update_ess.m, + BNT/CPDs/@tabular_CPD/update_ess_simple.m, + BNT/CPDs/@tabular_CPD/Old/BIC_score_CPD.m, + BNT/CPDs/@tabular_CPD/Old/bayesian_score_CPD.m, + BNT/CPDs/@tabular_CPD/Old/log_marg_prob_node_case.m, + BNT/CPDs/@tabular_CPD/Old/mult_CPD_and_pi_msgs.m, + BNT/CPDs/@tabular_CPD/Old/prob_CPT.m, + BNT/CPDs/@tabular_CPD/Old/prob_node.m, + BNT/CPDs/@tabular_CPD/Old/sample_node.m, + BNT/CPDs/@tabular_CPD/Old/sample_node_single_case.m, + BNT/CPDs/@tabular_CPD/Old/tabular_CPD.m, + BNT/CPDs/@tabular_CPD/Old/update_params.m, + BNT/CPDs/@tabular_decision_node/CPD_to_CPT.m, + BNT/CPDs/@tabular_decision_node/display.m, + BNT/CPDs/@tabular_decision_node/get_field.m, + BNT/CPDs/@tabular_decision_node/set_fields.m, + BNT/CPDs/@tabular_decision_node/tabular_decision_node.m, + BNT/CPDs/@tabular_decision_node/Old/tabular_decision_node.m, + BNT/CPDs/@tabular_kernel/convert_to_pot.m, + BNT/CPDs/@tabular_kernel/convert_to_table.m, + BNT/CPDs/@tabular_kernel/get_field.m, + BNT/CPDs/@tabular_kernel/set_fields.m, + BNT/CPDs/@tabular_kernel/tabular_kernel.m, + BNT/CPDs/@tabular_kernel/Old/tabular_kernel.m, + BNT/CPDs/@tabular_utility_node/convert_to_pot.m, + BNT/CPDs/@tabular_utility_node/display.m, + BNT/CPDs/@tabular_utility_node/tabular_utility_node.m, + BNT/CPDs/@tree_CPD/display.m, + BNT/CPDs/@tree_CPD/evaluate_tree_performance.m, + BNT/CPDs/@tree_CPD/get_field.m, + BNT/CPDs/@tree_CPD/learn_params.m, BNT/CPDs/@tree_CPD/readme.txt, + BNT/CPDs/@tree_CPD/set_fields.m, BNT/CPDs/@tree_CPD/tree_CPD.m, + BNT/CPDs/Old/@linear_gaussian_CPD/linear_gaussian_CPD.m, + BNT/CPDs/Old/@linear_gaussian_CPD/log_marg_prob_node.m, + BNT/CPDs/Old/@linear_gaussian_CPD/update_params_complete.m, + BNT/CPDs/Old/@root_gaussian_CPD/log_marg_prob_node.m, + BNT/CPDs/Old/@root_gaussian_CPD/root_gaussian_CPD.m, + BNT/CPDs/Old/@root_gaussian_CPD/update_params_complete.m, + BNT/CPDs/Old/@tabular_chance_node/CPD_to_upot.m, + BNT/CPDs/Old/@tabular_chance_node/tabular_chance_node.m, + BNT/examples/dynamic/bat1.m, BNT/examples/dynamic/bkff1.m, + BNT/examples/dynamic/chmm1.m, + BNT/examples/dynamic/cmp_inference_dbn.m, + BNT/examples/dynamic/cmp_learning_dbn.m, + BNT/examples/dynamic/cmp_online_inference.m, + BNT/examples/dynamic/fhmm_infer.m, + BNT/examples/dynamic/filter_test1.m, + BNT/examples/dynamic/kalman1.m, + BNT/examples/dynamic/kjaerulff1.m, + BNT/examples/dynamic/loopy_dbn1.m, + BNT/examples/dynamic/mk_collage_from_clqs.m, + BNT/examples/dynamic/mk_fhmm.m, BNT/examples/dynamic/reveal1.m, + BNT/examples/dynamic/scg_dbn.m, + BNT/examples/dynamic/skf_data_assoc_gmux.m, + BNT/examples/dynamic/HHMM/add_hhmm_end_state.m, + BNT/examples/dynamic/HHMM/hhmm_jtree_clqs.m, + BNT/examples/dynamic/HHMM/mk_hhmm_topo.m, + BNT/examples/dynamic/HHMM/mk_hhmm_topo_F1.m, + BNT/examples/dynamic/HHMM/pretty_print_hhmm_parse.m, + BNT/examples/dynamic/HHMM/Motif/fixed_args_mk_motif_hhmm.m, + BNT/examples/dynamic/HHMM/Motif/mk_motif_hhmm.m, + BNT/examples/dynamic/HHMM/Motif/sample_motif_hhmm.m, + BNT/examples/dynamic/HHMM/Old/mk_abcd_hhmm.m, + BNT/examples/dynamic/HHMM/Old/mk_arrow_alpha_hhmm3.m, + BNT/examples/dynamic/HHMM/Old/mk_hhmm2.m, + BNT/examples/dynamic/HHMM/Old/mk_hhmm3.m, + BNT/examples/dynamic/HHMM/Old/mk_hhmm3_args.m, + BNT/examples/dynamic/HHMM/Old/motif_hhmm.m, + BNT/examples/dynamic/HHMM/Old/remove_hhmm_end_state.m, + BNT/examples/dynamic/HHMM/Square/get_square_data.m, + BNT/examples/dynamic/HHMM/Square/hhmm_inference.m, + BNT/examples/dynamic/HHMM/Square/is_F2_true_D3.m, + BNT/examples/dynamic/HHMM/Square/learn_square_hhmm_discrete.m, + BNT/examples/dynamic/HHMM/Square/mk_square_hhmm.m, + BNT/examples/dynamic/HHMM/Square/plot_square_hhmm.m, + BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_cts.m, + BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_discrete.m, + BNT/examples/dynamic/HHMM/Square/square4.mat, + BNT/examples/dynamic/HHMM/Square/square4_cases.mat, + BNT/examples/dynamic/HHMM/Square/test_square_fig.m, + BNT/examples/dynamic/HHMM/Square/test_square_fig.mat, + BNT/examples/dynamic/HHMM/Square/Old/learn_square_hhmm.m, + BNT/examples/dynamic/HHMM/Square/Old/mk_square_hhmm.m, + BNT/examples/dynamic/HHMM/Square/Old/plot_square_hhmm.m, + BNT/examples/dynamic/HHMM/Square/Old/sample_square_hhmm.m, + BNT/examples/dynamic/Old/chmm1.m, + BNT/examples/dynamic/Old/cmp_inference.m, + BNT/examples/dynamic/Old/kalman1.m, + BNT/examples/dynamic/Old/old.water1.m, + BNT/examples/dynamic/Old/online1.m, + BNT/examples/dynamic/Old/online2.m, + BNT/examples/dynamic/Old/scg_dbn.m, + BNT/examples/dynamic/SLAM/mk_gmux_robot_dbn.m, + BNT/examples/dynamic/SLAM/mk_linear_slam.m, + BNT/examples/dynamic/SLAM/slam_kf.m, + BNT/examples/dynamic/SLAM/slam_offline_loopy.m, + BNT/examples/dynamic/SLAM/slam_partial_kf.m, + BNT/examples/dynamic/SLAM/slam_stationary_loopy.m, + BNT/examples/dynamic/SLAM/Old/offline_loopy_slam.m, + BNT/examples/dynamic/SLAM/Old/paskin1.m, + BNT/examples/dynamic/SLAM/Old/skf_data_assoc_gmux2.m, + BNT/examples/dynamic/SLAM/Old/slam_kf.m, + BNT/examples/limids/id1.m, BNT/examples/limids/pigs1.m, + BNT/examples/static/cg1.m, BNT/examples/static/cg2.m, + BNT/examples/static/discrete2.m, BNT/examples/static/discrete3.m, + BNT/examples/static/fa1.m, BNT/examples/static/gaussian1.m, + BNT/examples/static/gibbs_test1.m, BNT/examples/static/lw1.m, + BNT/examples/static/mfa1.m, BNT/examples/static/mixexp1.m, + BNT/examples/static/mixexp2.m, BNT/examples/static/mixexp3.m, + BNT/examples/static/mog1.m, BNT/examples/static/qmr1.m, + BNT/examples/static/sample1.m, BNT/examples/static/softmax1.m, + BNT/examples/static/Belprop/belprop_loop1_discrete.m, + BNT/examples/static/Belprop/belprop_loop1_gauss.m, + BNT/examples/static/Belprop/belprop_loopy_cg.m, + BNT/examples/static/Belprop/belprop_loopy_discrete.m, + BNT/examples/static/Belprop/belprop_loopy_gauss.m, + BNT/examples/static/Belprop/belprop_polytree_cg.m, + BNT/examples/static/Belprop/belprop_polytree_gauss.m, + BNT/examples/static/Belprop/bp1.m, + BNT/examples/static/Belprop/gmux1.m, + BNT/examples/static/Brutti/Belief_IOhmm.m, + BNT/examples/static/Brutti/Belief_hmdt.m, + BNT/examples/static/Brutti/Belief_hme.m, + BNT/examples/static/Brutti/Sigmoid_Belief.m, + BNT/examples/static/HME/HMEforMatlab.jpg, + BNT/examples/static/HME/README, BNT/examples/static/HME/fhme.m, + BNT/examples/static/HME/gen_data.m, + BNT/examples/static/HME/hme_class_plot.m, + BNT/examples/static/HME/hme_reg_plot.m, + BNT/examples/static/HME/hme_topobuilder.m, + BNT/examples/static/HME/test_data_class.mat, + BNT/examples/static/HME/test_data_class2.mat, + BNT/examples/static/HME/test_data_reg.mat, + BNT/examples/static/HME/train_data_class.mat, + BNT/examples/static/HME/train_data_reg.mat, + BNT/examples/static/Misc/mixexp_data.txt, + BNT/examples/static/Misc/mixexp_graddesc.m, + BNT/examples/static/Misc/mixexp_plot.m, + BNT/examples/static/Misc/sprinkler.bif, + BNT/examples/static/Models/mk_cancer_bnet.m, + BNT/examples/static/Models/mk_car_bnet.m, + BNT/examples/static/Models/mk_ideker_bnet.m, + BNT/examples/static/Models/mk_incinerator_bnet.m, + BNT/examples/static/Models/mk_markov_chain_bnet.m, + BNT/examples/static/Models/mk_minimal_qmr_bnet.m, + BNT/examples/static/Models/mk_qmr_bnet.m, + BNT/examples/static/Models/mk_vstruct_bnet.m, + BNT/examples/static/Models/Old/mk_hmm_bnet.m, + BNT/examples/static/SCG/scg1.m, BNT/examples/static/SCG/scg2.m, + BNT/examples/static/SCG/scg3.m, + BNT/examples/static/SCG/scg_3node.m, + BNT/examples/static/SCG/scg_unstable.m, + BNT/examples/static/StructLearn/bic1.m, + BNT/examples/static/StructLearn/cooper_yoo.m, + BNT/examples/static/StructLearn/k2demo1.m, + BNT/examples/static/StructLearn/mcmc1.m, + BNT/examples/static/StructLearn/pc1.m, + BNT/examples/static/StructLearn/pc2.m, + BNT/examples/static/Zoubin/README, + BNT/examples/static/Zoubin/csum.m, + BNT/examples/static/Zoubin/ffa.m, + BNT/examples/static/Zoubin/mfa.m, + BNT/examples/static/Zoubin/mfa_cl.m, + BNT/examples/static/Zoubin/mfademo.m, + BNT/examples/static/Zoubin/rdiv.m, + BNT/examples/static/Zoubin/rprod.m, + BNT/examples/static/Zoubin/rsum.m, + BNT/examples/static/dtree/test_housing.m, + BNT/examples/static/dtree/test_restaurants.m, + BNT/examples/static/dtree/test_zoo1.m, + BNT/examples/static/dtree/tmp.dot, + BNT/examples/static/dtree/transform_data_into_bnt_format.m, + BNT/examples/static/fgraph/fg2.m, + BNT/examples/static/fgraph/fg3.m, + BNT/examples/static/fgraph/fg_mrf1.m, + BNT/examples/static/fgraph/fg_mrf2.m, + BNT/general/bnet_to_fgraph.m, + BNT/general/compute_fwd_interface.m, + BNT/general/compute_interface_nodes.m, + BNT/general/compute_minimal_interface.m, + BNT/general/dbn_to_bnet.m, + BNT/general/determine_elim_constraints.m, + BNT/general/do_intervention.m, BNT/general/dsep.m, + BNT/general/enumerate_scenarios.m, BNT/general/fgraph_to_bnet.m, + BNT/general/log_lik_complete.m, + BNT/general/log_marg_lik_complete.m, BNT/general/mk_bnet.m, + BNT/general/mk_fgraph.m, BNT/general/mk_limid.m, + BNT/general/mk_mutilated_samples.m, + BNT/general/mk_slice_and_half_dbn.m, + BNT/general/partition_dbn_nodes.m, + BNT/general/sample_bnet_nocell.m, BNT/general/sample_dbn.m, + BNT/general/score_bnet_complete.m, + BNT/general/unroll_dbn_topology.m, + BNT/general/Old/bnet_to_gdl_graph.m, + BNT/general/Old/calc_mpe_bucket.m, + BNT/general/Old/calc_mpe_dbn.m, + BNT/general/Old/calc_mpe_given_inf_engine.m, + BNT/general/Old/calc_mpe_global.m, + BNT/general/Old/compute_interface_nodes.m, + BNT/general/Old/mk_gdl_graph.m, GraphViz/draw_dbn.m, + GraphViz/make_layout.m, BNT/license.gpl.txt, + BNT/general/add_evidence_to_gmarginal.m, + BNT/inference/@inf_engine/bnet_from_engine.m, + BNT/inference/@inf_engine/get_field.m, + BNT/inference/@inf_engine/inf_engine.m, + BNT/inference/@inf_engine/marginal_family.m, + BNT/inference/@inf_engine/set_fields.m, + BNT/inference/@inf_engine/update_engine.m, + BNT/inference/@inf_engine/Old/marginal_family_pot.m, + BNT/inference/@inf_engine/Old/observed_nodes.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/bk_ff_hmm_inf_engine.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_init_bel.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_marginal_from_bel.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_predict_bel.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel1.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_family.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/bk_ff_fb.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/combine_marginals_into_joint.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/dbn_to_hmm.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_mat.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec1.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/project_joint_onto_marginals.m, + BNT/inference/dynamic/@bk_inf_engine/bk_inf_engine.m, + BNT/inference/dynamic/@bk_inf_engine/dbn_init_bel.m, + BNT/inference/dynamic/@bk_inf_engine/dbn_marginal_from_bel.m, + BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel.m, + BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel1.m, + BNT/inference/dynamic/@bk_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@bk_inf_engine/marginal_family.m, + BNT/inference/dynamic/@bk_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@bk_inf_engine/update_engine.m, + BNT/inference/dynamic/@ff_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@ff_inf_engine/enter_soft_evidence.m, + BNT/inference/dynamic/@ff_inf_engine/ff_inf_engine.m, + BNT/inference/dynamic/@ff_inf_engine/filter_evidence.m, + BNT/inference/dynamic/@ff_inf_engine/marginal_family.m, + BNT/inference/dynamic/@ff_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@ff_inf_engine/smooth_evidence.m, + BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence.m, + BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence1.m, + BNT/inference/dynamic/@ff_inf_engine/Old/marginal_family.m, + BNT/inference/dynamic/@frontier_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@frontier_inf_engine/enter_soft_evidence.m, + BNT/inference/dynamic/@frontier_inf_engine/frontier_inf_engine.m, + BNT/inference/dynamic/@frontier_inf_engine/marginal_family.m, + BNT/inference/dynamic/@frontier_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@frontier_inf_engine/set_fwdback.m, + BNT/inference/dynamic/@hmm_inf_engine/update_engine.m, + BNT/inference/dynamic/@hmm_inf_engine/Old/dhmm_inf_engine.m, + BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_family.m, + BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_nodes.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_family.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence1.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence2.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence3.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence4.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/marginal_nodes.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_nonint.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_trans.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine1.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine2.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/jtree_unrolled_dbn_inf_engine.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_family.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/update_engine.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_family.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_nodes.m, + BNT/inference/dynamic/@kalman_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@kalman_inf_engine/kalman_inf_engine.m, + BNT/inference/dynamic/@kalman_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@kalman_inf_engine/update_engine.m, + BNT/inference/dynamic/@kalman_inf_engine/private/dbn_to_lds.m, + BNT/inference/dynamic/@kalman_inf_engine/private/extract_params_from_gbn.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_soft_ev.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/pearl_dbn_inf_engine.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/correct_smooth.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/enter_evidence.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence_obj_oriented.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence_fast.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/wrong_smooth.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/private/init_pearl_dbn_ev_msgs.m, + BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_family.m, + BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/pearl_unrolled_dbn_inf_engine.m, + BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/update_engine.m, + BNT/inference/online/@filter_engine/bnet_from_engine.m, + BNT/inference/online/@filter_engine/enter_evidence.m, + BNT/inference/online/@filter_engine/filter_engine.m, + BNT/inference/online/@filter_engine/marginal_family.m, + BNT/inference/online/@filter_engine/marginal_nodes.m, + BNT/inference/online/@hmm_2TBN_inf_engine/back.m, + BNT/inference/online/@hmm_2TBN_inf_engine/backT.m, + BNT/inference/online/@hmm_2TBN_inf_engine/fwd.m, + BNT/inference/online/@hmm_2TBN_inf_engine/fwd1.m, + BNT/inference/online/@hmm_2TBN_inf_engine/update_engine.m, + BNT/inference/online/@jtree_2TBN_inf_engine/marginal_family.m, + BNT/inference/online/@jtree_2TBN_inf_engine/marginal_nodes.m, + BNT/inference/online/@jtree_2TBN_inf_engine/Old/jtree_2TBN_inf_engine.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back1.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/backT.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/enter_evidence.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd1.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/jtree_sparse_2TBN_inf_engine.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_family.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_nodes.m, + BNT/inference/online/@smoother_engine/bnet_from_engine.m, + BNT/inference/online/@smoother_engine/marginal_family.m, + BNT/inference/online/@smoother_engine/marginal_nodes.m, + BNT/inference/online/@smoother_engine/smoother_engine.m, + BNT/inference/online/@smoother_engine/update_engine.m, + BNT/inference/static/@belprop_fg_inf_engine/belprop_fg_inf_engine.m, + BNT/inference/static/@belprop_fg_inf_engine/enter_evidence.m, + BNT/inference/static/@belprop_fg_inf_engine/loopy_converged.m, + BNT/inference/static/@belprop_fg_inf_engine/marginal_nodes.m, + BNT/inference/static/@belprop_fg_inf_engine/set_params.m, + BNT/inference/static/@belprop_inf_engine/enter_evidence.m, + BNT/inference/static/@belprop_inf_engine/loopy_converged.m, + BNT/inference/static/@belprop_inf_engine/marginal_family.m, + BNT/inference/static/@belprop_inf_engine/marginal_nodes.m, + BNT/inference/static/@belprop_inf_engine/Old/belprop_gdl_inf_engine.m, + BNT/inference/static/@belprop_inf_engine/Old/belprop_inf_engine_nostr.m, + BNT/inference/static/@belprop_inf_engine/Old/enter_evidence.m, + BNT/inference/static/@belprop_inf_engine/Old/enter_evidence1.m, + BNT/inference/static/@belprop_inf_engine/Old/marginal_domain.m, + BNT/inference/static/@belprop_inf_engine/private/junk, + BNT/inference/static/@belprop_inf_engine/private/parallel_protocol.m, + BNT/inference/static/@belprop_inf_engine/private/tree_protocol.m, + BNT/inference/static/@cond_gauss_inf_engine/cond_gauss_inf_engine.m, + BNT/inference/static/@cond_gauss_inf_engine/enter_evidence.m, + BNT/inference/static/@cond_gauss_inf_engine/marginal_nodes.m, + BNT/inference/static/@enumerative_inf_engine/enter_evidence.m, + BNT/inference/static/@enumerative_inf_engine/enumerative_inf_engine.m, + BNT/inference/static/@enumerative_inf_engine/marginal_nodes.m, + BNT/inference/static/@gaussian_inf_engine/enter_evidence.m, + BNT/inference/static/@gaussian_inf_engine/marginal_nodes.m, + BNT/inference/static/@gaussian_inf_engine/private/extract_params_from_gbn.m, + BNT/inference/static/@gibbs_sampling_inf_engine/enter_evidence.m, + BNT/inference/static/@gibbs_sampling_inf_engine/gibbs_sampling_inf_engine.m, + BNT/inference/static/@gibbs_sampling_inf_engine/marginal_nodes.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/CPT.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_children.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families_dbn.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior.c, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior_dbn.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_strides.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/get_cpts.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.c, + BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/my_sample_discrete.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/sample_single_discrete.c, + BNT/inference/static/@global_joint_inf_engine/global_joint_inf_engine.m, + BNT/inference/static/@global_joint_inf_engine/marginal_family.m, + BNT/inference/static/@jtree_inf_engine/cliques_from_engine.m, + BNT/inference/static/@jtree_inf_engine/clq_containing_nodes.m, + BNT/inference/static/@jtree_inf_engine/collect_evidence.m, + BNT/inference/static/@jtree_inf_engine/enter_soft_evidence.m, + BNT/inference/static/@jtree_inf_engine/marginal_family.m, + BNT/inference/static/@jtree_inf_engine/marginal_nodes.m, + BNT/inference/static/@jtree_inf_engine/set_fields.m, + BNT/inference/static/@jtree_inf_engine/Old/collect_evidence.m, + BNT/inference/static/@jtree_inf_engine/Old/distribute_evidence.m, + BNT/inference/static/@jtree_inf_engine/Old/enter_evidence.m, + BNT/inference/static/@jtree_inf_engine/Old/enter_soft_evidence.m, + BNT/inference/static/@jtree_limid_inf_engine/enter_evidence.m, + BNT/inference/static/@jtree_limid_inf_engine/jtree_limid_inf_engine.m, + BNT/inference/static/@jtree_limid_inf_engine/marginal_family.m, + BNT/inference/static/@jtree_limid_inf_engine/marginal_nodes.m, + BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_family.m, + BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_nodes_SS.m, + BNT/inference/static/@jtree_sparse_inf_engine/cliques_from_engine.m, + BNT/inference/static/@jtree_sparse_inf_engine/clq_containing_nodes.m, + BNT/inference/static/@jtree_sparse_inf_engine/collect_evidence.c, + BNT/inference/static/@jtree_sparse_inf_engine/distribute_evidence.c, + BNT/inference/static/@jtree_sparse_inf_engine/enter_evidence.m, + BNT/inference/static/@jtree_sparse_inf_engine/enter_soft_evidence.m, + BNT/inference/static/@jtree_sparse_inf_engine/init_pot.c, + BNT/inference/static/@jtree_sparse_inf_engine/marginal_family.m, + BNT/inference/static/@jtree_sparse_inf_engine/marginal_nodes.m, + BNT/inference/static/@jtree_sparse_inf_engine/set_fields.m, + BNT/inference/static/@jtree_sparse_inf_engine/old/collect_evidence.c, + BNT/inference/static/@jtree_sparse_inf_engine/old/distribute_evidence.c, + BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot.c, + BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.c, + BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.m, + BNT/inference/static/@likelihood_weighting_inf_engine/enter_evidence.m, + BNT/inference/static/@likelihood_weighting_inf_engine/likelihood_weighting_inf_engine.m, + BNT/inference/static/@likelihood_weighting_inf_engine/marginal_nodes.m, + BNT/inference/static/@pearl_inf_engine/enter_evidence.m, + BNT/inference/static/@pearl_inf_engine/loopy_converged.m, + BNT/inference/static/@pearl_inf_engine/marginal_nodes.m, + BNT/inference/static/@pearl_inf_engine/private/compute_bel.m, + BNT/inference/static/@pearl_inf_engine/private/prod_lambda_msgs.m, + BNT/inference/static/@pearl_inf_engine/private/tree_protocol.m, + BNT/inference/static/@quickscore_inf_engine/enter_evidence.m, + BNT/inference/static/@quickscore_inf_engine/marginal_nodes.m, + BNT/inference/static/@quickscore_inf_engine/quickscore_inf_engine.m, + BNT/inference/static/@quickscore_inf_engine/private/C_quickscore.c, + BNT/inference/static/@quickscore_inf_engine/private/nr.h, + BNT/inference/static/@quickscore_inf_engine/private/nrutil.c, + BNT/inference/static/@quickscore_inf_engine/private/nrutil.h, + BNT/inference/static/@quickscore_inf_engine/private/quickscore.m, + BNT/learning/bayes_update_params.m, + BNT/learning/bic_score_family.m, + BNT/learning/compute_cooling_schedule.m, + BNT/learning/dirichlet_score_family.m, + BNT/learning/kpm_learn_struct_mcmc.m, + BNT/learning/learn_params_em.m, + BNT/learning/learn_struct_dbn_reveal.m, + BNT/learning/learn_struct_pdag_ic_star.m, + BNT/learning/mcmc_sample_to_hist.m, BNT/learning/mk_schedule.m, + BNT/learning/mk_tetrad_data_file.m, + BNT/learning/score_dags_old.m, HMM/dhmm_logprob_brute_force.m, + HMM/dhmm_logprob_path.m, HMM/mdp_sample.m, Kalman/AR_to_SS.m, + Kalman/SS_to_AR.m, Kalman/convert_to_lagged_form.m, + Kalman/ensure_AR.m, Kalman/eval_AR_perf.m, + Kalman/kalman_filter.m, Kalman/kalman_smoother.m, + Kalman/kalman_update.m, Kalman/learn_AR.m, + Kalman/learn_AR_diagonal.m, Kalman/learn_kalman.m, + Kalman/smooth_update.m, + BNT/general/convert_dbn_CPDs_to_tables_slow.m, + BNT/general/dispcpt.m, BNT/general/linear_gaussian_to_cpot.m, + BNT/general/partition_matrix_vec_3.m, + BNT/general/shrink_obs_dims_in_gaussian.m, + BNT/general/shrink_obs_dims_in_table.m, + BNT/potentials/CPD_to_pot.m, BNT/potentials/README, + BNT/potentials/check_for_cd_arcs.m, + BNT/potentials/determine_pot_type.m, + BNT/potentials/mk_initial_pot.m, + BNT/potentials/@cgpot/cg_can_to_mom.m, + BNT/potentials/@cgpot/cg_mom_to_can.m, + BNT/potentials/@cgpot/cgpot.m, BNT/potentials/@cgpot/display.m, + BNT/potentials/@cgpot/divide_by_pot.m, + BNT/potentials/@cgpot/domain_pot.m, + BNT/potentials/@cgpot/enter_cts_evidence_pot.m, + BNT/potentials/@cgpot/enter_discrete_evidence_pot.m, + BNT/potentials/@cgpot/marginalize_pot.m, + BNT/potentials/@cgpot/multiply_by_pot.m, + BNT/potentials/@cgpot/multiply_pots.m, + BNT/potentials/@cgpot/normalize_pot.m, + BNT/potentials/@cgpot/pot_to_marginal.m, + BNT/potentials/@cgpot/Old/normalize_pot.m, + BNT/potentials/@cgpot/Old/simple_marginalize_pot.m, + BNT/potentials/@cpot/cpot.m, BNT/potentials/@cpot/cpot_to_mpot.m, + BNT/potentials/@cpot/display.m, + BNT/potentials/@cpot/divide_by_pot.m, + BNT/potentials/@cpot/domain_pot.m, + BNT/potentials/@cpot/enter_cts_evidence_pot.m, + BNT/potentials/@cpot/marginalize_pot.m, + BNT/potentials/@cpot/multiply_by_pot.m, + BNT/potentials/@cpot/multiply_pots.m, + BNT/potentials/@cpot/normalize_pot.m, + BNT/potentials/@cpot/pot_to_marginal.m, + BNT/potentials/@cpot/rescale_pot.m, + BNT/potentials/@cpot/set_domain_pot.m, + BNT/potentials/@cpot/Old/cpot_to_mpot.m, + BNT/potentials/@cpot/Old/normalize_pot.convert.m, + BNT/potentials/@dpot/approxeq_pot.m, + BNT/potentials/@dpot/display.m, + BNT/potentials/@dpot/domain_pot.m, + BNT/potentials/@dpot/dpot_to_table.m, + BNT/potentials/@dpot/get_fields.m, + BNT/potentials/@dpot/multiply_pots.m, + BNT/potentials/@dpot/pot_to_marginal.m, + BNT/potentials/@dpot/set_domain_pot.m, + BNT/potentials/@mpot/display.m, + BNT/potentials/@mpot/marginalize_pot.m, + BNT/potentials/@mpot/mpot.m, BNT/potentials/@mpot/mpot_to_cpot.m, + BNT/potentials/@mpot/normalize_pot.m, + BNT/potentials/@mpot/pot_to_marginal.m, + BNT/potentials/@mpot/rescale_pot.m, + BNT/potentials/@upot/approxeq_pot.m, + BNT/potentials/@upot/display.m, + BNT/potentials/@upot/divide_by_pot.m, + BNT/potentials/@upot/marginalize_pot.m, + BNT/potentials/@upot/multiply_by_pot.m, + BNT/potentials/@upot/normalize_pot.m, + BNT/potentials/@upot/pot_to_marginal.m, + BNT/potentials/@upot/upot.m, + BNT/potentials/@upot/upot_to_opt_policy.m, + BNT/potentials/Old/comp_eff_node_sizes.m, + BNT/potentials/Tables/divide_by_sparse_table.c, + BNT/potentials/Tables/divide_by_table.c, + BNT/potentials/Tables/marg_sparse_table.c, + BNT/potentials/Tables/marg_table.c, + BNT/potentials/Tables/mult_by_sparse_table.c, + BNT/potentials/Tables/rep_mult.c, HMM/mk_leftright_transmat.m: + Initial import of code base from Kevin Murphy. + +2002-05-29 08:59 yozhik + + * BNT/@assocarray/assocarray.m, + BNT/CPDs/@boolean_CPD/boolean_CPD.m, + BNT/CPDs/@discrete_CPD/CPD_to_lambda_msg.m, + BNT/CPDs/@discrete_CPD/CPD_to_pi.m, + BNT/CPDs/@discrete_CPD/CPD_to_scgpot.m, + BNT/CPDs/@discrete_CPD/README, + BNT/CPDs/@discrete_CPD/convert_CPD_to_table_hidden_ps.m, + BNT/CPDs/@discrete_CPD/convert_obs_CPD_to_table.m, + BNT/CPDs/@discrete_CPD/convert_to_sparse_table.c, + BNT/CPDs/@discrete_CPD/convert_to_table.m, + BNT/CPDs/@discrete_CPD/discrete_CPD.m, + BNT/CPDs/@discrete_CPD/dom_sizes.m, + BNT/CPDs/@discrete_CPD/log_prob_node.m, + BNT/CPDs/@discrete_CPD/prob_node.m, + BNT/CPDs/@discrete_CPD/sample_node.m, + BNT/CPDs/@discrete_CPD/Old/convert_to_pot.m, + BNT/CPDs/@discrete_CPD/Old/convert_to_table.m, + BNT/CPDs/@discrete_CPD/Old/prob_CPD.m, + BNT/CPDs/@discrete_CPD/Old/prob_node.m, + BNT/CPDs/@discrete_CPD/private/prod_CPT_and_pi_msgs.m, + BNT/CPDs/@gaussian_CPD/CPD_to_lambda_msg.m, + BNT/CPDs/@gaussian_CPD/CPD_to_pi.m, + BNT/CPDs/@gaussian_CPD/CPD_to_scgpot.m, + BNT/CPDs/@gaussian_CPD/adjustable_CPD.m, + BNT/CPDs/@gaussian_CPD/convert_CPD_to_table_hidden_ps.m, + BNT/CPDs/@gaussian_CPD/display.m, + BNT/CPDs/@gaussian_CPD/get_field.m, + BNT/CPDs/@gaussian_CPD/reset_ess.m, + BNT/CPDs/@gaussian_CPD/sample_node.m, + BNT/CPDs/@gaussian_CPD/set_fields.m, + BNT/CPDs/@gaussian_CPD/Old/CPD_to_lambda_msg.m, + BNT/CPDs/@gaussian_CPD/Old/gaussian_CPD.m, + BNT/CPDs/@gaussian_CPD/Old/log_prob_node.m, + BNT/CPDs/@gaussian_CPD/Old/update_ess.m, + BNT/CPDs/@gaussian_CPD/Old/update_tied_ess.m, + BNT/CPDs/@gaussian_CPD/private/CPD_to_linear_gaussian.m, + BNT/CPDs/@generic_CPD/README, + BNT/CPDs/@generic_CPD/adjustable_CPD.m, + BNT/CPDs/@generic_CPD/display.m, + BNT/CPDs/@generic_CPD/generic_CPD.m, + BNT/CPDs/@generic_CPD/log_prior.m, + BNT/CPDs/@generic_CPD/set_clamped.m, + BNT/CPDs/@generic_CPD/Old/BIC_score_CPD.m, + BNT/CPDs/@generic_CPD/Old/CPD_to_dpots.m, + BNT/CPDs/@gmux_CPD/CPD_to_lambda_msg.m, + BNT/CPDs/@gmux_CPD/convert_to_pot.m, + BNT/CPDs/@gmux_CPD/CPD_to_pi.m, BNT/CPDs/@gmux_CPD/display.m, + BNT/CPDs/@gmux_CPD/gmux_CPD.m, BNT/CPDs/@gmux_CPD/sample_node.m, + BNT/CPDs/@gmux_CPD/Old/gmux_CPD.m, + BNT/CPDs/@hhmmF_CPD/log_prior.m, + BNT/CPDs/@hhmmF_CPD/maximize_params.m, + BNT/CPDs/@hhmmF_CPD/reset_ess.m, BNT/CPDs/@hhmmQ_CPD/log_prior.m, + BNT/CPDs/@hhmmQ_CPD/reset_ess.m, + BNT/CPDs/@mlp_CPD/convert_to_table.m, + BNT/CPDs/@mlp_CPD/maximize_params.m, BNT/CPDs/@mlp_CPD/mlp_CPD.m, + BNT/CPDs/@mlp_CPD/reset_ess.m, BNT/CPDs/@mlp_CPD/update_ess.m, + BNT/CPDs/@noisyor_CPD/CPD_to_lambda_msg.m, + BNT/CPDs/@noisyor_CPD/CPD_to_pi.m, + BNT/CPDs/@noisyor_CPD/noisyor_CPD.m, + BNT/CPDs/@noisyor_CPD/private/sum_prod_CPD_and_pi_msgs.m, + BNT/CPDs/@root_CPD/CPD_to_pi.m, + BNT/CPDs/@root_CPD/convert_to_pot.m, + BNT/CPDs/@root_CPD/log_marg_prob_node.m, + BNT/CPDs/@root_CPD/log_prob_node.m, + BNT/CPDs/@root_CPD/root_CPD.m, BNT/CPDs/@root_CPD/sample_node.m, + BNT/CPDs/@root_CPD/Old/CPD_to_CPT.m, + BNT/CPDs/@softmax_CPD/convert_to_pot.m, + BNT/CPDs/@softmax_CPD/display.m, + BNT/CPDs/@softmax_CPD/get_field.m, + BNT/CPDs/@softmax_CPD/maximize_params.m, + BNT/CPDs/@softmax_CPD/reset_ess.m, + BNT/CPDs/@softmax_CPD/sample_node.m, + BNT/CPDs/@softmax_CPD/set_fields.m, + BNT/CPDs/@softmax_CPD/update_ess.m, + BNT/CPDs/@softmax_CPD/private/extract_params.m, + BNT/CPDs/@tabular_CPD/CPD_to_CPT.m, + BNT/CPDs/@tabular_CPD/bayes_update_params.m, + BNT/CPDs/@tabular_CPD/log_nextcase_prob_node.m, + BNT/CPDs/@tabular_CPD/log_prior.m, + BNT/CPDs/@tabular_CPD/reset_ess.m, + BNT/CPDs/@tabular_CPD/update_ess.m, + BNT/CPDs/@tabular_CPD/update_ess_simple.m, + BNT/CPDs/@tabular_CPD/Old/BIC_score_CPD.m, + BNT/CPDs/@tabular_CPD/Old/bayesian_score_CPD.m, + BNT/CPDs/@tabular_CPD/Old/log_marg_prob_node_case.m, + BNT/CPDs/@tabular_CPD/Old/mult_CPD_and_pi_msgs.m, + BNT/CPDs/@tabular_CPD/Old/prob_CPT.m, + BNT/CPDs/@tabular_CPD/Old/prob_node.m, + BNT/CPDs/@tabular_CPD/Old/sample_node.m, + BNT/CPDs/@tabular_CPD/Old/sample_node_single_case.m, + BNT/CPDs/@tabular_CPD/Old/tabular_CPD.m, + BNT/CPDs/@tabular_CPD/Old/update_params.m, + BNT/CPDs/@tabular_decision_node/CPD_to_CPT.m, + BNT/CPDs/@tabular_decision_node/display.m, + BNT/CPDs/@tabular_decision_node/get_field.m, + BNT/CPDs/@tabular_decision_node/set_fields.m, + BNT/CPDs/@tabular_decision_node/tabular_decision_node.m, + BNT/CPDs/@tabular_decision_node/Old/tabular_decision_node.m, + BNT/CPDs/@tabular_kernel/convert_to_pot.m, + BNT/CPDs/@tabular_kernel/convert_to_table.m, + BNT/CPDs/@tabular_kernel/get_field.m, + BNT/CPDs/@tabular_kernel/set_fields.m, + BNT/CPDs/@tabular_kernel/tabular_kernel.m, + BNT/CPDs/@tabular_kernel/Old/tabular_kernel.m, + BNT/CPDs/@tabular_utility_node/convert_to_pot.m, + BNT/CPDs/@tabular_utility_node/display.m, + BNT/CPDs/@tabular_utility_node/tabular_utility_node.m, + BNT/CPDs/@tree_CPD/display.m, + BNT/CPDs/@tree_CPD/evaluate_tree_performance.m, + BNT/CPDs/@tree_CPD/get_field.m, + BNT/CPDs/@tree_CPD/learn_params.m, BNT/CPDs/@tree_CPD/readme.txt, + BNT/CPDs/@tree_CPD/set_fields.m, BNT/CPDs/@tree_CPD/tree_CPD.m, + BNT/CPDs/Old/@linear_gaussian_CPD/linear_gaussian_CPD.m, + BNT/CPDs/Old/@linear_gaussian_CPD/log_marg_prob_node.m, + BNT/CPDs/Old/@linear_gaussian_CPD/update_params_complete.m, + BNT/CPDs/Old/@root_gaussian_CPD/log_marg_prob_node.m, + BNT/CPDs/Old/@root_gaussian_CPD/root_gaussian_CPD.m, + BNT/CPDs/Old/@root_gaussian_CPD/update_params_complete.m, + BNT/CPDs/Old/@tabular_chance_node/CPD_to_upot.m, + BNT/CPDs/Old/@tabular_chance_node/tabular_chance_node.m, + BNT/examples/dynamic/bat1.m, BNT/examples/dynamic/bkff1.m, + BNT/examples/dynamic/chmm1.m, + BNT/examples/dynamic/cmp_inference_dbn.m, + BNT/examples/dynamic/cmp_learning_dbn.m, + BNT/examples/dynamic/cmp_online_inference.m, + BNT/examples/dynamic/fhmm_infer.m, + BNT/examples/dynamic/filter_test1.m, + BNT/examples/dynamic/kalman1.m, + BNT/examples/dynamic/kjaerulff1.m, + BNT/examples/dynamic/loopy_dbn1.m, + BNT/examples/dynamic/mk_collage_from_clqs.m, + BNT/examples/dynamic/mk_fhmm.m, BNT/examples/dynamic/reveal1.m, + BNT/examples/dynamic/scg_dbn.m, + BNT/examples/dynamic/skf_data_assoc_gmux.m, + BNT/examples/dynamic/HHMM/add_hhmm_end_state.m, + BNT/examples/dynamic/HHMM/hhmm_jtree_clqs.m, + BNT/examples/dynamic/HHMM/mk_hhmm_topo.m, + BNT/examples/dynamic/HHMM/mk_hhmm_topo_F1.m, + BNT/examples/dynamic/HHMM/pretty_print_hhmm_parse.m, + BNT/examples/dynamic/HHMM/Motif/fixed_args_mk_motif_hhmm.m, + BNT/examples/dynamic/HHMM/Motif/mk_motif_hhmm.m, + BNT/examples/dynamic/HHMM/Motif/sample_motif_hhmm.m, + BNT/examples/dynamic/HHMM/Old/mk_abcd_hhmm.m, + BNT/examples/dynamic/HHMM/Old/mk_arrow_alpha_hhmm3.m, + BNT/examples/dynamic/HHMM/Old/mk_hhmm2.m, + BNT/examples/dynamic/HHMM/Old/mk_hhmm3.m, + BNT/examples/dynamic/HHMM/Old/mk_hhmm3_args.m, + BNT/examples/dynamic/HHMM/Old/motif_hhmm.m, + BNT/examples/dynamic/HHMM/Old/remove_hhmm_end_state.m, + BNT/examples/dynamic/HHMM/Square/get_square_data.m, + BNT/examples/dynamic/HHMM/Square/hhmm_inference.m, + BNT/examples/dynamic/HHMM/Square/is_F2_true_D3.m, + BNT/examples/dynamic/HHMM/Square/learn_square_hhmm_discrete.m, + BNT/examples/dynamic/HHMM/Square/mk_square_hhmm.m, + BNT/examples/dynamic/HHMM/Square/plot_square_hhmm.m, + BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_cts.m, + BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_discrete.m, + BNT/examples/dynamic/HHMM/Square/square4.mat, + BNT/examples/dynamic/HHMM/Square/square4_cases.mat, + BNT/examples/dynamic/HHMM/Square/test_square_fig.m, + BNT/examples/dynamic/HHMM/Square/test_square_fig.mat, + BNT/examples/dynamic/HHMM/Square/Old/learn_square_hhmm.m, + BNT/examples/dynamic/HHMM/Square/Old/mk_square_hhmm.m, + BNT/examples/dynamic/HHMM/Square/Old/plot_square_hhmm.m, + BNT/examples/dynamic/HHMM/Square/Old/sample_square_hhmm.m, + BNT/examples/dynamic/Old/chmm1.m, + BNT/examples/dynamic/Old/cmp_inference.m, + BNT/examples/dynamic/Old/kalman1.m, + BNT/examples/dynamic/Old/old.water1.m, + BNT/examples/dynamic/Old/online1.m, + BNT/examples/dynamic/Old/online2.m, + BNT/examples/dynamic/Old/scg_dbn.m, + BNT/examples/dynamic/SLAM/mk_gmux_robot_dbn.m, + BNT/examples/dynamic/SLAM/mk_linear_slam.m, + BNT/examples/dynamic/SLAM/slam_kf.m, + BNT/examples/dynamic/SLAM/slam_offline_loopy.m, + BNT/examples/dynamic/SLAM/slam_partial_kf.m, + BNT/examples/dynamic/SLAM/slam_stationary_loopy.m, + BNT/examples/dynamic/SLAM/Old/offline_loopy_slam.m, + BNT/examples/dynamic/SLAM/Old/paskin1.m, + BNT/examples/dynamic/SLAM/Old/skf_data_assoc_gmux2.m, + BNT/examples/dynamic/SLAM/Old/slam_kf.m, + BNT/examples/limids/id1.m, BNT/examples/limids/pigs1.m, + BNT/examples/static/cg1.m, BNT/examples/static/cg2.m, + BNT/examples/static/discrete2.m, BNT/examples/static/discrete3.m, + BNT/examples/static/fa1.m, BNT/examples/static/gaussian1.m, + BNT/examples/static/gibbs_test1.m, BNT/examples/static/lw1.m, + BNT/examples/static/mfa1.m, BNT/examples/static/mixexp1.m, + BNT/examples/static/mixexp2.m, BNT/examples/static/mixexp3.m, + BNT/examples/static/mog1.m, BNT/examples/static/qmr1.m, + BNT/examples/static/sample1.m, BNT/examples/static/softmax1.m, + BNT/examples/static/Belprop/belprop_loop1_discrete.m, + BNT/examples/static/Belprop/belprop_loop1_gauss.m, + BNT/examples/static/Belprop/belprop_loopy_cg.m, + BNT/examples/static/Belprop/belprop_loopy_discrete.m, + BNT/examples/static/Belprop/belprop_loopy_gauss.m, + BNT/examples/static/Belprop/belprop_polytree_cg.m, + BNT/examples/static/Belprop/belprop_polytree_gauss.m, + BNT/examples/static/Belprop/bp1.m, + BNT/examples/static/Belprop/gmux1.m, + BNT/examples/static/Brutti/Belief_IOhmm.m, + BNT/examples/static/Brutti/Belief_hmdt.m, + BNT/examples/static/Brutti/Belief_hme.m, + BNT/examples/static/Brutti/Sigmoid_Belief.m, + BNT/examples/static/HME/HMEforMatlab.jpg, + BNT/examples/static/HME/README, BNT/examples/static/HME/fhme.m, + BNT/examples/static/HME/gen_data.m, + BNT/examples/static/HME/hme_class_plot.m, + BNT/examples/static/HME/hme_reg_plot.m, + BNT/examples/static/HME/hme_topobuilder.m, + BNT/examples/static/HME/test_data_class.mat, + BNT/examples/static/HME/test_data_class2.mat, + BNT/examples/static/HME/test_data_reg.mat, + BNT/examples/static/HME/train_data_class.mat, + BNT/examples/static/HME/train_data_reg.mat, + BNT/examples/static/Misc/mixexp_data.txt, + BNT/examples/static/Misc/mixexp_graddesc.m, + BNT/examples/static/Misc/mixexp_plot.m, + BNT/examples/static/Misc/sprinkler.bif, + BNT/examples/static/Models/mk_cancer_bnet.m, + BNT/examples/static/Models/mk_car_bnet.m, + BNT/examples/static/Models/mk_ideker_bnet.m, + BNT/examples/static/Models/mk_incinerator_bnet.m, + BNT/examples/static/Models/mk_markov_chain_bnet.m, + BNT/examples/static/Models/mk_minimal_qmr_bnet.m, + BNT/examples/static/Models/mk_qmr_bnet.m, + BNT/examples/static/Models/mk_vstruct_bnet.m, + BNT/examples/static/Models/Old/mk_hmm_bnet.m, + BNT/examples/static/SCG/scg1.m, BNT/examples/static/SCG/scg2.m, + BNT/examples/static/SCG/scg3.m, + BNT/examples/static/SCG/scg_3node.m, + BNT/examples/static/SCG/scg_unstable.m, + BNT/examples/static/StructLearn/bic1.m, + BNT/examples/static/StructLearn/cooper_yoo.m, + BNT/examples/static/StructLearn/k2demo1.m, + BNT/examples/static/StructLearn/mcmc1.m, + BNT/examples/static/StructLearn/pc1.m, + BNT/examples/static/StructLearn/pc2.m, + BNT/examples/static/Zoubin/README, + BNT/examples/static/Zoubin/csum.m, + BNT/examples/static/Zoubin/ffa.m, + BNT/examples/static/Zoubin/mfa.m, + BNT/examples/static/Zoubin/mfa_cl.m, + BNT/examples/static/Zoubin/mfademo.m, + BNT/examples/static/Zoubin/rdiv.m, + BNT/examples/static/Zoubin/rprod.m, + BNT/examples/static/Zoubin/rsum.m, + BNT/examples/static/dtree/test_housing.m, + BNT/examples/static/dtree/test_restaurants.m, + BNT/examples/static/dtree/test_zoo1.m, + BNT/examples/static/dtree/tmp.dot, + BNT/examples/static/dtree/transform_data_into_bnt_format.m, + BNT/examples/static/fgraph/fg2.m, + BNT/examples/static/fgraph/fg3.m, + BNT/examples/static/fgraph/fg_mrf1.m, + BNT/examples/static/fgraph/fg_mrf2.m, + BNT/general/bnet_to_fgraph.m, + BNT/general/compute_fwd_interface.m, + BNT/general/compute_interface_nodes.m, + BNT/general/compute_minimal_interface.m, + BNT/general/dbn_to_bnet.m, + BNT/general/determine_elim_constraints.m, + BNT/general/do_intervention.m, BNT/general/dsep.m, + BNT/general/enumerate_scenarios.m, BNT/general/fgraph_to_bnet.m, + BNT/general/log_lik_complete.m, + BNT/general/log_marg_lik_complete.m, BNT/general/mk_bnet.m, + BNT/general/mk_fgraph.m, BNT/general/mk_limid.m, + BNT/general/mk_mutilated_samples.m, + BNT/general/mk_slice_and_half_dbn.m, + BNT/general/partition_dbn_nodes.m, + BNT/general/sample_bnet_nocell.m, BNT/general/sample_dbn.m, + BNT/general/score_bnet_complete.m, + BNT/general/unroll_dbn_topology.m, + BNT/general/Old/bnet_to_gdl_graph.m, + BNT/general/Old/calc_mpe_bucket.m, + BNT/general/Old/calc_mpe_dbn.m, + BNT/general/Old/calc_mpe_given_inf_engine.m, + BNT/general/Old/calc_mpe_global.m, + BNT/general/Old/compute_interface_nodes.m, + BNT/general/Old/mk_gdl_graph.m, GraphViz/draw_dbn.m, + GraphViz/make_layout.m, BNT/license.gpl.txt, + BNT/general/add_evidence_to_gmarginal.m, + BNT/inference/@inf_engine/bnet_from_engine.m, + BNT/inference/@inf_engine/get_field.m, + BNT/inference/@inf_engine/inf_engine.m, + BNT/inference/@inf_engine/marginal_family.m, + BNT/inference/@inf_engine/set_fields.m, + BNT/inference/@inf_engine/update_engine.m, + BNT/inference/@inf_engine/Old/marginal_family_pot.m, + BNT/inference/@inf_engine/Old/observed_nodes.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/bk_ff_hmm_inf_engine.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_init_bel.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_marginal_from_bel.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_predict_bel.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel1.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_family.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/bk_ff_fb.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/combine_marginals_into_joint.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/dbn_to_hmm.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_mat.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec1.m, + BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/project_joint_onto_marginals.m, + BNT/inference/dynamic/@bk_inf_engine/bk_inf_engine.m, + BNT/inference/dynamic/@bk_inf_engine/dbn_init_bel.m, + BNT/inference/dynamic/@bk_inf_engine/dbn_marginal_from_bel.m, + BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel.m, + BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel1.m, + BNT/inference/dynamic/@bk_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@bk_inf_engine/marginal_family.m, + BNT/inference/dynamic/@bk_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@bk_inf_engine/update_engine.m, + BNT/inference/dynamic/@ff_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@ff_inf_engine/enter_soft_evidence.m, + BNT/inference/dynamic/@ff_inf_engine/ff_inf_engine.m, + BNT/inference/dynamic/@ff_inf_engine/filter_evidence.m, + BNT/inference/dynamic/@ff_inf_engine/marginal_family.m, + BNT/inference/dynamic/@ff_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@ff_inf_engine/smooth_evidence.m, + BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence.m, + BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence1.m, + BNT/inference/dynamic/@ff_inf_engine/Old/marginal_family.m, + BNT/inference/dynamic/@frontier_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@frontier_inf_engine/enter_soft_evidence.m, + BNT/inference/dynamic/@frontier_inf_engine/frontier_inf_engine.m, + BNT/inference/dynamic/@frontier_inf_engine/marginal_family.m, + BNT/inference/dynamic/@frontier_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@frontier_inf_engine/set_fwdback.m, + BNT/inference/dynamic/@hmm_inf_engine/update_engine.m, + BNT/inference/dynamic/@hmm_inf_engine/Old/dhmm_inf_engine.m, + BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_family.m, + BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_nodes.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_family.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence1.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence2.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence3.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence4.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/marginal_nodes.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_nonint.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_trans.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine1.m, + BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine2.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/jtree_unrolled_dbn_inf_engine.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_family.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/update_engine.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_family.m, + BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_nodes.m, + BNT/inference/dynamic/@kalman_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@kalman_inf_engine/kalman_inf_engine.m, + BNT/inference/dynamic/@kalman_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@kalman_inf_engine/update_engine.m, + BNT/inference/dynamic/@kalman_inf_engine/private/dbn_to_lds.m, + BNT/inference/dynamic/@kalman_inf_engine/private/extract_params_from_gbn.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_soft_ev.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/pearl_dbn_inf_engine.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/correct_smooth.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/enter_evidence.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence_obj_oriented.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence_fast.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/wrong_smooth.m, + BNT/inference/dynamic/@pearl_dbn_inf_engine/private/init_pearl_dbn_ev_msgs.m, + BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/enter_evidence.m, + BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_family.m, + BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_nodes.m, + BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/pearl_unrolled_dbn_inf_engine.m, + BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/update_engine.m, + BNT/inference/online/@filter_engine/bnet_from_engine.m, + BNT/inference/online/@filter_engine/enter_evidence.m, + BNT/inference/online/@filter_engine/filter_engine.m, + BNT/inference/online/@filter_engine/marginal_family.m, + BNT/inference/online/@filter_engine/marginal_nodes.m, + BNT/inference/online/@hmm_2TBN_inf_engine/back.m, + BNT/inference/online/@hmm_2TBN_inf_engine/backT.m, + BNT/inference/online/@hmm_2TBN_inf_engine/fwd.m, + BNT/inference/online/@hmm_2TBN_inf_engine/fwd1.m, + BNT/inference/online/@hmm_2TBN_inf_engine/update_engine.m, + BNT/inference/online/@jtree_2TBN_inf_engine/marginal_family.m, + BNT/inference/online/@jtree_2TBN_inf_engine/marginal_nodes.m, + BNT/inference/online/@jtree_2TBN_inf_engine/Old/jtree_2TBN_inf_engine.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back1.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/backT.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/enter_evidence.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd1.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/jtree_sparse_2TBN_inf_engine.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_family.m, + BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_nodes.m, + BNT/inference/online/@smoother_engine/bnet_from_engine.m, + BNT/inference/online/@smoother_engine/marginal_family.m, + BNT/inference/online/@smoother_engine/marginal_nodes.m, + BNT/inference/online/@smoother_engine/smoother_engine.m, + BNT/inference/online/@smoother_engine/update_engine.m, + BNT/inference/static/@belprop_fg_inf_engine/belprop_fg_inf_engine.m, + BNT/inference/static/@belprop_fg_inf_engine/enter_evidence.m, + BNT/inference/static/@belprop_fg_inf_engine/loopy_converged.m, + BNT/inference/static/@belprop_fg_inf_engine/marginal_nodes.m, + BNT/inference/static/@belprop_fg_inf_engine/set_params.m, + BNT/inference/static/@belprop_inf_engine/enter_evidence.m, + BNT/inference/static/@belprop_inf_engine/loopy_converged.m, + BNT/inference/static/@belprop_inf_engine/marginal_family.m, + BNT/inference/static/@belprop_inf_engine/marginal_nodes.m, + BNT/inference/static/@belprop_inf_engine/Old/belprop_gdl_inf_engine.m, + BNT/inference/static/@belprop_inf_engine/Old/belprop_inf_engine_nostr.m, + BNT/inference/static/@belprop_inf_engine/Old/enter_evidence.m, + BNT/inference/static/@belprop_inf_engine/Old/enter_evidence1.m, + BNT/inference/static/@belprop_inf_engine/Old/marginal_domain.m, + BNT/inference/static/@belprop_inf_engine/private/junk, + BNT/inference/static/@belprop_inf_engine/private/parallel_protocol.m, + BNT/inference/static/@belprop_inf_engine/private/tree_protocol.m, + BNT/inference/static/@cond_gauss_inf_engine/cond_gauss_inf_engine.m, + BNT/inference/static/@cond_gauss_inf_engine/enter_evidence.m, + BNT/inference/static/@cond_gauss_inf_engine/marginal_nodes.m, + BNT/inference/static/@enumerative_inf_engine/enter_evidence.m, + BNT/inference/static/@enumerative_inf_engine/enumerative_inf_engine.m, + BNT/inference/static/@enumerative_inf_engine/marginal_nodes.m, + BNT/inference/static/@gaussian_inf_engine/enter_evidence.m, + BNT/inference/static/@gaussian_inf_engine/marginal_nodes.m, + BNT/inference/static/@gaussian_inf_engine/private/extract_params_from_gbn.m, + BNT/inference/static/@gibbs_sampling_inf_engine/enter_evidence.m, + BNT/inference/static/@gibbs_sampling_inf_engine/gibbs_sampling_inf_engine.m, + BNT/inference/static/@gibbs_sampling_inf_engine/marginal_nodes.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/CPT.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_children.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families_dbn.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior.c, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior_dbn.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_strides.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/get_cpts.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.c, + BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/my_sample_discrete.m, + BNT/inference/static/@gibbs_sampling_inf_engine/private/sample_single_discrete.c, + BNT/inference/static/@global_joint_inf_engine/global_joint_inf_engine.m, + BNT/inference/static/@global_joint_inf_engine/marginal_family.m, + BNT/inference/static/@jtree_inf_engine/cliques_from_engine.m, + BNT/inference/static/@jtree_inf_engine/clq_containing_nodes.m, + BNT/inference/static/@jtree_inf_engine/collect_evidence.m, + BNT/inference/static/@jtree_inf_engine/enter_soft_evidence.m, + BNT/inference/static/@jtree_inf_engine/marginal_family.m, + BNT/inference/static/@jtree_inf_engine/marginal_nodes.m, + BNT/inference/static/@jtree_inf_engine/set_fields.m, + BNT/inference/static/@jtree_inf_engine/Old/collect_evidence.m, + BNT/inference/static/@jtree_inf_engine/Old/distribute_evidence.m, + BNT/inference/static/@jtree_inf_engine/Old/enter_evidence.m, + BNT/inference/static/@jtree_inf_engine/Old/enter_soft_evidence.m, + BNT/inference/static/@jtree_limid_inf_engine/enter_evidence.m, + BNT/inference/static/@jtree_limid_inf_engine/jtree_limid_inf_engine.m, + BNT/inference/static/@jtree_limid_inf_engine/marginal_family.m, + BNT/inference/static/@jtree_limid_inf_engine/marginal_nodes.m, + BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_family.m, + BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_nodes_SS.m, + BNT/inference/static/@jtree_sparse_inf_engine/cliques_from_engine.m, + BNT/inference/static/@jtree_sparse_inf_engine/clq_containing_nodes.m, + BNT/inference/static/@jtree_sparse_inf_engine/collect_evidence.c, + BNT/inference/static/@jtree_sparse_inf_engine/distribute_evidence.c, + BNT/inference/static/@jtree_sparse_inf_engine/enter_evidence.m, + BNT/inference/static/@jtree_sparse_inf_engine/enter_soft_evidence.m, + BNT/inference/static/@jtree_sparse_inf_engine/init_pot.c, + BNT/inference/static/@jtree_sparse_inf_engine/marginal_family.m, + BNT/inference/static/@jtree_sparse_inf_engine/marginal_nodes.m, + BNT/inference/static/@jtree_sparse_inf_engine/set_fields.m, + BNT/inference/static/@jtree_sparse_inf_engine/old/collect_evidence.c, + BNT/inference/static/@jtree_sparse_inf_engine/old/distribute_evidence.c, + BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot.c, + BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.c, + BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.m, + BNT/inference/static/@likelihood_weighting_inf_engine/enter_evidence.m, + BNT/inference/static/@likelihood_weighting_inf_engine/likelihood_weighting_inf_engine.m, + BNT/inference/static/@likelihood_weighting_inf_engine/marginal_nodes.m, + BNT/inference/static/@pearl_inf_engine/enter_evidence.m, + BNT/inference/static/@pearl_inf_engine/loopy_converged.m, + BNT/inference/static/@pearl_inf_engine/marginal_nodes.m, + BNT/inference/static/@pearl_inf_engine/private/compute_bel.m, + BNT/inference/static/@pearl_inf_engine/private/prod_lambda_msgs.m, + BNT/inference/static/@pearl_inf_engine/private/tree_protocol.m, + BNT/inference/static/@quickscore_inf_engine/enter_evidence.m, + BNT/inference/static/@quickscore_inf_engine/marginal_nodes.m, + BNT/inference/static/@quickscore_inf_engine/quickscore_inf_engine.m, + BNT/inference/static/@quickscore_inf_engine/private/C_quickscore.c, + BNT/inference/static/@quickscore_inf_engine/private/nr.h, + BNT/inference/static/@quickscore_inf_engine/private/nrutil.c, + BNT/inference/static/@quickscore_inf_engine/private/nrutil.h, + BNT/inference/static/@quickscore_inf_engine/private/quickscore.m, + BNT/learning/bayes_update_params.m, + BNT/learning/bic_score_family.m, + BNT/learning/compute_cooling_schedule.m, + BNT/learning/dirichlet_score_family.m, + BNT/learning/kpm_learn_struct_mcmc.m, + BNT/learning/learn_params_em.m, + BNT/learning/learn_struct_dbn_reveal.m, + BNT/learning/learn_struct_pdag_ic_star.m, + BNT/learning/mcmc_sample_to_hist.m, BNT/learning/mk_schedule.m, + BNT/learning/mk_tetrad_data_file.m, + BNT/learning/score_dags_old.m, HMM/dhmm_logprob_brute_force.m, + HMM/dhmm_logprob_path.m, HMM/mdp_sample.m, Kalman/AR_to_SS.m, + Kalman/SS_to_AR.m, Kalman/convert_to_lagged_form.m, + Kalman/ensure_AR.m, Kalman/eval_AR_perf.m, + Kalman/kalman_filter.m, Kalman/kalman_smoother.m, + Kalman/kalman_update.m, Kalman/learn_AR.m, + Kalman/learn_AR_diagonal.m, Kalman/learn_kalman.m, + Kalman/smooth_update.m, + BNT/general/convert_dbn_CPDs_to_tables_slow.m, + BNT/general/dispcpt.m, BNT/general/linear_gaussian_to_cpot.m, + BNT/general/partition_matrix_vec_3.m, + BNT/general/shrink_obs_dims_in_gaussian.m, + BNT/general/shrink_obs_dims_in_table.m, + BNT/potentials/CPD_to_pot.m, BNT/potentials/README, + BNT/potentials/check_for_cd_arcs.m, + BNT/potentials/determine_pot_type.m, + BNT/potentials/mk_initial_pot.m, + BNT/potentials/@cgpot/cg_can_to_mom.m, + BNT/potentials/@cgpot/cg_mom_to_can.m, + BNT/potentials/@cgpot/cgpot.m, BNT/potentials/@cgpot/display.m, + BNT/potentials/@cgpot/divide_by_pot.m, + BNT/potentials/@cgpot/domain_pot.m, + BNT/potentials/@cgpot/enter_cts_evidence_pot.m, + BNT/potentials/@cgpot/enter_discrete_evidence_pot.m, + BNT/potentials/@cgpot/marginalize_pot.m, + BNT/potentials/@cgpot/multiply_by_pot.m, + BNT/potentials/@cgpot/multiply_pots.m, + BNT/potentials/@cgpot/normalize_pot.m, + BNT/potentials/@cgpot/pot_to_marginal.m, + BNT/potentials/@cgpot/Old/normalize_pot.m, + BNT/potentials/@cgpot/Old/simple_marginalize_pot.m, + BNT/potentials/@cpot/cpot.m, BNT/potentials/@cpot/cpot_to_mpot.m, + BNT/potentials/@cpot/display.m, + BNT/potentials/@cpot/divide_by_pot.m, + BNT/potentials/@cpot/domain_pot.m, + BNT/potentials/@cpot/enter_cts_evidence_pot.m, + BNT/potentials/@cpot/marginalize_pot.m, + BNT/potentials/@cpot/multiply_by_pot.m, + BNT/potentials/@cpot/multiply_pots.m, + BNT/potentials/@cpot/normalize_pot.m, + BNT/potentials/@cpot/pot_to_marginal.m, + BNT/potentials/@cpot/rescale_pot.m, + BNT/potentials/@cpot/set_domain_pot.m, + BNT/potentials/@cpot/Old/cpot_to_mpot.m, + BNT/potentials/@cpot/Old/normalize_pot.convert.m, + BNT/potentials/@dpot/approxeq_pot.m, + BNT/potentials/@dpot/display.m, + BNT/potentials/@dpot/domain_pot.m, + BNT/potentials/@dpot/dpot_to_table.m, + BNT/potentials/@dpot/get_fields.m, + BNT/potentials/@dpot/multiply_pots.m, + BNT/potentials/@dpot/pot_to_marginal.m, + BNT/potentials/@dpot/set_domain_pot.m, + BNT/potentials/@mpot/display.m, + BNT/potentials/@mpot/marginalize_pot.m, + BNT/potentials/@mpot/mpot.m, BNT/potentials/@mpot/mpot_to_cpot.m, + BNT/potentials/@mpot/normalize_pot.m, + BNT/potentials/@mpot/pot_to_marginal.m, + BNT/potentials/@mpot/rescale_pot.m, + BNT/potentials/@upot/approxeq_pot.m, + BNT/potentials/@upot/display.m, + BNT/potentials/@upot/divide_by_pot.m, + BNT/potentials/@upot/marginalize_pot.m, + BNT/potentials/@upot/multiply_by_pot.m, + BNT/potentials/@upot/normalize_pot.m, + BNT/potentials/@upot/pot_to_marginal.m, + BNT/potentials/@upot/upot.m, + BNT/potentials/@upot/upot_to_opt_policy.m, + BNT/potentials/Old/comp_eff_node_sizes.m, + BNT/potentials/Tables/divide_by_sparse_table.c, + BNT/potentials/Tables/divide_by_table.c, + BNT/potentials/Tables/marg_sparse_table.c, + BNT/potentials/Tables/marg_table.c, + BNT/potentials/Tables/mult_by_sparse_table.c, + BNT/potentials/Tables/rep_mult.c, HMM/mk_leftright_transmat.m: + Initial revision + +2002-05-29 04:59 yozhik + + * BNT/inference/static/@stab_cond_gauss_inf_engine/: + clq_containing_nodes.m, problems.txt, push_pot_toclique.m, + Old/initialize_engine.m: Initial import of code base from Kevin + Murphy. + +2002-05-29 04:59 yozhik + + * BNT/inference/static/@stab_cond_gauss_inf_engine/: + clq_containing_nodes.m, problems.txt, push_pot_toclique.m, + Old/initialize_engine.m: Initial revision + +2002-05-19 15:11 yozhik + + * BNT/potentials/: @scgcpot/marginalize_pot.m, + @scgcpot/normalize_pot.m, @scgcpot/rescale_pot.m, + @scgcpot/scgcpot.m, @scgpot/direct_combine_pots.m, + @scgpot/pot_to_marginal.m: Initial import of code base from Kevin + Murphy. + +2002-05-19 15:11 yozhik + + * BNT/potentials/: @scgcpot/marginalize_pot.m, + @scgcpot/normalize_pot.m, @scgcpot/rescale_pot.m, + @scgcpot/scgcpot.m, @scgpot/direct_combine_pots.m, + @scgpot/pot_to_marginal.m: Initial revision + +2001-07-28 08:43 yozhik + + * BNT/potentials/genops.c: Initial import of code base from Kevin + Murphy. + +2001-07-28 08:43 yozhik + + * BNT/potentials/genops.c: Initial revision + diff --git a/sourcecodes/bnt-master/docs/Eqns/lin_reg_eqn.gif b/sourcecodes/bnt-master/docs/Eqns/lin_reg_eqn.gif new file mode 100644 index 00000000..6ba3fda5 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Eqns/lin_reg_eqn.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/CPTgrass.gif b/sourcecodes/bnt-master/docs/Figures/CPTgrass.gif new file mode 100644 index 00000000..a5ecccd1 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/CPTgrass.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/HMEforMatlab.jpg b/sourcecodes/bnt-master/docs/Figures/HMEforMatlab.jpg new file mode 100644 index 00000000..16682678 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/HMEforMatlab.jpg differ diff --git a/sourcecodes/bnt-master/docs/Figures/ar1.fig b/sourcecodes/bnt-master/docs/Figures/ar1.fig new file mode 100644 index 00000000..32e11d19 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/ar1.fig @@ -0,0 +1,13 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 450 300 225 600 450 900 675 +1 1 0 1 -1 0 0 0 -1 0.000 1 0.0000 1725 450 300 225 1725 450 2025 675 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 450 1425 450 +4 0 -1 0 0 0 12 0.0000 4 180 2310 300 1050 Auto Regressive model AR(1)\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 450 525 X1\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 1575 525 X2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/ar1.gif b/sourcecodes/bnt-master/docs/Figures/ar1.gif new file mode 100644 index 00000000..3271dd61 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/ar1.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/batnet.fig b/sourcecodes/bnt-master/docs/Figures/batnet.fig new file mode 100644 index 00000000..a1c72a6a --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/batnet.fig @@ -0,0 +1,318 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +0 32 #dfdfdf +5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 5250.000 2175.000 2250 1500 2175 2175 2250 2850 +5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 6594.530 5137.500 2250 4200 2150 5137 2250 6075 +5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 3562.500 3450.000 2250 3000 2175 3450 2250 3900 +5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 2576.560 6412.500 2250 6225 2200 6412 2250 6600 +6 6075 3300 7125 3600 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7125 3600 7125 3300 6075 3300 6075 3600 7125 3600 +4 1 -1 0 0 0 12 0.0000 4 135 1020 6600 3525 SensorValid1\001 +-6 +6 6450 3975 7500 4275 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7500 4275 7500 3975 6450 3975 6450 4275 7500 4275 +4 1 -1 0 0 0 12 0.0000 4 135 870 6975 4200 FYdotDiff1\001 +-6 +6 6600 4575 7650 4875 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7650 4875 7650 4575 6600 4575 6600 4875 7650 4875 +4 1 -1 0 0 0 12 0.0000 4 135 975 7125 4800 FcloseSlow1\001 +-6 +6 2400 3075 3000 3375 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3000 3375 3000 3075 2400 3075 2400 3375 3000 3375 +4 1 -1 0 0 0 12 0.0000 4 135 465 2700 3300 Xdot0\001 +-6 +6 5025 3075 5625 3375 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 3375 5625 3075 5025 3075 5025 3375 5625 3375 +4 1 -1 0 0 0 12 0.0000 4 135 465 5325 3300 Xdot1\001 +-6 +6 2400 3600 3150 3900 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3150 3900 3150 3600 2400 3600 2400 3900 3150 3900 +4 1 -1 0 0 0 12 0.0000 4 135 615 2775 3825 InLane0\001 +-6 +6 4875 3600 5625 3900 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 3900 5625 3600 4875 3600 4875 3900 5625 3900 +4 1 -1 0 0 0 12 0.0000 4 135 615 5250 3825 InLane1\001 +-6 +6 2400 1500 3150 1800 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3150 1800 3150 1500 2400 1500 2400 1800 3150 1800 +4 1 -1 0 0 0 12 0.0000 4 135 630 2775 1725 LeftClr0\001 +-6 +6 4875 1500 5625 1800 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 1800 5625 1500 4875 1500 4875 1800 5625 1800 +4 1 -1 0 0 0 12 0.0000 4 135 630 5250 1725 LeftClr1\001 +-6 +6 2400 2025 3300 2325 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3300 2325 3300 2025 2400 2025 2400 2325 3300 2325 +4 1 -1 0 0 0 12 0.0000 4 180 720 2850 2250 RightClr0\001 +-6 +6 4800 2025 5625 2325 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 2325 5625 2025 4800 2025 4800 2325 5625 2325 +4 1 -1 0 0 0 12 0.0000 4 180 720 5250 2250 RightClr1\001 +-6 +6 2400 2550 3300 2850 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3300 2850 3300 2550 2400 2550 2400 2850 3300 2850 +4 1 -1 0 0 0 12 0.0000 4 135 855 2850 2775 LatAction0\001 +-6 +6 4725 2550 5625 2850 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 2850 5625 2550 4725 2550 4725 2850 5625 2850 +4 1 -1 0 0 0 12 0.0000 4 135 855 5175 2775 LatAction1\001 +-6 +6 2400 4200 3450 4500 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3450 4500 3450 4200 2400 4200 2400 4500 3450 4500 +4 1 -1 0 0 0 12 0.0000 4 135 930 2925 4425 FwdAction0\001 +-6 +6 4575 4200 5625 4500 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 4500 5625 4200 4575 4200 4575 4500 5625 4500 +4 1 -1 0 0 0 12 0.0000 4 135 930 5100 4425 FwdAction1\001 +-6 +6 2400 4725 3000 5025 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3000 5025 3000 4725 2400 4725 2400 5025 3000 5025 +4 1 -1 0 0 0 12 0.0000 4 135 465 2700 4950 Ydot0\001 +-6 +6 5025 4725 5625 5025 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 5025 5625 4725 5025 4725 5025 5025 5625 5025 +4 1 -1 0 0 0 12 0.0000 4 135 465 5325 4950 Ydot1\001 +-6 +6 2400 5250 3150 5550 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3150 5550 3150 5250 2400 5250 2400 5550 3150 5550 +4 1 -1 0 0 0 12 0.0000 4 180 705 2775 5475 Stopped0\001 +-6 +6 4500 5250 5250 5550 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5250 5550 5250 5250 4500 5250 4500 5550 5250 5550 +4 1 -1 0 0 0 12 0.0000 4 180 705 4875 5475 Stopped1\001 +-6 +6 6450 5325 7200 5625 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7200 5625 7200 5325 6450 5325 6450 5625 7200 5625 +4 1 -1 0 0 0 12 0.0000 4 135 585 6825 5550 BXdot1\001 +-6 +6 2400 5775 3300 6075 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3300 6075 3300 5775 2400 5775 2400 6075 3300 6075 +4 1 -1 0 0 0 12 0.0000 4 180 885 2850 6000 EngStatus0\001 +-6 +6 4575 5775 5475 6075 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5475 6075 5475 5775 4575 5775 4575 6075 5475 6075 +4 1 -1 0 0 0 12 0.0000 4 180 885 5025 6000 EngStatus1\001 +-6 +6 6150 5775 7200 6075 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7200 6075 7200 5775 6150 5775 6150 6075 7200 6075 +4 1 -1 0 0 0 12 0.0000 4 135 960 6675 6000 BcloseFast1\001 +-6 +6 2400 6300 3750 6600 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3750 6600 3750 6300 2400 6300 2400 6600 3750 6600 +4 1 -1 0 0 0 12 0.0000 4 135 1380 3075 6525 FrontBackStatus0\001 +-6 +6 4125 6300 5475 6600 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5475 6600 5475 6300 4125 6300 4125 6600 5475 6600 +4 1 -1 0 0 0 12 0.0000 4 135 1380 4800 6525 FrontBackStatus1\001 +-6 +6 6150 6300 7200 6600 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7200 6600 7200 6300 6150 6300 6150 6600 7200 6600 +4 1 -1 0 0 0 12 0.0000 4 135 885 6675 6525 BYdotDiff1\001 +-6 +6 7650 5025 8250 5325 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 8250 5325 8250 5025 7650 5025 7650 5325 8250 5325 +4 1 -1 0 0 0 12 0.0000 4 135 390 7950 5250 Fclr1\001 +-6 +6 7650 5775 8250 6075 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 8250 6075 8250 5775 7650 5775 7650 6075 8250 6075 +4 1 -1 0 0 0 12 0.0000 4 135 405 7950 6000 Bclr1\001 +-6 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3150 3750 4725 2775 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3000 3225 4875 3675 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5175 5025 5025 5250 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5325 5775 5475 5025 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5400 5775 6450 4200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5175 2850 5325 3075 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5100 4500 5175 4725 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3150 1650 4800 2550 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3750 6375 4650 4500 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3300 2700 4650 4200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5475 6000 6450 5475 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7725 5775 7200 5550 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3675 6300 4800 2850 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 6150 6000 5475 6525 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3 + 3 1 1.00 60.00 120.00 + 5625 4800 6375 3750 8850 3750 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 6600 4800 5475 6375 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 6675 6300 6675 6075 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3 + 3 1 1.00 60.00 120.00 + 5475 5850 6150 5175 7650 5175 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3000 3225 5025 3225 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5625 3225 8850 3225 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7125 3450 8850 3300 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3150 3750 4875 3750 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7125 3450 8850 3675 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3150 1650 4875 1650 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5625 1650 8700 1650 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3300 2175 4800 2175 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5625 2175 8550 2175 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3300 2700 4725 2700 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3300 2100 4725 2625 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5625 2700 8700 2700 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3450 4350 4575 4350 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7500 4125 8400 4350 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7125 4275 7125 4575 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3000 4875 5025 4875 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7800 5025 7650 4800 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3150 5400 4500 5400 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7200 5400 8700 5400 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3300 5925 4575 5925 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7650 5925 7200 5925 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7200 6450 8400 6450 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 8250 5175 8850 4875 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 8250 5925 8850 5925 +2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5 + 3975 6700 1875 6700 1875 4100 3975 4100 3975 6700 +2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5 + 3975 4000 1875 4000 1875 1400 3975 1400 3975 4000 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 6600 9750 6300 8400 6300 8400 6600 9750 6600 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 6075 9750 5775 8850 5775 8850 6075 9750 6075 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 5550 9750 5250 8700 5250 8700 5550 9750 5550 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 5025 9750 4725 8850 4725 8850 5025 9750 5025 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 4500 9750 4200 8400 4200 8400 4500 9750 4500 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 3900 9750 3600 8850 3600 8850 3900 9750 3900 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 3375 9750 3075 8850 3075 8850 3375 9750 3375 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 2850 9750 2550 8700 2550 8700 2850 9750 2850 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 2325 9750 2025 8550 2025 8550 2325 9750 2325 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 1800 9750 1500 8700 1500 8700 1800 9750 1800 +4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3300 XdotSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3825 YdotSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 1005 9225 1725 LeftClrSens1\001 +4 1 -1 0 0 0 12 0.0000 4 180 1095 9150 2250 RightClrSens1\001 +4 1 -1 0 0 0 12 0.0000 4 180 900 9225 2775 TurnSignal1\001 +4 1 -1 0 0 0 12 0.0000 4 135 1245 9075 4425 FYdotDiffSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 765 9300 4950 FclrSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 960 9225 5475 BXdotSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 780 9300 6000 BclrSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 1260 9075 6525 BYdotDiffSens1\001 +4 1 -1 0 0 0 16 0.0000 4 165 585 2925 7050 slice t\001 +4 1 -1 0 0 0 16 0.0000 4 165 840 4800 7050 slice t+1\001 +4 1 -1 0 0 0 16 0.0000 4 165 855 9150 7050 evidence\001 + diff --git a/sourcecodes/bnt-master/docs/Figures/batnet.gif b/sourcecodes/bnt-master/docs/Figures/batnet.gif new file mode 100644 index 00000000..d7fb15b6 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/batnet.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/batnet_numbered.fig b/sourcecodes/bnt-master/docs/Figures/batnet_numbered.fig new file mode 100644 index 00000000..daa9a755 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/batnet_numbered.fig @@ -0,0 +1,345 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +0 32 #dfdfdf +5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 5250.000 2175.000 2250 1500 2175 2175 2250 2850 +5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 6594.530 5137.500 2250 4200 2150 5137 2250 6075 +5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 3562.500 3450.000 2250 3000 2175 3450 2250 3900 +5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 2576.560 6412.500 2250 6225 2200 6412 2250 6600 +6 6075 3300 7125 3600 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7125 3600 7125 3300 6075 3300 6075 3600 7125 3600 +4 1 -1 0 0 0 12 0.0000 4 135 1020 6600 3525 SensorValid1\001 +-6 +6 6450 3975 7500 4275 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7500 4275 7500 3975 6450 3975 6450 4275 7500 4275 +4 1 -1 0 0 0 12 0.0000 4 135 870 6975 4200 FYdotDiff1\001 +-6 +6 6600 4575 7650 4875 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7650 4875 7650 4575 6600 4575 6600 4875 7650 4875 +4 1 -1 0 0 0 12 0.0000 4 135 975 7125 4800 FcloseSlow1\001 +-6 +6 2400 3075 3000 3375 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3000 3375 3000 3075 2400 3075 2400 3375 3000 3375 +4 1 -1 0 0 0 12 0.0000 4 135 465 2700 3300 Xdot0\001 +-6 +6 5025 3075 5625 3375 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 3375 5625 3075 5025 3075 5025 3375 5625 3375 +4 1 -1 0 0 0 12 0.0000 4 135 465 5325 3300 Xdot1\001 +-6 +6 2400 3600 3150 3900 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3150 3900 3150 3600 2400 3600 2400 3900 3150 3900 +4 1 -1 0 0 0 12 0.0000 4 135 615 2775 3825 InLane0\001 +-6 +6 4875 3600 5625 3900 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 3900 5625 3600 4875 3600 4875 3900 5625 3900 +4 1 -1 0 0 0 12 0.0000 4 135 615 5250 3825 InLane1\001 +-6 +6 2400 1500 3150 1800 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3150 1800 3150 1500 2400 1500 2400 1800 3150 1800 +4 1 -1 0 0 0 12 0.0000 4 135 630 2775 1725 LeftClr0\001 +-6 +6 4875 1500 5625 1800 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 1800 5625 1500 4875 1500 4875 1800 5625 1800 +4 1 -1 0 0 0 12 0.0000 4 135 630 5250 1725 LeftClr1\001 +-6 +6 2400 2025 3300 2325 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3300 2325 3300 2025 2400 2025 2400 2325 3300 2325 +4 1 -1 0 0 0 12 0.0000 4 180 720 2850 2250 RightClr0\001 +-6 +6 4800 2025 5625 2325 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 2325 5625 2025 4800 2025 4800 2325 5625 2325 +4 1 -1 0 0 0 12 0.0000 4 180 720 5250 2250 RightClr1\001 +-6 +6 2400 2550 3300 2850 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3300 2850 3300 2550 2400 2550 2400 2850 3300 2850 +4 1 -1 0 0 0 12 0.0000 4 135 855 2850 2775 LatAction0\001 +-6 +6 4725 2550 5625 2850 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 2850 5625 2550 4725 2550 4725 2850 5625 2850 +4 1 -1 0 0 0 12 0.0000 4 135 855 5175 2775 LatAction1\001 +-6 +6 2400 4200 3450 4500 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3450 4500 3450 4200 2400 4200 2400 4500 3450 4500 +4 1 -1 0 0 0 12 0.0000 4 135 930 2925 4425 FwdAction0\001 +-6 +6 4575 4200 5625 4500 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 4500 5625 4200 4575 4200 4575 4500 5625 4500 +4 1 -1 0 0 0 12 0.0000 4 135 930 5100 4425 FwdAction1\001 +-6 +6 2400 4725 3000 5025 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3000 5025 3000 4725 2400 4725 2400 5025 3000 5025 +4 1 -1 0 0 0 12 0.0000 4 135 465 2700 4950 Ydot0\001 +-6 +6 5025 4725 5625 5025 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5625 5025 5625 4725 5025 4725 5025 5025 5625 5025 +4 1 -1 0 0 0 12 0.0000 4 135 465 5325 4950 Ydot1\001 +-6 +6 2400 5250 3150 5550 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3150 5550 3150 5250 2400 5250 2400 5550 3150 5550 +4 1 -1 0 0 0 12 0.0000 4 180 705 2775 5475 Stopped0\001 +-6 +6 4500 5250 5250 5550 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5250 5550 5250 5250 4500 5250 4500 5550 5250 5550 +4 1 -1 0 0 0 12 0.0000 4 180 705 4875 5475 Stopped1\001 +-6 +6 6450 5325 7200 5625 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7200 5625 7200 5325 6450 5325 6450 5625 7200 5625 +4 1 -1 0 0 0 12 0.0000 4 135 585 6825 5550 BXdot1\001 +-6 +6 2400 5775 3300 6075 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3300 6075 3300 5775 2400 5775 2400 6075 3300 6075 +4 1 -1 0 0 0 12 0.0000 4 180 885 2850 6000 EngStatus0\001 +-6 +6 4575 5775 5475 6075 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5475 6075 5475 5775 4575 5775 4575 6075 5475 6075 +4 1 -1 0 0 0 12 0.0000 4 180 885 5025 6000 EngStatus1\001 +-6 +6 6150 5775 7200 6075 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7200 6075 7200 5775 6150 5775 6150 6075 7200 6075 +4 1 -1 0 0 0 12 0.0000 4 135 960 6675 6000 BcloseFast1\001 +-6 +6 2325 6300 3825 6600 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 3750 6600 3750 6300 2400 6300 2400 6600 3750 6600 +4 1 -1 0 0 0 12 0.0000 4 135 1380 3075 6525 FrontBackStatus0\001 +-6 +6 4050 6300 5550 6600 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 5475 6600 5475 6300 4125 6300 4125 6600 5475 6600 +4 1 -1 0 0 0 12 0.0000 4 135 1380 4800 6525 FrontBackStatus1\001 +-6 +6 6150 6300 7200 6600 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 7200 6600 7200 6300 6150 6300 6150 6600 7200 6600 +4 1 -1 0 0 0 12 0.0000 4 135 885 6675 6525 BYdotDiff1\001 +-6 +6 7650 5025 8250 5325 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 8250 5325 8250 5025 7650 5025 7650 5325 8250 5325 +4 1 -1 0 0 0 12 0.0000 4 135 390 7950 5250 Fclr1\001 +-6 +6 7650 5775 8250 6075 +2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5 + 8250 6075 8250 5775 7650 5775 7650 6075 8250 6075 +4 1 -1 0 0 0 12 0.0000 4 135 405 7950 6000 Bclr1\001 +-6 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3150 3750 4725 2775 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3000 3225 4875 3675 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5175 5025 5025 5250 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5325 5775 5475 5025 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5400 5775 6450 4200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5175 2850 5325 3075 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5100 4500 5175 4725 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3150 1650 4800 2550 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3750 6375 4650 4500 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3300 2700 4650 4200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5475 6000 6450 5475 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7725 5775 7200 5550 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3675 6300 4800 2850 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 6150 6000 5475 6525 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3 + 3 1 1.00 60.00 120.00 + 5625 4800 6375 3750 8850 3750 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 6600 4800 5475 6375 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 6675 6300 6675 6075 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3 + 3 1 1.00 60.00 120.00 + 5475 5850 6150 5175 7650 5175 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3000 3225 5025 3225 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5625 3225 8850 3225 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7125 3450 8850 3300 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3150 3750 4875 3750 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7125 3450 8850 3675 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3150 1650 4875 1650 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5625 1650 8700 1650 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3300 2175 4800 2175 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5625 2175 8550 2175 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3300 2700 4725 2700 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3300 2100 4725 2625 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 5625 2700 8700 2700 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3450 4350 4575 4350 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7500 4125 8400 4350 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7125 4275 7125 4575 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3000 4875 5025 4875 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7800 5025 7650 4800 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3150 5400 4500 5400 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7200 5400 8700 5400 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 3300 5925 4575 5925 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7650 5925 7200 5925 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 7200 6450 8400 6450 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 8250 5175 8850 4875 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 8250 5925 8850 5925 +2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5 + 3975 6700 1875 6700 1875 4100 3975 4100 3975 6700 +2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5 + 3975 4000 1875 4000 1875 1400 3975 1400 3975 4000 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 6600 9750 6300 8400 6300 8400 6600 9750 6600 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 6075 9750 5775 8850 5775 8850 6075 9750 6075 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 5550 9750 5250 8700 5250 8700 5550 9750 5550 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 5025 9750 4725 8850 4725 8850 5025 9750 5025 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 4500 9750 4200 8400 4200 8400 4500 9750 4500 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 3900 9750 3600 8850 3600 8850 3900 9750 3900 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 3375 9750 3075 8850 3075 8850 3375 9750 3375 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 2850 9750 2550 8700 2550 8700 2850 9750 2850 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 2325 9750 2025 8550 2025 8550 2325 9750 2325 +2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5 + 9750 1800 9750 1500 8700 1500 8700 1800 9750 1800 +4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3300 XdotSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3825 YdotSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 1005 9225 1725 LeftClrSens1\001 +4 1 -1 0 0 0 12 0.0000 4 180 1095 9150 2250 RightClrSens1\001 +4 1 -1 0 0 0 12 0.0000 4 180 900 9225 2775 TurnSignal1\001 +4 1 -1 0 0 0 12 0.0000 4 135 1245 9075 4425 FYdotDiffSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 765 9300 4950 FclrSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 960 9225 5475 BXdotSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 780 9300 6000 BclrSens1\001 +4 1 -1 0 0 0 12 0.0000 4 135 1260 9075 6525 BYdotDiffSens1\001 +4 1 -1 0 0 0 16 0.0000 4 165 585 2925 7050 slice t\001 +4 1 -1 0 0 0 16 0.0000 4 165 840 4800 7050 slice t+1\001 +4 1 -1 0 0 0 16 0.0000 4 165 855 9150 7050 evidence\001 +4 0 0 50 0 0 12 0.0000 4 135 180 2025 6525 14\001 +4 0 0 50 0 0 12 0.0000 4 135 90 1950 6075 7\001 +4 0 0 50 0 0 12 0.0000 4 135 180 1950 5475 19\001 +4 0 0 50 0 0 12 0.0000 4 135 180 1950 4950 17\001 +4 0 0 50 0 0 12 0.0000 4 135 180 1950 4425 16\001 +4 0 0 50 0 0 12 0.0000 4 135 180 1950 3825 20\001 +4 0 0 50 0 0 12 0.0000 4 135 180 1950 3375 23\001 +4 0 0 50 0 0 12 0.0000 4 135 180 1950 2775 21\001 +4 0 0 50 0 0 12 0.0000 4 135 180 1950 2250 25\001 +4 0 0 50 0 0 12 0.0000 4 135 180 1950 1800 27\001 +4 0 0 50 0 0 12 0.0000 4 135 90 5925 3600 6\001 +4 0 0 50 0 0 12 0.0000 4 135 180 6225 4200 12\001 +4 0 0 50 0 0 12 0.0000 4 135 180 6375 4800 13\001 +4 0 0 50 0 0 12 0.0000 4 135 180 7875 5025 10\001 +4 0 0 50 0 0 12 0.0000 4 135 90 6300 5475 8\001 +4 0 0 50 0 0 12 0.0000 4 135 90 6000 6075 4\001 +4 0 0 50 0 0 12 0.0000 4 135 90 6000 6600 1\001 +4 0 0 50 0 0 12 0.0000 4 135 90 7575 6150 3\001 +4 0 0 50 0 0 12 0.0000 4 135 180 9825 1725 28\001 +4 0 0 50 0 0 12 0.0000 4 135 180 9825 2250 26\001 +4 0 0 50 0 0 12 0.0000 4 135 180 9825 2775 22\001 +4 0 0 50 0 0 12 0.0000 4 135 180 9825 3300 24\001 +4 0 0 50 0 0 12 0.0000 4 135 180 9825 3825 18\001 +4 0 0 50 0 0 12 0.0000 4 135 180 9825 4425 15\001 +4 0 0 50 0 0 12 0.0000 4 135 180 9825 4950 11\001 +4 0 0 50 0 0 12 0.0000 4 135 90 9825 5475 9\001 +4 0 0 50 0 0 12 0.0000 4 135 90 9825 6075 5\001 +4 0 0 50 0 0 12 0.0000 4 135 90 9825 6525 2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/bic.png b/sourcecodes/bnt-master/docs/Figures/bic.png new file mode 100644 index 00000000..1ad2a4e5 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/bic.png differ diff --git a/sourcecodes/bnt-master/docs/Figures/cg1.fig b/sourcecodes/bnt-master/docs/Figures/cg1.fig new file mode 100644 index 00000000..145c8d1d --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/cg1.fig @@ -0,0 +1,60 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 1200 3000 300 300 1200 3000 1200 3300 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3900 3000 300 300 3900 3000 3900 3300 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3900 4500 300 300 3900 4500 3900 4800 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 2100 5700 300 300 2100 5700 2100 6000 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 5700 5700 300 300 5700 5700 5700 6000 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3600 1200 4200 1200 4200 1800 3600 1800 3600 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 6600 1200 7200 1200 7200 1800 6600 1800 6600 1200 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1200 1800 1200 2700 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1200 1800 3600 2850 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1200 1800 3600 4350 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1200 3300 2100 5400 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3750 4800 2100 5400 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4050 4800 5400 5550 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3900 1800 3900 2700 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3900 3300 3900 4200 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6900 1800 4200 4350 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6900 1800 6900 2700 +2 2 0 1 0 0 100 0 2 0.000 0 0 7 0 0 5 + 900 1200 1500 1200 1500 1800 900 1800 900 1200 +4 0 0 100 0 0 12 0.0000 4 135 180 1050 1650 W\001 +4 0 0 100 0 0 12 0.0000 4 135 300 1050 3150 Min\001 +4 0 0 100 0 0 12 0.0000 4 135 105 3750 1650 F\001 +4 0 0 100 0 0 12 0.0000 4 135 120 3750 3150 E\001 +4 0 0 100 0 0 12 0.0000 4 135 135 3750 4650 D\001 +4 0 0 100 0 0 12 0.0000 4 135 405 1950 5850 Mout\001 +4 0 0 100 0 0 12 0.0000 4 135 120 6750 1650 B\001 +4 0 0 100 0 0 12 0.0000 4 135 120 6750 3150 C\001 +4 0 0 100 0 0 12 0.0000 4 135 105 5550 5850 L\001 diff --git a/sourcecodes/bnt-master/docs/Figures/cg1.gif b/sourcecodes/bnt-master/docs/Figures/cg1.gif new file mode 100644 index 00000000..fe62c5c7 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/cg1.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.T5.fig b/sourcecodes/bnt-master/docs/Figures/chmm5.T5.fig new file mode 100644 index 00000000..15579df9 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/chmm5.T5.fig @@ -0,0 +1,323 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 300 600 4500 9900 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 1200 900 1200 900 1800 300 1800 300 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 3300 900 3300 900 3900 300 3900 300 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 5400 900 5400 900 6000 300 6000 300 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 7500 900 7500 900 8100 300 8100 300 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 9300 900 9300 900 9900 300 9900 300 9300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1200 3900 1050 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3300 3900 3000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5400 3900 5100 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7500 3900 7200 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9300 3900 9000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1500 3000 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1500 3000 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9600 3000 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9600 3000 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1200 1200 1050 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3300 1200 3000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5400 1200 5100 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7500 1200 7200 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9300 1200 9000 +-6 +6 3600 600 7200 9900 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 1200 6600 1050 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 3300 6600 3000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 5400 6600 5100 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 7500 6600 7200 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 9300 6600 9000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1500 5700 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1500 5700 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9600 5700 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9600 5700 7800 +-6 +6 6300 600 9900 9900 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 5100 300 300 9600 5100 9600 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 7200 300 300 9600 7200 9600 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 9000 300 300 9600 9000 9600 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 900 300 300 9600 900 9600 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 3000 300 300 9600 3000 9600 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 8400 1200 9000 1200 9000 1800 8400 1800 8400 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 8400 3300 9000 3300 9000 3900 8400 3900 8400 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 8400 5400 9000 5400 9000 6000 8400 6000 8400 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 8400 7500 9000 7500 9000 8100 8400 8100 8400 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 8400 9300 9000 9300 9000 9900 8400 9900 8400 9300 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 1200 9300 1050 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 3300 9300 3000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 5400 9300 5100 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 7500 9300 7200 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 9300 9300 9000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 1500 8400 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 3600 8400 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 1500 8400 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 3600 8400 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 5700 8400 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 3600 8400 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 5700 8400 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 5700 8400 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 7800 8400 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 7800 8400 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 7800 8400 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 9600 8400 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 9600 8400 7800 +-6 +6 9000 600 12600 9900 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 5100 300 300 12300 5100 12300 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 7200 300 300 12300 7200 12300 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 9000 300 300 12300 9000 12300 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 900 300 300 12300 900 12300 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 3000 300 300 12300 3000 12300 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 11100 1200 11700 1200 11700 1800 11100 1800 11100 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 11100 3300 11700 3300 11700 3900 11100 3900 11100 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 11100 5400 11700 5400 11700 6000 11100 6000 11100 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 11100 7500 11700 7500 11700 8100 11100 8100 11100 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 11100 9300 11700 9300 11700 9900 11100 9900 11100 9300 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 11700 1200 12000 1050 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 11700 3300 12000 3000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 11700 5400 12000 5100 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 11700 7500 12000 7200 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 11700 9300 12000 9000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 1500 11100 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 3600 11100 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 1500 11100 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 3600 11100 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 5700 11100 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 3600 11100 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 5700 11100 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 5700 11100 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 7800 11100 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 7800 11100 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 7800 11100 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 9600 11100 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 9000 9600 11100 7800 +-6 diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.fig b/sourcecodes/bnt-master/docs/Figures/chmm5.fig new file mode 100644 index 00000000..ae772850 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/chmm5.fig @@ -0,0 +1,187 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 225 1125 975 9975 +6 225 1125 975 9975 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 300 1200 900 1200 900 1800 300 1800 300 1200 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 300 3300 900 3300 900 3900 300 3900 300 3300 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 300 5400 900 5400 900 6000 300 6000 300 5400 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 300 7500 900 7500 900 8100 300 8100 300 7500 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 300 9300 900 9300 900 9900 300 9900 300 9300 +-6 +-6 +6 2925 1125 3675 9975 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300 +-6 +6 5625 1125 6375 9975 +6 5625 1125 6375 9975 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300 +-6 +-6 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300 +1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 7500 1200 7200 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 5400 1200 5100 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 3300 1200 3000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 1200 1200 1050 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 1200 3900 1050 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 1500 3000 1500 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 3600 3000 1500 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 1500 3000 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 3600 3000 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 3600 3000 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 5700 3000 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 3300 3900 3000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 3600 5700 1500 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 3600 5700 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 5700 3000 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 7800 3000 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 5700 3000 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 7800 3000 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 9600 3000 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 9300 1200 9000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 7800 3000 9600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 9600 3000 9600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 9600 5700 9600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 9300 3900 9000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 9600 5700 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 7800 5700 9600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 7800 5700 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 7800 5700 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 7500 3900 7200 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 5700 5700 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 5700 5700 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 5700 5700 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 3600 5700 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 1500 5700 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 1500 5700 1500 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 6300 1200 6600 1050 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 6300 3300 6600 3000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 6300 5400 6600 5100 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 6300 9300 6600 9000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 6300 7500 6600 7200 +2 1 0 3 0 0 100 0 5 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 5400 3900 5100 diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.gif b/sourcecodes/bnt-master/docs/Figures/chmm5.gif new file mode 100644 index 00000000..f8259c4a Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/chmm5.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.influence.fig b/sourcecodes/bnt-master/docs/Figures/chmm5.influence.fig new file mode 100644 index 00000000..62dc8add --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/chmm5.influence.fig @@ -0,0 +1,200 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 1200 900 1200 900 1800 300 1800 300 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 3300 900 3300 900 3900 300 3900 300 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 5400 900 5400 900 6000 300 6000 300 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 7500 900 7500 900 8100 300 8100 300 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 9300 900 9300 900 9900 300 9900 300 9300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7500 1200 7200 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9300 1200 9000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9600 3000 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9300 3900 9000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9600 5700 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9600 5700 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7500 3900 7200 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 7500 6600 7200 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 9300 6600 9000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5400 3900 5100 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 5400 6600 5100 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5400 1200 5100 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3300 1200 3000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1500 3000 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1200 1200 1050 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1500 3000 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1200 3900 1050 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1500 5700 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1500 5700 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3300 3900 3000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 3300 6600 3000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 1200 6600 1050 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 900 9600 3000 7800 +3 2 1 3 0 7 100 0 -1 8.000 0 1 0 4 + 2 0 6.00 180.00 360.00 + 750 1950 2775 3750 975 5475 2925 5550 + 0.000 -1.000 -1.000 0.000 +3 0 1 3 0 7 100 0 -1 8.000 0 1 0 3 + 2 0 6.00 180.00 360.00 + 900 1875 3900 3450 5700 5550 + 0.000 1.000 0.000 +4 0 0 100 0 0 25 0.0000 4 255 435 375 1575 A1\001 +4 0 0 100 0 0 25 0.0000 4 255 420 375 3750 B1\001 +4 0 0 100 0 0 25 0.0000 4 255 420 375 5775 C1\001 +4 0 0 100 0 0 25 0.0000 4 255 435 375 7950 D1\001 +4 0 0 100 0 0 25 0.0000 4 255 405 375 9750 E1\001 +4 0 0 100 0 0 25 0.0000 4 255 435 3075 1575 A2\001 +4 0 0 100 0 0 25 0.0000 4 255 420 3075 3750 B2\001 +4 0 0 100 0 0 25 0.0000 4 255 420 3075 5775 C2\001 +4 0 0 100 0 0 25 0.0000 4 255 435 3075 7875 D2\001 +4 0 0 100 0 0 25 0.0000 4 255 405 3075 9675 E2\001 +4 0 0 100 0 0 25 0.0000 4 255 435 5775 1575 A3\001 +4 0 0 100 0 0 25 0.0000 4 255 420 5700 3675 B3\001 +4 0 0 100 0 0 25 0.0000 4 255 420 5850 5775 C3\001 +4 0 0 100 0 0 25 0.0000 4 255 435 5775 7875 D3\001 +4 0 0 100 0 0 25 0.0000 4 255 405 5850 9675 E3\001 diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.jpg b/sourcecodes/bnt-master/docs/Figures/chmm5.jpg new file mode 100644 index 00000000..2aa0de57 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/chmm5.jpg differ diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.named.fig b/sourcecodes/bnt-master/docs/Figures/chmm5.named.fig new file mode 100644 index 00000000..816d7429 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/chmm5.named.fig @@ -0,0 +1,192 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 1200 900 1200 900 1800 300 1800 300 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 3300 900 3300 900 3900 300 3900 300 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 5400 900 5400 900 6000 300 6000 300 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 7500 900 7500 900 8100 300 8100 300 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 9300 900 9300 900 9900 300 9900 300 9300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7500 1200 7200 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9300 1200 9000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9600 3000 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9300 3900 9000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9600 5700 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9600 5700 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7500 3900 7200 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 7500 6600 7200 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 9300 6600 9000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5400 3900 5100 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 5400 6600 5100 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5400 1200 5100 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3300 1200 3000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1500 3000 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1200 1200 1050 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1500 3000 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1200 3900 1050 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1500 5700 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1500 5700 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3300 3900 3000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 3300 6600 3000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 1200 6600 1050 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 900 9600 3000 7800 +4 0 0 100 0 0 25 0.0000 4 255 435 375 1575 A1\001 +4 0 0 100 0 0 25 0.0000 4 255 420 375 3750 B1\001 +4 0 0 100 0 0 25 0.0000 4 255 420 375 5775 C1\001 +4 0 0 100 0 0 25 0.0000 4 255 435 375 7950 D1\001 +4 0 0 100 0 0 25 0.0000 4 255 405 375 9750 E1\001 +4 0 0 100 0 0 25 0.0000 4 255 435 3075 1575 A2\001 +4 0 0 100 0 0 25 0.0000 4 255 420 3075 3750 B2\001 +4 0 0 100 0 0 25 0.0000 4 255 420 3075 5775 C2\001 +4 0 0 100 0 0 25 0.0000 4 255 435 3075 7875 D2\001 +4 0 0 100 0 0 25 0.0000 4 255 405 3075 9675 E2\001 +4 0 0 100 0 0 25 0.0000 4 255 435 5775 1575 A3\001 +4 0 0 100 0 0 25 0.0000 4 255 420 5700 3675 B3\001 +4 0 0 100 0 0 25 0.0000 4 255 420 5850 5775 C3\001 +4 0 0 100 0 0 25 0.0000 4 255 435 5775 7875 D3\001 +4 0 0 100 0 0 25 0.0000 4 255 405 5850 9675 E3\001 diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.small.fig b/sourcecodes/bnt-master/docs/Figures/chmm5.small.fig new file mode 100644 index 00000000..8d49e5cc --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/chmm5.small.fig @@ -0,0 +1,181 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 300 600 4500 9900 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 1200 900 1200 900 1800 300 1800 300 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 3300 900 3300 900 3900 300 3900 300 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 5400 900 5400 900 6000 300 6000 300 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 7500 900 7500 900 8100 300 8100 300 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 300 9300 900 9300 900 9900 300 9900 300 9300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1200 3900 1050 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3300 3900 3000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5400 3900 5100 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7500 3900 7200 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9300 3900 9000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1500 3000 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1500 3000 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9600 3000 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9600 3000 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1200 1200 1050 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3300 1200 3000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5400 1200 5100 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7500 1200 7200 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9300 1200 9000 +-6 +6 3600 600 7200 9900 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500 +2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5 + 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 1200 6600 1050 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 3300 6600 3000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 5400 6600 5100 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 7500 6600 7200 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 9300 6600 9000 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1500 5700 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1500 5700 1500 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 3600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 5700 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 7800 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9600 5700 9600 +2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9600 5700 7800 +-6 diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5_circle.fig b/sourcecodes/bnt-master/docs/Figures/chmm5_circle.fig new file mode 100644 index 00000000..bda2e382 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/chmm5_circle.fig @@ -0,0 +1,162 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 3534 300 300 602 3534 602 3834 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 5634 300 300 602 5634 602 5934 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 7734 300 300 602 7734 602 8034 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 9459 300 300 602 9459 602 9759 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 600 1425 300 300 600 1425 600 1725 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 1500 300 300 3300 1500 3300 1800 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 3600 300 300 3300 3600 3300 3900 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 5700 300 300 3300 5700 3300 6000 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 7800 300 300 3300 7800 3300 8100 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 9600 300 300 3300 9600 3300 9900 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6077 1509 300 300 6077 1509 6077 1809 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6077 3534 300 300 6077 3534 6077 3834 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6075 5700 300 300 6075 5700 6075 6000 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6077 7809 300 300 6077 7809 6077 8109 +1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6002 9534 300 300 6002 9534 6002 9834 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7500 1200 7200 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9300 1200 9000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 9600 3000 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 7800 3000 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9300 3900 9000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9600 5700 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 9600 5700 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 9600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7800 5700 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 7500 3900 7200 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 7800 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 7500 6600 7200 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 9300 6600 9000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5700 5700 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 5400 3900 5100 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 5400 6600 5100 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5700 3000 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 5400 1200 5100 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 5700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3600 3000 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 3300 1200 3000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1500 3000 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1200 1200 1050 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1500 3000 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1200 3900 1050 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1500 5700 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 1500 5700 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 1500 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3300 3900 3000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 3300 6600 3000 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 3600 3600 5700 3600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.00 60.00 120.00 + 6300 1200 6600 1050 +2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 900 9600 3000 7800 diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5_nobold.fig b/sourcecodes/bnt-master/docs/Figures/chmm5_nobold.fig new file mode 100644 index 00000000..d13942a8 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/chmm5_nobold.fig @@ -0,0 +1,187 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 225 1125 975 9975 +6 225 1125 975 9975 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 300 1200 900 1200 900 1800 300 1800 300 1200 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 300 3300 900 3300 900 3900 300 3900 300 3300 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 300 5400 900 5400 900 6000 300 6000 300 5400 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 300 7500 900 7500 900 8100 300 8100 300 7500 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 300 9300 900 9300 900 9900 300 9900 300 9300 +-6 +-6 +6 2925 1125 3675 9975 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300 +-6 +6 5625 1125 6375 9975 +6 5625 1125 6375 9975 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500 +2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5 + 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300 +-6 +-6 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 7500 1200 7200 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 5400 1200 5100 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 3300 1200 3000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 1200 1200 1050 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 1200 3900 1050 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 1500 3000 1500 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 3600 3000 1500 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 1500 3000 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 3600 3000 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 3600 3000 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 5700 3000 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 3300 3900 3000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 3600 5700 1500 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 3600 5700 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 5700 3000 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 7800 3000 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 5700 3000 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 7800 3000 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 9600 3000 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 9300 1200 9000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 7800 3000 9600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 900 9600 3000 9600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 9600 5700 9600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 9300 3900 9000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 9600 5700 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 7800 5700 9600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 7800 5700 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 7800 5700 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 7500 3900 7200 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 5700 5700 7800 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 5700 5700 5700 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 5700 5700 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 3600 5700 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 1500 5700 3600 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 1500 5700 1500 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 6300 1200 6600 1050 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 6300 3300 6600 3000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 6300 5400 6600 5100 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 6300 9300 6600 9000 +2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 6300 7500 6600 7200 +2 1 0 3 0 0 100 0 5 0.000 0 0 7 1 0 2 + 0 0 1.50 90.00 180.00 + 3600 5400 3900 5100 diff --git a/sourcecodes/bnt-master/docs/Figures/fa.eps b/sourcecodes/bnt-master/docs/Figures/fa.eps new file mode 100644 index 00000000..03102fbf --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/fa.eps @@ -0,0 +1,356 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (fa.eps) +%%CreationDate: (Tue Nov 16 19:51:50 2004) +%%BoundingBox: 0 0 131 161 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Times-Roman findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 131 161 +userdict begin +DisplayImage +0 0 +131 161 +12.000000 +131 161 +1 +1 +1 +1 +ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffff +ffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffff +ffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffff +ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff +ffffffffffffffffe0fffffffffff001ffffffffffffffffffe0ffffffffff8ffe3fffff +ffffffffffffe0fffffffffc7fffc7ffffffffffffffffe0fffffffffbfffffbffffffff +ffffffffe0ffffffffe7fffffcffffffffffffffffe0ffffffffdfffffff7fffffffffff +ffffe0ffffffffbfffffffbfffffffffffffffe0ffffffff7fffffffdfffffffffffffff +e0fffffffeffffffffefffffffffffffffe0fffffffeffffffffefffffffffffffffe0ff +fffffdfffffffff7ffffffffffffffe0fffffffdfe31fffff7ffffffffffffffe0ffffff +fbff7bfffffbffffffffffffffe0fffffffbffb7fffffbffffffffffffffe0fffffffbff +8ffffffbffffffffffffffe0fffffffbffcffffffbffffffffffffffe0fffffffbffa7ff +fffbffffffffffffffe0fffffffbffb7fffffbffffffffffffffe0fffffffbff7bfffffb +ffffffffffffffe0fffffffdfe31fffff7ffffffffffffffe0fffffffdfffffffff7ffff +ffffffffffe0fffffffeffffffffefffffffffffffffe0fffffffeffffffffefffffffff +ffffffe0ffffffff7fffffffdfffffffffffffffe0ffffffffbfffffffbfffffffffffff +ffe0ffffffffdfffffff7fffffffffffffffe0ffffffffe7fffffcffffffffffffffffe0 +fffffffffbfffffbffffffffffffffffe0fffffffffc7fffc7ffffffffffffffffe0ffff +ffffff8ffe3fffffffffffffffffe0fffffffffff001ffffffffffffffffffe0ffffffff +ffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffff +ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffbfff +ffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffff +ffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffff +ffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffff +ffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffff +e0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ff +ffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffff +ffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffff +ffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbf +ffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffff +ffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffff +ffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffff +ffffffe0ffffffffffffbfffffffffffffffffffe0fffffffffffeafffffffffffffffff +ffe0fffffffffffeafffffffffffffffffffe0fffffffffffe9fffffffffffffffffffe0 +ffffffffffff1fffffffffffffffffffe0ffffffffffff1fffffffffffffffffffe0ffff +ffffffff1fffffffffffffffffffe0ffffffffffff3fffffffffffffffffffe0ffffffff +ffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffff +ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff +ffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffff +ffffffffffffe0ffffffffffffffffffffffffffffffffe0fffffffffff001ffffffffff +ffffffffe0ffffffffff8ffe3fffffffffffffffffe0fffffffffc6eeec7ffffffffffff +ffffe0fffffffffbfffffbffffffffffffffffe0ffffffffe3bbfbb8ffffffffffffffff +e0ffffffffdfffffff7fffffffffffffffe0ffffffffaeeeeeeebfffffffffffffffe0ff +ffffff7fffffffdfffffffffffffffe0fffffffebfbfbfbfafffffffffffffffe0ffffff +feffffffffefffffffffffffffe0fffffffceeeeeeeee7ffffffffffffffe0fffffffdfe +38fffff7ffffffffffffffe0fffffffbfb79fbfbfbffffffffffffffe0fffffffbffbbff +fffbffffffffffffffe0fffffffaeecaeeeeebffffffffffffffe0fffffffbffc7fffffb +ffffffffffffffe0fffffffbbfafbfbfbbffffffffffffffe0fffffffbffeffffffbffff +ffffffffffe0fffffffaeeeeeeeeebffffffffffffffe0fffffffdffc7fffff7ffffffff +ffffffe0fffffffdfbbbfbbbf7ffffffffffffffe0fffffffeffffffffefffffffffffff +ffe0fffffffeeeeeeeeeefffffffffffffffe0ffffffff7fffffffdfffffffffffffffe0 +ffffffffbfbfbfbfbfffffffffffffffe0ffffffffdfffffff7fffffffffffffffe0ffff +ffffe6eeeeecffffffffffffffffe0fffffffffbfffffbffffffffffffffffe0ffffffff +fc7bfbc7ffffffffffffffffe0ffffffffff8ffe3fffffffffffffffffe0fffffffffff0 +01ffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff +ffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffff +ffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff +ffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffff +ffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffff +e0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ff +ffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffff +ffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffff +ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffff +ffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ff80ffffffffbfffcf +ffdff01c5f7fffe0ffdeffffffffbfffeffffff5c99f7fffe0ffdffffbffff5fffefffff +f5ebdebfffe0ffdde790cd3f5d3ce9989c6dc7febfffe0ffc1db6bb67eeedb6db6db6c17 +fddfffe0ffdde37bb6fe0edc6d33d9edf7fc1fffe0ffdfdb7bb6feeedb6d7cde5dfbdddf +ffe0ffdfdb6bb6fdf6db6e76db5df99befffe0ff87e59ccc78e04c86f188d8fc31c7ffe0 +fffffffffffffffffeffffffffffffffe0fffffffffffffffffdffffffffffffffe0ffff +fffffffffffff9ffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffff +ffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffff +ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff +ffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffff +ffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff +ffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffff +ffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffff +e0 +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/sourcecodes/bnt-master/docs/Figures/fa.fig b/sourcecodes/bnt-master/docs/Figures/fa.fig new file mode 100644 index 00000000..db4bec4a --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/fa.fig @@ -0,0 +1,16 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 900 1950 300 225 900 1950 1200 2175 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 900 825 300 225 900 825 1200 1050 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1125 900 1650 +4 0 -1 0 0 0 12 0.0000 4 135 135 825 900 X\001 +4 0 -1 0 0 0 12 0.0000 4 135 135 825 2025 Y\001 diff --git a/sourcecodes/bnt-master/docs/Figures/fa.gif b/sourcecodes/bnt-master/docs/Figures/fa.gif new file mode 100644 index 00000000..420c1517 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/fa.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/fa_caption.fig b/sourcecodes/bnt-master/docs/Figures/fa_caption.fig new file mode 100644 index 00000000..71cd37f2 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/fa_caption.fig @@ -0,0 +1,13 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 900 1950 300 225 900 1950 1200 2175 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 900 825 300 225 900 825 1200 1050 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1125 900 1650 +4 0 -1 0 0 0 12 0.0000 4 135 135 750 2025 Y\001 +4 0 -1 0 0 0 12 0.0000 4 135 120 750 900 X\001 +4 0 -1 0 0 0 12 0.0000 4 180 1620 300 2625 Factor Analysis/PCA\001 diff --git a/sourcecodes/bnt-master/docs/Figures/fa_discrete.fig b/sourcecodes/bnt-master/docs/Figures/fa_discrete.fig new file mode 100644 index 00000000..b5be4ca5 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/fa_discrete.fig @@ -0,0 +1,43 @@ +#FIG 3.2 +Portrait +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 975 600 300 225 975 600 1275 825 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2100 600 300 225 2100 600 2400 825 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 825 525 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 825 1425 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2025 825 600 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2025 825 1425 1425 +2 2 0 1 -1 0 0 0 2 0.000 0 0 7 0 0 5 + 300 1425 750 1425 750 1875 300 1875 300 1425 +2 2 0 1 -1 0 0 0 2 0.000 0 0 7 0 0 5 + 1275 1425 1725 1425 1725 1875 1275 1875 1275 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 825 3000 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2025 825 3000 1425 +2 2 0 1 0 0 100 0 2 3.000 0 0 7 0 0 5 + 2775 1425 3225 1425 3225 1875 2775 1875 2775 1425 +4 0 -1 0 0 0 24 0.0000 4 30 270 1350 750 ...\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 1350 1725 R2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 825 675 X1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1950 675 Xn\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 375 1725 R1\001 +4 0 -1 0 0 0 12 0.0000 4 180 1920 600 2325 Discrete Factor Analysis\001 +4 0 -1 0 0 0 24 0.0000 4 30 270 2100 1650 ...\001 +4 0 0 100 0 -1 12 0.0000 4 135 210 2850 1725 Rn\001 diff --git a/sourcecodes/bnt-master/docs/Figures/fa_discrete.gif b/sourcecodes/bnt-master/docs/Figures/fa_discrete.gif new file mode 100644 index 00000000..54a8bbfb Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/fa_discrete.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/fa_discrete_single.fig b/sourcecodes/bnt-master/docs/Figures/fa_discrete_single.fig new file mode 100644 index 00000000..225a741c --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/fa_discrete_single.fig @@ -0,0 +1,18 @@ +#FIG 3.2 +Portrait +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 1 0 1 0 7 100 0 -1 0.000 1 0.0000 825 375 300 225 825 375 1125 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 600 825 1275 +2 2 0 1 0 0 100 0 2 0.000 0 0 7 0 0 5 + 600 1275 975 1275 975 1725 600 1725 600 1275 +4 0 -1 0 0 0 12 0.0000 4 135 120 750 1575 R\001 +4 0 -1 0 0 0 12 0.0000 4 135 135 750 450 X\001 +4 0 0 100 0 0 12 0.0000 4 180 1785 300 2025 discrete factor analysis\001 diff --git a/sourcecodes/bnt-master/docs/Figures/fa_regular.fig b/sourcecodes/bnt-master/docs/Figures/fa_regular.fig new file mode 100644 index 00000000..db30e0a0 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/fa_regular.fig @@ -0,0 +1,36 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +6 225 300 3450 3150 +1 3 0 1 -1 7 0 0 -1 0.000 1 0.0000 999 1082 335 335 999 1082 1149 1382 +1 3 0 1 -1 7 0 0 -1 0.000 1 0.0000 2124 1082 335 335 2124 1082 2274 1382 +1 3 0 1 -1 0 0 0 2 0.000 1 0.0000 624 2807 335 335 624 2807 774 3107 +1 3 0 1 -1 0 0 0 2 0.000 1 0.0000 1674 2807 335 335 1674 2807 1824 3107 +1 3 0 1 -1 0 0 0 2 0.000 1 0.0000 2874 2807 335 335 2874 2807 3024 3107 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1425 675 2475 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 975 1425 1575 2400 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 975 1425 2775 2475 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1950 1425 750 2475 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1950 1425 1650 2325 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1950 1425 2775 2400 +4 0 -1 0 0 0 24 0.0000 4 330 3225 225 600 regular factor analysis\001 +-6 +4 0 -1 0 0 0 12 0.0000 4 135 210 825 1200 X1\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 1950 1200 X2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 525 2925 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1500 2850 Y2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 2700 2850 Y3\001 diff --git a/sourcecodes/bnt-master/docs/Figures/fa_regular.gif b/sourcecodes/bnt-master/docs/Figures/fa_regular.gif new file mode 100644 index 00000000..bb506a59 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/fa_regular.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/fa_scalar.eps b/sourcecodes/bnt-master/docs/Figures/fa_scalar.eps new file mode 100644 index 00000000..ccdc01cc --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/fa_scalar.eps @@ -0,0 +1,414 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (fa_scalar.eps) +%%CreationDate: (Tue Nov 16 19:52:00 2004) +%%BoundingBox: 0 0 246 156 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Times-Roman findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 246 156 +userdict begin +DisplayImage +0 0 +246 156 +12.000000 +246 156 +1 +1 +1 +1 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffff800fff +fffffffffffffffffff800fffffffffffffffffffffcfffffffffffc7ff1ffffffffffff +ffffffffc7ff1ffffffffffffffffffffcffffffffffe3fffe3ffffffffffffffffffe3f +ffe3fffffffffffffffffffcffffffffffdfffffdffffffffffffffffffdfffffdffffff +fffffffffffffcffffffffff3fffffe7fffffffffffffffff3fffffe7fffffffffffffff +fffcfffffffffefffffffbffffffffffffffffefffffffbffffffffffffffffffcffffff +fffdfffffffdffffffffffffffffdfffffffdffffffffffffffffffcfffffffffbffffff +feffffffffffffffffbfffffffeffffffffffffffffffcfffffffff7ffffffff7fffffff +ffffffff7ffffffff7fffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7f +fffffff7fffffffffffffffffcffffffffefffffffffbffffffffffffffefffffffffbff +fffffffffffffffcffffffffefff8c6fffbffffffffffffffeff18fffffbffffffffffff +fffffcffffffffdfffdecfffdffffffffffffffdffbdfffffdfffffffffffffffffcffff +ffffdfffedafffdffffffffffffffdffdbfffffdfffffffffffffffffcffffffffdfffe3 +efffdffffffffffffffdffc74ffffdfffffffffffffffffcffffffffdffff3efffdfffff +fffffffffdffe7b7fffdfffffffffffffffffcffffffffdfffe9efffdffffffffffffffd +ffd3b7fffdfffffffffffffffffcffffffffdfffedefffdffffffffffffffdffdbb7fffd +fffffffffffffffffcffffffffdfffdeefffdffffffffffffffdffbdb7fffdffffffffff +fffffffcffffffffefff8c47ffbffffffffffffffeff1813fffbfffffffffffffffffcff +ffffffefffffffffbffffffffffffffefffffffffbfffffffffffffffffcfffffffff7ff +ffffff7fffffffffffffff7ffffffff7fffffffffffffffffcfffffffff7ffffffff7fff +ffffffffffff7ffffffff7fffffffffffffffffcfffffffffbfffffffeffffff3cf3ffff +ffbfffffffeffffffffffffffffffcfffffffffdfffffffdffffff3cf3ffffffdfffffff +dffffffffffffffffffcfffffffffefffffff9ffffffffffffffffefffffffbfffffffff +fffffffffcffffffffff3fffffe67ffffffffffffffff3fffffe7ffffffffffffffffffc +ffffffffffdfffffdf8ffffffffffffffffdfffffdfffffffffffffffffffcffffffffff +e3fffe3ff3fffffffffffffffe3fffe3fffffffffffffffffffcfffffffffffc7ff1fffc +7fffffffffffffffc7ff1ffffffffffffffffffffcfffffffffff7800f7fff9fffffffff +fffffff000f7fffffffffffffffffffcfffffffffff7ffff7fffe3ffffffffffffff87ff +fbfffffffffffffffffffcffffffffffefffffbffffcfffffffffffffe5ffffdffffffff +fffffffffffcffffffffffefffffbfffff1ffffffffffff13ffffeffffffffffffffffff +fcffffffffffdfffffdfffffe7ffffffffff8effffff7ffffffffffffffffffcffffffff +ffdfffffdffffff8fffffffffc7dffffffbffffffffffffffffffcffffffffffdfffffef +ffffff3ffffffff3f3ffffffdffffffffffffffffffcffffffffffbfffffefffffffc7ff +ffff8fefffffffeffffffffffffffffffcffffffffffbffffff7fffffff9fffffc7f9fff +fffff7fffffffffffffffffcffffffffffbffffff7fffffffe3fffe3ff7ffffffffbffff +fffffffffffffcffffffffff7ffffffbffffffffcfff9ffcfffffffffdffffffffffffff +fffcffffffffff7ffffffbfffffffff1fc7ffbfffffffffefffffffffffffffffcffffff +fffefffffffdfffffffffe63fff7ffffffffff7ffffffffffffffffcfffffffffeffffff +fdffffffffff0fffcfffffffffffbffffffffffffffffcfffffffffefffffffeffffffff +fcf3ffbfffffffffffdffffffffffffffffcfffffffffdfffffffeffffffffe3fc7e7fff +ffffffffeffffffffffffffffcfffffffffdffffffff7fffffff1fff9dfffffffffffff7 +fffffffffffffffcfffffffffdffffffff7ffffff8ffffe3fffffffffffffbffffffffff +fffffcfffffffffbffffffffbfffffe7ffffecfffffffffffffdfffffffffffffffcffff +fffffbffffffffbfffff1fffffdf1ffffffffffffefffffffffffffffcfffffffff7ffff +ffffdffff8ffffff3fe7ffffffffffff7ffffffffffffffcfffffffff7ffffffffdfffc7 +fffffefff8ffffffffffffbffffffffffffffcfffffffff7ffffffffefff3ffffff9ffff +3fffffffffffdffffffffffffffcffffffffefffffffffeff8fffffff7ffffc7ffffffff +ffeffffffffffffffcffffffffeffffffffff7c7ffffffcffffff9fffffffffff7ffffff +fffffffcffffffffeffffffffff63fffffffbffffffe3ffffffffffbfffffffffffffcff +ffffffdffffffffff9ffffffff7fffffffcffffffffffdfffffffffffffcffffffffdfff +ffffffc3fffffffcfffffffff1fffffffffefffffffffffffcffffffffbffffffffe3dff +ffffdbfffffffffe7fffffffff7ffffffffffffcffffffffbffffffff1fdffffffa7ffff +ffffff8fffffffffbffffffffffffcfffffffebfffffffcffebfffff5ffffffffffff3ff +ffffffdffffffffffffcfffffffe7ffffffe3ffebffffe27fffffffffffc7fffffffefff +fffffffffcfffffffe5ffffff1fffd3ffffe9fffffffffffff9ffffffff6fffffffffffc +fffffffe3fffff8ffffe5ffffc7fffffffffffffe3fffffffb7ffffffffffcfffffffcbf +fffe7fffff1ffff9fffffffffffffffcfffffffd7ffffffffffcfffffffc7fff71ffffff +1fffffffffffffffffffff1ffffff6bffffffffffcfffffffcfffc8fffffff9fffffffff +ffffffffffffe7fffff93ffffffffffcfffffffcfff07fffffffcfffffffffffffffffff +fff8fffffe1ffffffffffcfffffffdffc3ffffffffefffffffffffffffffffffff3fffff +9ffffffffffcffffffffff803fffffffffffffffffffffffffffffffc7ffffefffffffff +fcffffff001fffffffffffff800ffffffffffffffffffff9dffff800fffffffcfffff8ff +e3fffffffffffc7ff1fffffffffffffffffffe27ffc7ff1ffffffcffffc6eeec7fffffff +ffe377763fffffffffffffffffffcbfe377763fffffcffffbfffffbfffffffffdfffffdf +ffffffffffffffffff00fdfffffdfffffcfffe3bbfbb8fffffffff1ddfddc7ffffffffff +fffffffff871ddfddc7ffffcfffdfffffff7fffffffefffffffbffffffffffffffffffff +efffffffbffffcfffaeeeeeeebfffffffd77777775ffffffffffffffffffffd77777775f +fffcfff7fffffffdfffffffbfffffffeffffffffffffffffffffbfffffffeffffcffebfb +fbfbfafffffff5fdfdfdfd7fffffffffffffffffff5fdfdfdfd7fffcffeffffffffeffff +fff7ffffffff7fffffffffffffffffff7ffffffff7fffcffceeeeeeeee7fffffe7777777 +773ffffffffffffffffffe7777777773fffcffdfe38dffff7fffffeff1c47fffbfffffff +fffffffffffefe38fffffbfffcffbfb799bfbfbfffffdfdbcb9fdfdfffffffffffffffff +fdfd7dfdfdfdfffcffbffbb5ffffbfffffdffddfbfffdfffff3cf3fffffffffdffbbffff +fdfffcffaeecaceeeebfffffd7765737775fffff3cf3fffffffffd7753417775fffcffbf +fc7dffffbfffffdffe3f7fffdffffffffffffffffffdffc7b6fffdfffcffbbfaf9fbfbbf +ffffddfd7cfdfddffffffffffffffffffddfcf96dfddfffcffbffefdffffbfffffdfff7d +ffffdffffffffffffffffffdffefb6fffdfffcffaeeeeceeeebfffffd7777337775fffff +fffffffffffffd7767367775fffcffdffc78ffff7fffffeffe383fffbfffffffffffffff +fffeffc7127ffbfffcffdfbbbfbbbf7fffffefdddfdddfbffffffffffffffffffefdddfd +ddfbfffcffeffffffffefffffff7ffffffff7fffffffffffffffffff7ffffffff7fffcff +eeeeeeeeeefffffff7777777777fffffffffffffffffff7777777777fffcfff7fffffffd +fffffffbfffffffeffffffffffffffffffffbfffffffeffffcfffbfbfbfbfbfffffffdfd +fdfdfdffffffffffffffffffffdfdfdfdfdffffcfffdfffffff7fffffffefffffffbffff +ffffffffffffffffefffffffbffffcfffe6eeeeecfffffffff37777767ffffffffffffff +fffffff37777767ffffcffffbfffffbfffffffffdfffffdffffffffffffffffffffffdff +fffdfffffcffffc7bfbc7fffffffffe3dfde3ffffffffffffffffffffffe3dfde3fffffc +fffff8ffe3fffffffffffc7ff1ffffffffffffffffffffffffc7ff1ffffffcffffff001f +ffffffffffff800ffffffffffffffffffffffffff800fffffffcffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffff +fffffffffffff80fffffffffffe7ffeffffffffffffffffffffffffffcffffffffffffff +fffdeffffffffffff7fffffffffffffffffffffffffffffcfffffffffffffffffdffffbf +fffffff7fffffffffffffffffffffffffffffcfffffffffffffffffdde790cd3e69e74cc +4e3ffffffffffffffffffffffffcfffffffffffffffffc1db6bb67db6db6db6dbfffffff +fffffffffffffffffcfffffffffffffffffdde37bb6fe36e3699ecffffffffffffffffff +fffffffcfffffffffffffffffdfdb7bb6fdb6db6be6f3ffffffffffffffffffffffffcff +fffffffffffffffdfdb6bb6fdb6db73b6dbffffffffffffffffffffffffcffffffffffff +fffff87e59ccc7e4264378c47ffffffffffffffffffffffffcffffffffffffffffffffff +ffffffffff7ffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffe +fffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffff +fffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffc +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/sourcecodes/bnt-master/docs/Figures/fa_scalar.fig b/sourcecodes/bnt-master/docs/Figures/fa_scalar.fig new file mode 100644 index 00000000..7a2c3e41 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/fa_scalar.fig @@ -0,0 +1,41 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 300 375 3675 1950 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 975 600 300 225 975 600 1275 825 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2475 600 300 225 2475 600 2775 825 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 1650 300 225 600 1650 900 1875 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3315 1654 300 225 3315 1654 3615 1879 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 825 600 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1200 750 3075 1500 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2400 825 750 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2625 825 3225 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1125 825 1425 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2400 825 1650 1350 +4 0 -1 0 0 0 12 0.0000 4 135 225 900 675 X1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 2325 675 Xn\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 450 1725 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 270 3150 1725 Ym\001 +4 0 -1 0 0 0 24 0.0000 4 30 270 1575 750 ...\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1425 1725 Y2\001 +4 0 -1 0 0 0 24 0.0000 4 30 270 2175 1650 ...\001 +-6 diff --git a/sourcecodes/bnt-master/docs/Figures/fa_scalar.gif b/sourcecodes/bnt-master/docs/Figures/fa_scalar.gif new file mode 100644 index 00000000..5e5a2598 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/fa_scalar.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/fa_scalar_caption.fig b/sourcecodes/bnt-master/docs/Figures/fa_scalar_caption.fig new file mode 100644 index 00000000..0862b150 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/fa_scalar_caption.fig @@ -0,0 +1,38 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +6 300 375 3675 1950 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 975 600 300 225 975 600 1275 825 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2475 600 300 225 2475 600 2775 825 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 1650 300 225 600 1650 900 1875 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3315 1654 300 225 3315 1654 3615 1879 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 825 600 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1200 750 3075 1500 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2400 825 750 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2625 825 3225 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1125 825 1425 1425 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2400 825 1650 1350 +4 0 -1 0 0 0 12 0.0000 4 135 210 900 675 X1\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 2325 675 Xn\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 450 1725 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 270 3150 1725 Ym\001 +4 0 -1 0 0 0 24 0.0000 4 30 270 1575 750 ...\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1425 1725 Y2\001 +4 0 -1 0 0 0 24 0.0000 4 30 270 2175 1650 ...\001 +-6 +4 0 -1 0 0 0 12 0.0000 4 180 1170 1200 2325 Factor analysis\001 diff --git a/sourcecodes/bnt-master/docs/Figures/factorial_hmm3.fig b/sourcecodes/bnt-master/docs/Figures/factorial_hmm3.fig new file mode 100644 index 00000000..a42ed6bb --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/factorial_hmm3.fig @@ -0,0 +1,81 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 2587.500 3637.500 1500 2775 1200 3675 1500 4500 + 0 0 1.00 60.00 120.00 +5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 2772.051 3261.376 1500 1875 900 3450 1425 4575 + 0 0 1.00 60.00 120.00 +5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 5962.500 3637.500 4875 2775 4575 3675 4875 4500 + 0 0 1.00 60.00 120.00 +5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 4162.500 3637.500 3075 2775 2775 3675 3075 4500 + 0 0 1.00 60.00 120.00 +5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 4347.051 3261.376 3075 1875 2475 3450 3000 4575 + 0 0 1.00 60.00 120.00 +5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 6147.051 3261.376 4875 1875 4275 3450 4800 4575 + 0 0 1.00 60.00 120.00 +6 1425 4350 2100 4875 +1 1 0 1 0 0 100 0 5 0.000 1 0.0000 1749 4596 300 225 1749 4596 2049 4821 +4 0 0 100 0 0 20 0.0000 4 195 345 1575 4725 Y1\001 +-6 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1770 3645 300 225 1770 3645 2070 3870 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3420 3645 300 225 3420 3645 3720 3870 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 5220 3645 300 225 5220 3645 5520 3870 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1770 2745 300 225 1770 2745 2070 2970 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3420 2745 300 225 3420 2745 3720 2970 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 5220 2745 300 225 5220 2745 5520 2970 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 5220 1845 300 225 5220 1845 5520 2070 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3420 1845 300 225 3420 1845 3720 2070 +1 1 0 1 0 7 100 0 -1 0.000 1 0.0000 1770 1845 300 225 1770 1845 2070 2070 +1 1 0 1 0 0 100 0 5 0.000 1 0.0000 3399 4596 300 225 3399 4596 3699 4821 +1 1 0 1 0 0 100 0 5 0.000 1 0.0000 5199 4521 300 225 5199 4521 5499 4746 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 1 + 4200 4200 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2100 3600 3150 3600 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3750 3600 4950 3600 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 1 + 4200 3300 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2100 2700 3150 2700 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3750 2700 4950 2700 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 1 + 4200 2400 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2100 1800 3150 1800 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3750 1800 4950 1800 +2 1 0 1 0 0 100 0 5 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1725 3900 1725 4350 +2 1 0 1 0 0 100 0 5 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 5175 3825 5175 4275 +2 1 0 1 0 0 100 0 5 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3450 3900 3450 4350 +4 0 0 100 0 0 20 0.0000 4 195 345 1575 1950 A1\001 +4 0 0 100 0 0 20 0.0000 4 195 330 1575 2850 B1\001 +4 0 0 100 0 0 20 0.0000 4 195 330 1575 3750 C1\001 +4 0 0 100 0 0 20 0.0000 4 195 345 3225 1950 A2\001 +4 0 0 100 0 0 20 0.0000 4 195 330 3225 2850 B2\001 +4 0 0 100 0 0 20 0.0000 4 195 330 3225 3750 C2\001 +4 0 0 100 0 0 20 0.0000 4 195 345 5025 1950 A3\001 +4 0 0 100 0 0 20 0.0000 4 195 330 5025 2850 B3\001 +4 0 0 100 0 0 20 0.0000 4 195 330 5025 3750 C3\001 +4 0 0 100 0 0 30 0.0000 4 30 525 6375 3000 . . .\001 +4 0 0 100 0 0 20 0.0000 4 195 345 3225 4725 Y2\001 +4 0 0 100 0 0 20 0.0000 4 195 345 5025 4650 Y3\001 diff --git a/sourcecodes/bnt-master/docs/Figures/filter.eps b/sourcecodes/bnt-master/docs/Figures/filter.eps new file mode 100644 index 00000000..27fd6ced --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/filter.eps @@ -0,0 +1,9861 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (filter.eps) +%%CreationDate: (Tue Nov 16 20:04:33 2004) +%%BoundingBox: 0 0 657 525 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Times-Roman findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 657 525 +userdict begin +DisplayImage +0 0 +657 525 +12.000000 +657 525 +1 +1 +1 +8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000000000000000ffffffffffffffff0000ff00000000 +00000000ffffff0000000000ffffffffffffff0000ffffffffffffffff00ffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffff +ffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffff00000000ffffffff +ff0000ffffffff00000000ffffffffffff0000ffffffffffffffff0000ffffffffffffff +ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff +ff00000000ffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffff000000ffffffff00ffffffffffff00000000ffffffffff00ffffffffffffffffff +00ffffffffffff00ffffffffff00ffffffffff0000ffffffffffffffffffffffffffffff +ffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffff00ffffffffff00 +ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffff0000ffffff00ffffffffffffffff000000ffffffff0000 +ffffffffffffffff00ffffffffffff0000ffffffffff0000ffffffff0000ffffffffffff +ffffffffffffffffffffff00ffffffffffffffffff0000ffffffffffffffffffffffffff +ff0000ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffffffffff +ff000000ffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffff0000ffff +ff0000ffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffff +ffffffffffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff00 +00ffffffffffffffffffff0000ffff00ffffffffffffffffff0000ffffffff0000000000 +00ffffffff0000ffffff0000ffffff0000000000ffff000000ffffff0000ffffffffffff +ffffff0000ffffffffffffff0000ffffff000000000000ffffffff0000ffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffff000000ff0000ffffffffffffffffffffff00000000ffffffffffffffffff0000ff +ffffffffffff0000ffffffffffff000000ffff0000ffffffff0000ffffffffff00ffffff +0000ffffffffffffffffffff0000ffffffffffffff000000ffffffff0000ffffffffffff +000000ffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffff000000ffff0000ffffffffffffffffffffffff000000ffffff +ffffffffffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ffffffff0000 +ffffffffff00ffffff0000ffffffffffffffffffff0000ffffffffffffff0000ffffffff +ff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00000000000000ffffffff0000ffffffffffffffffff +ffffff00000000ffffffffffffffff0000ffffffffffffff0000ffffffffffffff0000ff +ff0000ffffffff000000ffffff0000ffffff0000ffffffffffffffffffff0000ffffffff +ffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000 +ffffffffffffffffffffff0000000000ffffffffffffffff0000ffffffffffffff0000ff +ffffffffffff0000ffff0000ffffffffff0000ffffff00ffffffff0000ffffffffffffff +ffffff0000ffffffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffff0000ffffffffffffffffffffff00ffff000000ffffffffffffff0000ff +ffffffffffff0000ffffffffffffff0000ffff0000ffffffffff000000ff0000ffffffff +0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff +ff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffff0000ffffffffffffffffffff00ffffffff000000 +ffffffffffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ffffffffffff +0000ff0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff +ff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00000000ff0000ffffff000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffff +00ffffffffff000000ffffffffffff0000ffffffffffffff0000ffffffffffffff0000ff +ff0000ffffffffffff00000000ffffffffff0000ffffffffffffffffffff0000ffffffff +ffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffff0000ff0000ffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000 +00ffffffffffffff0000ffffffffffff000000ffffffffff000000ffffffffffff0000ff +ffffffffffff0000ffff0000ffffffffffffff000000ffffffffff000000ffffffffffff +ffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffff0000ffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffff0000ffffffffffff0000ffffffffffffff00000000ffffffffff0000 +ffffffffffff0000ff00ffffffff0000ffffff0000ffffffffffffff0000ffffffffffff +ff0000ffffffffffffffffff0000ffffffffffffff000000ffffffff0000ff00ffffffff +0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +ffffffffffffffff0000ffffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000000000ffffffffffffffff0000ffffffff000000000000ffffffff000000 +00000000ffffff0000ffffffffffffff000000ffffffff0000ffffff0000ffffffffffff +ffff00ffffffffffffff0000ffffffffffffff00000000000000ffffffff0000ffffffff +ffff000000ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff0000ffffffffffff00ffffffff0000ffffff0000ffffffffffffffffffffffff +ffffffffffffffffffff00ffffffff0000ffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff0000ffffff +ffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00000000000000ff000000ffffffff0000ffff0000000000ff +ffff000000000000ffff0000ff000000ff000000ffffff00000000000000ffffffffff00 +000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff +ffffffff00ffffffffffffffffffffffffffff00ffffffffffffffffffff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffff00 +00ffffff0000ffffffff0000ffffff0000ffff000000ffff00ffff0000ffffffff0000ff +ffff0000ffffff00ffffff000000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffff00ffffffffffffffffffffffffffff0000ffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +ffff0000ffffffff0000ffffff0000ffffffff0000000000000000ff0000ffffffffffff +0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffff000000 +00ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff0000ffffffffff0000ffffffff0000ffffff0000ffffff0000ffffffffffffff +ff0000ffffffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffff0000ffffffff0000ffffff0000ffffff +0000ffffffffffffffff0000ffffffffffff0000ffffffff0000ffffff0000ffffff0000 +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffff00 +00ffffff0000ffffff000000ffffffffffffff0000ffffffffffff0000ffffffff0000ff +ffff0000ffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +ffff0000ffffffff0000ffffff0000ffffffff0000ffffffffff00ff0000ffffffffffff +0000ffffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff0000ffffffffff0000ffffffff0000ffffff0000ffffffff00000000000000ff +ff0000ffffffffffff0000ffffffff0000ffffff0000ffffff00000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000000000ffff00000000ffff0000000000ffff000000ff +ffff0000000000ffff0000000000ffffff00000000ffff00000000ff00000000ffff0000 +0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffff0000000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff00ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 +ffffffffff00000000ffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00000000ffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000000000000000ffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffff00ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000ffffffffffffffff0000ffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffff00000000ffffffffff0000 +ffffffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffffffffff +ffffffffffffffffffffffffffff00ffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffffffffffffff +ffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000ffffffffffffffff0000ffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +000000ffffffff00ffffffffffffffffffffffffffffffffffffff00ffffffffffffffff +0000ffffffffffffffffffffffffffffff00ffffffffffff00ffffffffffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff0000 +ffffffffffffffffffffffffffffff00ffffffffffff00ffffffffffffff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffff00ffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffffffff0000ffffff00ffffffffffffffffffffffffffffffffffffff00 +ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff0000ff +ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff00ffff +ffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff0000ffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ff +ffffffffff0000ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffff0000 +ffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffff +ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000ffffffffff0000ffffffffff0000ffffff000000000000ffffffff +0000000000ffffffff0000ff000000ffff0000ff00000000ffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000000000ffffffffff0000ff000000ffffffff0000 +0000ffffffffffff0000ffff00000000ffff00000000ffffffffff0000000000ffffff00 +0000000000ff00000000ffffffffffffffffffff0000ffffffffffff0000ffff0000ffff +ffff000000000000ff00000000ffffff0000ffffffffffffffffff0000ffffffffffffff +0000ffffff000000000000ffffffffff0000ffffffffffffffffff0000ffffffffffffff +ff0000000000ffff000000ffffff0000ffffffffffffffffff0000ffffffffffffff0000 +ffffff000000000000ffffffffff0000ffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000ffffffffff00ffffffffff000000ffffffff +ff0000ffffffffff0000ffffff0000ff0000000000000000ffff0000000000000000ffff +ff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000ffffffff +ffffffffffffffffffffffffffffffffffffffffff000000ffff000000ffff0000000000 +000000ffffff0000ffff0000000000ff0000000000ffff0000000000ffff0000ffff0000 +00ffff000000ffffffff000000ffff0000ffffffffffffffffffffffff0000ffffffffff +000000ff0000ffffffffffffff000000ffff0000ffffffff0000ffffffffffffffffffff +0000ffffffffffffff000000ffffffff0000ffffffffffffff000000ffffffffffffffff +0000ffffffffffffffffff0000ffffffffff00ffffff0000ffffffffffffffffffff0000 +ffffffffffffff000000ffffffff0000ffffffffffffff000000ffffffffff000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff0000ffffff +ffffff0000ffffffffff0000ffffffff0000ffffffff000000ffff0000ffffffffffff00 +0000ffff00000000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff +0000ffffffff0000ffffffffffff0000ffffff000000ffffffff000000ffffffff000000 +ffffff0000ffff000000ffffff0000ffffffffff0000ff0000ffffffffffffffffffffff +ffff0000ffffffff000000ffff0000ffffffffffffffff0000ff0000ffffffffff0000ff +ffffffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffffff00 +00ffffffffffffffff0000ffffffffffffffffff0000ffffffffff00ffffff0000ffffff +ffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffffff0000ff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00ffffff00ffffffffffffff0000ffffffffff0000ffffffff000000000000000000ffff +0000ffffffffffff0000ffffffff000000ffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ffffffff0000ffffffff0000ffffffffffff0000ffffffff0000ffffffff00 +00ffffffffff0000ffffffff0000ffffff00ffffffff0000ffffffffffff000000ffffff +ffffffffffffffffffffff00000000000000ffffffff0000ffffffffffffffffff000000 +ffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000 +ffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffff000000ffffff00 +00ffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffff +ffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000ff0000ffffffffffffff0000ffffffffff0000ffffffff0000 +ffffffffffffffffff0000ffffffffffff0000ffffffffff0000ffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00000000ffffffff0000ffffffffffff0000ffff +ffff0000ffffffff0000ffffffffff0000ffffffff0000ffffffffffff00000000ffffff +ffffff000000ffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffff +ffffffffffff000000ffffffffffff0000ffffffffffffffffffff0000ffffffffffffff +ffffffffffffff0000ffffffffffffffff0000ffffffffffffffff0000ffffffffffffff +ffffff0000ffffff00ffffffff0000ffffffffffffffffffff0000ffffffffffffffffff +ffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000ff0000ffffffffffffff0000ffffffff +ff0000ffffff000000ffffffffffffffffff0000ffffffffffff0000ffffffffff0000ff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000ffffffff0000ff +ffffffffff0000ffffffff0000ffffffff0000ffffffffff0000ffffffff0000ffffffff +0000ffff0000ffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffff +ffffffff0000ffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffff +0000ffffffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffff +0000ffffffffffffffffffff000000ff0000ffffffff0000ffffffffffffffffffff0000 +ffffffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffff +ffffff0000ffffffffff0000ffffff000000ffffffffffffffffff0000ffffffffffff00 +00ffffffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +0000ffffffff0000ffffffffffffff0000ffff0000ffffffffff0000ffffffffff0000ff +ffffff0000ffffff0000ffffff0000ffffffffffff00000000ffffffffffffffffffffff +ffff0000ffffffffffffffffff0000ffffffffffffffffff00000000ffffffffff0000ff +ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffffff00 +00ffffffffffffffff0000ffffffffffffffffffffff0000ff0000ffffffff0000ffffff +ffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffffff0000ff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00000000ffffffffffffffff0000ffffffffff0000ffffffff0000ffffffffffff00ffff +0000ffffffffffff0000ffffffffff0000ffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffff0000ffffffff0000ffffffffffffff0000000000ffffffffffff00 +00ffffffffff0000ffffffff0000ffff0000ffffffff0000ffffffffff0000ff000000ff +ffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffff0000ff00 +0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000 +ffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffff00000000ff +ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffff +ffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffff0000ffffffffff0000ffffffff0000 +00ffffffff0000ffff0000ffffffffffff0000ffffffff0000ffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffff0000ffffffff0000ffffffffffff0000ffff +ffffffffffffffff0000ffffffffff0000ffffffff0000ffff0000ffffffff0000ffffff +ff0000ffffff0000ffffffffffffffffffffffff0000ffffffffffffffffff000000ffff +ffffffff0000ffffff0000ffffffff000000ffffffffffffffffff0000ffffffffffffff +0000ffffffffff0000ffffffffffffffff0000ffffffffffffffff0000ffffffffffffff +ffffffffff000000ffffffffff000000ffffffffffffffffff0000ffffffffffffff0000 +ffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffff +ff0000ff00ffffff00000000000000ffffff0000ffffffffffff0000ffffffff00ffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffff00000000ffffffff0000ff +ffffffffff00000000000000ffffffffff0000ffffffffff0000ffffffff0000ffff0000 +ffff00000000ffffffff00ffffffff000000ffffffffffffffffffffff0000ffffffffff +ffffffffff0000ffffffffffff00ffffffff000000ffffffff0000ffffffffffffffffff +0000ffffffffffffff000000ffffffff0000ff00ffffffffff0000ffffffffffffffffff +0000ffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffffffffff0000 +ffffffffffffff000000ffffffff0000ff00ffffffffff0000ffffffffffff0000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffff0000000000ffffffff000000ffffffff0000000000ffff000000000000ffffffffff +0000000000ffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff +00000000000000000000ffffffff0000000000000000ffff000000000000ff0000000000 +00ff0000000000ff00000000ff00000000ff000000ffff000000000000ffffffffffffff +000000000000ffffffffffffffff0000ffffffffff000000ffff000000000000ffff0000 +ffffffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffffff0000 +ffffffffffffffffff0000ffffffffffffffffffffffffff00ffffffffffffff0000ffff +ffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffffff0000ffff +ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ff000000000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000ffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +ffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffff +ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffffff +ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffff0000ffffffffffffffffffffffffffffff00ffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffff +0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000000000ff00000000ffffff0000ffffffffffffffffff0000ffffffffff +ffff0000ffffff000000000000ffffffff0000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000ffff0000ffffffff0000ffffffffffffffff +ffff0000ffffffffffffff000000ffffffff0000ffffffffffff000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ff0000ffffffffff00 +00ffffffffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000ffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff +0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000ffffffffffff0000ffffffffffffffffffff0000ffffffffff +ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffff +ffff0000ffffffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffff00 +00ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ff000000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff +0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffff0000ffffffff000000ffffffffffffffffff0000ffffffffff +ffff0000ffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffffff000000ffffffff0000ffffffffffffff +ffff0000ffffffffffffff000000ffffffff0000ff00ffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000ffff000000000000ffff +0000ffffffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff0000ff00 +00000000000000ffffff0000000000ffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffff000000 +ffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff0000ffffffffff +ffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff00000000ff +ffffffff0000ffffffff00000000ffffffffffff0000ffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff00ffffffff +ffff0000ffffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffff +ffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffff000000ffffffff00ffffffffffff00000000ffffffffff00ffffffffffff +ffffff00ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffff0000ffffffffff00ffffffffffffffffffffffff +ffffffffff00ffffffffff0000ffffffffffffffffffffffffffffffffff00ffffffffff +ffffff0000ffffffffffffffffffffffffffffff00ffffffffffff00ffffffffffffff00 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffff0000ffffff00ffffffffffffffff000000ffffff +ff0000ffffffffffffffff00ffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffffffffffffffff0000ffffffff0000ffffff +ffffffffffffffffffffffffffff0000ffffffff0000ffffffffffffffffffffffffffff +ffff00ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff +0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffff +ffffffff000000ffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffff +ff0000ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff0000 +ffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffff0000ffffffffff +ffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffff +ff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000 +ffff0000ffffffffffffffffffff0000ffff00ffffffffffffffffff0000ffffffff0000 +00000000ffffffffffff0000ffffffffffffffffffff000000ff0000ffffffffff000000 +0000ffffffffff0000ffff000000000000ffffffff0000000000ffffffffffffff0000ff +ffff0000ffff0000000000ffff000000ffffff0000ffffffffffffffffff0000ffffffff +ffffff0000ffffff000000000000ffffffffff0000ffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffff000000ff0000ffffffffffffffffffffff00000000ffffffffffffffffff +0000ffffffffffffff0000ffffffffffffffff0000ffffffffffffffff0000ffffff0000 +00ffffffff0000ffffff0000ffffffff0000ffffffff0000ffffffff000000ffff000000 +ffffffffffff000000ffff0000ffffff0000ffffffffff00ffffff0000ffffffffffffff +ffffff0000ffffffffffffff000000ffffffff0000ffffffffffffff000000ffffffffff +000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffff000000ffff0000ffffffffffffffffffffffff000000 +ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffff0000ffffffffffff +ffff0000ffffffff0000ffffff0000ffffffff000000ffffff0000ffffffff0000ffffff +ff000000ffffff0000ffffffffffffff0000ffff0000ffffff0000ffffffffff00ffffff +0000ffffffffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffff +ffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00000000000000ffffffff0000ffffffffffff +ffffffffffff00000000ffffffffffffffff0000ffffffffffffff0000ffffffffffffff +ff0000ffffffffffffff0000ffffffffff0000ffffff000000000000000000ffffff0000 +ffffffff0000ffffffffff00ffffffff0000ffffffffffffff0000ffff0000ffffff0000 +00ffffff0000ffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff +ff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ff0000ffffffffffffffffffffff0000000000ffffffffffffffff0000ffffffffffffff +0000ffff00000000000000000000000000ffff0000ffffffffff0000ffffff0000ffffff +ffffffffffffff0000ffffffff0000ffffffffffffffff00000000ffffffffffffff0000 +ffff0000ffffffff0000ffffff00ffffffff0000ffffffffffffffffffff0000ffffffff +ffffffffffffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffff0000ffffffffffffffffffffff00ffff000000ffffffffffffff +0000ffffffffffffff0000ffff00000000000000000000000000ffff0000ffffffffff00 +00ffff000000ffffffffffffffffffff0000ffffffff0000ffffffffffff0000ffff0000 +ffffffffffffff0000ffff0000ffffffff000000ff0000ffffffff0000ffffffffffffff +ffffff0000ffffffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000ffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffff00ffffffff +000000ffffffffffff0000ffffffffffffff0000ffffffffffffffff0000ffffffffffff +ff0000ffffffffff0000ffff000000ffffffffffffffffffff0000ffffffff0000ffffff +ffff0000ffffff0000ffffffffffffff0000ffff0000ffffffffff0000ff0000ffffffff +0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff +ffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000ffffff0000ffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffff +ffffff00ffffffffff000000ffffffffffff0000ffffffffffffff0000ffffffffffffff +ff0000ffffffffffffff0000ffffffffff0000ffffff0000ffffffffffff00ffffff0000 +ffffffff0000ffffffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffffff +00000000ffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff +ff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffff0000ffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ff000000ffffffffffffff0000ffffffffffff000000ffffffffff000000ffffffffffff +0000ffffffffffffffff0000ffffffffffffff000000ffffffff0000ffffff000000ffff +ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffffffffffff0000 +ffff0000ffffffffffff000000ffffffffff000000ffffffffffffffffff0000ffffffff +ffffff0000ffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffff0000ffffffffffff0000ffffffffffffff00000000ffffffff +ff0000ffffffffffff0000ff00ffffffffffff0000ffffffffffffffff000000ffff0000 +000000ffff00000000000000ffffffff0000ffffffff0000ff00ffff0000ffff00000000 +ffffffffffff0000ffffff0000ffffffffffff0000ffffffffffffff0000ffffffffffff +ffffff0000ffffffffffffff000000ffffffff0000ff00ffffffffff0000ffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000000000ffffffffffffffff0000ffffffff000000000000ffffffff +00000000000000ffffff0000ffffffffffffff000000ffffffffffff0000ffffffffffff +ffffff0000000000000000ffffffff0000000000ffffffff0000000000ffffff000000ff +ffff00000000ff00000000ffffffff0000ffffff0000ffffffffffffff00ffffffffffff +ff0000ffffffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffff +ff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffff00ffffffffffffffffffffffff0000ffffffffffff00 +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff +ff0000ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ff00000000ffffffff0000ff0000 +00ff000000000000ffffffffff000000000000ffff000000ffffffff000000000000ff00 +00000000ffff000000ffffffffff0000000000ffffffff00000000000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff +ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff00 +00ffffff000000ffff000000ffffff0000ffffff0000ffffffff0000ffffff0000ffffff +0000ffffff0000ffff0000ffffffffff0000ffffffff0000ffff000000ffffffff0000ff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffff000000ffff0000ffffffff0000000000000000ffff00ffffffffff00 +00ffffff0000ffffff00ffffffffff00ffff0000ffffffffff0000ffffff0000ffffffff +000000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffff00000000ffffffffffffffff +ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffffff0000ffff0000ffffff0000ffffffffffffff +ff0000ffffffffff0000ffffff0000ffff0000ffffffffffffffff0000ffffffffff0000 +ffffff0000ffffffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffff0000ffffff +0000ffffffffffffffff0000ffffffffff0000ffffff0000ffff0000ffffffffffffffff +0000ffffffffff0000ffffff0000ffffffffff0000ffffff0000ffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +0000ffff0000ffffff000000ffffffffffffff0000ffffffffff0000ffffff0000ffff00 +0000ffffffffffffff0000ffffffffff0000ffffff0000ffffffffff0000ffffff0000ff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffffff00ffffff0000ffffffff0000ffffffffff00ff000000ffffffff00 +00ffffff0000ffff00000000ffffff0000ff0000ffffffffff0000ffffff0000ffffffff +ff00ffffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff000000ffffff0000ffffff0000ffffffff00000000000000ff +ffff000000ffffff000000ffff0000ffffff00000000000000ffff0000ffffffffff0000 +ffffffff0000ffffff0000ffffffff0000ffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000000000ffffffff0000000000ff +ffff0000000000ffffffffff00000000ff000000ff00000000ffffff0000000000ffffff +ff000000ffff00000000ffffffff00000000ffffffffff00000000ff00000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffff +ffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffffffff0000ffffff00ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff0000ffff0000 +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff00000000ff +ffffff0000ff00000000ffffff00000000ffffffffffffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000 +00ffff00ffffff0000ffffff0000ffff0000ffffff0000ffff0000ffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffff0000ffff000000000000ffffff0000ffff0000ffffff00ffffff0000 +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffff0000ff0000ffffffffffffffff0000ffff0000 +ffffffffff00000000ffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffff0000ff0000ffffffffff +ffffff0000ffff0000ffffffff00ffff0000ffffffffffffffffff00ff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff00 +00ff0000ffffffffff00ffff0000ffff0000ffffff0000ffff0000ffffffffffffffffff +00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffff0000ffff0000ffffff00ffffff0000ffff0000ffff000000ff000000 +ffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000000000ffffff00000000ffffff000000ffff0000 +0000ff00000000000000ffffffffffffffff00ff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000000000000000000000000000000000000000000000000000000000000000 +0000000000ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffff00000000ffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff000000000000000000ffffffffffffffff0000ff0000000000000000ff +ffff0000000000ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff +ffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffff00000000ffffffffff0000ffff +ffff00000000ffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffff +ffffff00000000ffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000 +00ffffffff00ffffffffffff00000000ffffffffff00ffffffffffffffffff00ffffffff +ffff00ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffffffff0000ffffffffffffffffffffffffff +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffff00ffffffff +ff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffff0000ffffff00ffffffffffffffff000000ffffffff0000ffffffffff +ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff0000ffffffff +ffffffffffffffffffffffffff00ffffffffffffffffff0000ffffffffffffffffffffff +ffffff0000ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffffffffffff000000ff +ff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffff0000ffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffff +ffffffffffffffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffff +ffffffffffff0000ffff00ffffffffffffffffff0000ffffffff000000000000ffffffff +ffffffffffffffffffff000000000000ffffffff0000000000ffff00000000ffff000000 +00ffffffffffff0000ffffff0000ffffff0000000000ffff000000ffffff0000ffffffff +ffffffffff0000ffffffffffffff0000ffffff000000000000ffffffff0000ffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000 +00ff0000ffffffffffffffffffffff00000000ffffffffffffffffff0000ffffffffffff +ff0000ffffffffffffffffffffffffffffffffffff0000ffffffff000000ffff000000ff +ffff0000ffffffff0000ffffffffffff000000ffff0000ffffffff0000ffffffffff00ff +ffff0000ffffffffffffffffffff0000ffffffffffffff000000ffffffff0000ffffffff +ffff000000ffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffff000000ffff0000ffffffffffffffffffffffff000000ffffffffffffffff +ff0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff +000000ffffff0000ffffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffff +0000ffffffffff00ffffff0000ffffffffffffffffffff0000ffffffffffffff0000ffff +ffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff00000000000000ffffffff0000ffffffffffffffffffffffff0000 +0000ffffffffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffff +ffffff0000ffffffffff00ffffffff0000ffffff0000ffffffff0000ffffffffffffff00 +00ffff0000ffffffff000000ffffff0000ffffff0000ffffffffffffffffffff0000ffff +ffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffff +ffffffffffff0000000000ffffffffffffffff0000ffffffffffffff0000ffff00000000 +000000000000000000ffffff0000ffffffffffffffff00000000ffffff0000ffffffff00 +00ffffffffffffff0000ffff0000ffffffffff0000ffffff00ffffffff0000ffffffffff +ffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffff0000ffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffff0000ffffffffffffffffffffff00ffff000000ffffffffffffff0000ffffffffffff +ff0000ffff00000000000000000000000000ffffff0000ffffffffffff0000ffff0000ff +ffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffffff000000ff0000ffff +ffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffff +ffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffff0000ffffffffffffffffffff00ffffffff000000ffffffffff +ff0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff +ff0000ffffff0000ffffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffff +ffff0000ff0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffff +ffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffff00ffffffff +ff000000ffffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffff +ffffff0000ffffffff0000ffffffff0000ffffff0000ffffffff0000ffffffffffffff00 +00ffff0000ffffffffffff00000000ffffffffff0000ffffffffffffffffffff0000ffff +ffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff000000ffffffff +ffffff0000ffffffffffff000000ffffffffff000000ffffffffffff0000ffffffffffff +ffffffffffffffffffffffff0000ffffffff0000ffffffff0000ffffff0000ffffffff00 +00ffffffffffffff0000ffff0000ffffffffffffff000000ffffffffff000000ffffffff +ffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffff0000ffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffff0000ffffffffffff0000ffffffffffffff00000000ffffffffff0000ffffffffff +ff0000ff00ffffffffffffffffffffffffffffffff0000ff00ffff0000ffff00000000ff +ffff000000ff0000000000ffffffffff0000ffffff0000ffffffffffffff0000ffffffff +ffffff0000ffffffffffffffffff0000ffffffffffffff000000ffffffff0000ff00ffff +ffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +00000000ffffffffffffffff0000ffffffff000000000000ffffffff00000000000000ff +ffff0000ffffffffffffff000000ffffffffffffffffffffffffffffffffff000000ffff +ff00000000ff00000000ffff00000000ff000000ffffffffff0000ffffff0000ffffffff +ffffffff00ffffffffffffff0000ffffffffffffff00000000000000ffffffff0000ffff +ffffffff000000ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00000000ff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffff000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00ffffffffffffffffffffffffffff00ffffffffffffffffffff00ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffff0000ff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff0000ffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff00 +000000ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00000000000000ff000000ffff000000 +0000ff000000ffffff000000000000ffffffffff000000000000ffffffffffffffffffff +ffffffffff0000ffffffff0000000000ffffffffff00000000000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +ffff0000ffffffffff0000ff00ffffffff0000ffffff0000ffffff0000ffffffff0000ff +ffffffffffffffffffffffffffff0000ffffff0000ffffff0000ffffff00ffffff000000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff0000ffffffffff0000ffffffffff000000ffffffffff0000000000000000ffff +00ffffffffff0000ffffffffffffffffffffffffffffff0000ffffff00ffffffff0000ff +ffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffff0000ffffffffffff0000ffffffff0000 +ffffffffffffffff0000ffffffffff0000ffff00000000000000000000ffffff0000ffff +ffffffff00000000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff +ff0000ffffffff0000ffffffffffffffff0000ffffffffff0000ffffffffffffffffffff +ffffffffff0000ffffffff0000ffff0000ffffff0000ffff0000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +ffff0000ffffffffff00ff0000ffffff000000ffffffffffffff0000ffffffffff0000ff +ffffffffffffffffffffffffffff0000ffffff0000ffffff0000ffffffff00000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff0000ffffffffff0000ffffffffff00ffff0000ffffff0000ffffffffff00ff00 +0000ffffffff0000ffffffffffffffffffffffffffffff0000ffffff0000ffffff0000ff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffff0000ffffffff00ffffff000000ffff00 +000000000000ffffff000000ffffff000000ffffffffffffffffffffffffffff0000ffff +ff0000ffff000000ffffff00000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000000000ffff00000000ff000000 +00ffff00000000ffff0000000000ffffffffff00000000ff000000ffffffffffffffffff +ffffffff0000000000ff00000000ff000000ffff00000000000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00000000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +0000ffffffffffffffffffffff00ffffffff0000ffffffffffffffffffffffff00ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff +ffff000000ff00000000ff00000000ffffffffffff0000000000ffffffffff0000000000 +ffffff0000000000ff0000ff00000000ffffffff000000ffffff00000000000000ffffff +ffff00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffffffffffffffffffff00000000ffffff00000000ffffff0000ffff000000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff00ffffff0000ffffff0000ffffff0000ffffffff0000ffffffff0000ffff000000 +ffffff0000ffff000000ffffff0000ffffff000000ffffff0000ffffffff0000ffffffff +0000ffffff0000ffffff00ffffff000000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffff0000ffffff0000ffff0000ffff +0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffff0000ffffff0000ffffffff0000ffff +ff0000ffffffff000000ff0000ffffffff000000ffff0000ffffff0000ffffffff0000ff +ffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff0000ffff +ff00ffffff0000ffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000ffffffffff0000ffffff00 +00ffffffff0000ffffff0000ffffffffff0000ff0000ffffffffff0000ffff0000ffffff +0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffff0000ffffffffff00000000ffff0000ffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ff +ffffff0000ffffff0000ffffffff0000ffffff0000ffffffffff0000ff0000ffffffffff +0000ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffff +ff0000ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffff +ffffffffffffffffffffffffffff0000ffffffff00ffff0000ffff0000ffffff0000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000ffffff0000ffffff0000ffffffff0000ffffff0000ffffffffff00 +00ff0000ffffffffff0000ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff +0000ffffff0000ffffffff00000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ff0000ffffffffffffffffffffffffffffffffffffff0000ffffff0000ffff0000ffff +0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ffffffff00ffffff0000ffffff0000ffffffff0000ffff +ff0000ffffffffff00ffff0000ffffffffff00ffffff0000ffffff0000ffffffff0000ff +ffffff0000ffffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffffff0000ffff +000000ff000000ffff0000ffff000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff0000ffffff00 +00ffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffff0000ffffff +0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff00000000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffff +ffffffffff00000000ff00000000000000ffff000000ff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ff0000000000ff0000000000ff00000000ffffffff00000000ffffffffffff00000000ff +ffffffffff0000000000000000ff00000000ffff00000000ffff00000000ff00000000ff +ff00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff00ffff0000000000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffff0000000000000000000000000000 +000000000000000000000000000000000000000000000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff000000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff00ffffff0000ffffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ff +ffffffffffffff0000ff0000000000000000ffffff0000000000ffffffffffffff0000ff +ffffffffffffff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +0000ffffffffffff0000ffffffffffffffffffffffff0000000000000000000000000000 +ff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffff00000000ffffffffff0000ffffffff00000000ffffffffffff0000ffffff +ffffffffff0000ffffffffffffffffffff00ffffffffffff0000ffffffffffffffffffff +ffffffffffffffff0000ffffffffff00000000ffffffffffffffffffffffff0000ffffff +ff0000ffffffff0000ffff00ffffffffffffff00ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff0000ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffff000000ffffffff00ffffffffffff00000000ff +ffffffff00ffffffffffffffffff00ffffffffffff00ffffffffff00ffffffffff0000ff +ffffffffffffffffffffffffffffffffff00ffffffffffffffff0000ffffffffffffffff +ffffffff0000ffffffff0000ffffffffff00ffffff00ffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ffff0000ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffff00ffffff +ffffffffff000000ffffffff0000ffffffffffffffff00ffffffffffff0000ffffffffff +0000ffffffff0000ffffffffffffffffffffffffffffffffff00ffffffffffffffffff00 +00ffffffffffffffffffffffff00ffffffffff0000ffffffffff00ffffff0000ffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +00ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +0000ffff0000ffffffffffffffffff000000ffff0000ffffffffffffffff0000ffffffff +ffff0000ffffffffffff0000ffffff0000ffffffffffffffffffffffffffffffff0000ff +ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffff0000ffff0000ffffffffffffffffffff0000ffff00ffffffffffff +ffffff0000ffffffff000000000000ffffffff0000ffffff0000ffffff0000000000ffff +000000ffffff0000ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffff +ff0000ffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffff00ffffffff0000ffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffff000000ff0000ffffffffffffffffffffff0000 +0000ffffffffffffffffff0000ffffffffffffff0000ffffffffffff000000ffff0000ff +ffffff0000ffffffffff00ffffff0000ffffffffffffffffffff0000ffffffffffffff00 +0000ffffffffffffffff0000ffffffffffffffffffff000000ffffffffff000000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +00000000ff000000ffff0000000000ff000000ffffff000000000000ffffffffff000000 +000000ffffffffffffff000000ffffff00000000000000ffffff0000000000ffffff0000 +00000000ffff0000ff0000000000000000ffff000000ffff0000000000ffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffff000000ffff0000ffffffff +ffffffffffffffff000000ffffffffffffffffff0000ffffffffffffff0000ffffffffff +ffff0000ffff0000ffffffff0000ffffffffff00ffffff0000ffffffffffffffffffff00 +00ffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffff0000ffff +ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffff0000ffffffffff0000ff00ffffffff0000ffffff00 +00ffffff0000ffffffff0000ffffffffffffffff0000ffffffff0000ffffff0000ffffff +0000ffffffff0000ffffff0000ffff000000ffff00ffff0000ffffffff00ffff0000ffff +ff0000ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff +ffffff0000ffffffffffffffffffffffff00000000ffffffffffffffff0000ffffffffff +ffff0000ffffffffffffff0000ffff0000ffffffff000000ffffff0000ffffff0000ffff +ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff000000ffff +ffffff0000000000000000ffff00ffffffffff0000ffffffffffffffff0000ffffffff00 +00ffffff0000ffffff0000ffffffff0000000000000000ff0000ffffffffffff0000ffff +ff0000ffff00ffffffff0000ffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffff0000ffffffffffffffffffffff0000000000ffffffffffff +ffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ffffffffff0000ffffff +00ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ff +ffffffffff0000ffffffff0000ffffffffffffffff0000ffffffffff0000ffffffffffff +ffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffffffffffff0000ff +ffffffffffff0000ffff00ffffffffffff00000000ffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffff00ff +ff000000ffffffffffffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ff +ffffffff000000ff0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffff0000ffffffffffff0000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffff0000ffffffffffff0000ffffffff0000ffffffffffffffff0000ffffffff +ff0000ffffffffffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffff +ffffffffffff0000ffffffffffffff0000ff0000ffffffff0000ffff0000ffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffff +ffffffffffff00ffffffff000000ffffffffffff0000ffffffffffffff0000ffffffffff +ffff0000ffff0000ffffffffffff0000ff0000ffffffff0000ffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff0000ffff +ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffff0000ffffffffff00ff0000ffffff000000ffffffff +ffffff0000ffffffffff0000ffffffffffffffff0000ffffffff0000ffffff0000ffffff +0000ffffff000000ffffffffffffff0000ffffffffffffffff000000ffffffff0000ffff +ff0000ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +00ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffff0000ffffffffffffffffff00ffffffffff000000ffffffffffff0000ffffffffff +ffff0000ffffffffffffff0000ffff0000ffffffffffff00000000ffffffffff0000ffff +ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff00ffff0000 +ffffff0000ffffffffff00ff000000ffffffff0000ffffffffffffffff0000ffffffff00 +00ffffff0000ffffff0000ffffffff0000ffffffffff00ff0000ffffffffffffffff0000 +00ffffffff0000ffffff0000ffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffff000000ffffffffffffff0000ffffffffffff000000ffffff +ffff000000ffffffffffff0000ffffffffffffff0000ffff0000ffffffffffffff000000 +ffffffffff000000ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffff +ff0000ffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ff +ffffff00ffffff000000ffff00000000000000ffffff000000ffffff000000ffffffffff +ffff0000ffffffff0000ffffff0000ffffff0000ffffffff00000000000000ffff0000ff +ffffffffffffff000000ffffffff0000ffff000000ffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffff0000ffffffff +ffffff00000000ffffffffff0000ffffffffffff0000ff00ffffffff0000ffffff0000ff +ffffffffffff0000ffffffffffffff0000ffffffffffffffffff0000ffffffffffffff00 +0000ffffffffffffffff000000ffffffffffffffffff0000ffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +000000ffff00000000ff00000000ffff00000000ffff0000000000ffffffffff00000000 +ff000000ffffffffffff00000000ffff00000000ff00000000ffffff000000ffffff0000 +000000ffff0000000000ffffffffffffff00ffffffffff00000000ff000000ffff000000 +0000ffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff +ffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff0000ffffff +ff000000000000ffffffff00000000000000ffffff0000ffffffffffffff000000ffffff +ff0000ffffff0000ffffffffffffffff00ffffffffffffff0000ffffffffffffff000000 +00000000ffffffff0000ffffffffffffff00000000000000ffffffffffffff0000ffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +ffffffffffffffffff0000ffffffffffffffffffffffffff0000ffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffffffffffffffffffffff00ffffffffffffffffffffffffffff00ffff +ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffff00ffffffffffffffffff +ffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff0000 +ffffffffffffffffffffff00000000ffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffff0000ffffffffffffffffffffff00ffffffff0000ffffff +ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff00000000ffffff000000ff00000000ff00000000ffffffffffff0000 +000000ffffffffff0000000000ffffff0000000000ff0000ff00000000ffffffff000000 +ffffff00000000000000ffffffffff00000000000000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffff0000ffffff0000ffffff0000ffffffff +0000ffffffff0000ffff000000ffffff0000ffff000000ffffff0000ffffff000000ffff +ff0000ffffffff0000ffffffff0000ffffff0000ffffff00ffffff000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff0000 +ffffff0000ffffffff0000ffffff0000ffffffff000000ff0000ffffffff000000ffff00 +00ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000ffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +0000ffffffffff0000ffffff0000ffffffff0000ffffff0000ffffffffff0000ff0000ff +ffffffff0000ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff +0000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000ffffffff0000ffffff0000ffffffff0000ffffff0000ffff +ffffff0000ff0000ffffffffff0000ffff0000ffffff0000ffffffff0000ffffffff0000 +ffffffff0000ffffff0000ffffff0000ffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000ffffff0000ffffff0000ffffffff +0000ffffff0000ffffffffff0000ff0000ffffffffff0000ffff0000ffffff0000ffffff +ff0000ffffffff0000ffffffff0000ffffff0000ffffffff00000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff0000 +ffffff0000ffffffff0000ffffff0000ffffffffff00ffff0000ffffffffff00ffffff00 +00ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffff00ffffff0000ffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000 +ffffff0000ffffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff +0000ffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000000000ffff0000000000ff0000000000ff00000000ffffffff0000 +0000ffffffffffff00000000ffffffffffff0000000000000000ff00000000ffff000000 +00ffff00000000ff00000000ffff00000000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffff0000000000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff +ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff0000ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffff00000000ffffff0000 +0000000000ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff00 +ffff0000ffff00ffff0000ff0000ffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff +ffffffffffffff0000ffffffffff0000ffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000ffffffffffffffffffffffffffffff0000ffffffffff0000ffff +ffffff0000ffffffffff00ffffffff0000ffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000ffffffffffff0000000000ffff00000000 +00000000000000000000ffff0000ffffff000000ffffff00000000000000ffffffffff00 +0000000000ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ff +ff000000ffffff0000ffffffffff0000ffffffffff0000ffffffff0000ffffffff0000ff +ffff0000ffffff0000ffffff0000ffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffff0000ffffffff000000ffff0000ffffffffff0000ffffffffff0000ffffffff +0000ffffffff0000ffffff0000ffffff0000000000000000ffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffff0000ffffffffff0000ffff0000ffffffffff0000ffff +ffffff0000ffffffff0000ffffffff0000ffffff0000ffff0000ffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff0000ffff0000 +ffffffffff0000ffffffffff0000ffffffff0000ffffffff0000ffffff0000ffff0000ff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffff +ffffff0000ffff0000ffffffffff0000ffffffffff0000ffffffff0000ffffffff0000ff +ffff0000ffff000000ffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffff0000ffffffffff00ffffff0000ffffffffff0000ffffffffff0000ffffffff +0000ffffffff0000ffffff0000ffffff0000ffffffffff00ffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff00ffffffffffff0000ffffff0000ffffff0000ffffffffff0000ffff +ffffff0000ffffffff0000ffffffff0000ffffff0000ffffff00000000000000ffffffff +ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000ffffffffffff00000000ffffffff000000 +0000ffff0000000000ffff0000000000ff00000000ffff00000000ff00000000ffffff00 +00000000ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/sourcecodes/bnt-master/docs/Figures/filter.fig b/sourcecodes/bnt-master/docs/Figures/filter.fig new file mode 100644 index 00000000..4e125ccf --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/filter.fig @@ -0,0 +1,74 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 2550 5100 6300 6375 +2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5 + 2550 5475 4050 5475 4050 5775 2550 5775 2550 5475 +2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2 + 4050 5475 6300 5475 +2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3300 6375 3300 5925 +2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 3450 6225 4050 6225 +4 0 0 100 0 0 18 0.0000 4 165 90 4050 5325 t\001 +4 0 0 100 0 0 18 0.0000 4 165 345 3600 6075 tau\001 +-6 +2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5 + 2550 2025 4050 2025 4050 2325 2550 2325 2550 2025 +2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2 + 4050 2025 6300 2025 +2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4050 2925 4050 2475 +2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5 + 2550 7200 6375 7200 6375 7500 2550 7500 2550 7200 +2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3975 8025 3975 7575 +2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5 + 2475 3525 3975 3525 3975 3825 2475 3825 2475 3525 +2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2 + 3975 3525 6225 3525 +2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 3975 4275 4575 4275 +2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4650 4425 4650 3975 +2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5 + 2550 600 4050 600 4050 900 2550 900 2550 600 +2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2 + 4050 600 6300 600 +2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4050 1500 4050 1050 +4 0 0 100 0 0 18 0.0000 4 165 90 4050 1875 t\001 +4 0 0 50 0 0 24 0.0000 4 330 3540 6675 2175 argmax P(x(1:t) | y(1:t))\001 +4 0 0 50 0 0 24 0.0000 4 330 810 6975 2550 x(1:t)\001 +4 0 0 100 0 0 18 0.0000 4 165 90 3975 7125 t\001 +4 0 0 100 0 0 18 0.0000 4 195 180 6225 7125 T\001 +4 0 0 100 0 0 18 0.0000 4 165 90 3975 3375 t\001 +4 0 0 100 0 0 18 0.0000 4 195 540 3975 4125 delta\001 +4 0 0 100 0 0 18 0.0000 4 165 90 4050 450 t\001 +4 0 0 50 0 0 24 0.0000 4 330 1950 6675 750 P(X(t)|y(1:t))\001 +4 0 0 50 0 0 24 0.0000 4 330 2865 6450 3600 P(X(t+delta)|y(1:t))\001 +4 0 0 50 0 0 24 0.0000 4 330 2550 6600 5550 P(X(t-tau)|y(1:t))\001 +4 0 0 50 0 0 24 0.0000 4 330 2085 6750 7425 P(X(t)|y(1:T))\001 +4 0 0 50 0 0 24 0.0000 4 330 1140 600 900 filtering\001 +4 0 0 50 0 0 24 0.0000 4 330 1470 450 3750 prediction\001 +4 0 0 50 0 0 24 0.0000 4 255 1005 600 2175 Viterbi\001 +4 0 0 50 0 0 24 0.0000 4 330 1305 600 5775 fixed-lag\001 +4 0 0 50 0 0 24 0.0000 4 330 1575 525 7740 smoothing\001 +4 0 0 50 0 0 24 0.0000 4 330 1170 525 8055 (offline)\001 +4 0 0 50 0 0 24 0.0000 4 330 1575 600 6090 smoothing\001 +4 0 0 50 0 0 24 0.0000 4 255 1920 525 7425 fixed interval\001 diff --git a/sourcecodes/bnt-master/docs/Figures/filter.gif b/sourcecodes/bnt-master/docs/Figures/filter.gif new file mode 100644 index 00000000..bda3de61 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/filter.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/filter.tex b/sourcecodes/bnt-master/docs/Figures/filter.tex new file mode 100644 index 00000000..871f8dfd --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/filter.tex @@ -0,0 +1,51 @@ +%Latex +\documentstyle[fleqn,psfig,12pt,pstricks,pst-node,pst-tree]{article} + +%\documentclass[fleqn,12pt]{article} +%\usepackage{pstricks,pst-node,pst-tree} + +%latex2e +%\documentclass{article} +%\usepackage{epsfig,alltt,fancybox} + +\setlength{\textwidth}{6.5in} +\setlength{\oddsidemargin}{0in} +\setlength{\textheight}{8.5in} +\setlength{\headheight}{0in} +\setlength{\headsep}{-0.5in} +\setlength{\parindent}{0in} % block style +\setlength{\parskip}{0.3cm} + +\newcommand{\mytitle}[1]{\newpage \huge \begin{center}#1\vspace{0.8cm}\end{center} \LARGE} + + +\begin{document} + +\mytitle{Hello world} + +Hello world + +\centering +$ +\pstree[treemode=R]{\Tcircle{b}}{% + \pstree{\TC*^{a_1}}{% + \Tr{b_{11}}^{x_1} + \Tr{b_{12}}_{x_2} + } + \pstree{\TC*_{a_2}}{% + \Tr{b_{21}}^{x_1} + \Tr{b_{22}}_{x_2} + } +} +$ + + + +\mytitle{Hello world 2} + +\psline[linewidth=0.5cm](0,0)(2,0) +\psline[linewidth=0.05cm](2,-1)(6,-1) + + + +\end{document} diff --git a/sourcecodes/bnt-master/docs/Figures/gaussplot.png b/sourcecodes/bnt-master/docs/Figures/gaussplot.png new file mode 100644 index 00000000..29cb66ec Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/gaussplot.png differ diff --git a/sourcecodes/bnt-master/docs/Figures/hme.fig b/sourcecodes/bnt-master/docs/Figures/hme.fig new file mode 100644 index 00000000..dffda256 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hme.fig @@ -0,0 +1,35 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +6 225 150 2625 3825 +6 300 150 1800 3450 +5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 2212.500 2250.000 825 1425 600 2325 825 3075 + 0 0 1.00 60.00 120.00 +5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 3083.468 1905.242 750 525 375 2025 675 3150 + 0 0 1.00 60.00 120.00 +5 1 0 1 -1 -1 0 0 -1 0.000 0 0 1 0 679.747 1409.810 1200 450 1725 1725 1275 2325 + 0 0 1.00 60.00 120.00 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 975 375 300 225 975 375 1275 600 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1050 3225 300 225 1050 3225 1350 3450 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 825 1050 1200 1050 1200 1500 825 1500 825 1050 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 825 2100 1200 2100 1200 2550 825 2550 825 2100 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1050 600 1050 1050 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1050 1575 1050 2100 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1050 2625 1050 3000 +-6 +4 0 -1 0 0 0 12 0.0000 4 180 2370 225 3750 Hierarchical Mixture of Experts\001 +4 0 -1 0 0 0 12 0.0000 4 135 120 825 450 X\001 +4 0 -1 0 0 0 12 0.0000 4 165 225 900 1350 Q1\001 +4 0 -1 0 0 0 12 0.0000 4 165 225 900 2400 Q2\001 +4 0 -1 0 0 0 12 0.0000 4 135 135 900 3300 Y\001 +-6 diff --git a/sourcecodes/bnt-master/docs/Figures/hme.gif b/sourcecodes/bnt-master/docs/Figures/hme.gif new file mode 100644 index 00000000..85150fbb Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hme.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.gif b/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.gif new file mode 100644 index 00000000..15cd6b1d Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.png b/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.png new file mode 100644 index 00000000..a12cb885 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.png differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm3.fig b/sourcecodes/bnt-master/docs/Figures/hmm3.fig new file mode 100644 index 00000000..61578c4e --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm3.fig @@ -0,0 +1,39 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 525 1650 270 270 525 1650 675 1875 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1575 1650 270 270 1575 1650 1725 1875 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2625 1650 270 270 2625 1650 2775 1875 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 375 600 750 600 750 1050 375 1050 375 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 525 1050 525 1425 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 825 1350 825 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1425 600 1800 600 1800 1050 1425 1050 1425 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1575 1050 1575 1425 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1800 825 2325 825 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2400 600 2775 600 2775 1050 2400 1050 2400 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2550 1050 2550 1425 +4 0 0 100 0 2 12 0.0000 4 135 90 525 975 1\001 +4 0 0 100 0 2 12 0.0000 4 135 90 1575 975 3\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2475 900 5\001 +4 0 0 100 0 2 12 0.0000 4 135 90 450 1725 2\001 +4 0 0 100 0 2 12 0.0000 4 135 90 1425 1725 4\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2550 1725 6\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm3.gif b/sourcecodes/bnt-master/docs/Figures/hmm3.gif new file mode 100644 index 00000000..05a6f592 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm3.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm3letter.fig b/sourcecodes/bnt-master/docs/Figures/hmm3letter.fig new file mode 100644 index 00000000..3a190045 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm3letter.fig @@ -0,0 +1,39 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 525 1650 270 270 525 1650 675 1875 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1575 1650 270 270 1575 1650 1725 1875 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2625 1650 270 270 2625 1650 2775 1875 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 375 600 750 600 750 1050 375 1050 375 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 525 1050 525 1425 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 825 1350 825 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1425 600 1800 600 1800 1050 1425 1050 1425 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1575 1050 1575 1425 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1800 825 2325 825 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2400 600 2775 600 2775 1050 2400 1050 2400 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2550 1050 2550 1425 +4 0 0 100 0 0 12 0.0000 4 135 225 450 1725 Y1\001 +4 0 0 100 0 0 12 0.0000 4 135 225 1425 1725 Y2\001 +4 0 0 100 0 0 12 0.0000 4 135 225 2475 1725 Y3\001 +4 0 0 100 0 0 12 0.0000 4 135 225 450 900 X1\001 +4 0 0 100 0 0 12 0.0000 4 135 225 2475 900 X3\001 +4 0 0 100 0 0 12 0.0000 4 135 225 1500 900 X2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm3letter.gif b/sourcecodes/bnt-master/docs/Figures/hmm3letter.gif new file mode 100644 index 00000000..540fb75b Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm3letter.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm3letter.jpg b/sourcecodes/bnt-master/docs/Figures/hmm3letter.jpg new file mode 100644 index 00000000..29695dfd Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm3letter.jpg differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm4.fig b/sourcecodes/bnt-master/docs/Figures/hmm4.fig new file mode 100644 index 00000000..92066fb9 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm4.fig @@ -0,0 +1,55 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 600 1200 300 300 600 1200 900 1200 +1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 1800 1200 300 300 1800 1200 2100 1200 +1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 3000 1200 300 300 3000 1200 3300 1200 +1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 4200 1200 300 300 4200 1200 4500 1200 +1 3 0 2 0 0 50 0 7 0.000 1 0.0000 600 2400 300 300 600 2400 900 2400 +1 3 0 2 0 0 50 0 7 0.000 1 0.0000 3000 2400 300 300 3000 2400 3300 2400 +1 3 0 2 0 0 50 0 7 0.000 1 0.0000 4200 2400 300 300 4200 2400 4500 2400 +1 3 0 2 0 0 50 0 7 0.000 1 0.0000 1800 2400 300 300 1800 2400 2100 2400 +2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 600 1500 600 2100 +2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 900 1200 1500 1200 +2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2100 1200 2700 1200 +2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 3375 1200 3900 1200 +2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 1800 1500 1800 2100 +2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 3000 1500 3000 2100 +2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 4200 1500 4200 2100 +4 0 0 100 0 0 30 0.0000 4 60 600 5025 1200 . . .\001 +4 0 0 50 0 0 24 0.0000 4 255 270 450 1275 X\001 +4 0 0 50 0 0 24 0.0000 4 255 270 1650 1275 X\001 +4 0 0 50 0 0 24 0.0000 4 255 270 2850 1275 X\001 +4 0 0 50 0 0 24 0.0000 4 255 240 450 2475 Y\001 +4 0 0 50 0 0 24 0.0000 4 255 240 2850 2475 Y\001 +4 0 0 50 0 0 24 0.0000 4 255 240 4050 2475 Y\001 +4 0 0 50 0 0 24 0.0000 4 255 180 675 1425 1\001 +4 0 0 50 0 0 24 0.0000 4 255 180 1875 1350 2\001 +4 0 0 50 0 0 24 0.0000 4 255 180 3075 1350 3\001 +4 0 0 50 0 0 24 0.0000 4 255 180 4275 1425 4\001 +4 0 0 50 0 0 24 0.0000 4 255 180 600 2550 1\001 +4 0 0 50 0 0 24 0.0000 4 255 180 3000 2550 3\001 +4 0 0 50 0 0 24 0.0000 4 255 180 4200 2550 4\001 +4 0 0 50 0 0 24 0.0000 4 255 270 4050 1275 X\001 +4 0 0 50 0 0 24 0.0000 4 255 180 1800 2625 2\001 +4 0 0 50 0 0 24 0.0000 4 255 240 1650 2475 Y\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm4.gif b/sourcecodes/bnt-master/docs/Figures/hmm4.gif new file mode 100644 index 00000000..336bc5d6 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm4.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm4_params.fig b/sourcecodes/bnt-master/docs/Figures/hmm4_params.fig new file mode 100644 index 00000000..b254e1e5 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm4_params.fig @@ -0,0 +1,81 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3150 2550 270 270 3150 2550 3300 2775 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3975 2550 270 270 3975 2550 4125 2775 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1350 2550 270 270 1350 2550 1500 2775 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2250 2550 270 270 2250 2550 2400 2775 +1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 2625 3825 270 270 2625 3825 2775 4050 +1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 1425 600 270 270 1425 600 1575 825 +1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 3000 600 270 270 3000 600 3150 825 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2925 1500 3300 1500 3300 1950 2925 1950 2925 1500 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3075 1950 3075 2325 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3750 1500 4125 1500 4125 1950 3750 1950 3750 1500 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3300 1725 3750 1725 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3975 1950 3975 2250 +2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1575 1725 2100 1725 +2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2475 1725 2925 1725 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1200 1500 1575 1500 1575 1950 1200 1950 1200 1500 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1350 1950 1350 2325 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2100 1500 2475 1500 2475 1950 2100 1950 2100 1500 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2250 1950 2250 2325 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2475 3600 1500 2775 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2550 3600 2400 2850 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2700 3525 3075 2775 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2850 3675 3825 2775 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1425 900 1425 1500 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2925 900 2400 1500 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3075 900 3075 1425 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3225 750 3900 1500 +4 0 0 100 0 0 12 0.0000 4 135 225 3000 2625 Y3\001 +4 0 0 100 0 0 12 0.0000 4 165 225 3825 1800 Q4\001 +4 0 0 100 0 0 12 0.0000 4 165 225 3000 1800 Q3\001 +4 0 0 100 0 0 12 0.0000 4 135 225 3825 2625 Y4\001 +4 0 0 100 0 0 12 0.0000 4 135 225 1275 2625 Y1\001 +4 0 0 100 0 0 12 0.0000 4 165 225 1275 1800 Q1\001 +4 0 0 100 0 0 12 0.0000 4 135 225 2100 2625 Y2\001 +4 0 0 100 0 0 12 0.0000 4 165 225 2175 1800 Q2\001 +4 0 0 100 0 0 12 0.0000 4 135 195 1275 675 P1\001 +4 0 0 100 0 0 12 0.0000 4 135 195 2850 675 P2\001 +4 0 0 100 0 0 12 0.0000 4 135 195 2550 3900 P3\001 +4 0 0 100 0 0 30 0.0000 4 30 525 4350 1800 . . .\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm4_params.gif b/sourcecodes/bnt-master/docs/Figures/hmm4_params.gif new file mode 100644 index 00000000..656bc13f Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm4_params.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm4_paramsX.fig b/sourcecodes/bnt-master/docs/Figures/hmm4_paramsX.fig new file mode 100644 index 00000000..5deec7e1 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm4_paramsX.fig @@ -0,0 +1,81 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3150 2550 270 270 3150 2550 3300 2775 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3975 2550 270 270 3975 2550 4125 2775 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1350 2550 270 270 1350 2550 1500 2775 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2250 2550 270 270 2250 2550 2400 2775 +1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 1425 600 270 270 1425 600 1575 825 +1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 3000 600 270 270 3000 600 3150 825 +1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 2615 3863 270 270 2615 3863 2765 4088 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2925 1500 3300 1500 3300 1950 2925 1950 2925 1500 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3075 1950 3075 2325 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3750 1500 4125 1500 4125 1950 3750 1950 3750 1500 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3300 1725 3750 1725 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3975 1950 3975 2250 +2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1575 1725 2100 1725 +2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2475 1725 2925 1725 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1200 1500 1575 1500 1575 1950 1200 1950 1200 1500 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1350 1950 1350 2325 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2100 1500 2475 1500 2475 1950 2100 1950 2100 1500 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2250 1950 2250 2325 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2475 3600 1500 2775 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2550 3600 2400 2850 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2700 3525 3075 2775 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2850 3675 3825 2775 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1425 900 1425 1500 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2925 900 2400 1500 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3075 900 3075 1425 +2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3225 750 3900 1500 +4 0 0 100 0 0 12 0.0000 4 135 225 3000 2625 Y3\001 +4 0 0 100 0 0 12 0.0000 4 135 225 3825 2625 Y4\001 +4 0 0 100 0 0 12 0.0000 4 135 225 1275 2625 Y1\001 +4 0 0 100 0 0 12 0.0000 4 135 225 2100 2625 Y2\001 +4 0 0 100 0 0 30 0.0000 4 60 600 4350 1800 . . .\001 +4 0 0 50 0 0 12 0.0000 4 135 225 1275 1800 X1\001 +4 0 0 50 0 0 12 0.0000 4 135 225 2175 1800 X2\001 +4 0 0 50 0 0 12 0.0000 4 135 225 3000 1800 X3\001 +4 0 0 50 0 0 12 0.0000 4 135 225 3825 1800 X4\001 +4 0 0 50 0 0 18 0.0000 4 195 180 2550 3975 B\001 +4 0 0 50 0 0 18 0.0000 4 255 210 1275 750 pi\001 +4 0 0 50 0 0 18 0.0000 4 195 225 2850 750 A\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm4_square.fig b/sourcecodes/bnt-master/docs/Figures/hmm4_square.fig new file mode 100644 index 00000000..9f0226f0 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm4_square.fig @@ -0,0 +1,55 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +6 1425 600 2025 1950 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1725 1650 270 270 1725 1650 1875 1875 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1575 600 1950 600 1950 1050 1575 1050 1575 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1725 1050 1725 1425 +4 0 0 100 0 0 12 0.0000 4 135 225 1575 1725 Y2\001 +4 0 0 100 0 0 12 0.0000 4 165 225 1650 900 Q2\001 +-6 +6 525 600 1125 1950 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 825 1650 270 270 825 1650 975 1875 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 675 600 1050 600 1050 1050 675 1050 675 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 1050 825 1425 +4 0 0 100 0 0 12 0.0000 4 135 225 750 1725 Y1\001 +4 0 0 100 0 0 12 0.0000 4 165 225 750 900 Q1\001 +-6 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2625 1650 270 270 2625 1650 2775 1875 +1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3450 1650 270 270 3450 1650 3600 1875 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2400 600 2775 600 2775 1050 2400 1050 2400 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2550 1050 2550 1425 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3225 600 3600 600 3600 1050 3225 1050 3225 600 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2775 825 3225 825 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3450 1050 3450 1350 +2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1050 825 1575 825 +2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1950 825 2400 825 +4 0 0 100 0 0 12 0.0000 4 135 225 2475 1725 Y3\001 +4 0 0 100 0 0 12 0.0000 4 165 225 3300 900 Q4\001 +4 0 0 100 0 0 12 0.0000 4 165 225 2475 900 Q3\001 +4 0 0 100 0 0 12 0.0000 4 135 225 3300 1725 Y4\001 +4 0 0 100 0 0 30 0.0000 4 30 525 3825 975 . . .\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_ar.fig b/sourcecodes/bnt-master/docs/Figures/hmm_ar.fig new file mode 100644 index 00000000..8aefe002 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm_ar.fig @@ -0,0 +1,30 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +6 225 225 2025 1875 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1275 300 225 525 1275 825 1500 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1275 300 225 1575 1275 1875 1500 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 450 1350 450 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 375 225 750 225 750 675 375 675 375 225 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 525 675 525 1050 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1425 225 1800 225 1800 675 1425 675 1425 225 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1575 675 1575 1050 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 1275 1275 1275 +4 0 -1 0 0 0 12 0.0000 4 165 225 450 525 Q1\001 +4 0 -1 0 0 0 12 0.0000 4 165 225 1500 525 Q2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 375 1350 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1425 1350 Y2\001 +4 0 -1 0 0 0 12 0.0000 4 180 1785 225 1800 Auto Regressive HMM\001 +-6 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_ar.gif b/sourcecodes/bnt-master/docs/Figures/hmm_ar.gif new file mode 100644 index 00000000..57d57c4d Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm_ar.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_coupled.fig b/sourcecodes/bnt-master/docs/Figures/hmm_coupled.fig new file mode 100644 index 00000000..6eab0030 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm_coupled.fig @@ -0,0 +1,65 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +6 300 225 1950 675 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 450 300 225 600 450 900 675 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1650 450 300 225 1650 450 1950 675 +-6 +6 450 1875 1875 2325 +6 450 1875 1875 2325 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 2100 1425 2100 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 450 1875 825 1875 825 2325 450 2325 450 1875 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1500 1875 1875 1875 1875 2325 1500 2325 1500 1875 +-6 +-6 +6 450 1050 1875 1500 +6 450 1050 1875 1500 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1275 1425 1275 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 450 1050 825 1050 825 1500 450 1500 450 1050 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1500 1050 1875 1050 1875 1500 1500 1500 1500 1050 +-6 +-6 +6 300 2700 1950 3150 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 2925 300 225 600 2925 900 3150 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1650 2925 300 225 1650 2925 1950 3150 +-6 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 600 2325 600 2700 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1650 2325 1650 2700 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 600 1050 600 675 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1650 1050 1650 675 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 2100 1425 1350 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 900 1275 1350 2025 +4 0 -1 0 0 0 12 0.0000 4 135 210 450 525 C1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 525 1350 A1\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 525 2175 B1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 450 3000 D1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1500 3075 D2\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 1500 525 C2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1575 1350 A2\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 1575 2175 B2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_coupled.gif b/sourcecodes/bnt-master/docs/Figures/hmm_coupled.gif new file mode 100644 index 00000000..1dd2859c Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm_coupled.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_factorial.fig b/sourcecodes/bnt-master/docs/Figures/hmm_factorial.fig new file mode 100644 index 00000000..94e6010c --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm_factorial.fig @@ -0,0 +1,50 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 1501.355 1323.343 675 450 300 1275 525 2025 + 0 0 1.00 60.00 120.00 +5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2263.600 1307.555 1650 525 1275 1200 1575 2025 + 0 0 1.00 60.00 120.00 +6 675 1050 2100 1500 +6 675 1050 2100 1500 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1125 1275 1650 1275 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 675 1050 1050 1050 1050 1500 675 1500 675 1050 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1725 1050 2100 1050 2100 1500 1725 1500 1725 1050 +-6 +-6 +6 675 225 2100 675 +6 675 225 2100 675 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1125 450 1650 450 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 675 225 1050 225 1050 675 675 675 675 225 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1725 225 2100 225 2100 675 1725 675 1725 225 +-6 +-6 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2100 300 225 825 2100 1125 2325 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 2100 300 225 1875 2100 2175 2325 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 1500 825 1875 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1875 1500 1875 1875 +4 0 -1 0 0 0 12 0.0000 4 135 225 675 2175 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2250 Y2\001 +4 0 -1 0 0 0 12 0.0000 4 135 1185 675 2850 Factorial HMM\001 +4 0 0 100 0 0 12 0.0000 4 135 225 750 525 A1\001 +4 0 0 100 0 0 12 0.0000 4 135 225 1800 525 A2\001 +4 0 0 100 0 0 12 0.0000 4 135 210 750 1350 B1\001 +4 0 0 100 0 0 12 0.0000 4 135 210 1800 1350 B2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_factorial.gif b/sourcecodes/bnt-master/docs/Figures/hmm_factorial.gif new file mode 100644 index 00000000..6ee4d113 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm_factorial.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_gauss.fig b/sourcecodes/bnt-master/docs/Figures/hmm_gauss.fig new file mode 100644 index 00000000..bb26e360 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm_gauss.fig @@ -0,0 +1,27 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +6 225 600 1875 1875 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 825 1350 825 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 375 600 750 600 750 1050 375 1050 375 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 525 1050 525 1425 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1425 600 1800 600 1800 1050 1425 1050 1425 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1575 1050 1575 1425 +-6 +4 0 -1 0 0 0 12 0.0000 4 165 225 450 900 Q1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 375 1725 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1500 1725 Y2\001 +4 0 -1 0 0 0 12 0.0000 4 180 2130 150 2250 HMM with Gaussian output\001 +4 0 -1 0 0 0 12 0.0000 4 165 225 1500 900 Q2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_gauss.gif b/sourcecodes/bnt-master/docs/Figures/hmm_gauss.gif new file mode 100644 index 00000000..d0aa117b Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm_gauss.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_io.fig b/sourcecodes/bnt-master/docs/Figures/hmm_io.fig new file mode 100644 index 00000000..1f84aafd --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm_io.fig @@ -0,0 +1,44 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 1725.000 1200.000 600 450 375 1275 600 1950 + 0 0 1.00 60.00 120.00 +5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2859.375 1303.125 1650 525 1425 1200 1575 1950 + 0 0 1.00 60.00 120.00 +6 525 150 2175 2325 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 2100 300 225 1875 2100 2175 2325 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2100 300 225 825 2100 1125 2325 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 900 375 300 225 900 375 1200 600 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 375 300 225 1875 375 2175 600 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1125 1275 1650 1275 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 675 1050 1050 1050 1050 1500 675 1500 675 1050 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 1500 825 1875 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1725 1050 2100 1050 2100 1500 1725 1500 1725 1050 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1875 1500 1875 1875 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 675 825 1050 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1875 675 1875 1050 +-6 +4 0 -1 0 0 0 12 0.0000 4 165 225 750 1350 Q1\001 +4 0 -1 0 0 0 12 0.0000 4 165 225 1800 1350 Q2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 750 450 U1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 750 2175 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1725 450 U2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1725 2175 Y2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_io.gif b/sourcecodes/bnt-master/docs/Figures/hmm_io.gif new file mode 100644 index 00000000..24dfc2da Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm_io.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.fig b/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.fig new file mode 100644 index 00000000..cbfb1c63 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.fig @@ -0,0 +1,52 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +6 675 1650 1275 2100 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 975 1875 300 225 975 1875 1275 2100 +4 0 -1 0 0 0 12 0.0000 4 135 225 825 1950 Y1\001 +-6 +6 1725 1725 2325 2175 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 2025 1950 300 225 2025 1950 2325 2175 +4 0 -1 0 0 0 12 0.0000 4 135 225 1950 2025 Y2\001 +-6 +6 1500 900 1875 1350 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1500 900 1875 900 1875 1350 1500 1350 1500 900 +4 0 -1 0 0 0 12 0.0000 4 135 255 1575 1200 M2\001 +-6 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1275 450 1800 450 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 825 225 1200 225 1200 675 825 675 825 225 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1875 225 2250 225 2250 675 1875 675 1875 225 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 225 900 600 900 600 1350 225 1350 225 900 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 675 450 900 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 525 1350 750 1650 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1050 675 1050 1650 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1875 675 1725 900 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1800 1350 1950 1725 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2100 675 2100 1725 +4 0 -1 0 0 0 12 0.0000 4 165 225 900 525 Q1\001 +4 0 -1 0 0 0 12 0.0000 4 135 255 300 1200 M1\001 +4 0 -1 0 0 0 12 0.0000 4 165 225 1950 525 Q2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.gif b/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.gif new file mode 100644 index 00000000..33d758b8 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_zoo.fig b/sourcecodes/bnt-master/docs/Figures/hmm_zoo.fig new file mode 100644 index 00000000..05d34578 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm_zoo.fig @@ -0,0 +1,162 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 2784.375 4153.125 1575 3375 1350 4050 1500 4800 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 1650.000 4050.000 525 3300 300 4125 525 4800 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 6376.355 4323.343 5550 3450 5175 4275 5400 5025 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 7138.600 4307.555 6525 3525 6150 4200 6450 5025 + 1 1 1.00 60.00 120.00 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 750 4950 300 225 750 4950 1050 5175 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 1800 4950 300 225 1800 4950 2100 5175 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 825 3225 300 225 825 3225 1125 3450 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 1800 3225 300 225 1800 3225 2100 3450 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 3150 3150 300 225 3150 3150 3450 3375 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 4200 3150 300 225 4200 3150 4500 3375 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 3150 5625 300 225 3150 5625 3450 5850 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 4200 5625 300 225 4200 5625 4500 5850 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 5700 5100 300 225 5700 5100 6000 5325 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 6750 5100 300 225 6750 5100 7050 5325 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 3375 1800 300 225 3375 1800 3675 2025 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 4425 1875 300 225 4425 1875 4725 2100 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 5550 1425 300 225 5550 1425 5850 1650 +1 1 0 2 7 0 50 0 20 0.000 1 0.0000 6600 1425 300 225 6600 1425 6900 1650 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3150 3750 3150 3375 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6750 4500 6750 4875 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 4275 150 4650 150 4650 600 4275 600 4275 150 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3225 600 2850 825 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 600 3900 975 3900 975 4350 600 4350 600 3900 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 750 4350 750 4725 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 750 3525 750 3900 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 1800 4350 1800 4725 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 1050 4125 1575 4125 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 1800 3525 1800 3900 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 1650 3900 2025 3900 2025 4350 1650 4350 1650 3900 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 3000 3750 3375 3750 3375 4200 3000 4200 3000 3750 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 3450 3975 3900 4725 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 3450 3975 3975 3975 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 3000 4575 3375 4575 3375 5025 3000 5025 3000 4575 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 3150 5025 3150 5400 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 3450 4800 3975 4050 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 3450 4800 3975 4800 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 4050 4575 4425 4575 4425 5025 4050 5025 4050 4575 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 4050 3750 4425 3750 4425 4200 4050 4200 4050 3750 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 4200 3750 4200 3375 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 4200 5025 4200 5400 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 5550 4050 5925 4050 5925 4500 5550 4500 5550 4050 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 5700 4500 5700 4875 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 3450 6525 3450 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 4275 6525 4275 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 6600 3225 6975 3225 6975 3675 6600 3675 6600 3225 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 6600 4050 6975 4050 6975 4500 6600 4500 6600 4050 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 825 825 1350 825 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 1575 1050 1575 1425 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 375 600 750 600 750 1050 375 1050 375 600 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 525 1050 525 1425 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 1425 600 1800 600 1800 1050 1425 1050 1425 600 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 2625 825 3000 825 3000 1275 2625 1275 2625 825 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 2925 1275 3150 1575 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 3450 600 3450 1575 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 3225 150 3600 150 3600 600 3225 600 3225 150 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 3675 375 4200 375 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 3900 825 4275 825 4275 1275 3900 1275 3900 825 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 4275 600 4125 825 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 4200 1275 4350 1650 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 4500 600 4500 1650 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 5550 825 5550 1200 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 5400 375 5775 375 5775 825 5400 825 5400 375 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 5850 600 6375 600 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 6450 375 6825 375 6825 825 6450 825 6450 375 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 6600 825 6600 1200 +2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 1.00 60.00 120.00 + 5850 1425 6300 1425 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 5550 3225 5925 3225 5925 3675 5550 3675 5550 3225 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_zoo.gif b/sourcecodes/bnt-master/docs/Figures/hmm_zoo.gif new file mode 100644 index 00000000..c16ddffa Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/hmm_zoo.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_zoo_names.fig b/sourcecodes/bnt-master/docs/Figures/hmm_zoo_names.fig new file mode 100644 index 00000000..b53a7143 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm_zoo_names.fig @@ -0,0 +1,169 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 1650.000 4050.000 525 3300 300 4125 525 4800 + 0 0 1.00 60.00 120.00 +5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2784.375 4153.125 1575 3375 1350 4050 1500 4800 + 0 0 1.00 60.00 120.00 +5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 6376.355 4323.343 5550 3450 5175 4275 5400 5025 + 0 0 1.00 60.00 120.00 +5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 7138.600 4307.555 6525 3525 6150 4200 6450 5025 + 0 0 1.00 60.00 120.00 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 5550 1425 300 225 5550 1425 5850 1650 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 6600 1425 300 225 6600 1425 6900 1650 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1800 4950 300 225 1800 4950 2100 5175 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 3225 300 225 825 3225 1125 3450 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1800 3225 300 225 1800 3225 2100 3450 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3150 3150 300 225 3150 3150 3450 3375 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 4200 3150 300 225 4200 3150 4500 3375 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3150 5625 300 225 3150 5625 3450 5850 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 4200 5625 300 225 4200 5625 4500 5850 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 5700 5100 300 225 5700 5100 6000 5325 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3375 1800 300 225 3375 1800 3675 2025 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 750 4950 300 225 750 4950 1050 5175 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 6750 5100 300 225 6750 5100 7050 5325 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 4425 1875 300 225 4425 1875 4725 2100 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 5850 600 6375 600 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 5400 375 5775 375 5775 825 5400 825 5400 375 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 5550 825 5550 1200 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 6450 375 6825 375 6825 825 6450 825 6450 375 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6600 825 6600 1200 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 5850 1425 6300 1425 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 825 1350 825 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 375 600 750 600 750 1050 375 1050 375 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 525 1050 525 1425 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1425 600 1800 600 1800 1050 1425 1050 1425 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1575 1050 1575 1425 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1050 4125 1575 4125 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 600 3900 975 3900 975 4350 600 4350 600 3900 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 750 4350 750 4725 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1650 3900 2025 3900 2025 4350 1650 4350 1650 3900 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1800 4350 1800 4725 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 750 3525 750 3900 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1800 3525 1800 3900 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3150 5025 3150 5400 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4200 5025 4200 5400 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3150 3750 3150 3375 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4200 3750 4200 3375 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3450 4800 3975 4050 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3450 3975 3900 4725 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3450 4800 3975 4800 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3000 4575 3375 4575 3375 5025 3000 5025 3000 4575 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 4050 4575 4425 4575 4425 5025 4050 5025 4050 4575 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3450 3975 3975 3975 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3000 3750 3375 3750 3375 4200 3000 4200 3000 3750 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 4050 3750 4425 3750 4425 4200 4050 4200 4050 3750 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 5700 4500 5700 4875 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6750 4500 6750 4875 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6000 3450 6525 3450 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 5550 3225 5925 3225 5925 3675 5550 3675 5550 3225 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 6600 3225 6975 3225 6975 3675 6600 3675 6600 3225 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6000 4275 6525 4275 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 5550 4050 5925 4050 5925 4500 5550 4500 5550 4050 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 6600 4050 6975 4050 6975 4500 6600 4500 6600 4050 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3675 375 4200 375 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3225 150 3600 150 3600 600 3225 600 3225 150 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 4275 150 4650 150 4650 600 4275 600 4275 150 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2625 825 3000 825 3000 1275 2625 1275 2625 825 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3225 600 2850 825 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2925 1275 3150 1575 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3450 600 3450 1575 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4275 600 4125 825 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4200 1275 4350 1650 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4500 600 4500 1650 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3900 825 4275 825 4275 1275 3900 1275 3900 825 +4 0 -1 0 0 0 12 0.0000 4 180 2130 150 2400 HMM with Gaussian output\001 +4 0 -1 0 0 0 12 0.0000 4 180 1785 5100 2400 Auto Regressive HMM\001 +4 0 0 50 0 0 12 0.0000 4 180 1440 300 6075 Input-output HMM\001 +4 0 0 50 0 0 12 0.0000 4 180 1125 3000 6225 Coupled HMM\001 +4 0 -1 0 0 0 12 0.0000 4 135 1185 5475 6225 Factorial HMM\001 +4 0 0 50 0 0 12 0.0000 4 180 1530 2925 2625 of Gaussians output\001 +4 0 0 50 0 0 12 0.0000 4 135 1455 2925 2400 HMM with mixture\001 diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_zoo_small.fig b/sourcecodes/bnt-master/docs/Figures/hmm_zoo_small.fig new file mode 100644 index 00000000..1fae5d57 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/hmm_zoo_small.fig @@ -0,0 +1,104 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +75.00 +Single +-2 +1200 2 +5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 10209.375 1303.125 9000 525 8775 1200 8925 1950 + 0 0 2.00 120.00 240.00 +5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 9075.000 1200.000 7950 450 7725 1275 7950 1950 + 0 0 2.00 120.00 240.00 +1 1 0 2 0 0 50 0 20 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875 +1 1 0 2 0 0 50 0 20 0.000 1 0.0000 1590 1654 300 225 1590 1654 1890 1879 +1 1 0 2 0 0 50 0 20 0.000 1 0.0000 3375 1800 300 225 3375 1800 3675 2025 +1 1 0 2 0 0 50 0 20 0.000 1 0.0000 4427 1882 300 225 4427 1882 4727 2107 +1 1 0 2 0 0 50 0 20 0.000 1 0.0000 5925 1800 300 225 5925 1800 6225 2025 +1 1 0 2 0 0 50 0 20 0.000 1 0.0000 6975 1800 300 225 6975 1800 7275 2025 +1 1 0 2 0 0 50 0 20 0.000 1 0.0000 8173 2107 300 225 8173 2107 8473 2332 +1 1 0 2 0 0 50 0 20 0.000 1 0.0000 9225 2100 300 225 9225 2100 9525 2325 +1 1 0 2 0 0 50 0 20 0.000 1 0.0000 8250 375 300 225 8250 375 8550 600 +1 1 0 2 0 0 50 0 20 0.000 1 0.0000 9225 375 300 225 9225 375 9525 600 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 1575 1050 1575 1425 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 825 825 1350 825 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 525 1050 525 1425 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 375 600 750 600 750 1050 375 1050 375 600 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 1425 600 1800 600 1800 1050 1425 1050 1425 600 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 3450 600 3450 1575 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 3225 600 2850 825 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 2625 825 3000 825 3000 1275 2625 1275 2625 825 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 3225 150 3600 150 3600 600 3225 600 3225 150 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 3675 375 4200 375 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 3900 825 4275 825 4275 1275 3900 1275 3900 825 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 4200 1275 4350 1650 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 4500 600 4500 1650 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 4275 150 4650 150 4650 600 4275 600 4275 150 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 0 0 2.00 120.00 240.00 + 4275 600 3975 825 +2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 + 0 0 2.00 120.00 240.00 + 2925 1275 3225 1575 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 8175 675 8175 1050 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 9225 675 9225 1050 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 9225 1500 9225 1875 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 8475 1275 9000 1275 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 8175 1500 8175 1875 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 8025 1050 8400 1050 8400 1500 8025 1500 8025 1050 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 9075 1050 9450 1050 9450 1500 9075 1500 9075 1050 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 5925 1200 5925 1575 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 6225 975 6750 975 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 6225 1800 6675 1800 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 6975 1200 6975 1575 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 6825 750 7200 750 7200 1200 6825 1200 6825 750 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 5775 750 6150 750 6150 1200 5775 1200 5775 750 +4 0 0 50 0 0 24 0.0000 4 255 945 375 2400 HMM\001 +4 0 0 50 0 0 24 0.0000 4 255 2580 2625 2475 MixGauss HMM\001 +4 0 0 50 0 0 24 0.0000 4 255 1470 8025 2700 IO-HMM\001 +4 0 0 50 0 0 24 0.0000 4 255 1575 5625 2475 AR-HMM\001 diff --git a/sourcecodes/bnt-master/docs/Figures/ifa.eps b/sourcecodes/bnt-master/docs/Figures/ifa.eps new file mode 100644 index 00000000..f2ea58cb --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/ifa.eps @@ -0,0 +1,470 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (ifa.eps) +%%CreationDate: (Tue Nov 16 19:52:10 2004) +%%BoundingBox: 0 0 246 221 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Times-Roman findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 246 221 +userdict begin +DisplayImage +0 0 +246 221 +12.000000 +246 221 +1 +1 +1 +1 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffc00000007f +ffffffffffffffffff00000001fffffffffffffffffcffffffffdfffffff7fffffffffff +ffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7f +fffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdffff +fffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdffffffffffffff +fffcffffffffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffff +ffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff +7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffff +ffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff +7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdff +fffffffffffffffcffffffffdf87dfff7fffffffffffffffffff7e1ffffdffffffffffff +fffffcffffffffdf339fff7fffffffffffffffffff7ccffffdfffffffffffffffffcffff +ffffdf7b5fff7fffffffffffffffffff7deffffdfffffffffffffffffcffffffffdefddf +ff7fffffffffffffffffff7bf53ffdfffffffffffffffffcffffffffdefddfff7fffffff +ffffffffffff7bf6dffdfffffffffffffffffcffffffffdefddfff7fffffffffffffffff +ff7bf6dffdfffffffffffffffffcffffffffdf7bdfff7fffffffffffffffffff7deedffd +fffffffffffffffffcffffffffdf33dfff7fffffffffffffffffff7ccedffdffffffffff +fffffffcffffffffdf878fff7fffffffffffffffffff7e1c4ffdfffffffffffffffffcff +ffffffdfe7ffff7fffffffffffffffffff7f9ffffdfffffffffffffffffcffffffffdff9 +ffff7fffffffffffffffffff7fe7fffdfffffffffffffffffcffffffffdfffffff7fffff +ffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffff +ffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7fffff +fdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdffffffff +fffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffc +ffffffffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdf +ffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fff +ffffffffffffffff7ffffffdfffffffffffffffffcffffffffc00000007fffffffffffff +ffffff00000001fffffffffffffffffcffffffffffffbffffffffffffffffffffffffffe +fffffffffffffffffffffcffffffffffffbffffffffffffffffffffffffffeffffffffff +fffffffffffcffffffffffffbffffffffffffffffffffffffffeffffffffffffffffffff +fcffffffffffffbffffffffffffffffffffffffffefffffffffffffffffffffcffffffff +fffeaffffffffffffffffffffffffffabffffffffffffffffffffcfffffffffffeafffff +fffffffffffffffffffffabffffffffffffffffffffcfffffffffffe9fffffffffffffff +fffffffffffa7ffffffffffffffffffffcffffffffffff1fffffffffffffffffffffffff +fc7ffffffffffffffffffffcffffffffffff1ffffffffffffffffffffffffffc7fffffff +fffffffffffffcffffffffffff1ffffffffffffffffffffffffffc7fffffffffffffffff +fffcffffffffffff3ffffffffffffffffffffffffffcfffffffffffffffffffffcffffff +ffffffbffffffffffffffffffffffffffefffffffffffffffffffffcffffffffffffbfff +fffffffffffffffffffffffefffffffffffffffffffffcffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffcffffffffffff800fffffffffffffffffffff +f800fffffffffffffffffffffcfffffffffffc7ff1ffffffffffffffffffffc7ff1fffff +fffffffffffffffcffffffffffe3fffe3ffffffffffffffffffe3fffe3ffffffffffffff +fffffcffffffffffdfffffdffffffffffffffffffdfffffdfffffffffffffffffffcffff +ffffff3fffffe7fffffffffffffffff3fffffe7ffffffffffffffffffcfffffffffeffff +fffbffffffffffffffffefffffffbffffffffffffffffffcfffffffffdfffffffdffffff +ffffffffffdfffffffdffffffffffffffffffcfffffffffbfffffffeffffffffffffffff +bfffffffeffffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7ffffffff7 +fffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7ffffffff7ffffffffff +fffffffcffffffffefffffffffbffffffffffffffefffffffffbfffffffffffffffffcff +ffffffefff8c6fffbffffffffffffffeff18fffffbfffffffffffffffffcffffffffdfff +decfffdffffffffffffffdffbdfffffdfffffffffffffffffcffffffffdfffedafffdfff +fffffffffffdffdbfffffdfffffffffffffffffcffffffffdfffe3efffdfffffffffffff +fdffc74ffffdfffffffffffffffffcffffffffdffff3efffdffffffffffffffdffe7b7ff +fdfffffffffffffffffcffffffffdfffe9efffdffffffffffffffdffd3b7fffdffffffff +fffffffffcffffffffdfffedefffdffffffffffffffdffdbb7fffdfffffffffffffffffc +ffffffffdfffdeefffdffffffffffffffdffbdb7fffdfffffffffffffffffcffffffffef +ff8c47ffbffffffffffffffeff1813fffbfffffffffffffffffcffffffffefffffffffbf +fffffffffffffefffffffffbfffffffffffffffffcfffffffff7ffffffff7fffffffffff +ffff7ffffffff7fffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7fffff +fff7fffffffffffffffffcfffffffffbfffffffeffffff3cf3ffffffbfffffffefffffff +fffffffffffcfffffffffdfffffffdffffff3cf3ffffffdfffffffdfffffffffffffffff +fcfffffffffefffffff9ffffffffffffffffefffffffbffffffffffffffffffcffffffff +ff3fffffe67ffffffffffffffff3fffffe7ffffffffffffffffffcffffffffffdfffffdf +8ffffffffffffffffdfffffdfffffffffffffffffffcffffffffffe3fffe3ff3ffffffff +fffffffe3fffe3fffffffffffffffffffcfffffffffffc7ff1fffc7fffffffffffffffc7 +ff1ffffffffffffffffffffcfffffffffff7800f7fff9ffffffffffffffff000f7ffffff +fffffffffffffcfffffffffff7ffff7fffe3ffffffffffffff87fffbffffffffffffffff +fffcffffffffffefffffbffffcfffffffffffffe5ffffdfffffffffffffffffffcffffff +ffffefffffbfffff1ffffffffffff13ffffefffffffffffffffffffcffffffffffdfffff +dfffffe7ffffffffff8effffff7ffffffffffffffffffcffffffffffdfffffdffffff8ff +fffffffc7dffffffbffffffffffffffffffcffffffffffdfffffefffffff3ffffffff3f3 +ffffffdffffffffffffffffffcffffffffffbfffffefffffffc7ffffff8fefffffffefff +fffffffffffffffcffffffffffbffffff7fffffff9fffffc7f9ffffffff7ffffffffffff +fffffcffffffffffbffffff7fffffffe3fffe3ff7ffffffffbfffffffffffffffffcffff +ffffff7ffffffbffffffffcfff9ffcfffffffffdfffffffffffffffffcffffffffff7fff +fffbfffffffff1fc7ffbfffffffffefffffffffffffffffcfffffffffefffffffdffffff +fffe63fff7ffffffffff7ffffffffffffffffcfffffffffefffffffdffffffffff0fffcf +ffffffffffbffffffffffffffffcfffffffffefffffffefffffffffcf3ffbfffffffffff +dffffffffffffffffcfffffffffdfffffffeffffffffe3fc7e7fffffffffffefffffffff +fffffffcfffffffffdffffffff7fffffff1fff9dfffffffffffff7fffffffffffffffcff +fffffffdffffffff7ffffff8ffffe3fffffffffffffbfffffffffffffffcfffffffffbff +ffffffbfffffe7ffffecfffffffffffffdfffffffffffffffcfffffffffbffffffffbfff +ff1fffffdf1ffffffffffffefffffffffffffffcfffffffff7ffffffffdffff8ffffff3f +e7ffffffffffff7ffffffffffffffcfffffffff7ffffffffdfffc7fffffefff8ffffffff +ffffbffffffffffffffcfffffffff7ffffffffefff3ffffff9ffff3fffffffffffdfffff +fffffffffcffffffffefffffffffeff8fffffff7ffffc7ffffffffffeffffffffffffffc +ffffffffeffffffffff7c7ffffffcffffff9fffffffffff7fffffffffffffcffffffffef +fffffffff63fffffffbffffffe3ffffffffffbfffffffffffffcffffffffdffffffffff9 +ffffffff7fffffffcffffffffffdfffffffffffffcffffffffdfffffffffc3fffffffcff +fffffff1fffffffffefffffffffffffcffffffffbffffffffe3dffffffdbfffffffffe7f +ffffffff7ffffffffffffcffffffffbffffffff1fdffffffa7ffffffffff8fffffffffbf +fffffffffffcfffffffebfffffffcffebfffff5ffffffffffff3ffffffffdfffffffffff +fcfffffffe7ffffffe3ffebffffe27fffffffffffc7fffffffeffffffffffffcfffffffe +5ffffff1fffd3ffffe9fffffffffffff9ffffffff6fffffffffffcfffffffe3fffff8fff +fe5ffffc7fffffffffffffe3fffffffb7ffffffffffcfffffffcbffffe7fffff1ffff9ff +fffffffffffffcfffffffd7ffffffffffcfffffffc7fff71ffffff1fffffffffffffffff +ffff1ffffff6bffffffffffcfffffffcfffc8fffffff9fffffffffffffffffffffe7ffff +f93ffffffffffcfffffffcfff07fffffffcffffffffffffffffffffff8fffffe1fffffff +fffcfffffffdffc3ffffffffefffffffffffffffffffffff3fffff9ffffffffffcffffff +ffff803fffffffffffffffffffffffffffffffc7ffffeffffffffffcffffff001fffffff +ffffff800ffffffffffffffffffff9dffff800fffffffcfffff8ffe3fffffffffffc7ff1 +fffffffffffffffffffe27ffc7ff1ffffffcffffc6eeec7fffffffffe377763fffffffff +ffffffffffcbfe377763fffffcffffbfffffbfffffffffdfffffdfffffffffffffffffff +00fdfffffdfffffcfffe3bbfbb8fffffffff1ddfddc7fffffffffffffffffff871ddfddc +7ffffcfffdfffffff7fffffffefffffffbffffffffffffffffffffefffffffbffffcfffa +eeeeeeebfffffffd77777775ffffffffffffffffffffd77777775ffffcfff7fffffffdff +fffffbfffffffeffffffffffffffffffffbfffffffeffffcffebfbfbfbfafffffff5fdfd +fdfd7fffffffffffffffffff5fdfdfdfd7fffcffeffffffffefffffff7ffffffff7fffff +ffffffffffffff7ffffffff7fffcffceeeeeeeee7fffffe7777777773fffffffffffffff +fffe7777777773fffcffdfe38dffff7fffffeff1c47fffbffffffffffffffffffefe38ff +fffbfffcffbfb799bfbfbfffffdfdbcb9fdfdffffffffffffffffffdfd7dfdfdfdfffcff +bffbb5ffffbfffffdffddfbfffdfffff3cf3fffffffffdffbbfffffdfffcffaeecaceeee +bfffffd7765737775fffff3cf3fffffffffd7753417775fffcffbffc7dffff8000001ffe +3f7fffdfffffffffffff800001ffc7b6fffdfffcffbbfaf9fbfbbfffffddfd7cfdfddfff +fffffffffffffffddfcf96dfddfffcffbffefdffffbfffffdfff7dffffdfffffffffffff +fffffdffefb6fffdfffcffaeeeeceeeebfffffd7777337775ffffffffffffffffffd7767 +367775fffcffdffc78ffff7fffffeffe383fffbffffffffffffffffffeffc7127ffbfffc +ffdfbbbfbbbf7fffffefdddfdddfbffffffffffffffffffefdddfdddfbfffcffefffffff +fefffffff7ffffffff7fffffffffffffffffff7ffffffff7fffcffeeeeeeeeeefffffff7 +777777777fffffffffffffffffff7777777777fffcfff7fffffffdfffffffbfffffffeff +ffffffffffffffffffbfffffffeffffcfffbfbfbfbfbfffffffdfdfdfdfdffffffffffff +ffffffffdfdfdfdfdffffcfffdfffffff7fffffffefffffffbffffffffffffffffffffef +ffffffbffffcfffe6eeeeecfffffffff37777763ffffffffffffffffffffe37777767fff +fcffffbfffffbfffffffffdfffffddffffffffffffffffffffddfffffdfffffcffffc7bf +bc7fffffffffe3dfde3e7fffffffffffffffffff3e3dfde3fffffcfffff8ffe3ffffffff +fffc7ff1ffbffffffffffffffffffeffc7ff1ffffffcffffff001effffffffffff800fff +cffffffffffffffffff9fff800fffffffcffffffffff7ffffffffffffffffff7ffffffff +fffffffff7ffff7ffffffffcffffffffff9ffffffffffffffffff9ffffffffffffffffcf +fffcfffffffffcffffffffffeffffffffffffffffffe7fffffffffffffff3ffffbffffff +fffcfffffffffff7ffffffffffffffffff9ffffffffffffffcfffff7fffffffffcffffff +fffff9ffffffffffffffffffe7fffffffffffff3ffffcffffffffffcfffffffffffeffff +fffffffffffffff9ffffffffffffcfffffbffffffffffcffffffffffff3fffffffffffff +fffffe3ffffffffffe3ffffe7ffffffffffcffffffffffffdfffffffffffffffffffc7ff +fffffff1fffffdfffffffffffcffffffffffffe7fffffffffffffffffff87fffffff0fff +fff3fffffffffffcfffffffffffffbffffffffffffffffffff83ffffe0ffffffefffffff +fffffcfffffffffffffcfffffffffffffffffffffc00001fffffff9ffffffffffffcffff +ffffffffff3ffffffffffffffffffffffffffffffffe7ffffffffffffcffffffffffffff +cffffffffffffffffffffffffffffffff9fffffffffffffcfffffffffffffff7ffffffff +fffffffffffffffffffffff7fffffffffffffcfffffffffffffff9ffffffffffffffffff +ffffffffffffcffffffffffffffcfffffffffffffffe7fffffffffffffffffffffffffff +ff3ffffffffffffffcffffffffffffffff8ffffffffffffffffffffffffffff8ffffffff +fffffffcfffffffffffffffff3ffffffffffffffffffffffffffe7fffffffffffffffcff +fffffffffffffffcffffffffffffffffffffffffff9ffffffffffffffffcffffffffffff +ffffff1ffffffffffffffffffffffffc7ffffffffffffffffcffffffffffffffffffe7ff +fffffffffffffffffffff3fffffffffffffffffcfffffffffffffffffff8ffffffffffff +ffffffffff8ffffffffffffffffffcffffffffffffffffffff1ffffffffffffffffffffc +7ffffffffffffffffffcffffffffffffffffffffe3ffffffffffffffffffe3ffffffffff +fffffffffcfffffffffffffffffffffc3ffffffffffffffffe1ffffffffffffffffffffc +ffffffffffffffffffffffc3ffffffffffffffe1fffffffffffffffffffffcffffffffff +fffffffffffffc3ffffffffffffe1ffffffffffffffffffffffcffffffffffffffffffff +ffffc0ffffffffff81fffffffffffffffffffffffcffffffffffffffffffffffffff00ff +ffff807ffffffffffffffffffffffffcffffffffffffffffffffffffffff0000007fffff +fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff +fffff1ff9ffffffe7ffff80ffffffffbfffcfffdfffffffffffffffcfffffffffffbffdf +ffffff7ffffdeffffffffbfffefffffffffffffffffffcfffffffffffbffdfffffff7ffe +fdffffbffff5fffefffffffffffffffffffcfffffffffffb4f1cc3cd3c734c3dde790cd3 +f5d3ce9989c7fffffffffffffcfffffffffffbb6db6db6db6db6fc1db6bb67eeedb6db6d +b7fffffffffffffcfffffffffffbb6d86d86db61b6fdde37bb6fe0edc6d33d9fffffffff +fffffcfffffffffffbb6dbedbedb6fb6fdfdb7bb6feeedb6d7cde7fffffffffffffcffff +fffffffbb6d9ad9adb66b6fdfdb6bb6fdf6db6e76db7fffffffffffffcfffffffffff113 +2c63c44cb113387e59ccc78e04c86f188ffffffffffffffcffffffffffffffffefffffff +ffffffffffffffffffeffffffffffffffffffcffffffffffffffffefffffffffffffffff +ffffffffdffffffffffffffffffcffffffffffffffffc7ffffffffffffffffffffffff9f +fffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffc +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/sourcecodes/bnt-master/docs/Figures/ifa.fig b/sourcecodes/bnt-master/docs/Figures/ifa.fig new file mode 100644 index 00000000..864d5112 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/ifa.fig @@ -0,0 +1,59 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 1 -1 7 0 0 -1 0.000 0 1 0 0 2362.500 1537.500 1725 2325 2400 2550 3000 2325 +5 1 0 1 -1 7 0 0 -1 0.000 0 1 0 0 1950.000 818.750 675 2400 1950 2850 3225 2400 +6 225 900 3600 2475 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 900 1125 300 225 900 1125 1200 1350 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2400 1125 300 225 2400 1125 2700 1350 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 2175 300 225 525 2175 825 2400 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3240 2179 300 225 3240 2179 3540 2404 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1500 2175 300 225 1500 2175 1800 2400 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 750 1350 525 1950 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1125 1275 3000 2025 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2325 1350 675 1950 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2550 1350 3150 1950 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1050 1350 1350 1950 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2325 1350 1575 1875 +4 0 -1 0 0 0 12 0.0000 4 135 225 825 1200 X1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 2250 1200 Xn\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 375 2250 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 270 3075 2250 Ym\001 +4 0 -1 0 0 0 24 0.0000 4 30 270 1500 1275 ...\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1350 2250 Y2\001 +4 0 -1 0 0 0 24 0.0000 4 30 270 2100 2175 ...\001 +-6 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 600 225 1050 225 1050 675 600 675 600 225 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2250 225 2700 225 2700 675 2250 675 2250 225 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 675 825 900 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2475 675 2475 900 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 825 2175 1200 2175 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 2625 2175 2925 2175 +4 0 -1 0 0 0 12 0.0000 4 165 225 675 525 Q1\001 +4 0 -1 0 0 0 12 0.0000 4 165 225 2325 525 Qn\001 diff --git a/sourcecodes/bnt-master/docs/Figures/ifa.gif b/sourcecodes/bnt-master/docs/Figures/ifa.gif new file mode 100644 index 00000000..d77cd76a Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/ifa.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/kf.fig b/sourcecodes/bnt-master/docs/Figures/kf.fig new file mode 100644 index 00000000..a2e24c82 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/kf.fig @@ -0,0 +1,27 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +6 225 225 1950 2250 +6 225 225 1950 675 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 525 450 300 225 525 450 825 675 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1650 450 300 225 1650 450 1950 675 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 450 1350 450 +-6 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1575 300 225 525 1575 825 1800 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1650 1575 300 225 1650 1575 1950 1800 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 525 750 525 1275 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1650 750 1650 1275 +4 0 -1 0 0 0 12 0.0000 4 135 1455 225 2250 Kalman filter model\001 +-6 +4 0 -1 0 0 0 12 0.0000 4 135 210 375 525 X1\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 1500 525 X2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 375 1650 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1500 1650 Y2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/kf.gif b/sourcecodes/bnt-master/docs/Figures/kf.gif new file mode 100644 index 00000000..9d0ae34e Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/kf.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/kf_input.fig b/sourcecodes/bnt-master/docs/Figures/kf_input.fig new file mode 100644 index 00000000..e51d73fa --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/kf_input.fig @@ -0,0 +1,40 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 1 0 7 100 0 -1 0.000 0 1 1 0 3131.250 1462.500 1575 450 1275 1425 1575 2475 + 0 0 1.00 60.00 120.00 +5 1 0 1 0 7 100 0 -1 0.000 0 1 1 0 4272.606 1559.043 2775 525 2475 1275 2700 2475 + 0 0 1.00 60.00 120.00 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 2550 300 225 1875 2550 2175 2775 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3000 2550 300 225 3000 2550 3300 2775 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1875 1425 300 225 1875 1425 2175 1650 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3000 1425 300 225 3000 1425 3300 1650 +1 1 0 1 0 0 100 0 2 0.000 1 0.0000 1875 375 300 225 1875 375 2175 600 +1 1 0 1 0 0 100 0 2 0.000 1 0.0000 3000 375 300 225 3000 375 3300 600 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1875 1725 1875 2250 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3000 1725 3000 2250 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2175 1425 2700 1425 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1875 600 1875 1200 +2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3000 600 3000 1200 +4 0 -1 0 0 0 12 0.0000 4 135 225 1725 1500 X1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 2850 1500 X2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1725 2625 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 2850 2625 Y2\001 +4 0 0 100 0 0 12 0.0000 4 135 225 1725 450 U1\001 +4 0 0 100 0 0 12 0.0000 4 135 225 2850 450 U2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/kf_input.gif b/sourcecodes/bnt-master/docs/Figures/kf_input.gif new file mode 100644 index 00000000..595d5ae0 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/kf_input.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/kf_notime.fig b/sourcecodes/bnt-master/docs/Figures/kf_notime.fig new file mode 100644 index 00000000..11b75c1f --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/kf_notime.fig @@ -0,0 +1,26 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 1 0 2 0 0 100 0 2 0.000 1 0.0000 525 1575 300 225 525 1575 825 1800 +1 1 0 2 0 0 100 0 2 0.000 1 0.0000 1650 1575 300 225 1650 1575 1950 1800 +1 1 0 2 0 0 100 0 -1 0.000 1 0.0000 525 450 300 225 525 450 825 675 +1 1 0 2 0 0 100 0 -1 0.000 1 0.0000 1650 450 300 225 1650 450 1950 675 +2 1 0 2 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 525 750 525 1275 +2 1 0 2 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 1650 750 1650 1275 +2 1 0 2 0 0 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 2.00 120.00 240.00 + 825 450 1350 450 +4 0 0 100 0 0 20 0.0000 4 195 210 375 525 X\001 +4 0 0 100 0 0 20 0.0000 4 195 210 1500 525 X\001 +4 0 0 100 0 0 20 0.0000 4 195 210 1500 1650 Y\001 +4 0 0 100 0 0 20 0.0000 4 195 210 375 1650 Y\001 diff --git a/sourcecodes/bnt-master/docs/Figures/kf_obs_track.fig b/sourcecodes/bnt-master/docs/Figures/kf_obs_track.fig new file mode 100644 index 00000000..b657f62e --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/kf_obs_track.fig @@ -0,0 +1,43 @@ +#FIG 3.2 +Portrait +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 1500 335 335 1200 1200 1500 1800 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 2700 335 335 1200 2400 1500 3000 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 3900 335 335 1200 3600 1500 4200 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 5100 335 335 1200 4800 1500 5400 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 5100 335 335 2700 4800 3000 5400 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 3900 335 335 2700 3600 3000 4200 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 2700 335 335 2700 2400 3000 3000 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 1500 335 335 2700 1200 3000 1800 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 1500 2550 1500 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 2700 2550 1650 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 3900 2475 3900 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 5100 2625 4125 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 5100 2475 5100 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 2700 2550 2700 +4 0 0 100 0 0 20 0.0000 4 195 405 1125 2850 dx1\001 +4 0 0 100 0 0 20 0.0000 4 195 270 1125 4050 x2\001 +4 0 0 100 0 0 20 0.0000 4 195 405 1200 5175 dx2\001 +4 0 0 100 0 0 20 0.0000 4 195 270 1200 1650 x1\001 +4 0 0 100 0 0 20 0.0000 4 195 270 2700 1650 x1\001 +4 0 0 100 0 0 20 0.0000 4 195 405 2700 2850 dx1\001 +4 0 0 100 0 0 20 0.0000 4 195 270 2700 4050 x2\001 +4 0 0 100 0 0 20 0.0000 4 195 405 2700 5250 dx2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/kf_scalar_track.fig b/sourcecodes/bnt-master/docs/Figures/kf_scalar_track.fig new file mode 100644 index 00000000..27ac7892 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/kf_scalar_track.fig @@ -0,0 +1,59 @@ +#FIG 3.2 +Portrait +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 2726.786 5448.214 1125 4125 675 5775 1050 6675 + 0 0 4.00 120.00 240.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 6809.923 4980.705 1050 1725 225 5625 975 8100 + 0 0 4.00 120.00 240.00 +5 1 0 2 0 7 100 0 -1 0.000 0 0 1 0 1778.571 5400.000 3225 3900 3750 6075 3225 6900 + 0 0 4.00 120.00 240.00 +5 1 0 2 0 7 100 0 -1 0.000 0 0 1 0 -75.000 4837.500 3225 1500 4575 5475 3225 8175 + 0 0 4.00 120.00 240.00 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 1500 335 335 1200 1200 1500 1800 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 2700 335 335 1200 2400 1500 3000 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 3900 335 335 1200 3600 1500 4200 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 5100 335 335 1200 4800 1500 5400 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 5100 335 335 2700 4800 3000 5400 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 3900 335 335 2700 3600 3000 4200 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 2700 335 335 2700 2400 3000 3000 +1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 1500 335 335 2700 1200 3000 1800 +1 4 0 2 0 0 100 0 2 0.000 1 0.0000 1350 6900 335 335 1200 6600 1500 7200 +1 4 0 2 0 0 100 0 2 0.000 1 0.0000 2850 6900 335 335 2700 6600 3000 7200 +1 4 0 2 0 0 100 0 2 0.000 1 0.0000 2850 8100 335 335 2700 7800 3000 8400 +1 4 0 2 0 0 100 0 2 0.000 1 0.0000 1350 8100 335 335 1200 7800 1500 8400 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 1500 2550 1500 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 2700 2550 1650 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 3900 2475 3900 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 5100 2625 4125 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 5100 2475 5100 +2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2 + 0 0 4.00 120.00 240.00 + 1725 2700 2550 2700 +4 0 0 100 0 0 20 0.0000 4 195 405 1125 2850 dx1\001 +4 0 0 100 0 0 20 0.0000 4 195 270 1125 4050 x2\001 +4 0 0 100 0 0 20 0.0000 4 195 405 1200 5175 dx2\001 +4 0 0 100 0 0 20 0.0000 4 195 270 1200 1650 x1\001 +4 0 0 100 0 0 20 0.0000 4 195 270 2700 1650 x1\001 +4 0 0 100 0 0 20 0.0000 4 195 405 2700 2850 dx1\001 +4 0 0 100 0 0 20 0.0000 4 195 270 2700 4050 x2\001 +4 0 0 100 0 0 20 0.0000 4 195 405 2700 5250 dx2\001 +4 0 0 100 0 0 20 0.0000 4 255 270 1200 6975 y2\001 +4 0 0 100 0 0 20 0.0000 4 255 270 1200 8175 y1\001 +4 0 0 100 0 0 20 0.0000 4 255 270 2700 7050 y2\001 +4 0 0 100 0 0 20 0.0000 4 255 270 2700 8175 y1\001 diff --git a/sourcecodes/bnt-master/docs/Figures/kfhead.jpg b/sourcecodes/bnt-master/docs/Figures/kfhead.jpg new file mode 100644 index 00000000..2c1fc6f0 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/kfhead.jpg differ diff --git a/sourcecodes/bnt-master/docs/Figures/mathbymatlab.gif b/sourcecodes/bnt-master/docs/Figures/mathbymatlab.gif new file mode 100644 index 00000000..0de8d7a0 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/mathbymatlab.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/mcmc_accept.jpg b/sourcecodes/bnt-master/docs/Figures/mcmc_accept.jpg new file mode 100644 index 00000000..f383627e Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/mcmc_accept.jpg differ diff --git a/sourcecodes/bnt-master/docs/Figures/mcmc_post.jpg b/sourcecodes/bnt-master/docs/Figures/mcmc_post.jpg new file mode 100644 index 00000000..bbe172b5 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/mcmc_post.jpg differ diff --git a/sourcecodes/bnt-master/docs/Figures/mfa.eps b/sourcecodes/bnt-master/docs/Figures/mfa.eps new file mode 100644 index 00000000..9b40d66c --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/mfa.eps @@ -0,0 +1,347 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (mfa.eps) +%%CreationDate: (Tue Nov 16 19:52:06 2004) +%%BoundingBox: 0 0 126 151 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Times-Roman findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 126 151 +userdict begin +DisplayImage +0 0 +126 151 +12.000000 +126 151 +1 +1 +1 +1 +fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff +fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff +fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff +fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc +ff8000001fffffffffffff800ffffffcffbfffffdffffffffffffc7ff1fffffcffbfffff +dfffffffffffe3fffe3ffffcffbfffffdfffffffffffdfffffdffffcffbfffffdfffffff +ffff3fffffe7fffcffbfffffdffffffffffefffffffbfffcffbfffffdffffffffffdffff +fffdfffcffbfffffdffffffffffbfffffffefffcffbfffffdffffffffff7ffffffff7ffc +ffbfffffdffffffffff7ffffffff7ffcffbfffffdfffffffffefffffffffbffcffbf0fff +dfffffffffeff18fffffbffcffbe67ffdfffffffffdffbdfffffdffcffbef7ffdfffffff +ffdffdbfffffdffcffbdfbffdfffffffffdffc7fffffdffcffbdfbffdfffffffffdffe7f +ffffdffcffbdfbffdfffffffffdffd3fffffdffcffbef7ffdfffffffffdffdbfffffdffc +ffbe67ffdfffffffffdffbdfffffdffcffbf0fffdfffffffffeff18fffffbffcffbfcfff +dfffffffffefffffffffbffcffbff3ffdffffffffff7ffffffff7ffcffbfffffdfffffff +fff7ffffffff7ffcffbfffffdffffffffffbfffffffefffcffbfffffdffffffffffdffff +fffdfffcffbfffffdffffffffffefffffffbfffcffbfffffdfffffffffff3fffffe7fffc +ffbfffffdfffffffffffdfffffdffffcffbfffffdfffffffffffe3fffe3ffffcffbfffff +dffffffffffffc7ff1fffffcff8000001fffffffffffff800ffffffcfffffffdffffffff +ffffff7ffffffffcfffffffdffffffffffffff7ffffffffcfffffffefffffffffffffeff +fffffffcffffffff7ffffffffffffdfffffffffcffffffffbffffffffffffbfffffffffc +ffffffffbffffffffffffbfffffffffcffffffffdffffffffffff7fffffffffcffffffff +efffffffffffeffffffffffcffffffffefffffffffffeffffffffffcfffffffff7ffffff +ffffdffffffffffcfffffffffbffffffffffbffffffffffcfffffffffdffffffffff7fff +fffffffcfffffffffdffffffffff7ffffffffffcfffffffffefffffffffefffffffffffc +ffffffffff7ffffffffdfffffffffffcffffffffff7ffffffffdfffffffffffcffffffff +ffbffffffffbfffffffffffcffffffffffdffffffff7fffffffffffcffffffffffefffff +ffeffffffffffffcffffffffffefffffffeffffffffffffcfffffffffff7ffffffdfffff +fffffffcfffffffffffbffffffbffffffffffffcfffffffffffbffffffbffffffffffffc +fffffffffffdffffff7ffffffffffffcfffffffffffefffffefffffffffffffcffffffff +ffff5ffff5fffffffffffffcffffffffffff5ffff5fffffffffffffcfffffffffffeafff +eafffffffffffffcffffffffffff4fffe5fffffffffffffcffffffffffff8fffd3ffffff +fffffffcffffffffffffc7ffc7fffffffffffffcffffffffffffe7ffcffffffffffffffc +fffffffffffff3ff9ffffffffffffffcfffffffffffffbffbffffffffffffffcffffffff +fffffc007ffffffffffffffcffffffffffffe3ff8ffffffffffffffcffffffffffff1bbb +b1fffffffffffffcfffffffffffefffffefffffffffffffcfffffffffff8eefeee3fffff +fffffffcfffffffffff7ffffffdffffffffffffcffffffffffebbbbbbbaffffffffffffc +ffffffffffdffffffff7fffffffffffcffffffffffafefefefebfffffffffffcffffffff +ffbffffffffbfffffffffffcffffffffff3bbbbbbbb9fffffffffffcffffffffff7f8e3f +fffdfffffffffffcfffffffffefede7efefefffffffffffcfffffffffeffeefffffeffff +fffffffcfffffffffebbb2bbbbbafffffffffffcfffffffffefff1fffffefffffffffffc +fffffffffeefebefefeefffffffffffcfffffffffefffbfffffefffffffffffcffffffff +febbbbbbbbbafffffffffffcffffffffff7ff1fffffdfffffffffffcffffffffff7eeefe +eefdfffffffffffcffffffffffbffffffffbfffffffffffcffffffffffbbbbbbbbbbffff +fffffffcffffffffffdffffffff7fffffffffffcffffffffffefefefefeffffffffffffc +fffffffffff7ffffffdffffffffffffcfffffffffff9bbbbbb3ffffffffffffcffffffff +fffefffffefffffffffffffcffffffffffff1efef1fffffffffffffcffffffffffffe3ff +8ffffffffffffffcfffffffffffffc007ffffffffffffffcffffffffffffffffffffffff +fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc +fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff +fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff +fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff +fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc +fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff +fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff +fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff +fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc +fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff +fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffff3f97ffffff +ffee03effffffffcffffff9f3fffffffffdf7beffffffffcffffff9f3ffbffffffdf7fd7 +fffffffcffffffaea6402533f98f77d7c7fffffcffffffaeb75bb66df6df07bbb7fffffc +ffffffb5b7bbb6e1f6df77839ffffffcffffffb5b7bbb6eff6df7fbbe7fffffcffffffbb +b75bb6e6f6df7f7db7fffffcffffff1b024cc871f9de1e388ffffffcffffffffffffffff +fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff +fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc +fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff +fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff +fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff +fffffffc +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/sourcecodes/bnt-master/docs/Figures/mfa.fig b/sourcecodes/bnt-master/docs/Figures/mfa.fig new file mode 100644 index 00000000..90662e74 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/mfa.fig @@ -0,0 +1,24 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 225 225 1800 1650 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1500 450 300 225 1500 450 1800 675 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 975 1425 300 225 975 1425 1275 1650 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 225 225 600 225 600 675 225 675 225 225 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 525 675 900 1200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1425 675 1050 1200 +-6 +4 0 -1 0 0 0 12 0.0000 4 135 135 825 1500 Y\001 +4 0 -1 0 0 0 12 0.0000 4 165 135 300 525 Q\001 +4 0 -1 0 0 0 12 0.0000 4 135 135 1350 525 X\001 diff --git a/sourcecodes/bnt-master/docs/Figures/mfa.gif b/sourcecodes/bnt-master/docs/Figures/mfa.gif new file mode 100644 index 00000000..3325b3a4 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/mfa.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/mixexp.fig b/sourcecodes/bnt-master/docs/Figures/mixexp.fig new file mode 100644 index 00000000..6999ae55 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/mixexp.fig @@ -0,0 +1,23 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +6 525 300 1575 2925 +5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2055.000 1650.000 975 675 600 1650 975 2625 + 0 0 1.00 60.00 120.00 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1275 525 300 225 1275 525 1575 750 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1275 2700 300 225 1275 2700 1575 2925 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1050 1350 1425 1350 1425 1800 1050 1800 1050 1350 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1275 825 1275 1350 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1275 1800 1275 2475 +-6 +4 0 -1 0 0 0 12 0.0000 4 180 1425 450 3300 Mixture of Experts\001 +4 0 -1 0 0 0 12 0.0000 4 135 120 1200 600 X\001 +4 0 -1 0 0 0 12 0.0000 4 165 135 1125 1650 Q\001 +4 0 -1 0 0 0 12 0.0000 4 135 135 1200 2775 Y\001 diff --git a/sourcecodes/bnt-master/docs/Figures/mixexp.gif b/sourcecodes/bnt-master/docs/Figures/mixexp.gif new file mode 100644 index 00000000..1b76e58c Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/mixexp.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/mixexp_after.gif b/sourcecodes/bnt-master/docs/Figures/mixexp_after.gif new file mode 100644 index 00000000..06525bf4 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/mixexp_after.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/mixexp_before.gif b/sourcecodes/bnt-master/docs/Figures/mixexp_before.gif new file mode 100644 index 00000000..6eef2add Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/mixexp_before.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/mixexp_data.gif b/sourcecodes/bnt-master/docs/Figures/mixexp_data.gif new file mode 100644 index 00000000..7a770216 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/mixexp_data.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/model_select.png b/sourcecodes/bnt-master/docs/Figures/model_select.png new file mode 100644 index 00000000..25ee5da4 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/model_select.png differ diff --git a/sourcecodes/bnt-master/docs/Figures/qmr.fig b/sourcecodes/bnt-master/docs/Figures/qmr.fig new file mode 100644 index 00000000..0d852876 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/qmr.fig @@ -0,0 +1,50 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 750 2700 309 309 750 2700 1050 2775 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 3225 2700 309 309 3225 2700 3525 2775 +1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4500 2700 309 309 4500 2700 4800 2775 +1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 1950 2700 309 309 1950 2700 2025 3000 +1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 5775 2700 309 309 5775 2700 5850 3000 +1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 4125 1200 309 309 4125 1200 4200 1500 +1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 3000 1200 309 309 3000 1200 3075 1500 +1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 1875 1200 309 309 1875 1200 1950 1500 +2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 1 2 + 0 0 3.00 180.00 360.00 + 0 0 3.00 180.00 360.00 + 450 3750 6150 3750 +2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 1 2 + 0 0 3.00 180.00 360.00 + 0 0 3.00 180.00 360.00 + 1350 525 4650 525 +2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 3.00 180.00 360.00 + 1725 1500 900 2475 +2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 3.00 180.00 360.00 + 2850 1500 1050 2475 +2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 3.00 180.00 360.00 + 2925 1500 2100 2400 +2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 3.00 180.00 360.00 + 3975 1500 2100 2400 +2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 3.00 180.00 360.00 + 3075 1575 3150 2325 +2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 3.00 180.00 360.00 + 3150 1575 4200 2400 +2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2 + 0 0 3.00 180.00 360.00 + 4200 1500 5475 2475 +4 0 0 100 0 0 24 0.0000 4 255 720 1950 4200 4000\001 +4 0 0 100 0 0 24 0.0000 4 330 1575 2850 4200 Symptoms\001 +4 0 0 100 0 0 24 0.0000 4 255 540 2100 375 600\001 +4 0 0 100 0 0 24 0.0000 4 255 1290 2775 375 Diseases\001 diff --git a/sourcecodes/bnt-master/docs/Figures/qmr.gif b/sourcecodes/bnt-master/docs/Figures/qmr.gif new file mode 100644 index 00000000..f32294fe Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/qmr.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/qmr.jpg b/sourcecodes/bnt-master/docs/Figures/qmr.jpg new file mode 100644 index 00000000..40a6c57c Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/qmr.jpg differ diff --git a/sourcecodes/bnt-master/docs/Figures/qmr.rnd.jpg b/sourcecodes/bnt-master/docs/Figures/qmr.rnd.jpg new file mode 100644 index 00000000..57026cd7 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/qmr.rnd.jpg differ diff --git a/sourcecodes/bnt-master/docs/Figures/rainer_dbn.jpg b/sourcecodes/bnt-master/docs/Figures/rainer_dbn.jpg new file mode 100644 index 00000000..a546ff4f Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/rainer_dbn.jpg differ diff --git a/sourcecodes/bnt-master/docs/Figures/rainer_tied.fig b/sourcecodes/bnt-master/docs/Figures/rainer_tied.fig new file mode 100644 index 00000000..49cf565c --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/rainer_tied.fig @@ -0,0 +1,88 @@ +#FIG 3.2 +Portrait +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 3196.875 3000.000 1275 1875 975 3150 1275 4125 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5596.875 3000.000 3675 1875 3375 3150 3675 4125 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 0 1 0 3849.948 3549.006 2475 3375 3075 2400 4500 2325 + 1 1 1.00 60.00 120.00 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 1500 1875 237 237 1500 1875 1575 2100 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 1500 2775 237 237 1500 2775 1575 3000 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2400 2325 237 237 2400 2325 2475 2550 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2325 3600 237 237 2325 3600 2400 3825 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 1500 4275 237 237 1500 4275 1575 4500 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 3900 1875 237 237 3900 1875 3975 2100 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 3900 2775 237 237 3900 2775 3975 3000 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4800 2325 237 237 4800 2325 4875 2550 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4725 3600 237 237 4725 3600 4800 3825 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 3900 4275 237 237 3900 4275 3975 4500 +1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 2625 1875 1725 300 2625 1875 4350 2175 +1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 2625 4275 1800 300 2625 4275 4425 4575 +1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 3375 3600 1725 300 3375 3600 5100 3900 +1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 1500 2775 375 300 1500 2775 1875 3075 +1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 3900 2775 375 300 3900 2775 4275 3075 +1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 4800 2325 375 300 4800 2325 5175 2625 +1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 2400 2325 375 225 2400 2325 2775 2550 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1725 1950 2175 2250 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2175 2400 1725 2700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2400 2550 2400 3375 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1575 3000 2100 3450 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + 1725 1950 2175 3375 2175 3375 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2175 3750 1650 4125 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4125 1950 4575 2250 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4575 2400 4125 2700 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4800 2550 4800 3375 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3975 3000 4500 3450 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + 4125 1950 4575 3375 4575 3375 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4575 3750 4050 4125 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2700 2325 3675 2700 +4 0 0 100 0 2 12 0.0000 4 135 90 1425 1950 1\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2325 2400 2\001 +4 0 0 100 0 2 12 0.0000 4 135 90 1425 2850 3\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2250 3675 4\001 +4 0 0 100 0 2 12 0.0000 4 135 90 1425 4350 5\001 +4 0 0 100 0 2 12 0.0000 4 135 90 3750 1950 6\001 +4 0 0 100 0 2 12 0.0000 4 135 90 4650 2400 7\001 +4 0 0 100 0 2 12 0.0000 4 135 90 3750 2850 8\001 +4 0 0 100 0 2 12 0.0000 4 135 90 4650 3675 9\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3750 4350 10\001 +4 0 0 100 0 2 12 0.0000 4 135 210 2475 2700 E2\001 +4 0 0 100 0 2 12 0.0000 4 135 210 1350 4725 E5\001 +4 0 0 100 0 2 12 0.0000 4 135 210 1725 3900 E4\001 +4 0 0 100 0 2 12 0.0000 4 135 210 1350 3300 E3\001 +4 0 0 100 0 2 12 0.0000 4 135 210 1350 2325 E1\001 +4 0 0 100 0 2 12 0.0000 4 135 210 3750 3225 E7\001 +4 0 0 100 0 2 12 0.0000 4 135 210 4800 2850 E6\001 diff --git a/sourcecodes/bnt-master/docs/Figures/rainer_tied.gif b/sourcecodes/bnt-master/docs/Figures/rainer_tied.gif new file mode 100644 index 00000000..19cb8279 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/rainer_tied.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/sar.fig b/sourcecodes/bnt-master/docs/Figures/sar.fig new file mode 100644 index 00000000..f6f54d1d --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/sar.fig @@ -0,0 +1,37 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +6 375 225 2175 2325 +6 375 1350 2100 1800 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 675 1575 300 225 675 1575 975 1800 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1800 1575 300 225 1800 1575 2100 1800 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 975 1575 1500 1575 +-6 +6 450 225 1950 675 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 450 225 825 225 825 675 450 675 450 225 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1575 225 1950 225 1950 675 1575 675 1575 225 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 450 1575 450 +-6 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 675 675 675 1350 +2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1800 675 1800 1350 +2 1 1 1 -1 0 0 0 2 4.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 975 1425 1500 525 +4 0 -1 0 0 0 12 0.0000 4 180 1530 600 2250 Switching AR model\001 +-6 +4 0 -1 0 0 0 12 0.0000 4 165 225 525 525 Q1\001 +4 0 -1 0 0 0 12 0.0000 4 165 225 1650 525 Q2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 525 1650 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1650 1650 Y2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/sar.gif b/sourcecodes/bnt-master/docs/Figures/sar.gif new file mode 100644 index 00000000..d22e3e2d Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/sar.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/skf.fig b/sourcecodes/bnt-master/docs/Figures/skf.fig new file mode 100644 index 00000000..85ff267f --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/skf.fig @@ -0,0 +1,48 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +6 300 300 2550 3375 +5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 3718.581 1734.122 1725 600 1425 1725 1575 2550 + 0 0 1.00 60.00 120.00 +5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 2652.330 1587.076 600 600 375 1575 525 2400 + 0 0 1.00 60.00 120.00 +6 1650 1200 2250 2775 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1950 1725 1950 2250 +-6 +6 675 300 2175 750 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 675 300 1050 300 1050 750 675 750 675 300 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1800 300 2175 300 2175 750 1800 750 1800 300 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1050 525 1800 525 +-6 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 750 825 1200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1950 750 1950 1200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1125 1425 1650 1425 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 1725 825 2250 +4 0 -1 0 0 0 12 0.0000 4 180 1740 750 3300 Switching Kalman filter\001 +4 0 -1 0 0 0 12 0.0000 4 165 225 750 600 Q1\001 +4 0 -1 0 0 0 12 0.0000 4 165 225 1875 600 Q2\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 675 1500 X1\001 +4 0 -1 0 0 0 12 0.0000 4 135 210 1800 1500 X2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 675 2625 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2625 Y2\001 +-6 diff --git a/sourcecodes/bnt-master/docs/Figures/skf.gif b/sourcecodes/bnt-master/docs/Figures/skf.gif new file mode 100644 index 00000000..aa784e11 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/skf.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/skf3.fig b/sourcecodes/bnt-master/docs/Figures/skf3.fig new file mode 100644 index 00000000..5940436c --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/skf3.fig @@ -0,0 +1,71 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 300 300 3750 3450 +5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 2100.000 1950.000 675 975 375 1875 675 2925 + 1 1 2.00 120.00 240.00 +5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 3300.000 1950.000 1875 975 1575 1875 1875 2925 + 1 1 2.00 120.00 240.00 +5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 4500.000 1950.000 3075 975 2775 1875 3075 2925 + 1 1 2.00 120.00 240.00 +1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 975 1875 335 335 975 1875 1125 2175 +1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 3375 1875 335 335 3375 1875 3525 2175 +1 3 0 2 0 0 50 0 20 0.000 1 0.0000 975 3075 335 335 975 3075 1125 3375 +1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2175 3075 335 335 2175 3075 2325 3375 +1 3 0 2 0 0 50 0 20 0.000 1 0.0000 3375 3075 335 335 3375 3075 3525 3375 +1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 2175 1875 335 335 2175 1875 2325 2175 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 675 375 1275 375 1275 975 675 975 675 375 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 1875 375 2475 375 2475 975 1875 975 1875 375 +2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5 + 3075 375 3675 375 3675 975 3075 975 3075 375 +2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 975 975 975 1575 +2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 975 2175 975 2775 +2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2175 975 2175 1575 +2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2175 2175 2175 2775 +2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 3375 975 3375 1575 +2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 3375 2175 3375 2775 +2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 1275 1875 1875 1875 +2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2475 1875 3075 1875 +4 0 0 50 0 0 24 0.0000 4 255 225 750 750 Z\001 +4 0 0 50 0 0 24 0.0000 4 255 225 1950 750 Z\001 +4 0 0 50 0 0 24 0.0000 4 255 180 2175 900 2\001 +4 0 0 50 0 0 24 0.0000 4 255 225 3150 750 Z\001 +4 0 0 50 0 0 24 0.0000 4 255 180 3375 900 3\001 +4 0 0 50 0 0 24 0.0000 4 255 270 825 2025 X\001 +4 0 0 50 0 0 24 0.0000 4 255 180 1050 2175 1\001 +4 0 0 50 0 0 24 0.0000 4 255 180 2250 2175 2\001 +4 0 0 50 0 0 24 0.0000 4 255 180 3450 2175 3\001 +4 0 0 50 0 0 24 0.0000 4 255 270 3225 2025 X\001 +4 0 0 50 0 0 24 0.0000 4 255 270 2025 2025 X\001 +4 0 7 50 0 0 24 0.0000 4 255 240 825 3150 Y\001 +4 0 7 50 0 0 24 0.0000 4 255 240 2025 3150 Y\001 +4 0 7 50 0 0 24 0.0000 4 255 240 3225 3150 Y\001 +4 0 7 50 0 0 24 0.0000 4 255 180 1050 3300 1\001 +4 0 7 50 0 0 24 0.0000 4 255 180 2175 3375 2\001 +4 0 7 50 0 0 24 0.0000 4 255 180 3375 3300 3\001 +4 0 0 50 0 0 24 0.0000 4 255 180 975 900 1\001 +-6 diff --git a/sourcecodes/bnt-master/docs/Figures/skf3_nobold.fig b/sourcecodes/bnt-master/docs/Figures/skf3_nobold.fig new file mode 100644 index 00000000..0d071170 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/skf3_nobold.fig @@ -0,0 +1,66 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 2652.330 1587.076 600 600 375 1575 525 2400 + 0 0 1.00 60.00 120.00 +5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 3718.581 1734.122 1725 600 1425 1725 1575 2550 + 0 0 1.00 60.00 120.00 +5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 4843.581 1734.122 2850 600 2550 1725 2700 2550 + 0 0 1.00 60.00 120.00 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3075 1425 300 225 3075 1425 3375 1650 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3075 2550 300 225 3075 2550 3375 2775 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 750 825 1200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 1725 825 2250 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1950 750 1950 1200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1125 1425 1650 1425 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3075 750 3075 1200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2250 1425 2775 1425 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 675 300 1050 300 1050 750 675 750 675 300 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1800 300 2175 300 2175 750 1800 750 1800 300 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1050 525 1800 525 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1950 1725 1950 2250 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3075 1725 3075 2250 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2850 300 3225 300 3225 750 2850 750 2850 300 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2100 525 2850 525 +4 0 -1 0 0 0 12 0.0000 4 135 225 675 1500 X1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 675 2625 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1800 1500 X2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2625 Y2\001 +4 0 0 50 0 0 12 0.0000 4 135 225 2850 1500 X3\001 +4 0 0 0 0 0 12 0.0000 4 135 225 2925 2625 Y3\001 +4 0 0 50 0 0 12 0.0000 4 135 210 750 600 Z1\001 +4 0 0 50 0 0 12 0.0000 4 135 210 1875 600 Z2\001 +4 0 0 50 0 0 12 0.0000 4 135 210 2925 600 Z3\001 diff --git a/sourcecodes/bnt-master/docs/Figures/skf3_nosolid.fig b/sourcecodes/bnt-master/docs/Figures/skf3_nosolid.fig new file mode 100644 index 00000000..60609cb2 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/skf3_nosolid.fig @@ -0,0 +1,66 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 2652.330 1587.076 600 600 375 1575 525 2400 + 1 1 2.00 120.00 240.00 +5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 3718.581 1734.122 1725 600 1425 1725 1575 2550 + 1 1 2.00 120.00 240.00 +5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 4843.581 1734.122 2850 600 2550 1725 2700 2550 + 1 1 2.00 120.00 240.00 +1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650 +1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650 +1 1 0 2 0 0 50 0 7 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775 +1 1 0 2 0 0 50 0 7 0.000 1 0.0000 3075 2550 300 225 3075 2550 3375 2775 +1 1 0 2 0 0 50 0 7 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775 +1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 3075 1425 300 225 3075 1425 3375 1650 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 2.00 120.00 240.00 + 825 1725 825 2250 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 2.00 120.00 240.00 + 1125 1425 1650 1425 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 1800 300 2175 300 2175 750 1800 750 1800 300 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 2.00 120.00 240.00 + 2100 525 2850 525 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 2850 300 3225 300 3225 750 2850 750 2850 300 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 2.00 120.00 240.00 + 1950 1725 1950 2250 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 2.00 120.00 240.00 + 2250 1425 2775 1425 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 2.00 120.00 240.00 + 1950 750 1950 1200 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 2.00 120.00 240.00 + 3075 750 3075 1200 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 2.00 120.00 240.00 + 3075 1725 3075 2250 +2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2 + 1 1 2.00 120.00 240.00 + 825 750 825 1200 +2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5 + 675 300 1050 300 1050 750 675 750 675 300 +2 1 0 2 0 0 50 0 7 0.000 0 0 7 1 0 2 + 1 1 2.00 120.00 240.00 + 1050 525 1800 525 +4 0 0 50 0 2 12 0.0000 4 135 225 675 2625 Y1\001 +4 0 0 50 0 2 12 0.0000 4 135 225 2925 2625 Y3\001 +4 0 0 50 0 2 12 0.0000 4 135 225 675 1500 X1\001 +4 0 0 50 0 2 12 0.0000 4 135 225 1800 1500 X2\001 +4 0 0 50 0 2 12 0.0000 4 135 225 2850 1500 X3\001 +4 0 0 50 0 2 12 0.0000 4 135 210 750 600 Z1\001 +4 0 0 50 0 2 12 0.0000 4 135 210 1875 600 Z2\001 +4 0 0 50 0 2 12 0.0000 4 135 210 2925 600 Z3\001 +4 0 0 50 0 2 12 0.0000 4 135 225 1875 2625 Y2\001 diff --git a/sourcecodes/bnt-master/docs/Figures/skf3_polytree.fig b/sourcecodes/bnt-master/docs/Figures/skf3_polytree.fig new file mode 100644 index 00000000..eea5df04 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/skf3_polytree.fig @@ -0,0 +1,60 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650 +1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3075 1425 300 225 3075 1425 3375 1650 +1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3075 2550 300 225 3075 2550 3375 2775 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 750 825 1200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 825 1725 825 2250 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1950 750 1950 1200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1125 1425 1650 1425 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3075 750 3075 1200 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2250 1425 2775 1425 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 675 300 1050 300 1050 750 675 750 675 300 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 1800 300 2175 300 2175 750 1800 750 1800 300 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1050 525 1800 525 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1950 1725 1950 2250 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3075 1725 3075 2250 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2850 300 3225 300 3225 750 2850 750 2850 300 +2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2100 525 2850 525 +4 0 -1 0 0 0 12 0.0000 4 165 225 750 600 Q1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 675 1500 X1\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 675 2625 Y1\001 +4 0 -1 0 0 0 12 0.0000 4 165 225 1875 600 Q2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1800 1500 X2\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2625 Y2\001 +4 0 0 50 0 0 12 0.0000 4 165 225 2925 600 Q3\001 +4 0 0 50 0 0 12 0.0000 4 135 225 2850 1500 X3\001 +4 0 0 0 0 0 12 0.0000 4 135 225 2925 2625 Y3\001 diff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler.fig b/sourcecodes/bnt-master/docs/Figures/sprinkler.fig new file mode 100644 index 00000000..6e343f52 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/sprinkler.fig @@ -0,0 +1,73 @@ +#FIG 3.2 +Portrait +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 3675 1275 6000 3450 +1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 4125 2400 450 225 4125 2400 4575 2625 +1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 4800 1500 450 225 4800 1500 5250 1725 +1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 5550 2400 450 225 5550 2400 6000 2625 +1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 4875 3225 450 225 4875 3225 5325 3450 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4650 1725 4200 2175 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 5025 1725 5400 2175 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4350 2625 4800 3000 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 5475 2700 5100 3000 +4 0 -1 0 0 0 12 0.0000 4 180 525 4575 1575 Cloudy\001 +4 0 -1 0 0 0 12 0.0000 4 180 675 3825 2475 Sprinkler\001 +4 0 -1 0 0 0 12 0.0000 4 135 345 5400 2475 Rain\001 +4 0 -1 0 0 0 12 0.0000 4 135 795 4500 3300 WetGrass\001 +-6 +6 3975 3900 6000 5775 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 3975 4275 6000 4275 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 1 + 4425 3975 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 4485 3960 4485 5730 +4 0 -1 0 0 0 12 0.0000 4 135 300 4050 4500 F F\001 +4 0 -1 0 0 0 12 0.0000 4 135 810 4650 4500 1.0 0.0\001 +4 0 -1 0 0 0 12 0.0000 4 135 300 4050 4875 T F\001 +4 0 -1 0 0 0 12 0.0000 4 135 300 4050 5250 F T\001 +4 0 -1 0 0 0 12 0.0000 4 135 345 4050 5625 T T\001 +4 0 -1 0 0 0 12 0.0000 4 135 855 4650 4875 0.1 0.9\001 +4 0 -1 0 0 0 12 0.0000 4 135 855 4650 5250 0.1 0.9\001 +4 0 -1 0 0 0 12 0.0000 4 135 900 4650 5625 0.01 0.99\001 +4 0 -1 0 0 0 12 0.0000 4 180 1785 4125 4230 S R P(W=F) P(W=T)\001 +-6 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 4125 525 5700 525 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1650 2625 3375 2625 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 2025 2325 2025 3300 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 6525 2700 8250 2700 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 6900 2400 6900 3450 +4 0 -1 0 0 0 12 0.0000 4 180 1260 4290 450 P(C=F) P(C=T)\001 +4 0 -1 0 0 0 12 0.0000 4 135 855 4425 825 0.5 0.5\001 +4 0 -1 0 0 0 12 0.0000 4 135 105 1725 2925 F\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 2175 2925 0.5\001 +4 0 -1 0 0 0 12 0.0000 4 135 225 2775 2925 0.5\001 +4 0 -1 0 0 0 12 0.0000 4 135 105 1725 3225 T\001 +4 0 -1 0 0 0 12 0.0000 4 135 900 2175 3225 0.9 0.1\001 +4 0 -1 0 0 0 12 0.0000 4 135 120 6600 2625 C\001 +4 0 -1 0 0 0 12 0.0000 4 135 105 6600 3000 F\001 +4 0 -1 0 0 0 12 0.0000 4 135 105 6525 3375 T\001 +4 0 -1 0 0 0 12 0.0000 4 135 945 7050 3375 0.2 0.8\001 +4 0 -1 0 0 0 12 0.0000 4 135 945 7050 3000 0.8 0.2\001 +4 0 0 100 0 0 12 0.0000 4 135 120 1650 2550 C\001 +4 0 0 100 0 0 12 0.0000 4 180 1185 2100 2550 P(S=F) P(S=T)\001 +4 0 0 100 0 0 12 0.0000 4 180 1215 6975 2625 P(R=F) P(R=T)\001 diff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler.gif b/sourcecodes/bnt-master/docs/Figures/sprinkler.gif new file mode 100644 index 00000000..c3520ef7 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/sprinkler.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler.jpg b/sourcecodes/bnt-master/docs/Figures/sprinkler.jpg new file mode 100644 index 00000000..65ebf1e3 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/sprinkler.jpg differ diff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler.noparams.fig b/sourcecodes/bnt-master/docs/Figures/sprinkler.noparams.fig new file mode 100644 index 00000000..d71d8102 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/sprinkler.noparams.fig @@ -0,0 +1,31 @@ +#FIG 3.2 +Portrait +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 600 300 2925 2475 +1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 1050 1425 450 225 1050 1425 1500 1650 +1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 1725 525 450 225 1725 525 2175 750 +1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 2475 1425 450 225 2475 1425 2925 1650 +1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 1800 2250 450 225 1800 2250 2250 2475 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1575 750 1125 1200 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1950 750 2325 1200 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1275 1650 1725 2025 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2400 1725 2025 2025 +4 0 -1 0 0 0 12 0.0000 4 180 525 1500 600 Cloudy\001 +4 0 -1 0 0 0 12 0.0000 4 180 675 750 1500 Sprinkler\001 +4 0 -1 0 0 0 12 0.0000 4 135 345 2325 1500 Rain\001 +4 0 -1 0 0 0 12 0.0000 4 135 795 1425 2325 WetGrass\001 +-6 diff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.gif b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.gif new file mode 100644 index 00000000..25a444a2 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.jpg b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.jpg new file mode 100644 index 00000000..07894e5f Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.jpg differ diff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.png b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.png new file mode 100644 index 00000000..6194915e Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.png differ diff --git a/sourcecodes/bnt-master/docs/Figures/water3.cts.fig b/sourcecodes/bnt-master/docs/Figures/water3.cts.fig new file mode 100644 index 00000000..da9022b4 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/water3.cts.fig @@ -0,0 +1,266 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3229.069 1880.389 1950 3450 1275 1350 1875 375 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 4200.000 6900.000 1950 5700 1650 6900 1950 8100 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 3787.500 6900.000 1950 4950 1125 7200 1950 8850 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 7387.500 6975.000 5775 5700 5400 7500 5775 8250 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 7188.461 6911.539 5775 4950 5175 8250 5850 8925 + 1 1 1.00 60.00 120.00 +6 2100 75 4425 9225 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 5437.500 6975.000 3825 5700 3450 7500 3825 8250 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 5238.461 6911.539 3825 4950 3225 8250 3900 8925 + 1 1 1.00 60.00 120.00 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4125 8250 237 237 4125 8250 4200 8475 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4125 8925 237 237 4125 8925 4200 9150 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 375 237 237 4050 375 4125 600 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 1050 237 237 4050 1050 4125 1275 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7050 3825 5850 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7125 3825 6525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7200 3825 7200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 6525 3825 7125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 6450 3825 6450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5700 3825 5700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5025 3825 5625 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5625 3825 5025 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2850 3825 6300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4350 3825 5550 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5550 3825 4350 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4950 3825 4950 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3600 3825 4800 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4200 3825 4200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4800 3825 3600 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3525 3825 4125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4125 3825 3525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3450 3825 3450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2775 3825 3375 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2025 3825 3300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2700 3825 2700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 1950 3825 1950 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425 +2 1 0 2 0 0 100 0 3 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2175 1650 2175 1200 +2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4050 1725 4050 1275 +-6 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8250 237 237 2175 8250 2250 8475 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8925 237 237 2175 8925 2250 9150 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 300 237 237 2175 300 2250 525 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 975 237 237 2175 975 2250 1200 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6075 8250 237 237 6075 8250 6150 8475 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6075 8925 237 237 6075 8925 6150 9150 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 375 237 237 6000 375 6075 600 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 1050 237 237 6000 1050 6075 1275 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7050 5775 5850 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7125 5775 6525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7200 5775 7200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 6525 5775 7125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 6450 5775 6450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5700 5775 5700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5025 5775 5625 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5625 5775 5025 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2850 5775 6300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4350 5775 5550 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5550 5775 4350 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4950 5775 4950 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3600 5775 4800 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4200 5775 4200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4800 5775 3600 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3525 5775 4125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4125 5775 3525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3450 5775 3450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2775 5775 3375 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2025 5775 3300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2700 5775 2700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 1950 5775 1950 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425 +2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 1725 6000 1275 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 2025 A1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3900 2025 A2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 2025 A3\001 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 2775 B1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3900 2775 B2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 2775 B3\001 +4 0 0 100 0 2 12 0.0000 4 135 210 2025 3525 C1\001 +4 0 0 100 0 2 12 0.0000 4 135 210 3900 3525 C2\001 +4 0 0 100 0 2 12 0.0000 4 135 210 5850 3525 C3\001 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 4275 D1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3900 4275 D2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 4275 D3\001 +4 0 0 100 0 2 12 0.0000 4 135 210 2025 5025 E1\001 +4 0 0 100 0 2 12 0.0000 4 135 210 3900 5025 E2\001 +4 0 0 100 0 2 12 0.0000 4 135 210 5850 5025 E3\001 +4 0 0 100 0 2 12 0.0000 4 135 210 3900 5775 F2\001 +4 0 0 100 0 2 12 0.0000 4 135 210 2025 5775 F1\001 +4 0 0 100 0 2 12 0.0000 4 135 210 5850 5775 F3\001 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 6525 G1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3975 6525 G2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 6525 G3\001 +4 0 0 100 0 2 12 0.0000 4 135 240 3900 7275 H2\001 +4 0 0 100 0 2 12 0.0000 4 135 240 5925 7275 H3\001 +4 0 0 100 0 2 12 0.0000 4 135 240 2025 7275 H1\001 +4 0 0 100 0 2 12 0.0000 4 135 360 1950 1050 YA1\001 +4 0 0 100 0 2 12 0.0000 4 135 360 3900 1125 YA2\001 +4 0 0 100 0 2 12 0.0000 4 135 360 5850 1125 YA3\001 +4 0 0 100 0 2 12 0.0000 4 135 345 1950 375 YC1\001 +4 0 0 100 0 2 12 0.0000 4 135 345 3900 450 YC2\001 +4 0 0 100 0 2 12 0.0000 4 135 345 5850 450 YC3\001 +4 0 0 100 0 2 12 0.0000 4 135 345 2025 8325 YE1\001 +4 0 0 100 0 2 12 0.0000 4 135 345 3975 8325 YE2\001 +4 0 0 100 0 2 12 0.0000 4 135 345 5925 8325 YE3\001 +4 0 0 100 0 2 12 0.0000 4 135 345 3975 9000 YF2\001 +4 0 0 100 0 2 12 0.0000 4 135 345 5925 9000 YF3\001 +4 0 0 100 0 2 12 0.0000 4 135 345 2025 9000 YF1\001 diff --git a/sourcecodes/bnt-master/docs/Figures/water3.fig b/sourcecodes/bnt-master/docs/Figures/water3.fig new file mode 100644 index 00000000..23bc3e66 --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/water3.fig @@ -0,0 +1,279 @@ +#FIG 3.2 +Portrait +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5445.833 6562.500 1950 4200 1275 7200 1950 8925 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7595.833 6637.500 3825 4275 3150 6825 3825 9000 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 8419.351 6558.096 5700 4200 5100 7950 5775 9000 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3332.812 2025.000 1875 3525 1275 1650 1875 525 + 1 1 1.00 60.00 120.00 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7050 5775 5850 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7125 5775 6525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7200 5775 7200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 6525 5775 7125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 6450 5775 6450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5700 5775 5700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5025 5775 5625 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5625 5775 5025 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2850 5775 6300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4350 5775 5550 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5550 5775 4350 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4950 5775 4950 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3600 5775 4800 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4200 5775 4200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4800 5775 3600 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3525 5775 4125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4125 5775 3525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3450 5775 3450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2775 5775 3375 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2025 5775 3300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2700 5775 2700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 1950 5775 1950 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425 +2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 1725 6000 1275 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7050 3825 5850 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7125 3825 6525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7200 3825 7200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 6525 3825 7125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 6450 3825 6450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5700 3825 5700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5025 3825 5625 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5625 3825 5025 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2850 3825 6300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4350 3825 5550 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5550 3825 4350 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4950 3825 4950 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3600 3825 4800 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4200 3825 4200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4800 3825 3600 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3525 3825 4125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4125 3825 3525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3450 3825 3450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2775 3825 3375 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2025 3825 3300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2700 3825 2700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 1950 3825 1950 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425 +2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4050 1725 4050 1275 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 1275 6225 825 5775 825 5775 1275 6225 1275 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 600 6225 150 5775 150 5775 600 6225 600 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 600 4275 150 3825 150 3825 600 4275 600 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 1275 4275 825 3825 825 3825 1275 4275 1275 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2175 7425 2175 7950 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2400 8400 2400 7950 1950 7950 1950 8400 2400 8400 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 8400 4275 7950 3825 7950 3825 8400 4275 8400 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 8400 6225 7950 5775 7950 5775 8400 6225 8400 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4050 7425 4050 7950 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 7425 6000 7950 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2400 9150 2400 8700 1950 8700 1950 9150 2400 9150 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 9150 4275 8700 3825 8700 3825 9150 4275 9150 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 9150 6225 8700 5775 8700 5775 9150 6225 9150 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2400 1200 2400 750 1950 750 1950 1200 2400 1200 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2400 600 2400 150 1950 150 1950 600 2400 600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2175 1650 2175 1200 +4 0 0 100 0 2 12 0.0000 4 135 90 2100 2025 1\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2100 2775 2\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2100 3525 3\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2025 4275 4\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2025 5025 5\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2025 5775 6\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2025 6525 7\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2025 7275 8\001 +4 0 0 100 0 2 12 0.0000 4 135 180 2025 9000 11\001 +4 0 0 100 0 2 12 0.0000 4 135 180 2100 8250 12\001 +4 0 0 100 0 2 12 0.0000 4 135 90 2100 1050 9\001 +4 0 0 100 0 2 12 0.0000 4 135 180 2100 450 10\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3900 2025 13\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3900 2775 14\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3900 3525 15\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3900 4275 16\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3900 5025 17\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3900 5775 18\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3900 6525 19\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3900 7275 20\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3900 1125 21\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3975 450 22\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3900 9000 23\001 +4 0 0 100 0 2 12 0.0000 4 135 180 3900 8250 24\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5850 2025 25\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5850 2775 26\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5850 3525 27\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5850 4275 28\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5850 5025 29\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5850 5775 30\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5850 6525 31\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5850 7275 32\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5850 1125 33\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5925 450 34\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5850 8250 36\001 +4 0 0 100 0 2 12 0.0000 4 135 180 5850 9000 35\001 diff --git a/sourcecodes/bnt-master/docs/Figures/water3.gif b/sourcecodes/bnt-master/docs/Figures/water3.gif new file mode 100644 index 00000000..9e8ecadd Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/water3.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/water3_75.gif b/sourcecodes/bnt-master/docs/Figures/water3_75.gif new file mode 100644 index 00000000..e4e477eb Binary files /dev/null and b/sourcecodes/bnt-master/docs/Figures/water3_75.gif differ diff --git a/sourcecodes/bnt-master/docs/Figures/water3_circle.fig b/sourcecodes/bnt-master/docs/Figures/water3_circle.fig new file mode 100644 index 00000000..a29b9a8b --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/water3_circle.fig @@ -0,0 +1,231 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3229.069 1880.389 1950 3450 1275 1350 1875 375 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 6931.999 6519.041 1875 4275 1425 7050 1950 8925 + 0 0 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7187.500 6562.500 3825 4275 3150 6075 3825 8850 + 0 0 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 9787.500 6592.500 5775 4275 5175 6150 5700 8775 + 0 0 1.00 60.00 120.00 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8925 237 237 2175 8925 2250 9150 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 300 237 237 2175 300 2250 525 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 975 237 237 2175 975 2250 1200 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2100 1950 237 237 2100 1950 2175 2175 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 2700 237 237 2175 2700 2250 2925 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 3450 237 237 2175 3450 2250 3675 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2100 4200 237 237 2100 4200 2175 4425 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 4950 237 237 2175 4950 2250 5175 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 5700 237 237 2175 5700 2250 5925 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 6450 237 237 2175 6450 2250 6675 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 7125 237 237 2175 7125 2250 7350 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 375 237 237 4050 375 4125 600 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 1050 237 237 4050 1050 4125 1275 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 1950 237 237 4050 1950 4125 2175 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 2700 237 237 4050 2700 4125 2925 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 3450 237 237 4050 3450 4125 3675 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 4200 237 237 4050 4200 4125 4425 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 4950 237 237 4050 4950 4125 5175 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 5700 237 237 4050 5700 4125 5925 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 6450 237 237 4050 6450 4125 6675 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 7200 237 237 4050 7200 4125 7425 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 1950 237 237 6000 1950 6075 2175 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 2700 237 237 6000 2700 6075 2925 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 4200 237 237 6000 4200 6075 4425 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 4875 237 237 6000 4875 6075 5100 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 5700 237 237 6000 5700 6075 5925 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 6450 237 237 6000 6450 6075 6675 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 7200 237 237 6000 7200 6075 7425 +1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 3450 237 237 6000 3450 6075 3675 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8250 237 237 2175 8250 2250 8475 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 8250 237 237 4050 8250 4125 8475 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 8925 237 237 4050 8925 4125 9150 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 8175 237 237 6000 8175 6075 8400 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 8850 237 237 6000 8850 6075 9075 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 375 237 237 6000 375 6075 600 +1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 1050 237 237 6000 1050 6075 1275 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7050 5775 5850 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7125 5775 6525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7200 5775 7200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 6525 5775 7125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 6450 5775 6450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5700 5775 5700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5025 5775 5625 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5625 5775 5025 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2850 5775 6300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4350 5775 5550 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5550 5775 4350 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4950 5775 4950 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3600 5775 4800 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4200 5775 4200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4800 5775 3600 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3525 5775 4125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4125 5775 3525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3450 5775 3450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2775 5775 3375 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2025 5775 3300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2700 5775 2700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 1950 5775 1950 +2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 1725 6000 1275 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7050 3825 5850 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7125 3825 6525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7200 3825 7200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 6525 3825 7125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 6450 3825 6450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5700 3825 5700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5025 3825 5625 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5625 3825 5025 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2850 3825 6300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4350 3825 5550 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5550 3825 4350 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4950 3825 4950 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3600 3825 4800 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4200 3825 4200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4800 3825 3600 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3525 3825 4125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4125 3825 3525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3450 3825 3450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2775 3825 3375 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2025 3825 3300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2700 3825 2700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 1950 3825 1950 +2 1 0 2 0 0 100 0 3 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2175 1650 2175 1200 +2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4050 1725 4050 1275 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 2175 7350 2175 7950 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 4050 7425 4050 8025 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 6000 7425 6000 7950 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 2025 A1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3900 2025 A2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 2025 A3\001 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 2775 B1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3900 2775 B2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 2775 B3\001 +4 0 0 100 0 2 12 0.0000 4 135 210 2025 3525 C1\001 +4 0 0 100 0 2 12 0.0000 4 135 210 3900 3525 C2\001 +4 0 0 100 0 2 12 0.0000 4 135 210 5850 3525 C3\001 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 4275 D1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3900 4275 D2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 4275 D3\001 +4 0 0 100 0 2 12 0.0000 4 135 210 2025 5025 E1\001 +4 0 0 100 0 2 12 0.0000 4 135 210 3900 5025 E2\001 +4 0 0 100 0 2 12 0.0000 4 135 210 5850 5025 E3\001 +4 0 0 100 0 2 12 0.0000 4 135 210 3900 5775 F2\001 +4 0 0 100 0 2 12 0.0000 4 135 210 2025 5775 F1\001 +4 0 0 100 0 2 12 0.0000 4 135 210 5850 5775 F3\001 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 6525 G1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3975 6525 G2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 6525 G3\001 +4 0 0 100 0 2 12 0.0000 4 135 240 3900 7275 H2\001 +4 0 0 100 0 2 12 0.0000 4 135 240 5925 7275 H3\001 +4 0 0 100 0 2 12 0.0000 4 135 240 2025 7275 H1\001 diff --git a/sourcecodes/bnt-master/docs/Figures/water3_named_nodes.fig b/sourcecodes/bnt-master/docs/Figures/water3_named_nodes.fig new file mode 100644 index 00000000..362c4aaa --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/water3_named_nodes.fig @@ -0,0 +1,279 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3229.069 1880.389 1950 3450 1275 1350 1875 375 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5445.833 6562.500 1950 4200 1275 7200 1950 8925 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7595.833 6637.500 3825 4275 3150 6825 3825 9000 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 8419.351 6558.096 5700 4200 5100 7950 5775 9000 + 1 1 1.00 60.00 120.00 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7050 5775 5850 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7125 5775 6525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7200 5775 7200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 6525 5775 7125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 6450 5775 6450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5700 5775 5700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5025 5775 5625 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5625 5775 5025 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2850 5775 6300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4350 5775 5550 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5550 5775 4350 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4950 5775 4950 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3600 5775 4800 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4200 5775 4200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4800 5775 3600 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3525 5775 4125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4125 5775 3525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3450 5775 3450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2775 5775 3375 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2025 5775 3300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2700 5775 2700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 1950 5775 1950 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425 +2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 1725 6000 1275 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7050 3825 5850 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7125 3825 6525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7200 3825 7200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 6525 3825 7125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 6450 3825 6450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5700 3825 5700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5025 3825 5625 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5625 3825 5025 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2850 3825 6300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4350 3825 5550 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5550 3825 4350 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4950 3825 4950 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3600 3825 4800 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4200 3825 4200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4800 3825 3600 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3525 3825 4125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4125 3825 3525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3450 3825 3450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2775 3825 3375 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2025 3825 3300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2700 3825 2700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 1950 3825 1950 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425 +2 1 0 2 0 0 100 0 3 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2175 1650 2175 1200 +2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4050 1725 4050 1275 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 1275 6225 825 5775 825 5775 1275 6225 1275 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 600 6225 150 5775 150 5775 600 6225 600 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 600 4275 150 3825 150 3825 600 4275 600 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 1275 4275 825 3825 825 3825 1275 4275 1275 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2325 1200 2325 750 1875 750 1875 1200 2325 1200 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2325 525 2325 75 1875 75 1875 525 2325 525 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2175 7425 2175 7950 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2400 8400 2400 7950 1950 7950 1950 8400 2400 8400 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 8400 4275 7950 3825 7950 3825 8400 4275 8400 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 8400 6225 7950 5775 7950 5775 8400 6225 8400 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4050 7425 4050 7950 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 7425 6000 7950 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2400 9150 2400 8700 1950 8700 1950 9150 2400 9150 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 9150 4275 8700 3825 8700 3825 9150 4275 9150 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 9150 6225 8700 5775 8700 5775 9150 6225 9150 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 2025 A1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3900 2025 A2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 2025 A3\001 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 2775 B1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3900 2775 B2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 2775 B3\001 +4 0 0 100 0 2 12 0.0000 4 135 210 2025 3525 C1\001 +4 0 0 100 0 2 12 0.0000 4 135 210 3900 3525 C2\001 +4 0 0 100 0 2 12 0.0000 4 135 210 5850 3525 C3\001 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 4275 D1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3900 4275 D2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 4275 D3\001 +4 0 0 100 0 2 12 0.0000 4 135 210 2025 5025 E1\001 +4 0 0 100 0 2 12 0.0000 4 135 210 3900 5025 E2\001 +4 0 0 100 0 2 12 0.0000 4 135 210 5850 5025 E3\001 +4 0 0 100 0 2 12 0.0000 4 135 210 3900 5775 F2\001 +4 0 0 100 0 2 12 0.0000 4 135 210 2025 5775 F1\001 +4 0 0 100 0 2 12 0.0000 4 135 210 5850 5775 F3\001 +4 0 0 100 0 2 12 0.0000 4 135 225 2025 6525 G1\001 +4 0 0 100 0 2 12 0.0000 4 135 225 3975 6525 G2\001 +4 0 0 100 0 2 12 0.0000 4 135 225 5850 6525 G3\001 +4 0 0 100 0 2 12 0.0000 4 135 240 3900 7275 H2\001 +4 0 0 100 0 2 12 0.0000 4 135 240 5925 7275 H3\001 +4 0 0 100 0 2 12 0.0000 4 135 240 2025 7275 H1\001 +4 0 0 100 0 2 12 0.0000 4 135 360 1950 1050 YA1\001 +4 0 0 100 0 2 12 0.0000 4 135 360 3900 1125 YA2\001 +4 0 0 100 0 2 12 0.0000 4 135 360 5850 1125 YA3\001 +4 0 0 100 0 2 12 0.0000 4 135 345 1950 375 YC1\001 +4 0 0 100 0 2 12 0.0000 4 135 345 3900 450 YC2\001 +4 0 0 100 0 2 12 0.0000 4 135 345 5850 450 YC3\001 +4 0 0 100 0 2 12 0.0000 4 135 375 2025 8250 YH1\001 +4 0 0 100 0 2 12 0.0000 4 135 375 3900 8250 YH2\001 +4 0 0 100 0 2 12 0.0000 4 135 375 5850 8250 YH3\001 +4 0 0 100 0 2 12 0.0000 4 135 360 2025 9000 YD1\001 +4 0 0 100 0 2 12 0.0000 4 135 360 3900 9000 YD2\001 +4 0 0 100 0 2 12 0.0000 4 135 360 5850 9000 YD3\001 diff --git a/sourcecodes/bnt-master/docs/Figures/water3_nolabels.fig b/sourcecodes/bnt-master/docs/Figures/water3_nolabels.fig new file mode 100644 index 00000000..2e64a25c --- /dev/null +++ b/sourcecodes/bnt-master/docs/Figures/water3_nolabels.fig @@ -0,0 +1,243 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5445.833 6562.500 1950 4200 1275 7200 1950 8925 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7595.833 6637.500 3825 4275 3150 6825 3825 9000 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 8419.351 6558.096 5700 4200 5100 7950 5775 9000 + 1 1 1.00 60.00 120.00 +5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3332.812 2025.000 1875 3525 1275 1650 1875 525 + 1 1 1.00 60.00 120.00 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7050 5775 5850 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7125 5775 6525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 7200 5775 7200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 6525 5775 7125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 6450 5775 6450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5700 5775 5700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5025 5775 5625 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5625 5775 5025 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2850 5775 6300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4350 5775 5550 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 5550 5775 4350 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4950 5775 4950 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3600 5775 4800 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4200 5775 4200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4800 5775 3600 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3525 5775 4125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 4125 5775 3525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 3450 5775 3450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2775 5775 3375 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2025 5775 3300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 2700 5775 2700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 4350 1950 5775 1950 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425 +2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 1725 6000 1275 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7050 3825 5850 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7125 3825 6525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 7200 3825 7200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 6525 3825 7125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 6450 3825 6450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5700 3825 5700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5025 3825 5625 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5625 3825 5025 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2850 3825 6300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4350 3825 5550 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 5550 3825 4350 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4950 3825 4950 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3600 3825 4800 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4200 3825 4200 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4800 3825 3600 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3525 3825 4125 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 4125 3825 3525 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 3450 3825 3450 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2775 3825 3375 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2025 3825 3300 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 2700 3825 2700 +2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2 + 3 1 1.00 60.00 120.00 + 2400 1950 3825 1950 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675 +2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5 + 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425 +2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4050 1725 4050 1275 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 1275 6225 825 5775 825 5775 1275 6225 1275 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 600 6225 150 5775 150 5775 600 6225 600 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 600 4275 150 3825 150 3825 600 4275 600 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 1275 4275 825 3825 825 3825 1275 4275 1275 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2175 7425 2175 7950 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2400 8400 2400 7950 1950 7950 1950 8400 2400 8400 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 8400 4275 7950 3825 7950 3825 8400 4275 8400 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 8400 6225 7950 5775 7950 5775 8400 6225 8400 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4050 7425 4050 7950 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6000 7425 6000 7950 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2400 9150 2400 8700 1950 8700 1950 9150 2400 9150 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 4275 9150 4275 8700 3825 8700 3825 9150 4275 9150 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 6225 9150 6225 8700 5775 8700 5775 9150 6225 9150 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2400 1200 2400 750 1950 750 1950 1200 2400 1200 +2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5 + 2400 600 2400 150 1950 150 1950 600 2400 600 +2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2175 1650 2175 1200 diff --git a/sourcecodes/bnt-master/docs/GR03~1.PDF b/sourcecodes/bnt-master/docs/GR03~1.PDF new file mode 100644 index 00000000..8ad8cf49 Binary files /dev/null and b/sourcecodes/bnt-master/docs/GR03~1.PDF differ diff --git a/sourcecodes/bnt-master/docs/Talks/BNT_mathworks.ppt b/sourcecodes/bnt-master/docs/Talks/BNT_mathworks.ppt new file mode 100644 index 00000000..fb41110b Binary files /dev/null and b/sourcecodes/bnt-master/docs/Talks/BNT_mathworks.ppt differ diff --git a/sourcecodes/bnt-master/docs/Talks/gR03.ppt b/sourcecodes/bnt-master/docs/Talks/gR03.ppt new file mode 100644 index 00000000..fe7b6f74 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Talks/gR03.ppt differ diff --git a/sourcecodes/bnt-master/docs/Talks/stair_BNT_mathworks.ppt b/sourcecodes/bnt-master/docs/Talks/stair_BNT_mathworks.ppt new file mode 100644 index 00000000..a400eba0 Binary files /dev/null and b/sourcecodes/bnt-master/docs/Talks/stair_BNT_mathworks.ppt differ diff --git a/sourcecodes/bnt-master/docs/adj2pajek2.m b/sourcecodes/bnt-master/docs/adj2pajek2.m new file mode 100644 index 00000000..5276a4e3 --- /dev/null +++ b/sourcecodes/bnt-master/docs/adj2pajek2.m @@ -0,0 +1,86 @@ +% ADJ2PAJEK2 Converts an adjacency matrix representation to a Pajek .net read format +% adj2pajek2(adj, filename-stem, 'argname1', argval1, ...) +% +% Set A(i,j)=-1 to get a dotted line +% +% Optional arguments +% +% nodeNames - cell array, defaults to {'v1','v2,...} +% shapes - cell array, defaults to {'ellipse','ellipse',...} +% Choices are 'ellipse', 'box', 'diamond', 'triangle', 'cross', 'empty' +% partition - vector of integers, defaults to [1 1 ... 1] +% This will automatically color-code the vertices by their partition +% +% Run pajek (available from http://vlado.fmf.uni-lj.si/pub/networks/pajek/) +% Choose File->Network->Read from the menu +% Then press ctrl-G (Draw->Draw) +% Optional: additionally load the partition file then press ctrl-P (Draw->partition) +% +% Examples +% A=zeros(5,5);A(1,2)=-1;A(2,1)=-1;A(1,[3 4])=1;A(2,5)=1; +% adj2pajek2(A,'foo') % makes foo.net +% +% adj2pajek2(A,'foo','partition',[1 1 2 2 2]) % makes foo.net and foo.clu +% +% adj2pajek2(A,'foo',... +% 'nodeNames',{'TF1','TF2','G1','G2','G3'},... +% 'shapes',{'box','box','ellipse','ellipse','ellipse'}); +% +% +% The file format is documented on p68 of the pajek manual +% and good examples are on p58, p72 +% +% Written by Kevin Murphy, 30 May 2007 +% Based on adj2pajek by Gergana Bounova +% http://stuff.mit.edu/people/gerganaa/www/matlab/routines.html +% Fixes a small bug (opens files as 'wt' instead of 'w' so it works in windows) +% Also, simplified her code and added some features. + +function []=adj2pajek2(adj,filename, varargin) + +N = length(adj); +for i=1:N + nodeNames{i} = strcat('"v',num2str(i),'"'); + shapes{i} = 'ellipse'; +end + +[nodeNames, shapes, partition] = process_options(varargin, ... + 'nodeNames', nodeNames, 'shapes', shapes, 'partition', []); + +if ~isempty(partition) + fid = fopen(sprintf('%s.clu', filename),'wt','native'); + fprintf(fid,'*Vertices %6i\n',N); + for i=1:N + fprintf(fid, '%d\n', partition(i)); + end + fclose(fid); +end + +fid = fopen(sprintf('%s.net', filename),'wt','native'); + +fprintf(fid,'*Vertices %6i\n',N); +for i=1:N + fprintf(fid,'%3i %s %s\n', i, nodeNames{i}, shapes{i}); +end + +%fprintf(fid,'*Edges\n'); +fprintf(fid,'*Arcs\n'); % directed +for i=1:N + for j=1:N + if adj(i,j) ~= 0 + fprintf(fid,' %4i %4i %2i\n',i,j,adj(i,j)); + end + end +end +fclose(fid) + + +if 0 +adj2pajek2(A,'foo',... + 'nodeNames',{'TF1','TF2','G1','G2','G3'},... + 'shapes',{'box','box','ellipse','ellipse','ellipse'}); + +N = 100; part = ones(1,N); part(intersect(reg.tfidxTest,1:N))=2; +G = reg.Atest(1:N, 1:N)'; +adj2pajek2(G, 'Ecoli100', 'partition', part) +end diff --git a/sourcecodes/bnt-master/docs/bnsoftOld.html b/sourcecodes/bnt-master/docs/bnsoftOld.html new file mode 100644 index 00000000..9da92fa1 --- /dev/null +++ b/sourcecodes/bnt-master/docs/bnsoftOld.html @@ -0,0 +1,1078 @@ + +Software Packages for Graphical Models / Bayesian Networks + + + + +

+Software Packages for Graphical Models / Bayesian Networks +

+

+Written by Kevin Murphy. +
+Last updated 31 October 2005. + +

Remarks

+ + +

What do the headers in the table mean?

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name + Authors + Src + API + Exec + Cts + GUI + Params + Struct + Utility + Free + Undir + Inference + Comments + + +
AgenaRisk + Agena + N + Y + W,U + Cx + Y + Y + N + N + $ + D + JTree + Simulation by Dynamic discretisation + +
Analytica + Lumina + N + Y + W,M + G + Y + N + N + Y + $ + D + sampling + spread sheet compatible + +
Banjo + Hartemink + Java + Y + W,U,M + Cd + N + N + Y + N + 0 + D + none + structure learning of +static or dynamic networks of discrete variables + + +
Bassist + U. Helsinki + C++ + Y + U + G + N + Y + N + N + 0 + D + MH + Generates C++ for MCMC. + +
Bayda + U. Helsinki + Java + Y + WUM + G + Y + Y + N + N + 0 + D + ? + Bayesian Naive Bayes classifier. + +
BayesBuilder + Nijman (U. Nijmegen) + N + N + W + D + Y + N + N + N + 0 + D + ? + - + +
BayesiaLab + Bayesia Ltd + N + N + - + Cd + Y + Y + Y + N + $ + CG + jtree,G + + +Structural learning, adaptive +questionnaires, dynamic models + + + + +
Bayesware Discoverer + Bayesware + N + N + WUM + Cd + Y + Y + Y + N + $ + D + ? + Uses bound and collapse for learning with missing data. + +
B-course + U. Helsinki + N + N + WUM + Cd + Y + Y + Y + N + 0 + D + ? + Runs on their server: view results using a web browser. + + + +
Belief net power constructor + Cheng (U.Alberta) + N + W + W + D + Y + Y + CI + N + 0 + D + ? + - + +
BNT + Murphy (U.C.Berkeley) + Matlab/C + Y + WUM + G + N + Y + Y + Y + 0 + D,U + Many + Also handles dynamic models, like HMMs and Kalman filters. + + +
BNJ + Hsu (Kansas) + Java + - + - + D + Y + N + Y + N + 0 + D + jtree, IS + - + + + +
BucketElim + Rish (U.C.Irvine) + C++ + Y + WU + D + N + N + N + N + 0 + D + Varelim + - + +
BUGS + MRC/Imperial College + N + N + WU + Cs + W + Y + N + N + 0 + D + Gibbs + - + +
Business Navigator 5 + Data Digest Corp + N + N + W + Cd + Y + Y + Y + N + $ + D + Jtree + - + +
CABeN + Cousins et al. (Wash. U.) + C + Y + WU + D + N + N + N + N + 0 + D + 5 Sampling methods + - + +
Causal discoverer + Vanderbilt + N + N + W + - + - + N + Y + N + 0 + D + - + structure learning only + + +
CoCo+Xlisp + Badsberg (U. Aalborg) + C/lisp + Y + U + D + Y + Y + CI + N + 0 + U + Jtree + Designed for contingency tables. + +
CIspace + Poole et al. (UBC) + Java + N + WU + D + Y + N + N + N + 0 + D + Varelim + - + +
DBNbox + Roberts et al + Matlab + - + - + Y + N + Y + N + N + + Y + D + Various + DBNs + +
Deal + Bottcher et al + R + - + - + G + Y + Y + Y + N + 0 + D + None + +Structure learning. + +
DeriveIt + DeriveIt LLC + N + - + - + ? + ? + Y + Y + ? + $ + D + Jtree + +Exploits local structure in CPDs. + + +
Ergo + Noetic systems + N + Y + W,M + D + Y + N + N + N + $ + D + jtree + - + + + +
GDAGsim + Wilkinson (U. Newcastle) + C + Y + WUM + G + N + N + N + N + 0 + D + Exact + Bayesian analysis of large linear Gaussian directed models. + + +
Genie + U. Pittsburgh + N + WU + WU + D + W + N + N + Y + 0 + D + Jtree + - + +
GMRFsim + Rue (U. Trondheim) + C + Y + WUM + G + N + N + N + N + 0 + U + MCMC + Bayesian analysis of large linear Gaussian undirected models. + + +
GMTk + Bilmes (UW), Zweig (IBM) + N + Y + U + D + N + Y + Y + N + 0 + D + Jtree + +Designed for speech recognition. + +
gR + Lauritzen et al. + R + - + - + - + - + - + - + - + 0 + - + - + Currently vaporware + + +
Grappa + Green (Bristol) + R + - + - + D + N + N) + N + N + 0 + D + Jtree + - + + +
Hugin Expert + Hugin + N + Y + W + G + W + Y + CI + Y + $ + CG + Jtree + - + + +
Hydra + Warnes (U.Wash.) + Java + - + - + Cs + Y + Y + N + N + 0 + U,D + MCMC + - + + +
Ideal + Rockwell + Lisp + Y + WUM + D + Y + N + N + Y + 0 + D + Jtree + GUI requires Allegro Lisp. + +
Java Bayes + Cozman (CMU) + Java + Y + WUM + D + Y + N + N + Y + 0 + D + Varelim, jtree + - + + +
KBaseAI + Codeas + N + Y + W,U + D + N + N + N + N + $ + D + varelim + client/server architecture, multiple users, access +control, query language + + +
LibB + Friedman (Hebrew U) + N + Y + W + D + N + Y + Y + N + 0 + D + none + +Structure learning + +
MIM + HyperGraph Software + N + N + W + G + Y + Y + Y + N + $ + CG + Jtree + Up to 52 variables. + +
MSBNx + Microsoft + N + Y + W + D + W + N + N + Y + 0 + D + Jtree + - + +
Netica + Norsys + N + WUM + W + G + W + Y + N + Y + $ + D + jtree + - + +
Optimal +Reinsertion + Moore, Wong (CMU) + N + N + W,U + D + N + Y + Y + N + 0 + D + none + structure learning + + +
PMT + Pavlovic (BU) + Matlab/C + - + - + D + N + Y + N + N + 0 + D + special purpose + - + + + +
PNL + Eruhimov (Intel) + C++ + - + - + D + N + Y + Y + N + 0 + U,D + Jtree + +A C++ version of BNT; will be released 12/03. + + +
Pulcinella + IRIDIA + Lisp + Y + WUM + D + Y + N + N + N + 0 + D + ? + Uses valuation systems for non-probabilistic calculi. + +
RISO + Dodier (U.Colorado) + Java + Y + WUM + G + Y + N + N + N + 0 + D + Polytree + Distributed implementation. + + + +
Sam Iam + Darwiche (UCLA) + N + N ? + WU ? (Java executable) + G ? + Y + Y + N ? + Y + 0 + D + Recursive conditioning + Also does sensitivity Analysis + + +
Tetrad + CMU + N + N + WU + G + N + Y + CI + N + 0 + U,D + None + - + + +
UnBBayes + ? + Java + - + - + D + Y + N + Y + N + 0 + D + jtree + K2 for struct learning + + +
Vibes + Winn & Bishop (U. Cambridge) + Java + Y + WU + Cx + Y + Y + N + N + 0 + D + Variational + +Not yet available. + + +
Web Weaver + Xiang (U.Regina) + Java + Y + WUM + D + Y + N + N + Y + 0 + D + ? + - + +
WinMine + Microsoft + N + N + W + Cx + Y + Y + Y + N + 0 + U,D + None + Learns BN or dependency net structure. + +
XBAIES 2.0 + Cowell (City U.) + N + N + W + G + Y + Y + N + Y + 0 + CG + Jtree + - + +
+ + +

+

Other sites related to (software for) graphical models

+ + + + +

Creating your first Bayes net

+ +To define a Bayes net, you must specify the graph structure and then +the parameters. We look at each in turn, using a simple example +(adapted from Russell and +Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall, +1995, p454). + + +

Graph structure

+ + +Consider the following network. + +

+

+ +
+

+ +

+To specify this directed acyclic graph (dag), we create an adjacency matrix: +

+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+
+

+We have numbered the nodes as follows: +Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4. +The nodes must always be numbered in topological order, i.e., +ancestors before descendants. +For a more complicated graph, this is a little inconvenient: we will +see how to get around this below. +

+In Matlab 6, you can use logical arrays instead of double arrays, +which are 4 times smaller: +

+dag = false(N,N);
+dag(C,[R S]) = true;
+...
+
+However, some graph functions (eg acyclic) do not work on +logical arrays! +

+You can visualize the resulting graph structure using +the methods discussed below. +For details on GUIs, +click here. + +

Creating the Bayes net shell

+ +In addition to specifying the graph structure, +we must specify the size and type of each node. +If a node is discrete, its size is the +number of possible values +each node can take on; if a node is continuous, +it can be a vector, and its size is the length of this vector. +In this case, we will assume all nodes are discrete and binary. +
+discrete_nodes = 1:N;
+node_sizes = 2*ones(1,N); 
+
+If the nodes were not binary, you could type e.g., +
+node_sizes = [4 2 3 5];
+
+meaning that Cloudy has 4 possible values, +Sprinkler has 2 possible values, etc. +Note that these are cardinal values, not ordinal, i.e., +they are not ordered in any way, like 'low', 'medium', 'high'. +

+We are now ready to make the Bayes net: +

+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
+
+By default, all nodes are assumed to be discrete, so we can also just +write +
+bnet = mk_bnet(dag, node_sizes);
+
+You may also specify which nodes will be observed. +If you don't know, or if this not fixed in advance, +just use the empty list (the default). +
+onodes = [];
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+
+Note that optional arguments are specified using a name/value syntax. +This is common for many BNT functions. +In general, to find out more about a function (e.g., which optional +arguments it takes), please see its +documentation string by typing +
+help mk_bnet
+
+See also other useful Matlab tips. +

+It is possible to associate names with nodes, as follows: +

+bnet = mk_bnet(dag, node_sizes, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+
+You can then refer to a node by its name: +
+C = bnet.names('cloudy'); % bnet.names is an associative array
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+
+This feature uses my own associative array class. + + +

Parameters

+ +A model consists of the graph structure and the parameters. +The parameters are represented by CPD objects (CPD = Conditional +Probability Distribution), which define the probability distribution +of a node given its parents. +(We will use the terms "node" and "random variable" interchangeably.) +The simplest kind of CPD is a table (multi-dimensional array), which +is suitable when all the nodes are discrete-valued. Note that the discrete +values are not assumed to be ordered in any way; that is, they +represent categorical quantities, like male and female, rather than +ordinal quantities, like low, medium and high. +(We will discuss CPDs in more detail below.) +

+Tabular CPDs, also called CPTs (conditional probability tables), +are stored as multidimensional arrays, where the dimensions +are arranged in the same order as the nodes, e.g., the CPT for node 4 +(WetGrass) is indexed by Sprinkler (2), Rain (3) and then WetGrass (4) itself. +Hence the child is always the last dimension. +If a node has no parents, its CPT is a column vector representing its +prior. +Note that in Matlab (unlike C), arrays are indexed +from 1, and are layed out in memory such that the first index toggles +fastest, e.g., the CPT for node 4 (WetGrass) is as follows +

+

+

+where we have used the convention that false==1, true==2. +We can create this CPT in Matlab as follows +

+CPT = zeros(2,2,2);
+CPT(1,1,1) = 1.0;
+CPT(2,1,1) = 0.1;
+...
+
+Here is an easier way: +
+CPT = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], [2 2 2]);
+
+In fact, we don't need to reshape the array, since the CPD constructor +will do that for us. So we can just write +
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+
+The other nodes are created similarly (using the old syntax for +optional parameters) +
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+
+ + +

Random Parameters

+ +If we do not specify the CPT, random parameters will be +created, i.e., each "row" of the CPT will be drawn from the uniform distribution. +To ensure repeatable results, use +
+rand('state', seed);
+randn('state', seed);
+
+To control the degree of randomness (entropy), +you can sample each row of the CPT from a Dirichlet(p,p,...) distribution. +If p << 1, this encourages "deterministic" CPTs (one entry near 1, the rest near 0). +If p = 1, each entry is drawn from U[0,1]. +If p >> 1, the entries will all be near 1/k, where k is the arity of +this node, i.e., each row will be nearly uniform. +You can do this as follows, assuming this node +is number i, and ns is the node_sizes. +
+k = ns(i);
+ps = parents(dag, i);
+psz = prod(ns(ps));
+CPT = sample_dirichlet(p*ones(1,k), psz);
+bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', CPT);
+
+ + +

Loading a network from a file

+ +If you already have a Bayes net represented in the XML-based + +Bayes Net Interchange Format (BNIF) (e.g., downloaded from the + +Bayes Net repository), +you can convert it to BNT format using +the +BIF-BNT Java +program written by Ken Shan. +(This is not necessarily up-to-date.) +

+It is currently not possible to save/load a BNT matlab object to +file, but this is easily fixed if you modify all the constructors +for all the classes (see matlab documentation). + +

Creating a model using a GUI

+ + + +

Graph visualization

+ +Click here for more information +on graph visualization. + + +

Inference

+ +Having created the BN, we can now use it for inference. +There are many different algorithms for doing inference in Bayes nets, +that make different tradeoffs between speed, +complexity, generality, and accuracy. +BNT therefore offers a variety of different inference +"engines". We will discuss these +in more detail below. +For now, we will use the junction tree +engine, which is the mother of all exact inference algorithms. +This can be created as follows. +
+engine = jtree_inf_engine(bnet);
+
+The other engines have similar constructors, but might take +additional, algorithm-specific parameters. +All engines are used in the same way, once they have been created. +We illustrate this in the following sections. + + +

Computing marginal distributions

+ +Suppose we want to compute the probability that the sprinker was on +given that the grass is wet. +The evidence consists of the fact that W=2. All the other nodes +are hidden (unobserved). We can specify this as follows. +
+evidence = cell(1,N);
+evidence{W} = 2;
+
+We use a 1D cell array instead of a vector to +cope with the fact that nodes can be vectors of different lengths. +In addition, the value [] can be used +to denote 'no evidence', instead of having to specify the observation +pattern as a separate argument. +(Click
here for a quick tutorial on cell +arrays in matlab.) +

+We are now ready to add the evidence to the engine. +

+[engine, loglik] = enter_evidence(engine, evidence);
+
+The behavior of this function is algorithm-specific, and is discussed +in more detail below. +In the case of the jtree engine, +enter_evidence implements a two-pass message-passing scheme. +The first return argument contains the modified engine, which +incorporates the evidence. The second return argument contains the +log-likelihood of the evidence. (Not all engines are capable of +computing the log-likelihood.) +

+Finally, we can compute p=P(S=2|W=2) as follows. +

+marg = marginal_nodes(engine, S);
+marg.T
+ans =
+      0.57024
+      0.42976
+p = marg.T(2);
+
+We see that p = 0.4298. +

+Now let us add the evidence that it was raining, and see what +difference it makes. +

+evidence{R} = 2;
+[engine, loglik] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, S);
+p = marg.T(2);
+
+We find that p = P(S=2|W=2,R=2) = 0.1945, +which is lower than +before, because the rain can ``explain away'' the +fact that the grass is wet. +

+You can plot a marginal distribution over a discrete variable +as a barchart using the built 'bar' function: +

+bar(marg.T)
+
+This is what it looks like + +

+

+ +
+

+ +

Observed nodes

+ +What happens if we ask for the marginal on an observed node, e.g. P(W|W=2)? +An observed discrete node effectively only has 1 value (the observed + one) --- all other values would result in 0 probability. +For efficiency, BNT treats observed (discrete) nodes as if they were + set to 1, as we see below: +
+evidence = cell(1,N);
+evidence{W} = 2;
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, W);
+m.T
+ans =
+     1
+
+This can get a little confusing, since we assigned W=2. +So we can ask BNT to add the evidence back in by passing in an optional argument: +
+m = marginal_nodes(engine, W, 1);
+m.T
+ans =
+     0
+     1
+
+This shows that P(W=1|W=2) = 0 and P(W=2|W=2) = 1. + + + +

Computing joint distributions

+ +We can compute the joint probability on a set of nodes as in the +following example. +
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+
+m is a structure. The 'T' field is a multi-dimensional array (in +this case, 3-dimensional) that contains the joint probability +distribution on the specified nodes. +
+>> m.T
+ans(:,:,1) =
+    0.2900    0.0410
+    0.0210    0.0009
+ans(:,:,2) =
+         0    0.3690
+    0.1890    0.0891
+
+We see that P(S=1,R=1,W=2) = 0, since it is impossible for the grass +to be wet if both the rain and sprinkler are off. +

+Let us now add some evidence to R. +

+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W])
+m = 
+    domain: [2 3 4]
+         T: [2x1x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+    0.0820
+    0.0018
+ans(:,:,2) =
+    0.7380
+    0.1782
+
+The joint T(i,j,k) = P(S=i,R=j,W=k|evidence) +should have T(i,1,k) = 0 for all i,k, since R=1 is incompatible +with the evidence that R=2. +Instead of creating large tables with many 0s, BNT sets the effective +size of observed (discrete) nodes to 1, as explained above. +This is why m.T has size 2x1x2. +To get a 2x2x2 table, type +
+m = marginal_nodes(engine, [S R W], 1)
+m = 
+    domain: [2 3 4]
+         T: [2x2x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+            0        0.082
+            0       0.0018
+ans(:,:,2) =
+            0        0.738
+            0       0.1782
+
+ +

+Note: It is not always possible to compute the joint on arbitrary +sets of nodes: it depends on which inference engine you use, as discussed +in more detail below. + + +

Soft/virtual evidence

+ +Sometimes a node is not observed, but we have some distribution over +its possible values; this is often called "soft" or "virtual" +evidence. +One can use this as follows +
+[engine, loglik] = enter_evidence(engine, evidence, 'soft', soft_evidence);
+
+where soft_evidence{i} is either [] (if node i has no soft evidence) +or is a vector representing the probability distribution over i's +possible values. +For example, if we don't know i's exact value, but we know its +likelihood ratio is 60/40, we can write evidence{i} = [] and +soft_evidence{i} = [0.6 0.4]. +

+Currently only jtree_inf_engine supports this option. +It assumes that all hidden nodes, and all nodes for +which we have soft evidence, are discrete. +For a longer example, see BNT/examples/static/softev1.m. + + +

Most probable explanation

+ +To compute the most probable explanation (MPE) of the evidence (i.e., +the most probable assignment, or a mode of the joint), use +
+[mpe, ll] = calc_mpe(engine, evidence);     
+
+mpe{i} is the most likely value of node i. +This calls enter_evidence with the 'maximize' flag set to 1, which +causes the engine to do max-product instead of sum-product. +The resulting max-marginals are then thresholded. +If there is more than one maximum probability assignment, we must take + care to break ties in a consistent manner (thresholding the + max-marginals may give the wrong result). To force this behavior, + type +
+[mpe, ll] = calc_mpe(engine, evidence, 1);     
+
+Note that computing the MPE is someties called abductive reasoning. + +

+You can also use calc_mpe_bucket written by Ron Zohar, +that does a forwards max-product pass, and then a backwards traceback +pass, which is how Viterbi is traditionally implemented. + + + +

Conditional Probability Distributions

+ +A Conditional Probability Distributions (CPD) +defines P(X(i) | X(Pa(i))), where X(i) is the i'th node, and X(Pa(i)) +are the parents of node i. There are many ways to represent this +distribution, which depend in part on whether X(i) and X(Pa(i)) are +discrete, continuous, or a combination. +We will discuss various representations below. + + +

Tabular nodes

+ +If the CPD is represented as a table (i.e., if it is a multinomial +distribution), it has a number of parameters that is exponential in +the number of parents. See the example above. + + +

Noisy-or nodes

+ +A noisy-OR node is like a regular logical OR gate except that +sometimes the effects of parents that are on get inhibited. +Let the prob. that parent i gets inhibited be q(i). +Then a node, C, with 2 parents, A and B, has the following CPD, where +we use F and T to represent off and on (1 and 2 in BNT). +
+A  B  P(C=off)      P(C=on)
+---------------------------
+F  F  1.0           0.0
+T  F  q(A)          1-q(A)
+F  T  q(B)          1-q(B)
+T  T  q(A)q(B)      1-q(A)q(B)
+
+Thus we see that the causes get inhibited independently. +It is common to associate a "leak" node with a noisy-or CPD, which is +like a parent that is always on. This can account for all other unmodelled +causes which might turn the node on. +

+The noisy-or distribution is similar to the logistic distribution. +To see this, let the nodes, S(i), have values in {0,1}, and let q(i,j) +be the prob. that j inhibits i. Then +

+Pr(S(i)=1 | parents(S(i))) = 1 - prod_{j} q(i,j)^S(j)
+
+Now define w(i,j) = -ln q(i,j) and rho(x) = 1-exp(-x). Then +
+Pr(S(i)=1 | parents(S(i))) = rho(sum_j w(i,j) S(j))
+
+For a sigmoid node, we have +
+Pr(S(i)=1 | parents(S(i))) = sigma(-sum_j w(i,j) S(j))
+
+where sigma(x) = 1/(1+exp(-x)). Hence they differ in the choice of +the activation function (although both are monotonically increasing). +In addition, in the case of a noisy-or, the weights are constrained to be +positive, since they derive from probabilities q(i,j). +In both cases, the number of parameters is linear in the +number of parents, unlike the case of a multinomial distribution, +where the number of parameters is exponential in the number of parents. +We will see an example of noisy-OR nodes
below. + + +

Other (noisy) deterministic nodes

+ +Deterministic CPDs for discrete random variables can be created using +the deterministic_CPD class. It is also possible to 'flip' the output +of the function with some probability, to simulate noise. +The boolean_CPD class is just a special case of a +deterministic CPD, where the parents and child are all binary. +

+Both of these classes are just "syntactic sugar" for the tabular_CPD +class. + + + +

Softmax nodes

+ +If we have a discrete node with a continuous parent, +we can define its CPD using a softmax function +(also known as the multinomial logit function). +This acts like a soft thresholding operator, and is defined as follows: +
+                    exp(w(:,i)'*x + b(i)) 
+Pr(Q=i | X=x)  =  -----------------------------
+                  sum_j   exp(w(:,j)'*x + b(j))
+
+
+The parameters of a softmax node, w(:,i) and b(i), i=1..|Q|, have the +following interpretation: w(:,i)-w(:,j) is the normal vector to the +decision boundary between classes i and j, +and b(i)-b(j) is its offset (bias). For example, suppose +X is a 2-vector, and Q is binary. Then +
+w = [1 -1;
+     0 0];
+
+b = [0 0];
+
+means class 1 are points in the 2D plane with positive x coordinate, +and class 2 are points in the 2D plane with negative x coordinate. +If w has large magnitude, the decision boundary is sharp, otherwise it +is soft. +In the special case that Q is binary (0/1), the softmax function reduces to the logistic +(sigmoid) function. +

+Fitting a softmax function can be done using the iteratively reweighted +least squares (IRLS) algorithm. +We use the implementation from +Netlab. +Note that since +the softmax distribution is not in the exponential family, it does not +have finite sufficient statistics, and hence we must store all the +training data in uncompressed form. +If this takes too much space, one should use online (stochastic) gradient +descent (not implemented in BNT). +

+If a softmax node also has discrete parents, +we use a different set of w/b parameters for each combination of +parent values, as in the conditional linear +Gaussian CPD. +This feature was implemented by Pierpaolo Brutti. +He is currently extending it so that discrete parents can be treated +as if they were continuous, by adding indicator variables to the X +vector. +

+We will see an example of softmax nodes below. + + +

Neural network nodes

+ +Pierpaolo Brutti has implemented the mlp_CPD class, which uses a multi layer perceptron +to implement a mapping from continuous parents to discrete children, +similar to the softmax function. +(If there are also discrete parents, it creates a mixture of MLPs.) +It uses code from Netlab. +This is work in progress. + +

Root nodes

+ +A root node has no parents and no parameters; it can be used to model +an observed, exogeneous input variable, i.e., one which is "outside" +the model. +This is useful for conditional density models. +We will see an example of root nodes below. + + +

Gaussian nodes

+ +We now consider a distribution suitable for the continuous-valued nodes. +Suppose the node is called Y, its continuous parents (if any) are +called X, and its discrete parents (if any) are called Q. +The distribution on Y is defined as follows: +
+- no parents: Y ~ N(mu, Sigma)
+- cts parents : Y|X=x ~ N(mu + W x, Sigma)
+- discrete parents: Y|Q=i ~ N(mu(:,i), Sigma(:,:,i))
+- cts and discrete parents: Y|X=x,Q=i ~ N(mu(:,i) + W(:,:,i) * x, Sigma(:,:,i))
+
+where N(mu, Sigma) denotes a Normal distribution with mean mu and +covariance Sigma. Let |X|, |Y| and |Q| denote the sizes of X, Y and Q +respectively. +If there are no discrete parents, |Q|=1; if there is +more than one, then |Q| = a vector of the sizes of each discrete parent. +If there are no continuous parents, |X|=0; if there is more than one, +then |X| = the sum of their sizes. +Then mu is a |Y|*|Q| vector, Sigma is a |Y|*|Y|*|Q| positive +semi-definite matrix, and W is a |Y|*|X|*|Q| regression (weight) +matrix. +

+We can create a Gaussian node with random parameters as follows. +

+bnet.CPD{i} = gaussian_CPD(bnet, i);
+
+We can specify the value of one or more of the parameters as in the +following example, in which |Y|=2, and |Q|=1. +
+bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', [0; 0], 'weights', randn(Y,X), 'cov', eye(Y));
+
+

+We will see an example of conditional linear Gaussian nodes below. +

+When learning Gaussians from data, it is helpful to ensure the +data has a small magnitde +(see e.g., KPMstats/standardize) to prevent numerical problems. +Unless you have a lot of data, it is also a very good idea to use +diagonal instead of full covariance matrices. +(BNT does not currently support spherical covariances, although it +would be easy to add, since KPMstats/clg_Mstep supports this option; +you would just need to modify gaussian_CPD/update_ess to accumulate +weighted inner products.) + + + +

Other continuous distributions

+ +Currently BNT does not support any CPDs for continuous nodes other +than the Gaussian. +However, you can use a mixture of Gaussians to +approximate other continuous distributions. We will see some an example +of this with the IFA model below. + + +

Generalized linear model nodes

+ +In the future, we may incorporate some of the functionality of +glmlab +into BNT. + + +

Classification/regression tree nodes

+ +We plan to add classification and regression trees to define CPDs for +discrete and continuous nodes, respectively. +Trees have many advantages: they are easy to interpret, they can do +feature selection, they can +handle discrete and continuous inputs, they do not make strong +assumptions about the form of the distribution, the number of +parameters can grow in a data-dependent way (i.e., they are +semi-parametric), they can handle missing data, etc. +However, they are not yet implemented. + + + +

Summary of CPD types

+ +We list all the different types of CPDs supported by BNT. +For each CPD, we specify if the child and parents can be discrete (D) or +continuous (C) (Binary (B) nodes are a special case). +We also specify which methods each class supports. +If a method is inherited, the name of the parent class is mentioned. +If a parent class calls a child method, this is mentioned. +

+The CPD_to_CPT method converts a CPD to a table; this +requires that the child and all parents are discrete. +The CPT might be exponentially big... +convert_to_table evaluates a CPD with evidence, and +represents the the resulting potential as an array. +This requires that the child is discrete, and any continuous parents +are observed. +convert_to_pot evaluates a CPD with evidence, and +represents the resulting potential as a dpot, gpot, cgpot or upot, as +requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u = +utility). + +

+When we sample a node, all the parents are observed. +When we compute the (log) probability of a node, all the parents and +the child are observed. +

+We also specify if the parameters are learnable. +For learning with EM, we require +the methods reset_ess, update_ess and +maximize_params. +For learning from fully observed data, we require +the method learn_params. +By default, all classes inherit this from generic_CPD, which simply +calls update_ess N times, once for each data case, followed +by maximize_params, i.e., it is like EM, without the E step. +Some classes implement a batch formula, which is quicker. +

+Bayesian learning means computing a posterior over the parameters +given fully observed data. +

+Pearl means we implement the methods compute_pi and +compute_lambda_msg, used by +pearl_inf_engine, which runs on directed graphs. +belprop_inf_engine only needs convert_to_pot.H +The pearl methods can exploit special properties of the CPDs for +computing the messages efficiently, whereas belprop does not. +

+The only method implemented by generic_CPD is adjustable_CPD, +which is not shown, since it is not very interesting. + + +

+ + + +
+ + + + + + + + + + + + +
Name +Child +Parents +Comments +CPD_to_CPT +conv_to_table +conv_to_pot +sample +prob +learn +Bayes +Pearl + + +
+ + + + + + + + + + + + +
boolean +B +B +Syntactic sugar for tabular +- +- +- +- +- +- +- +- + +
deterministic +D +D +Syntactic sugar for tabular +- +- +- +- +- +- +- +- + +
Discrete +D +C/D +Virtual class +N +Calls CPD_to_CPT +Calls conv_to_table +Calls conv_to_table +Calls conv_to_table +N +N +N + +
Gaussian +C +C/D +- +N +N +Y +Y +Y +Y +N +N + +
gmux +C +C/D +multiplexer +N +N +Y +N +N +N +N +Y + + +
MLP +D +C/D +multi layer perceptron +N +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +N +N + + +
noisy-or +B +B +- +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Inherits from discrete +N +N +Y + + +
root +C/D +none +no params +N +N +Y +Y +Y +N +N +N + + +
softmax +D +C/D +- +N +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +N +N + + +
generic +C/D +C/D +Virtual class +N +N +N +N +N +N +N +N + + +
Tabular +D +D +- +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +Y +Y + +
+ + + +

Example models

+ + +

Gaussian mixture models

+ +Richard W. DeVaul has made a detailed tutorial on how to fit mixtures +of Gaussians using BNT. Available +
here. + + +

PCA, ICA, and all that

+ +In Figure (a) below, we show how Factor Analysis can be thought of as a +graphical model. Here, X has an N(0,I) prior, and +Y|X=x ~ N(mu + Wx, Psi), +where Psi is diagonal and W is called the "factor loading matrix". +Since the noise on both X and Y is diagonal, the components of these +vectors are uncorrelated, and hence can be represented as individual +scalar nodes, as we show in (b). +(This is useful if parts of the observations on the Y vector are occasionally missing.) +We usually take k=|X| << |Y|=D, so the model tries to explain +many observations using a low-dimensional subspace. + + +
+ + + +
+ + + +
(a) + (b) + (c) + (d) +
+
+ +

+We can create this model in BNT as follows. +

+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+
+ +The root node is clamped to the N(0,I) distribution, so that we will +not update these parameters during learning. +The mean of the leaf node is clamped to 0, +since we assume the data has been centered (had its mean subtracted +off); this is just for simplicity. +Finally, the covariance of the leaf node is constrained to be +diagonal. W0 and Psi0 are the initial parameter guesses. + +

+We can fit this model (i.e., estimate its parameters in a maximum +likelihood (ML) sense) using EM, as we +explain below. +Not surprisingly, the ML estimates for mu and Psi turn out to be +identical to the +sample mean and variance, which can be computed directly as +

+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+
+Note that W can only be identified up to a rotation matrix, because of +the spherical symmetry of the source. + +

+If we restrict Psi to be spherical, i.e., Psi = sigma*I, +there is a closed-form solution for W as well, +i.e., we do not need to use EM. +In particular, W contains the first |X| eigenvectors of the sample covariance +matrix, with scalings determined by the eigenvalues and sigma. +Classical PCA can be obtained by taking the sigma->0 limit. +For details, see + +

+ +

+By adding a hidden discrete variable, we can create mixtures of FA +models, as shown in (c). +Now we can explain the data using a set of subspaces. +We can create this model in BNT as follows. +

+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+
+Notice how the covariance matrix for Y is the same for all values of +Q; that is, the noise level in each sub-space is assumed the same. +However, we allow the offset, mu, to vary. +For details, see + + +

+I have included Zoubin's specialized MFA code (with his permission) +with the toolbox, so you can check that BNT gives the same results: +see 'BNT/examples/static/mfa1.m'. + +

+Independent Factor Analysis (IFA) generalizes FA by allowing a +non-Gaussian prior on each component of X. +(Note that we can approximate a non-Gaussian prior using a mixture of +Gaussians.) +This means that the likelihood function is no longer rotationally +invariant, so we can uniquely identify W and the hidden +sources X. +IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y). +We recover classical Independent Components Analysis (ICA) +in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the +weight matrix W is square and invertible. +For details, see +

+ + + +

Mixtures of experts

+ +As an example of the use of the softmax function, +we introduce the Mixture of Experts model. + +As before, +circles denote continuous-valued nodes, +squares denote discrete nodes, clear +means hidden, and shaded means observed. +

+

+ + +
+ +
+
+

+X is the observed +input, Y is the output, and +the Q nodes are hidden "gating" nodes, which select the appropriate +set of parameters for Y. During training, Y is assumed observed, +but for testing, the goal is to predict Y given X. +Note that this is a conditional density model, so we don't +associate any parameters with X. +Hence X's CPD will be a root CPD, which is a way of modelling +exogenous nodes. +If the output is a continuous-valued quantity, +we assume the "experts" are linear-regression units, +and set Y's CPD to linear-Gaussian. +If the output is discrete, we set Y's CPD to a softmax function. +The Q CPDs will always be softmax functions. + +

+As a concrete example, consider the mixture of experts model where X and Y are +scalars, and Q is binary. +This is just piecewise linear regression, where +we have two line segments, i.e., +

+ +

+We can create this model with random parameters as follows. +(This code is bundled in BNT/examples/static/mixexp2.m.) +

+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+
+Now let us fit this model using
EM. +First we load the data (1000 training cases) and plot them. +

+

+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+
+

+

+ +
+

+This is what the model looks like before training. +(Thanks to Thomas Hofman for writing this plotting routine.) +

+

+ +
+

+Now let's train the model, and plot the final performance. +(We will discuss how to train models in more detail below.) +

+

+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+
+(We specify which nodes will be observed when we create the engine. +Hence BNT knows that the hidden nodes are all discrete. +For complex models, this can lead to a significant speedup.) +Below we show what the model looks like after 16 iterations of EM +(with 100 IRLS iterations per M step), when it converged +using the default convergence tolerance (that the +fractional change in the log-likelihood be less than 1e-3). +Before learning, the log-likelihood was +-322.927442; afterwards, it was -13.728778. +

+

+ +
+(See BNT/examples/static/mixexp2.m for details of the code.) + + + +

Hierarchical mixtures of experts

+ +A hierarchical mixture of experts (HME) extends the mixture of experts +model by having more than one hidden node. A two-level example is shown below, along +with its more traditional representation as a neural network. +This is like a (balanced) probabilistic decision tree of height 2. +

+

+ +
+

+Pierpaolo Brutti +has written an extensive set of routines for HMEs, +which are bundled with BNT: see the examples/static/HME directory. +These routines allow you to choose the number of hidden (gating) +layers, and the form of the experts (softmax or MLP). +See the file hmemenu, which provides a demo. +For example, the figure below shows the decision boundaries learned +for a ternary classification problem, using a 2 level HME with softmax +gates and softmax experts; the training set is on the left, the +testing set on the right. +

+

+ + +
+

+ + +

+For more details, see the following: +

+ + +

QMR

+ +Bayes nets originally arose out of an attempt to add probabilities to +expert systems, and this is still the most common use for BNs. +A famous example is +QMR-DT, a decision-theoretic reformulation of the Quick Medical +Reference (QMR) model. +

+

+ +
+Here, the top layer represents hidden disease nodes, and the bottom +layer represents observed symptom nodes. +The goal is to infer the posterior probability of each disease given +all the symptoms (which can be present, absent or unknown). +Each node in the top layer has a Bernoulli prior (with a low prior +probability that the disease is present). +Since each node in the bottom layer has a high fan-in, we use a +noisy-OR parameterization; each disease has an independent chance of +causing each symptom. +The real QMR-DT model is copyright, but +we can create a random QMR-like model as follows. +
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+
+In the file BNT/examples/static/qmr1, we create a random bipartite +graph G, with 5 diseases and 10 findings, and random parameters. +(In general, to create a random dag, use 'mk_random_dag'.) +We can visualize the resulting graph structure using +the methods discussed
below, with the +following results: +

+ + +

+Now let us put some random evidence on all the leaves except the very +first and very last, and compute the disease posteriors. +

+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+
+Junction tree can be quite slow on large QMR models. +Fortunately, it is possible to exploit properties of the noisy-OR +function to speed up exact inference using an algorithm called +quickscore, discussed below. + + + + + +

Conditional Gaussian models

+ +A conditional Gaussian model is one in which, conditioned on all the discrete +nodes, the distribution over the remaining (continuous) nodes is +multivariate Gaussian. This means we can have arcs from discrete (D) +to continuous (C) nodes, but not vice versa. +(We are allowed C->D arcs if the continuous nodes are observed, +as in the mixture of experts model, +since this distribution can be represented with a discrete potential.) +

+We now give an example of a CG model, from +the paper "Propagation of Probabilities, Means amd +Variances in Mixed Graphical Association Models", Steffen Lauritzen, +JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert +Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and +D. J. Spiegelhalter, Springer, 1999.) + +

Specifying the graph

+ +Consider the model of waste emissions from an incinerator plant shown below. +We follow the standard convention that shaded nodes are observed, +clear nodes are hidden. +We also use the non-standard convention that +square nodes are discrete (tabular) and round nodes are +Gaussian. + +

+

+ +
+

+ +We can create this model as follows. +

+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous +nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'. +

+ + +

Specifying the parameters

+ +The parameters of the discrete nodes can be specified as follows. +
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+
+ +

+The parameters of the continuous nodes can be specified as follows. +

+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+
+ + +

Inference

+ + +First we compute the unconditional marginals. +
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+
+ +'marg' is a structure that contains the fields 'mu' and 'Sigma', which +contain the mean and (co)variance of the marginal on E. +In this case, they are both scalars. +Let us check they match the published figures (to 2 decimal places). + +
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+
+We can compute the other posteriors similarly. +Now let us add some evidence. +
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+
+Now we find +
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+
+ + +We can also compute the joint probability on a set of nodes. +For example, P(D, Mout | evidence) is a 2D Gaussian: +
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+
+The mean is +
+marg.mu
+ans =
+    3.6077
+    4.1077
+
+and the covariance matrix is +
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+
+It is easy to visualize this posterior using standard Matlab plotting +functions, e.g., +
+gaussplot2d(marg.mu, marg.Sigma);
+
+produces the following picture. + +

+

+ +
+

+ + +The T field indicates that the mixing weight of this Gaussian +component is 1.0. +If the joint contains discrete and continuous variables, the result +will be a mixture of Gaussians, e.g., +

+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+
+The interpretation is +Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ]. +In this case, E is a scalar, so i=j=1; k specifies the mixture component. +

+We saw in the sprinkler network that BNT sets the effective size of +observed discrete nodes to 1, since they only have one legal value. +For continuous nodes, BNT sets their length to 0, +since they have been reduced to a point. +For example, +

+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+
+It is simple to post-process the output of marginal_nodes. +For example, the file BNT/examples/static/cg1 sets the mu term of +observed nodes to their observed value, and the Sigma term to 0 (since +observed nodes have no variance). + +

+Note that the implemented version of the junction tree is numerically +unstable when using CG potentials +(which is why, in the example above, we only required our answers to agree with +the published ones to 2dp.) +This is why you might want to use stab_cond_gauss_inf_engine, +implemented by Shan Huang. This is described in + +

+ +However, even the numerically stable version +can be computationally intractable if there are many hidden discrete +nodes, because the number of mixture components grows exponentially e.g., in a +
switching linear dynamical system. +In general, one must resort to approximate inference techniques: see +the discussion on inference engines below. + + +

Other hybrid models

+ +When we have C->D arcs, where C is hidden, we need to use +approximate inference. +One approach (not implemented in BNT) is described in + +Of course, one can always use sampling methods +for approximate inference in such models. + + + +

Parameter Learning

+ +The parameter estimation routines in BNT can be classified into 4 +types, depending on whether the goal is to compute +a full (Bayesian) posterior over the parameters or just a point +estimate (e.g., Maximum Likelihood or Maximum A Posteriori), +and whether all the variables are fully observed or there is missing +data/ hidden variables (partial observability). +

+ + + + + + + + + + + + + + + + + +
Full obsPartial obs
Pointlearn_paramslearn_params_em
Bayesbayes_update_paramsnot yet supported
+ + +

Loading data from a file

+ +To load numeric data from an ASCII text file called 'dat.txt', where each row is a +case and columns are separated by white-space, such as +
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+
+you can use +
+data = load('dat.txt');
+
+or +
+load dat.txt -ascii
+
+In the latter case, the data is stored in a variable called 'dat' (the +filename minus the extension). +Alternatively, suppose the data is stored in a .csv file (has commas +separating the columns, and contains a header line), such as +
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+
+You can load this using +
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+
+If your file is not in either of these formats, you can either use Perl to convert +it to this format, or use the Matlab scanf command. +Type + +help iofun + +for more information on Matlab's file functions. + +

+BNT learning routines require data to be stored in a cell array. +data{i,m} is the value of node i in case (example) m, i.e., each +column is a case. +If node i is not observed in case m (missing value), set +data{i,m} = []. +(Not all the learning routines can cope with such missing values, however.) +In the special case that all the nodes are observed and are +scalar-valued (as opposed to vector-valued), the data can be +stored in a matrix (as opposed to a cell-array). +

+Suppose, as in the mixture of experts example, +that we have 3 nodes in the graph: X(1) is the observed input, X(3) is +the observed output, and X(2) is a hidden (gating) node. We can +create the dataset as follows. +

+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+
+Notice how we transposed the data, to convert rows into columns. +Also, cases{2,m} = [] for all m, since X(2) is always hidden. + + +

Maximum likelihood parameter estimation from complete data

+ +As an example, let's generate some data from the sprinkler network, randomize the parameters, +and then try to recover the original model. +First we create some training data using forwards sampling. +
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+
+samples{j,i} contains the value of the j'th node in case i. +sample_bnet returns a cell array because, in general, each node might +be a vector of different length. +In this case, all nodes are discrete (and hence scalars), so we +could have used a regular array instead (which can be quicker): +
+data = cell2num(samples);
+
+Now we create a network with random parameters. +(The initial values of bnet2 don't matter in this case, since we can find the +globally optimal MLE independent of where we start.) +
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+
+Finally, we find the maximum likelihood estimates of the parameters. +
+bnet3 = learn_params(bnet2, samples);
+
+To view the learned parameters, we use a little Matlab hackery. +
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+
+Here are the parameters learned for node 4. +
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+
+So we see that the learned parameters are fairly close to the "true" +ones, which we display below. +
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+
+We can get better results by using a larger training set, or using +informative priors (see
below). + + + +

Parameter priors

+ +Currently, only tabular CPDs can have priors on their parameters. +The conjugate prior for a multinomial is the Dirichlet. +(For binary random variables, the multinomial is the same as the +Bernoulli, and the Dirichlet is the same as the Beta.) +

+The Dirichlet has a simple interpretation in terms of pseudo counts. +If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the +training set, where Pa_i are the parents of X_i, +then the maximum likelihood (ML) estimate is +T_ijk = N_ijk / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0. +To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this +event was not seen in the training set, +we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk) +of times in the past. +The MAP (maximum a posterior) estimate is then +

+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+
+and is never 0 if all alpha_ijk > 0. +For example, consider the network A->B, where A is binary and B has 3 +values. +A uniform prior for B has the form +
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+
+which can be created using +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+
+This prior does not satisfy the likelihood equivalence principle, +which says that
Markov equivalent models +should have the same marginal likelihood. +A prior that does satisfy this principle is shown below. +Heckerman (1995) calls this the +BDeu prior (likelihood equivalent uniform Bayesian Dirichlet). +
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+
+where we put N/(q*r) in each bin; N is the equivalent sample size, +r=|A|, q = |B|. +This can be created as follows +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+
+Here, 1 is the equivalent sample size, and is the strength of the +prior. +You can change this using +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+
+ + + + +

(Sequential) Bayesian parameter updating from complete data

+ +If we use conjugate priors and have fully observed data, we can +compute the posterior over the parameters in batch form as follows. +
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts, +and bnet.CPD{i}.CPT is set to the mean of the posterior (the +normalized counts). +(Hence if the initial pseudo counts are 0, +bayes_update_params and learn_params will give the +same result.) + + + + +

+We can compute the same result sequentially (on-line) as follows. +

+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+
+ +The file BNT/examples/static/StructLearn/model_select1 has an example of +sequential model selection which uses the same idea. +We generate data from the model A->B +and compute the posterior prob of all 3 dags on 2 nodes: + (1) A B, (2) A <- B , (3) A -> B +Models 2 and 3 are
Markov equivalent, and therefore indistinguishable from +observational data alone, so we expect their posteriors to be the same +(assuming a prior which satisfies likelihood equivalence). +If we use random parameters, the "true" model only gets a higher posterior after 2000 trials! +However, if we make B a noisy NOT gate, the true model "wins" after 12 +trials, as shown below (red = model 1, blue/green (superimposed) +represents models 2/3). +

+ +

+The use of marginal likelihood for model selection is discussed in +greater detail in the +section on structure learning. + + + + +

Maximum likelihood parameter estimation with missing values

+ +Now we consider learning when some values are not observed. +Let us randomly hide half the values generated from the water +sprinkler example. +
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+
+samples2{i,l} is the value of node i in training case l, or [] if unobserved. +

+Now we will compute the MLEs using the EM algorithm. +We need to use an inference algorithm to compute the expected +sufficient statistics in the E step; the M (maximization) step is as +above. +

+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as +follows: +
+plot(LLtrace, 'x-')
+
+Let's display the results after 10 iterations of EM. +
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+
+We can get improved performance by using one or more of the following +methods: + + +Click
here for a discussion of learning +Gaussians, which can cause numerical problems. +

+For a more complete example of learning with EM, +see the script BNT/examples/static/learn1.m. + +

Parameter tying

+ +In networks with repeated structure (e.g., chains and grids), it is +common to assume that the parameters are the same at every node. This +is called parameter tying, and reduces the amount of data needed for +learning. +

+When we have tied parameters, there is no longer a one-to-one +correspondence between nodes and CPDs. +Rather, each CPD species the parameters for a whole equivalence class +of nodes. +It is easiest to see this by example. +Consider the following hidden Markov +model (HMM) +

+ +

+ +When HMMs are used for semi-infinite processes like speech recognition, +we assume the transition matrix +P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant +or homogenous Markov chain. +Hence hidden nodes 2, 3, ..., T +are all in the same equivalence class, say class Hclass. +Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the +same for all t, so the observed nodes are all in the same equivalence +class, say class Oclass. +Finally, the prior term P(H(1)) is in a class all by itself, say class +H1class. +This is illustrated below, where we explicitly represent the +parameters as random variables (dotted nodes). +

+ +

+In BNT, we cannot represent parameters as random variables (nodes). +Instead, we "hide" the +parameters inside one CPD for each equivalence class, +and then specify that the other CPDs should share these parameters, as +follows. +

+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+
+Finally, we define the parameters for each equivalence class: +
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a +member of e's equivalence class; that is, it is not always the case +that e == j. You can use bnet.rep_of_eclass(e) to return the +representative of equivalence class e. +BNT will look up the parents of j to determine the size +of the CPT to use. It assumes that this is the same for all members of +the equivalence class. +Click here for +a more complex example of parameter tying. +

+Note: +Normally one would define an HMM as a +Dynamic Bayes Net +(see the function BNT/examples/dynamic/mk_chmm.m). +However, one can define an HMM as a static BN using the function +BNT/examples/static/Models/mk_hmm_bnet.m. + + + +

Structure learning

+ +Update (9/29/03): +Phillipe LeRay is developing some additional structure learning code +on top of BNT. Click + +here +for details. + +

+ +There are two very different approaches to structure learning: +constraint-based and search-and-score. +In the constraint-based approach, +we start with a fully connected graph, and remove edges if certain +conditional independencies are measured in the data. +This has the disadvantage that repeated independence tests lose +statistical power. +

+In the more popular search-and-score approach, +we perform a search through the space of possible DAGs, and either +return the best one found (a point estimate), or return a sample of the +models found (an approximation to the Bayesian posterior). +

+The number of DAGs as a function of the number of +nodes, G(n), is super-exponential in n, +and is given by the following recurrence + +

+

+ +
+

+The first few values +are shown below. + + + + + + + + + + + + + +
n G(n)
1 1
2 3
3 25
4 543
5 29,281
6 3,781,503
7 1.1 x 10^9
8 7.8 x 10^11
9 1.2 x 10^15
10 4.2 x 10^18
+ +Since the number of DAGs is super-exponential in the number of nodes, +we cannot exhaustively search the space, so we either use a local +search algorithm (e.g., greedy hill climbining, perhaps with multiple +restarts) or a global search algorithm (e.g., Markov Chain Monte +Carlo). +

+If we know a total ordering on the nodes, +finding the best structure amounts to picking the best set of parents +for each node independently. +This is what the K2 algorithm does. +If the ordering is unknown, we can search over orderings, +which is more efficient than searching over DAGs (Koller and Friedman, 2000). +

+In addition to the search procedure, we must specify the scoring +function. There are two popular choices. The Bayesian score integrates +out the parameters, i.e., it is the marginal likelihood of the model. +The BIC (Bayesian Information Criterion) is defined as +log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is +the ML estimate of the parameters, d is the number of parameters, and +N is the number of data cases. +The BIC method has the advantage of not requiring a prior. +

+BIC can be derived as a large sample +approximation to the marginal likelihood. +(It is also equal to the Minimum Description Length of a model.) +However, in practice, the sample size does not need to be very large +for the approximation to be good. +For example, in the figure below, we plot the ratio between the log marginal likelihood +and the BIC score against data-set size; we see that the ratio rapidly +approaches 1, especially for non-informative priors. +(This plot was generated by the file BNT/examples/static/bic1.m. It +uses the water sprinkler BN with BDeu Dirichlet priors with different +equivalent sample sizes.) + +

+

+ +
+

+ +

+As with parameter learning, handling missing data/ hidden variables is +much harder than the fully observed case. +The structure learning routines in BNT can therefore be classified into 4 +types, analogously to the parameter learning case. +

+ + + + + + + + + + + + + + + + +
Full obsPartial obs
Pointlearn_struct_K2
+ +
not yet supported
Bayeslearn_struct_mcmcnot yet supported
+ + +

Markov equivalence

+ +If two DAGs encode the same conditional independencies, they are +called Markov equivalent. The set of all DAGs can be paritioned into +Markov equivalence classes. Graphs within the same class can +have +the direction of some of their arcs reversed without changing any of +the CI relationships. +Each class can be represented by a PDAG +(partially directed acyclic graph) called an essential graph or +pattern. This specifies which edges must be oriented in a certain +direction, and which may be reversed. + +

+When learning graph structure from observational data, +the best one can hope to do is to identify the model up to Markov +equivalence. To distinguish amongst graphs within the same equivalence +class, one needs interventional data: see the discussion on active learning below. + + + +

Exhaustive search

+ +The brute-force approach to structure learning is to enumerate all +possible DAGs, and score each one. This provides a "gold standard" +with which to compare other algorithms. We can do this as follows. +
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+
+where data(i,m) is the value of node i in case m, +and ns(i) is the size of node i. +If the DAGs have a lot of families in common, we can cache the sufficient statistics, +making this potentially more efficient than scoring the DAGs one at a time. +(Caching is not currently implemented, however.) +

+By default, we use the Bayesian scoring metric, and assume CPDs are +represented by tables with BDeu(1) priors. +We can override these defaults as follows. +If we want to use uniform priors, we can say +

+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+
+params{i} is a cell-array, containing optional arguments that are +passed to the constructor for CPD i. +

+Now suppose we want to use different node types, e.g., +Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both +these CPDs can support discrete and continuous parents, which is +necessary since all other nodes will be considered as parents). +The Bayesian scoring metric currently only works for tabular CPDs, so +we will use BIC: +

+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+
+In practice, one can't enumerate all possible DAGs for N > 5, +but one can evaluate any reasonably-sized set of hypotheses in this +way (e.g., nearest neighbors of your current best guess). +Think of this as "computer assisted model refinement" as opposed to de +novo learning. + + +

K2

+ +The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows. +Initially each node has no parents. It then adds incrementally that parent whose addition most +increases the score of the resulting structure. When the addition of no single +parent can increase the score, it stops adding parents to the node. +Since we are using a fixed ordering, we do not need to check for +cycles, and can choose the parents for each node independently. +

+The original paper used the Bayesian scoring +metric with tabular CPDs and Dirichlet priors. +BNT generalizes this to allow any kind of CPD, and either the Bayesian +scoring metric or BIC, as in the example above. +In addition, you can specify +an optional upper bound on the number of parents for each node. +The file BNT/examples/static/k2demo1.m gives an example of how to use K2. +We use the water sprinkler network and sample 100 cases from it as before. +Then we see how much data it takes to recover the generating structure: +

+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+
+Here are the results. +
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly, +showing that the prior doesn't matter too much.) +In general, we cannot hope to recover the "true" generating structure, +only one that is in its Markov equivalence +class. + + +

Hill-climbing

+ +Hill-climbing starts at a specific point in space, +considers all nearest neighbors, and moves to the neighbor +that has the highest score; if no neighbors have higher +score than the current point (i.e., we have reached a local maximum), +the algorithm stops. One can then restart in another part of the space. +

+A common definition of "neighbor" is all graphs that can be +generated from the current graph by adding, deleting or reversing a +single arc, subject to the acyclicity constraint. +Other neighborhoods are possible: see + +Optimal Structure Identification with Greedy Search, Max +Chickering, JMLR 2002. + + + + +

MCMC

+ +We can use a Markov Chain Monte Carlo (MCMC) algorithm called +Metropolis-Hastings (MH) to search the space of all +DAGs. +The standard proposal distribution is to consider moving to all +nearest neighbors in the sense defined above. +

+The function can be called +as in the following example. +

+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+
+We can convert our set of sampled graphs to a histogram +(empirical posterior over all the DAGs) thus +
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+
+To see how well this performs, let us compute the exact posterior exhaustively. +

+

+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+
+We plot the results below. +(The data set was 100 samples drawn from a random 4 node bnet; see the +file BNT/examples/static/mcmc1.) +
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+
+ +

+We can also plot the acceptance ratio versus number of MCMC steps, +as a crude convergence diagnostic. +

+clf
+plot(accept_ratio)
+
+ +

+Even though the number of samples needed by MCMC is theoretically +polynomial (not exponential) in the dimensionality of the search space, in practice it has been +found that MCMC does not converge in reasonable time for graphs with +more than about 10 nodes. + + + + +

Active structure learning

+ +As was mentioned above, +one can only learn a DAG up to Markov equivalence, even given infinite data. +If one is interested in learning the structure of a causal network, +one needs interventional data. +(By "intervention" we mean forcing a node to take on a specific value, +thereby effectively severing its incoming arcs.) +

+Most of the scoring functions accept an optional argument +that specifies whether a node was observed to have a certain value, or +was forced to have that value: we set clamped(i,m)=1 if node i was +forced in training case m. e.g., see the file +BNT/examples/static/cooper_yoo. +

+An interesting question is to decide which interventions to perform +(c.f., design of experiments). For details, see the following tech +report +

+ + +

Structural EM

+ +Computing the Bayesian score when there is partial observability is +computationally challenging, because the parameter posterior becomes +multimodal (the hidden nodes induce a mixture distribution). +One therefore needs to use approximations such as BIC. +Unfortunately, search algorithms are still expensive, because we need +to run EM at each step to compute the MLE, which is needed to compute +the score of each model. An alternative approach is +to do the local search steps inside of the M step of EM, which is more +efficient since the data has been "filled in" - this is +called the structural EM algorithm (Friedman 1997), and provably +converges to a local maximum of the BIC score. +

+Wei Hu has implemented SEM for discrete nodes. +You can download his package from +here. +Please address all questions about this code to +wei.hu@intel.com. +See also Phl's implementation of SEM. + + + + +

Visualizing the graph

+ +Click here for more information +on graph visualization. + +

Constraint-based methods

+ +The IC algorithm (Pearl and Verma, 1991), +and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993), +computes many conditional independence tests, +and combines these constraints into a +PDAG to represent the whole +Markov equivalence class. +

+IC*/FCI extend IC/PC to handle latent variables: see below. +(IC stands for inductive causation; PC stands for Peter and Clark, +the first names of Spirtes and Glymour; FCI stands for fast causal +inference. +What we, following Pearl (2000), call IC* was called +IC in the original Pearl and Verma paper.) +For details, see +

+ +

+ +The PC algorithm takes as arguments a function f, the number of nodes N, +the maximum fan in K, and additional arguments A which are passed to f. +The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0 +otherwise. +For example, suppose we cheat by +passing in a CI "oracle" which has access to the true DAG; the oracle +tests for d-separation in this DAG, i.e., +f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows. +

+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+
+pdag(i,j) = -1 if there is definitely an i->j arc, +and pdag(i,j) = 1 if there is either an i->j or and i<-j arc. +

+Applied to the sprinkler network, this returns +

+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+
+So as expected, we see that the V-structure at the W node is uniquely identified, +but the other arcs have ambiguous orientation. +

+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS +book. +This example concerns the female orgasm. +We are given a correlation matrix C between 7 measured factors (such +as subjective experiences of coital and masturbatory experiences), +derived from 281 samples, and want to learn a causal model of the +data. We will not discuss the merits of this type of work here, but +merely show how to reproduce the results in the SGS book. +Their program, +Tetrad, +makes use of the Fisher Z-test for conditional +independence, so we do the same: +

+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+
+In this case, the CI test is +
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+
+The results match those of Fig 12a of SGS apart from two edge +differences; presumably this is due to rounding error (although it +could be a bug, either in BNT or in Tetrad). +This example can be found in the file BNT/examples/static/pc2.m. + +

+ +The IC* algorithm (Pearl and Verma, 1991), +and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993), +are like the IC/PC algorithm, except that they can detect the presence +of latent variables. +See the file learn_struct_pdag_ic_star written by Tamar +Kushnir. The output is a matrix P, defined as follows +(see Pearl (2000), p52 for details): +

+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+
+ + +

Philippe Leray's structure learning package

+ +Philippe Leray has written a + +structure learning package that uses BNT. + +It currently (Juen 2003) has the following features: + + + + + + + + + + + + +

Inference engines

+ +Up until now, we have used the junction tree algorithm for inference. +However, sometimes this is too slow, or not even applicable. +In general, there are many inference algorithms each of which make +different tradeoffs between speed, accuracy, complexity and +generality. Furthermore, there might be many implementations of the +same algorithm; for instance, a general purpose, readable version, +and a highly-optimized, specialized one. +To cope with this variety, we treat each inference algorithm as an +object, which we call an inference engine. + +

+An inference engine is an object that contains a bnet and supports the +'enter_evidence' and 'marginal_nodes' methods. The engine constructor +takes the bnet as argument and may do some model-specific processing. +When 'enter_evidence' is called, the engine may do some +evidence-specific processing. Finally, when 'marginal_nodes' is +called, the engine may do some query-specific processing. + +

+The amount of work done when each stage is specified -- structure, +parameters, evidence, and query -- depends on the engine. The cost of +work done early in this sequence can be amortized. On the other hand, +one can make better optimizations if one waits until later in the +sequence. +For example, the parameters might imply +conditional indpendencies that are not evident in the graph structure, +but can nevertheless be exploited; the evidence indicates which nodes +are observed and hence can effectively be disconnected from the +graph; and the query might indicate that large parts of the network +are d-separated from the query nodes. (Since it is not the actual +values of the evidence that matters, just which nodes are observed, +many engines allow you to specify which nodes will be observed when they are constructed, +i.e., before calling 'enter_evidence'. Some engines can still cope if +the actual pattern of evidence is different, e.g., if there is missing +data.) +

+ +Although being maximally lazy (i.e., only doing work when a query is +issued) may seem desirable, +this is not always the most efficient. +For example, +when learning using EM, we need to call marginal_nodes N times, where N is the +number of nodes. Variable elimination would end +up repeating a lot of work +each time marginal_nodes is called, making it inefficient for +learning. The junction tree algorithm, by contrast, uses dynamic +programming to avoid this redundant computation --- it calculates all +marginals in two passes during 'enter_evidence', so calling +'marginal_nodes' takes constant time. +

+We will discuss some of the inference algorithms implemented in BNT +below, and finish with a summary of all +of them. + + + + + + + +

Variable elimination

+ +The variable elimination algorithm, also known as bucket elimination +or peeling, is one of the simplest inference algorithms. +The basic idea is to "push sums inside of products"; this is explained +in more detail +here. +

+The principle of distributing sums over products can be generalized +greatly to apply to any commutative semiring. +This forms the basis of many common algorithms, such as Viterbi +decoding and the Fast Fourier Transform. For details, see + +

+ +

+Choosing an order in which to sum out the variables so as to minimize +computational cost is known to be NP-hard. +The implementation of this algorithm in +var_elim_inf_engine makes no attempt to optimize this +ordering (in contrast, say, to jtree_inf_engine, which uses a +greedy search procedure to find a good ordering). +

+Note: unlike most algorithms, var_elim does all its computational work +inside of marginal_nodes, not inside of +enter_evidence. + + + + +

Global inference methods

+ +The simplest inference algorithm of all is to explicitely construct +the joint distribution over all the nodes, and then to marginalize it. +This is implemented in global_joint_inf_engine. +Since the size of the joint is exponential in the +number of discrete (hidden) nodes, this is not a very practical algorithm. +It is included merely for pedagogical and debugging purposes. +

+Three specialized versions of this algorithm have also been implemented, +corresponding to the cases where all the nodes are discrete (D), all +are Gaussian (G), and some are discrete and some Gaussian (CG). +They are called enumerative_inf_engine, +gaussian_inf_engine, +and cond_gauss_inf_engine respectively. +

+Note: unlike most algorithms, these global inference algorithms do all their computational work +inside of marginal_nodes, not inside of +enter_evidence. + + +

Quickscore

+ +The junction tree algorithm is quite slow on the QMR network, +since the cliques are so big. +One simple trick we can use is to notice that hidden leaves do not +affect the posteriors on the roots, and hence do not need to be +included in the network. +A second trick is to notice that the negative findings can be +"absorbed" into the prior: +see the file +BNT/examples/static/mk_minimal_qmr_bnet for details. +

+ +A much more significant speedup is obtained by exploiting special +properties of the noisy-or node, as done by the quickscore +algorithm. For details, see +

+ +This has been implemented in BNT as a special-purpose inference +engine, which can be created and used as follows: +
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+
+ + +

Belief propagation

+ +Even using quickscore, exact inference takes time that is exponential +in the number of positive findings. +Hence for large networks we need to resort to approximate inference techniques. +See for example + +The latter approximation +entails applying Pearl's belief propagation algorithm to a model even +if it has loops (hence the name loopy belief propagation). +Pearl's algorithm, implemented as pearl_inf_engine, gives +exact results when applied to singly-connected graphs +(a.k.a. polytrees, since +the underlying undirected topology is a tree, but a node may have +multiple parents). +To apply this algorithm to a graph with loops, +use pearl_inf_engine. +This can use a centralized or distributed message passing protocol. +You can use it as in the following example. +
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+
+We found that this algorithm often converges, and when it does, often +is very accurate, but it depends on the precise setting of the +parameter values of the network. +(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.) +Understanding when and why belief propagation converges/ works +is a topic of ongoing research. +

+pearl_inf_engine can exploit special structure in noisy-or +and gmux nodes to compute messages efficiently. +

+belprop_inf_engine is like pearl, but uses potentials to +represent messages. Hence this is slower. +

+belprop_fg_inf_engine is like belprop, +but is designed for factor graphs. + + + +

Sampling

+ +BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms: + +Note: To generate samples from a network (which is not the same as inference!), +use sample_bnet. + + + +

Summary of inference engines

+ + +The inference engines differ in many ways. Here are +some of the major "axes": + + +

+In terms of topology, most engines handle any kind of DAG. +belprop_fg does approximate inference on factor graphs (FG), which +can be used to represent directed, undirected, and mixed (chain) +graphs. +(In the future, we plan to support exact inference on chain graphs.) +quickscore only works on QMR-like models. +

+In terms of node types: algorithms that use potentials can handle +discrete (D), Gaussian (G) or conditional Gaussian (CG) models. +Sampling algorithms can essentially handle any kind of node (distribution). +Other algorithms make more restrictive assumptions in exchange for +speed. +

+Finally, most algorithms are designed to give the exact answer. +The belief propagation algorithms are exact if applied to trees, and +in some other cases. +Sampling is considered approximate, even though, in the limit of an +infinite number of samples, it gives the exact answer. + +

+ +Here is a summary of the properties +of all the engines in BNT which work on static networks. +

+ +
+ + + + + + + + + + + + + + + +
Name +Exact? +Node type? +topology +
belprop + approx + D + DAG +
belprop_fg + approx + D + factor graph +
cond_gauss + exact + CG + DAG +
enumerative + exact + D + DAG +
gaussian + exact + G + DAG +
gibbs + approx + D + DAG +
global_joint + exact + D,G,CG + DAG +
jtree + exact + D,G,CG + DAG +b
likelihood_weighting + approx + any + DAG +
pearl + approx + D,G + DAG +
pearl + exact + D,G + polytree +
quickscore + exact + noisy-or + QMR +
stab_cond_gauss + exact + CG + DAG +
var_elim + exact + D,G,CG + DAG +
+ + + +

Influence diagrams/ decision making

+ +BNT implements an exact algorithm for solving LIMIDs (limited memory +influence diagrams), described in + +LIMIDs explicitely show all information arcs, rather than implicitely +assuming no forgetting. This allows them to model forgetful +controllers. +

+See the examples in BNT/examples/limids for details. + + + + +

DBNs, HMMs, Kalman filters and all that

+ +Click here for documentation about how to +use BNT for dynamical systems and sequence data. + + + diff --git a/sourcecodes/bnt-master/docs/usage_02nov13.html b/sourcecodes/bnt-master/docs/usage_02nov13.html new file mode 100644 index 00000000..a1e24294 --- /dev/null +++ b/sourcecodes/bnt-master/docs/usage_02nov13.html @@ -0,0 +1,3215 @@ + +How to use the Bayes Net Toolbox + + + + + +

How to use the Bayes Net Toolbox

+ +This documentation was last updated on 13 November 2002. +
+Click here for a list of changes made to +BNT. +
+Click +here +for a French version of this documentation (which might not +be up-to-date). + + +

+ +

+ + + + + + +

Installation

+ +

Installing the Matlab code

+ + + + +If you are new to Matlab, you might like to check out +some useful Matlab tips. +For instance, this explains how to create a startup file, which can be +used to set your path variable automatically, so you can avoid having +to type the above commands every time. + + + + +

Installing the C code

+ +Some BNT functions also have C implementations. +It is not necessary to install the C code, but it can result in a speedup +of a factor of 5-10. +To install all the C code, +edit installC_BNT.m so it contains the right path, +then type installC_BNT. +To uninstall all the C code, +edit uninstallC_BNT.m so it contains the right path, +then type uninstallC_BNT. +For an up-to-date list of the files which have C implementations, see +BNT/installC_BNT.m. + +

+mex is a script that lets you call C code from Matlab - it does not compile matlab to +C (see mcc below). +If your C/C++ compiler is set up correctly, mex should work out of +the box. +If not, you might need to type +

+ mex -setup +

+before calling installC. +

+To make mex call gcc on Windows, +you must install gnumex. +You can use the minimalist GNU for +Windows version of gcc, or +the cygwin version. +

+In general, typing +'mex foo.c' from inside Matlab creates a file called +'foo.mexglx' or 'foo.dll' (the exact file +extension is system dependent - on Linux it is 'mexglx', on Windows it is '.dll'). +The resulting file will hide the original 'foo.m' (if it existed), i.e., +typing 'foo' at the prompt will call the compiled C version. +To reveal the original matlab version, just delete foo.mexglx (this is +what uninstallC does). +

+Sometimes it takes time for Matlab to realize that the file has +changed from matlab to C or vice versa; try typing 'clear all' or +restarting Matlab to refresh it. +To find out which version of a file you are running, type +'which foo'. +

+mcc, the +Matlab to C compiler, is a separate product, +and is quite different from mex. It does not yet support +objects/classes, which is why we can't compile all of BNT to C automatically. +Also, hand-written C code is usually much +better than the C code generated by mcc. + + +

+Acknowledgements: +Although I wrote some of the C code, most of +the C code (e.g., for jtree and dpot) was written by Wei Hu; +the triangulation C code was written by Ilya Shpitser. + + +

Creating your first Bayes net

+ +To define a Bayes net, you must specify the graph structure and then +the parameters. We look at each in turn, using a simple example +(adapted from Russell and +Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall, +1995, p454). + + +

Graph structure

+ + +Consider the following network. + +

+

+ +
+

+ +

+To specify this directed acyclic graph (dag), we create an adjacency matrix: +

+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+
+

+We have numbered the nodes as follows: +Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4. +The nodes must always be numbered in topological order, i.e., +ancestors before descendants. +For a more complicated graph, this is a little inconvenient: we will +see how to get around this below. +

+In Matlab 6, you can use logical arrays instead of double arrays, +which are 4 times smaller: +

+dag = false(N,N);
+dag(C,[R S]) = true;
+...
+
+

+A preliminary attempt to make a GUI +has been writte by Philippe LeRay and can be downloaded +from here. +

+You can visualize the resulting graph structure using +the methods discussed below. + +

Creating the Bayes net shell

+ +In addition to specifying the graph structure, +we must specify the size and type of each node. +If a node is discrete, its size is the +number of possible values +each node can take on; if a node is continuous, +it can be a vector, and its size is the length of this vector. +In this case, we will assume all nodes are discrete and binary. +
+discrete_nodes = 1:N;
+node_sizes = 2*ones(1,N); 
+
+If the nodes were not binary, you could type e.g., +
+node_sizes = [4 2 3 5];
+
+meaning that Cloudy has 4 possible values, +Sprinkler has 2 possible values, etc. +Note that these are cardinal values, not ordinal, i.e., +they are not ordered in any way, like 'low', 'medium', 'high'. +

+We are now ready to make the Bayes net: +

+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
+
+By default, all nodes are assumed to be discrete, so we can also just +write +
+bnet = mk_bnet(dag, node_sizes);
+
+You may also specify which nodes will be observed. +If you don't know, or if this not fixed in advance, +just use the empty list (the default). +
+onodes = [];
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+
+Note that optional arguments are specified using a name/value syntax. +This is common for many BNT functions. +In general, to find out more about a function (e.g., which optional +arguments it takes), please see its +documentation string by typing +
+help mk_bnet
+
+See also other useful Matlab tips. +

+It is possible to associate names with nodes, as follows: +

+bnet = mk_bnet(dag, node_sizes, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+
+You can then refer to a node by its name: +
+C = bnet.names{'cloudy'}; % bnet.names is an associative array
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+
+ + +

Parameters

+ +A model consists of the graph structure and the parameters. +The parameters are represented by CPD objects (CPD = Conditional +Probability Distribution), which define the probability distribution +of a node given its parents. +(We will use the terms "node" and "random variable" interchangeably.) +The simplest kind of CPD is a table (multi-dimensional array), which +is suitable when all the nodes are discrete-valued. Note that the discrete +values are not assumed to be ordered in any way; that is, they +represent categorical quantities, like male and female, rather than +ordinal quantities, like low, medium and high. +(We will discuss CPDs in more detail below.) +

+Tabular CPDs, also called CPTs (conditional probability tables), +are stored as multidimensional arrays, where the dimensions +are arranged in the same order as the nodes, e.g., the CPT for node 4 +(WetGrass) is indexed by Sprinkler (2), Rain (3) and then WetGrass (4) itself. +Hence the child is always the last dimension. +If a node has no parents, its CPT is a column vector representing its +prior. +Note that in Matlab (unlike C), arrays are indexed +from 1, and are layed out in memory such that the first index toggles +fastest, e.g., the CPT for node 4 (WetGrass) is as follows +

+

+

+where we have used the convention that false==1, true==2. +We can create this CPT in Matlab as follows +

+CPT = zeros(2,2,2);
+CPT(1,1,1) = 1.0;
+CPT(2,1,1) = 0.1;
+...
+
+Here is an easier way: +
+CPT = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], [2 2 2]);
+
+In fact, we don't need to reshape the array, since the CPD constructor +will do that for us. So we can just write +
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+
+The other nodes are created similarly (using the old syntax for +optional parameters) +
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+
+ + +

Random Parameters

+ +If we do not specify the CPT, random parameters will be +created, i.e., each "row" of the CPT will be drawn from the uniform distribution. +To ensure repeatable results, use +
+rand('state', seed);
+randn('state', seed);
+
+To control the degree of randomness (entropy), +you can sample each row of the CPT from a Dirichlet(p,p,...) distribution. +If p << 1, this encourages "deterministic" CPTs (one entry near 1, the rest near 0). +If p = 1, each entry is drawn from U[0,1]. +If p >> 1, the entries will all be near 1/k, where k is the arity of +this node, i.e., each row will be nearly uniform. +You can do this as follows, assuming this node +is number i, and ns is the node_sizes. +
+k = ns(i);
+ps = parents(dag, i);
+psz = prod(ns(ps));
+CPT = sample_dirichlet(p*ones(1,k), psz);
+bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', CPT);
+
+ + +

Loading a network from a file

+ +If you already have a Bayes net represented in the XML-based + +Bayes Net Interchange Format (BNIF) (e.g., downloaded from the + +Bayes Net repository), +you can convert it to BNT format using +the +BIF-BNT Java +program written by Ken Shan. +(This is not necessarily up-to-date.) + + +

Creating a model using a GUI

+ +Click here. + + + +

Inference

+ +Having created the BN, we can now use it for inference. +There are many different algorithms for doing inference in Bayes nets, +that make different tradeoffs between speed, +complexity, generality, and accuracy. +BNT therefore offers a variety of different inference +"engines". We will discuss these +in more detail below. +For now, we will use the junction tree +engine, which is the mother of all exact inference algorithms. +This can be created as follows. +
+engine = jtree_inf_engine(bnet);
+
+The other engines have similar constructors, but might take +additional, algorithm-specific parameters. +All engines are used in the same way, once they have been created. +We illustrate this in the following sections. + + +

Computing marginal distributions

+ +Suppose we want to compute the probability that the sprinker was on +given that the grass is wet. +The evidence consists of the fact that W=2. All the other nodes +are hidden (unobserved). We can specify this as follows. +
+evidence = cell(1,N);
+evidence{W} = 2;
+
+We use a 1D cell array instead of a vector to +cope with the fact that nodes can be vectors of different lengths. +In addition, the value [] can be used +to denote 'no evidence', instead of having to specify the observation +pattern as a separate argument. +(Click
here for a quick tutorial on cell +arrays in matlab.) +

+We are now ready to add the evidence to the engine. +

+[engine, loglik] = enter_evidence(engine, evidence);
+
+The behavior of this function is algorithm-specific, and is discussed +in more detail below. +In the case of the jtree engine, +enter_evidence implements a two-pass message-passing scheme. +The first return argument contains the modified engine, which +incorporates the evidence. The second return argument contains the +log-likelihood of the evidence. (Not all engines are capable of +computing the log-likelihood.) +

+Finally, we can compute p=P(S=2|W=2) as follows. +

+marg = marginal_nodes(engine, S);
+marg.T
+ans =
+      0.57024
+      0.42976
+p = marg.T(2);
+
+We see that p = 0.4298. +

+Now let us add the evidence that it was raining, and see what +difference it makes. +

+evidence{R} = 2;
+[engine, loglik] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, S);
+p = marg.T(2);
+
+We find that p = P(S=2|W=2,R=2) = 0.1945, +which is lower than +before, because the rain can ``explain away'' the +fact that the grass is wet. +

+You can plot a marginal distribution over a discrete variable +as a barchart using the built 'bar' function: +

+bar(marg.T)
+
+This is what it looks like + +

+

+ +
+

+ +

Observed nodes

+ +What happens if we ask for the marginal on an observed node, e.g. P(W|W=2)? +An observed discrete node effectively only has 1 value (the observed + one) --- all other values would result in 0 probability. +For efficiency, BNT treats observed (discrete) nodes as if they were + set to 1, as we see below: +
+evidence = cell(1,N);
+evidence{W} = 2;
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, W);
+m.T
+ans =
+     1
+
+This can get a little confusing, since we assigned W=2. +So we can ask BNT to add the evidence back in by passing in an optional argument: +
+m = marginal_nodes(engine, W, 1);
+m.T
+ans =
+     0
+     1
+
+This shows that P(W=1|W=2) = 0 and P(W=2|W=2) = 1. + + + +

Computing joint distributions

+ +We can compute the joint probability on a set of nodes as in the +following example. +
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+
+m is a structure. The 'T' field is a multi-dimensional array (in +this case, 3-dimensional) that contains the joint probability +distribution on the specified nodes. +
+>> m.T
+ans(:,:,1) =
+    0.2900    0.0410
+    0.0210    0.0009
+ans(:,:,2) =
+         0    0.3690
+    0.1890    0.0891
+
+We see that P(S=1,R=1,W=2) = 0, since it is impossible for the grass +to be wet if both the rain and sprinkler are off. +

+Let us now add some evidence to R. +

+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W])
+m = 
+    domain: [2 3 4]
+         T: [2x1x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+    0.0820
+    0.0018
+ans(:,:,2) =
+    0.7380
+    0.1782
+
+The joint T(i,j,k) = P(S=i,R=j,W=k|evidence) +should have T(i,1,k) = 0 for all i,k, since R=1 is incompatible +with the evidence that R=2. +Instead of creating large tables with many 0s, BNT sets the effective +size of observed (discrete) nodes to 1, as explained above. +This is why m.T has size 2x1x2. +To get a 2x2x2 table, type +
+m = marginal_nodes(engine, [S R W], 1)
+m = 
+    domain: [2 3 4]
+         T: [2x2x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+            0        0.082
+            0       0.0018
+ans(:,:,2) =
+            0        0.738
+            0       0.1782
+
+ +

+Note: It is not always possible to compute the joint on arbitrary +sets of nodes: it depends on which inference engine you use, as discussed +in more detail below. + + +

Soft/virtual evidence

+ +Sometimes a node is not observed, but we have some distribution over +its possible values; this is often called "soft" or "virtual" +evidence. +One can use this as follows +
+[engine, loglik] = enter_evidence(engine, evidence, 'soft', soft_evidence);
+
+where soft_evidence{i} is either [] (if node i has no soft evidence) +or is a vector representing the probability distribution over i's +possible values. +For example, if we don't know i's exact value, but we know its +likelihood ratio is 60/40, we can write evidence{i} = [] and +soft_evidence{i} = [0.6 0.4]. +

+Currently only jtree_inf_engine supports this option. +It assumes that all hidden nodes, and all nodes for +which we have soft evidence, are discrete. +For a longer example, see BNT/examples/static/softev1.m. + + +

Most probable explanation

+ +To compute the most probable explanation (MPE) of the evidence (i.e., +the most probable assignment, or a mode of the joint), use +
+[mpe, ll] = calc_mpe(engine, evidence);     
+
+mpe{i} is the most likely value of node i. +This calls enter_evidence with the 'maximize' flag set to 1, which +causes the engine to do max-product instead of sum-product. +The resulting max-marginals are then thresholded. +If there is more than one maximum probability assignment, we must take + care to break ties in a consistent manner (thresholding the + max-marginals may give the wrong result). To force this behavior, + type +
+[mpe, ll] = calc_mpe(engine, evidence, 1);     
+
+Note that computing the MPE is someties called abductive reasoning. + +

+You can also use calc_mpe_bucket written by Ron Zohar, +that does a forwards max-product pass, and then a backwards traceback +pass, which is how Viterbi is traditionally implemented. + + + +

Conditional Probability Distributions

+ +A Conditional Probability Distributions (CPD) +defines P(X(i) | X(Pa(i))), where X(i) is the i'th node, and X(Pa(i)) +are the parents of node i. There are many ways to represent this +distribution, which depend in part on whether X(i) and X(Pa(i)) are +discrete, continuous, or a combination. +We will discuss various representations below. + + +

Tabular nodes

+ +If the CPD is represented as a table (i.e., if it is a multinomial +distribution), it has a number of parameters that is exponential in +the number of parents. See the example above. + + +

Noisy-or nodes

+ +A noisy-OR node is like a regular logical OR gate except that +sometimes the effects of parents that are on get inhibited. +Let the prob. that parent i gets inhibited be q(i). +Then a node, C, with 2 parents, A and B, has the following CPD, where +we use F and T to represent off and on (1 and 2 in BNT). +
+A  B  P(C=off)      P(C=on)
+---------------------------
+F  F  1.0           0.0
+T  F  q(A)          1-q(A)
+F  T  q(B)          1-q(B)
+T  T  q(A)q(B)      q-q(A)q(B)
+
+Thus we see that the causes get inhibited independently. +It is common to associate a "leak" node with a noisy-or CPD, which is +like a parent that is always on. This can account for all other unmodelled +causes which might turn the node on. +

+The noisy-or distribution is similar to the logistic distribution. +To see this, let the nodes, S(i), have values in {0,1}, and let q(i,j) +be the prob. that j inhibits i. Then +

+Pr(S(i)=1 | parents(S(i))) = 1 - prod_{j} q(i,j)^S(j)
+
+Now define w(i,j) = -ln q(i,j) and rho(x) = 1-exp(-x). Then +
+Pr(S(i)=1 | parents(S(i))) = rho(sum_j w(i,j) S(j))
+
+For a sigmoid node, we have +
+Pr(S(i)=1 | parents(S(i))) = sigma(-sum_j w(i,j) S(j))
+
+where sigma(x) = 1/(1+exp(-x)). Hence they differ in the choice of +the activation function (although both are monotonically increasing). +In addition, in the case of a noisy-or, the weights are constrained to be +positive, since they derive from probabilities q(i,j). +In both cases, the number of parameters is linear in the +number of parents, unlike the case of a multinomial distribution, +where the number of parameters is exponential in the number of parents. +We will see an example of noisy-OR nodes
below. + + +

Other (noisy) deterministic nodes

+ +Deterministic CPDs for discrete random variables can be created using +the deterministic_CPD class. It is also possible to 'flip' the output +of the function with some probability, to simulate noise. +The boolean_CPD class is just a special case of a +deterministic CPD, where the parents and child are all binary. +

+Both of these classes are just "syntactic sugar" for the tabular_CPD +class. + + + +

Softmax nodes

+ +If we have a discrete node with a continuous parent, +we can define its CPD using a softmax function +(also known as the multinomial logit function). +This acts like a soft thresholding operator, and is defined as follows: +
+                    exp(w(:,i)'*x + b(i)) 
+Pr(Q=i | X=x)  =  -----------------------------
+                  sum_j   exp(w(:,j)'*x + b(j))
+
+
+The parameters of a softmax node, w(:,i) and b(i), i=1..|Q|, have the +following interpretation: w(:,i)-w(:,j) is the normal vector to the +decision boundary between classes i and j, +and b(i)-b(j) is its offset (bias). For example, suppose +X is a 2-vector, and Q is binary. Then +
+w = [1 -1;
+     0 0];
+
+b = [0 0];
+
+means class 1 are points in the 2D plane with positive x coordinate, +and class 2 are points in the 2D plane with negative x coordinate. +If w has large magnitude, the decision boundary is sharp, otherwise it +is soft. +In the special case that Q is binary (0/1), the softmax function reduces to the logistic +(sigmoid) function. +

+Fitting a softmax function can be done using the iteratively reweighted +least squares (IRLS) algorithm. +We use the implementation from +Netlab. +Note that since +the softmax distribution is not in the exponential family, it does not +have finite sufficient statistics, and hence we must store all the +training data in uncompressed form. +If this takes too much space, one should use online (stochastic) gradient +descent (not implemented in BNT). +

+If a softmax node also has discrete parents, +we use a different set of w/b parameters for each combination of +parent values, as in the conditional linear +Gaussian CPD. +This feature was implemented by Pierpaolo Brutti. +He is currently extending it so that discrete parents can be treated +as if they were continuous, by adding indicator variables to the X +vector. +

+We will see an example of softmax nodes below. + + +

Neural network nodes

+ +Pierpaolo Brutti has implemented the mlp_CPD class, which uses a multi layer perceptron +to implement a mapping from continuous parents to discrete children, +similar to the softmax function. +(If there are also discrete parents, it creates a mixture of MLPs.) +It uses code from Netlab. +This is work in progress. + +

Root nodes

+ +A root node has no parents and no parameters; it can be used to model +an observed, exogeneous input variable, i.e., one which is "outside" +the model. +This is useful for conditional density models. +We will see an example of root nodes below. + + +

Gaussian nodes

+ +We now consider a distribution suitable for the continuous-valued nodes. +Suppose the node is called Y, its continuous parents (if any) are +called X, and its discrete parents (if any) are called Q. +The distribution on Y is defined as follows: +
+- no parents: Y ~ N(mu, Sigma)
+- cts parents : Y|X=x ~ N(mu + W x, Sigma)
+- discrete parents: Y|Q=i ~ N(mu(:,i), Sigma(:,:,i))
+- cts and discrete parents: Y|X=x,Q=i ~ N(mu(:,i) + W(:,:,i) * x, Sigma(:,:,i))
+
+where N(mu, Sigma) denotes a Normal distribution with mean mu and +covariance Sigma. Let |X|, |Y| and |Q| denote the sizes of X, Y and Q +respectively. +If there are no discrete parents, |Q|=1; if there is +more than one, then |Q| = a vector of the sizes of each discrete parent. +If there are no continuous parents, |X|=0; if there is more than one, +then |X| = the sum of their sizes. +Then mu is a |Y|*|Q| vector, Sigma is a |Y|*|Y|*|Q| positive +semi-definite matrix, and W is a |Y|*|X|*|Q| regression (weight) +matrix. +

+We can create a Gaussian node with random parameters as follows. +

+bnet.CPD{i} = gaussian_CPD(bnet, i);
+
+We can specify the value of one or more of the parameters as in the +following example, in which |Y|=2, and |Q|=1. +
+bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', [0; 0], 'weights', randn(Y,X), 'cov', eye(Y));
+
+

+We will see an example of conditional linear Gaussian nodes below. +

+When learning Gaussians from data, it is helpful to ensure the +data has a small magnitde +(see e.g., KPMstats/standardize) to prevent numerical problems. +Unless you have a lot of data, it is also a very good idea to use +diagonal instead of full covariance matrices. +(BNT does not currently support spherical covariances, although it +would be easy to add, since KPMstats/clg_Mstep supports this option; +you would just need to modify gaussian_CPD/update_ess to accumulate +weighted inner products.) + + + +

Other continuous distributions

+ +Currently BNT does not support any CPDs for continuous nodes other +than the Gaussian. +However, you can use a mixture of Gaussians to +approximate other continuous distributions. We will see some an example +of this with the IFA model below. + + +

Generalized linear model nodes

+ +In the future, we may incorporate some of the functionality of +glmlab +into BNT. + + +

Classification/regression tree nodes

+ +We plan to add classification and regression trees to define CPDs for +discrete and continuous nodes, respectively. +Trees have many advantages: they are easy to interpret, they can do +feature selection, they can +handle discrete and continuous inputs, they do not make strong +assumptions about the form of the distribution, the number of +parameters can grow in a data-dependent way (i.e., they are +semi-parametric), they can handle missing data, etc. +However, they are not yet implemented. + + + +

Summary of CPD types

+ +We list all the different types of CPDs supported by BNT. +For each CPD, we specify if the child and parents can be discrete (D) or +continuous (C) (Binary (B) nodes are a special case). +We also specify which methods each class supports. +If a method is inherited, the name of the parent class is mentioned. +If a parent class calls a child method, this is mentioned. +

+The CPD_to_CPT method converts a CPD to a table; this +requires that the child and all parents are discrete. +The CPT might be exponentially big... +convert_to_table evaluates a CPD with evidence, and +represents the the resulting potential as an array. +This requires that the child is discrete, and any continuous parents +are observed. +convert_to_pot evaluates a CPD with evidence, and +represents the resulting potential as a dpot, gpot, cgpot or upot, as +requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u = +utility). + +

+When we sample a node, all the parents are observed. +When we compute the (log) probability of a node, all the parents and +the child are observed. +

+We also specify if the parameters are learnable. +For learning with EM, we require +the methods reset_ess, update_ess and +maximize_params. +For learning from fully observed data, we require +the method learn_params. +By default, all classes inherit this from generic_CPD, which simply +calls update_ess N times, once for each data case, followed +by maximize_params, i.e., it is like EM, without the E step. +Some classes implement a batch formula, which is quicker. +

+Bayesian learning means computing a posterior over the parameters +given fully observed data. +

+Pearl means we implement the methods compute_pi and +compute_lambda_msg, used by +pearl_inf_engine, which runs on directed graphs. +belprop_inf_engine only needs convert_to_pot.H +The pearl methods can exploit special properties of the CPDs for +computing the messages efficiently, whereas belprop does not. +

+The only method implemented by generic_CPD is adjustable_CPD, +which is not shown, since it is not very interesting. + + +

+ + + +
+ + + + + + + + + + + + +
Name +Child +Parents +Comments +CPD_to_CPT +conv_to_table +conv_to_pot +sample +prob +learn +Bayes +Pearl + + +
+ + + + + + + + + + + + +
boolean +B +B +Syntactic sugar for tabular +- +- +- +- +- +- +- +- + +
deterministic +D +D +Syntactic sugar for tabular +- +- +- +- +- +- +- +- + +
Discrete +D +C/D +Virtual class +N +Calls CPD_to_CPT +Calls conv_to_table +Calls conv_to_table +Calls conv_to_table +N +N +N + +
Gaussian +C +C/D +- +N +N +Y +Y +Y +Y +N +N + +
gmux +C +C/D +multiplexer +N +N +Y +N +N +N +N +Y + + +
MLP +D +C/D +multi layer perceptron +N +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +N +N + + +
noisy-or +B +B +- +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Inherits from discrete +N +N +Y + + +
root +C/D +none +no params +N +N +Y +Y +Y +N +N +N + + +
softmax +D +C/D +- +N +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +N +N + + +
generic +C/D +C/D +Virtual class +N +N +N +N +N +N +N +N + + +
Tabular +D +D +- +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +Y +Y + +
+ + + +

Example models

+ + +

Gaussian mixture models

+ +Richard W. DeVaul has made a detailed tutorial on how to fit mixtures +of Gaussians using BNT. Available +
here. + + +

PCA, ICA, and all that

+ +In Figure (a) below, we show how Factor Analysis can be thought of as a +graphical model. Here, X has an N(0,I) prior, and +Y|X=x ~ N(mu + Wx, Psi), +where Psi is diagonal and W is called the "factor loading matrix". +Since the noise on both X and Y is diagonal, the components of these +vectors are uncorrelated, and hence can be represented as individual +scalar nodes, as we show in (b). +(This is useful if parts of the observations on the Y vector are occasionally missing.) +We usually take k=|X| << |Y|=D, so the model tries to explain +many observations using a low-dimensional subspace. + + +
+ + + +
+ + + +
(a) + (b) + (c) + (d) +
+
+ +

+We can create this model in BNT as follows. +

+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+
+ +The root node is clamped to the N(0,I) distribution, so that we will +not update these parameters during learning. +The mean of the leaf node is clamped to 0, +since we assume the data has been centered (had its mean subtracted +off); this is just for simplicity. +Finally, the covariance of the leaf node is constrained to be +diagonal. W0 and Psi0 are the initial parameter guesses. + +

+We can fit this model (i.e., estimate its parameters in a maximum +likelihood (ML) sense) using EM, as we +explain below. +Not surprisingly, the ML estimates for mu and Psi turn out to be +identical to the +sample mean and variance, which can be computed directly as +

+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+
+Note that W can only be identified up to a rotation matrix, because of +the spherical symmetry of the source. + +

+If we restrict Psi to be spherical, i.e., Psi = sigma*I, +there is a closed-form solution for W as well, +i.e., we do not need to use EM. +In particular, W contains the first |X| eigenvectors of the sample covariance +matrix, with scalings determined by the eigenvalues and sigma. +Classical PCA can be obtained by taking the sigma->0 limit. +For details, see + +

+ +

+By adding a hidden discrete variable, we can create mixtures of FA +models, as shown in (c). +Now we can explain the data using a set of subspaces. +We can create this model in BNT as follows. +

+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+
+Notice how the covariance matrix for Y is the same for all values of +Q; that is, the noise level in each sub-space is assumed the same. +However, we allow the offset, mu, to vary. +For details, see + + +

+I have included Zoubin's specialized MFA code (with his permission) +with the toolbox, so you can check that BNT gives the same results: +see 'BNT/examples/static/mfa1.m'. + +

+Independent Factor Analysis (IFA) generalizes FA by allowing a +non-Gaussian prior on each component of X. +(Note that we can approximate a non-Gaussian prior using a mixture of +Gaussians.) +This means that the likelihood function is no longer rotationally +invariant, so we can uniquely identify W and the hidden +sources X. +IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y). +We recover classical Independent Components Analysis (ICA) +in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the +weight matrix W is square and invertible. +For details, see +

+ + + +

Mixtures of experts

+ +As an example of the use of the softmax function, +we introduce the Mixture of Experts model. + +As before, +circles denote continuous-valued nodes, +squares denote discrete nodes, clear +means hidden, and shaded means observed. +

+

+ + +
+ +
+
+

+X is the observed +input, Y is the output, and +the Q nodes are hidden "gating" nodes, which select the appropriate +set of parameters for Y. During training, Y is assumed observed, +but for testing, the goal is to predict Y given X. +Note that this is a conditional density model, so we don't +associate any parameters with X. +Hence X's CPD will be a root CPD, which is a way of modelling +exogenous nodes. +If the output is a continuous-valued quantity, +we assume the "experts" are linear-regression units, +and set Y's CPD to linear-Gaussian. +If the output is discrete, we set Y's CPD to a softmax function. +The Q CPDs will always be softmax functions. + +

+As a concrete example, consider the mixture of experts model where X and Y are +scalars, and Q is binary. +This is just piecewise linear regression, where +we have two line segments, i.e., +

+ +

+We can create this model with random parameters as follows. +(This code is bundled in BNT/examples/static/mixexp2.m.) +

+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+
+Now let us fit this model using
EM. +First we load the data (1000 training cases) and plot them. +

+

+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+
+

+

+ +
+

+This is what the model looks like before training. +(Thanks to Thomas Hofman for writing this plotting routine.) +

+

+ +
+

+Now let's train the model, and plot the final performance. +(We will discuss how to train models in more detail below.) +

+

+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+
+(We specify which nodes will be observed when we create the engine. +Hence BNT knows that the hidden nodes are all discrete. +For complex models, this can lead to a significant speedup.) +Below we show what the model looks like after 16 iterations of EM +(with 100 IRLS iterations per M step), when it converged +using the default convergence tolerance (that the +fractional change in the log-likelihood be less than 1e-3). +Before learning, the log-likelihood was +-322.927442; afterwards, it was -13.728778. +

+

+ +
+(See BNT/examples/static/mixexp2.m for details of the code.) + + + +

Hierarchical mixtures of experts

+ +A hierarchical mixture of experts (HME) extends the mixture of experts +model by having more than one hidden node. A two-level example is shown below, along +with its more traditional representation as a neural network. +This is like a (balanced) probabilistic decision tree of height 2. +

+

+ +
+

+Pierpaolo Brutti +has written an extensive set of routines for HMEs, +which are bundled with BNT: see the examples/static/HME directory. +These routines allow you to choose the number of hidden (gating) +layers, and the form of the experts (softmax or MLP). +See the file hmemenu, which provides a demo. +For example, the figure below shows the decision boundaries learned +for a ternary classification problem, using a 2 level HME with softmax +gates and softmax experts; the training set is on the left, the +testing set on the right. +

+

+ + +
+

+ + +

+For more details, see the following: +

+ + +

QMR

+ +Bayes nets originally arose out of an attempt to add probabilities to +expert systems, and this is still the most common use for BNs. +A famous example is +QMR-DT, a decision-theoretic reformulation of the Quick Medical +Reference (QMR) model. +

+

+ +
+Here, the top layer represents hidden disease nodes, and the bottom +layer represents observed symptom nodes. +The goal is to infer the posterior probability of each disease given +all the symptoms (which can be present, absent or unknown). +Each node in the top layer has a Bernoulli prior (with a low prior +probability that the disease is present). +Since each node in the bottom layer has a high fan-in, we use a +noisy-OR parameterization; each disease has an independent chance of +causing each symptom. +The real QMR-DT model is copyright, but +we can create a random QMR-like model as follows. +
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+
+In the file BNT/examples/static/qmr1, we create a random bipartite +graph G, with 5 diseases and 10 findings, and random parameters. +(In general, to create a random dag, use 'mk_random_dag'.) +We can visualize the resulting graph structure using +the methods discussed
below, with the +following results: +

+ + +

+Now let us put some random evidence on all the leaves except the very +first and very last, and compute the disease posteriors. +

+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+
+Junction tree can be quite slow on large QMR models. +Fortunately, it is possible to exploit properties of the noisy-OR +function to speed up exact inference using an algorithm called +quickscore, discussed below. + + + + + +

Conditional Gaussian models

+ +A conditional Gaussian model is one in which, conditioned on all the discrete +nodes, the distribution over the remaining (continuous) nodes is +multivariate Gaussian. This means we can have arcs from discrete (D) +to continuous (C) nodes, but not vice versa. +(We are allowed C->D arcs if the continuous nodes are observed, +as in the mixture of experts model, +since this distribution can be represented with a discrete potential.) +

+We now give an example of a CG model, from +the paper "Propagation of Probabilities, Means amd +Variances in Mixed Graphical Association Models", Steffen Lauritzen, +JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert +Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and +D. J. Spiegelhalter, Springer, 1999.) + +

Specifying the graph

+ +Consider the model of waste emissions from an incinerator plant shown below. +We follow the standard convention that shaded nodes are observed, +clear nodes are hidden. +We also use the non-standard convention that +square nodes are discrete (tabular) and round nodes are +Gaussian. + +

+

+ +
+

+ +We can create this model as follows. +

+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous +nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'. +

+ + +

Specifying the parameters

+ +The parameters of the discrete nodes can be specified as follows. +
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+
+ +

+The parameters of the continuous nodes can be specified as follows. +

+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+
+ + +

Inference

+ + +First we compute the unconditional marginals. +
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+
+ +'marg' is a structure that contains the fields 'mu' and 'Sigma', which +contain the mean and (co)variance of the marginal on E. +In this case, they are both scalars. +Let us check they match the published figures (to 2 decimal places). + +
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+
+We can compute the other posteriors similarly. +Now let us add some evidence. +
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+
+Now we find +
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+
+ + +We can also compute the joint probability on a set of nodes. +For example, P(D, Mout | evidence) is a 2D Gaussian: +
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+
+The mean is +
+marg.mu
+ans =
+    3.6077
+    4.1077
+
+and the covariance matrix is +
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+
+It is easy to visualize this posterior using standard Matlab plotting +functions, e.g., +
+gaussplot2d(marg.mu, marg.Sigma);
+
+produces the following picture. + +

+

+ +
+

+ + +The T field indicates that the mixing weight of this Gaussian +component is 1.0. +If the joint contains discrete and continuous variables, the result +will be a mixture of Gaussians, e.g., +

+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+
+The interpretation is +Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ]. +In this case, E is a scalar, so i=j=1; k specifies the mixture component. +

+We saw in the sprinkler network that BNT sets the effective size of +observed discrete nodes to 1, since they only have one legal value. +For continuous nodes, BNT sets their length to 0, +since they have been reduced to a point. +For example, +

+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+
+It is simple to post-process the output of marginal_nodes. +For example, the file BNT/examples/static/cg1 sets the mu term of +observed nodes to their observed value, and the Sigma term to 0 (since +observed nodes have no variance). + +

+Note that the implemented version of the junction tree is numerically +unstable when using CG potentials +(which is why, in the example above, we only required our answers to agree with +the published ones to 2dp.) +This is why you might want to use stab_cond_gauss_inf_engine, +implemented by Shan Huang. This is described in + +

+ +However, even the numerically stable version +can be computationally intractable if there are many hidden discrete +nodes, because the number of mixture components grows exponentially e.g., in a +
switching linear dynamical system. +In general, one must resort to approximate inference techniques: see +the discussion on inference engines below. + + +

Other hybrid models

+ +When we have C->D arcs, where C is hidden, we need to use +approximate inference. +One approach (not implemented in BNT) is described in + +Of course, one can always use sampling methods +for approximate inference in such models. + + + +

Parameter Learning

+ +The parameter estimation routines in BNT can be classified into 4 +types, depending on whether the goal is to compute +a full (Bayesian) posterior over the parameters or just a point +estimate (e.g., Maximum Likelihood or Maximum A Posteriori), +and whether all the variables are fully observed or there is missing +data/ hidden variables (partial observability). +

+ + + + + + + + + + + + + + + + + +
Full obsPartial obs
Pointlearn_paramslearn_params_em
Bayesbayes_update_paramsnot yet supported
+ + +

Loading data from a file

+ +To load numeric data from an ASCII text file called 'dat.txt', where each row is a +case and columns are separated by white-space, such as +
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+
+you can use +
+data = load('dat.txt');
+
+or +
+load dat.txt -ascii
+
+In the latter case, the data is stored in a variable called 'dat' (the +filename minus the extension). +Alternatively, suppose the data is stored in a .csv file (has commas +separating the columns, and contains a header line), such as +
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+
+You can load this using +
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+
+If your file is not in either of these formats, you can either use Perl to convert +it to this format, or use the Matlab scanf command. +Type + +help iofun + +for more information on Matlab's file functions. + +

+BNT learning routines require data to be stored in a cell array. +data{i,m} is the value of node i in case (example) m, i.e., each +column is a case. +If node i is not observed in case m (missing value), set +data{i,m} = []. +(Not all the learning routines can cope with such missing values, however.) +In the special case that all the nodes are observed and are +scalar-valued (as opposed to vector-valued), the data can be +stored in a matrix (as opposed to a cell-array). +

+Suppose, as in the mixture of experts example, +that we have 3 nodes in the graph: X(1) is the observed input, X(3) is +the observed output, and X(2) is a hidden (gating) node. We can +create the dataset as follows. +

+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+
+Notice how we transposed the data, to convert rows into columns. +Also, cases{2,m} = [] for all m, since X(2) is always hidden. + + +

Maximum likelihood parameter estimation from complete data

+ +As an example, let's generate some data from the sprinkler network, randomize the parameters, +and then try to recover the original model. +First we create some training data using forwards sampling. +
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+
+samples{j,i} contains the value of the j'th node in case i. +sample_bnet returns a cell array because, in general, each node might +be a vector of different length. +In this case, all nodes are discrete (and hence scalars), so we +could have used a regular array instead (which can be quicker): +
+data = cell2num(samples);
+
+Now we create a network with random parameters. +(The initial values of bnet2 don't matter in this case, since we can find the +globally optimal MLE independent of where we start.) +
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+
+Finally, we find the maximum likelihood estimates of the parameters. +
+bnet3 = learn_params(bnet2, samples);
+
+To view the learned parameters, we use a little Matlab hackery. +
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+
+Here are the parameters learned for node 4. +
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+
+So we see that the learned parameters are fairly close to the "true" +ones, which we display below. +
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+
+We can get better results by using a larger training set, or using +informative priors (see
below). + + + +

Parameter priors

+ +Currently, only tabular CPDs can have priors on their parameters. +The conjugate prior for a multinomial is the Dirichlet. +(For binary random variables, the multinomial is the same as the +Bernoulli, and the Dirichlet is the same as the Beta.) +

+The Dirichlet has a simple interpretation in terms of pseudo counts. +If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the +training set, where Pa_i are the parents of X_i, +then the maximum likelihood (ML) estimate is +T_ijk = N_ijk / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0. +To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this +event was not seen in the training set, +we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk) +of times in the past. +The MAP (maximum a posterior) estimate is then +

+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+
+and is never 0 if all alpha_ijk > 0. +For example, consider the network A->B, where A is binary and B has 3 +values. +A uniform prior for B has the form +
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+
+which can be created using +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+
+This prior does not satisfy the likelihood equivalence principle, +which says that
Markov equivalent models +should have the same marginal likelihood. +A prior that does satisfy this principle is shown below. +Heckerman (1995) calls this the +BDeu prior (likelihood equivalent uniform Bayesian Dirichlet). +
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+
+where we put N/(q*r) in each bin; N is the equivalent sample size, +r=|A|, q = |B|. +This can be created as follows +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+
+Here, 1 is the equivalent sample size, and is the strength of the +prior. +You can change this using +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+
+ + + + +

(Sequential) Bayesian parameter updating from complete data

+ +If we use conjugate priors and have fully observed data, we can +compute the posterior over the parameters in batch form as follows. +
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts, +and bnet.CPD{i}.CPT is set to the mean of the posterior (the +normalized counts). +(Hence if the initial pseudo counts are 0, +bayes_update_params and learn_params will give the +same result.) + + + + +

+We can compute the same result sequentially (on-line) as follows. +

+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+
+ +The file BNT/examples/static/StructLearn/model_select1 has an example of +sequential model selection which uses the same idea. +We generate data from the model A->B +and compute the posterior prob of all 3 dags on 2 nodes: + (1) A B, (2) A <- B , (3) A -> B +Models 2 and 3 are
Markov equivalent, and therefore indistinguishable from +observational data alone, so we expect their posteriors to be the same +(assuming a prior which satisfies likelihood equivalence). +If we use random parameters, the "true" model only gets a higher posterior after 2000 trials! +However, if we make B a noisy NOT gate, the true model "wins" after 12 +trials, as shown below (red = model 1, blue/green (superimposed) +represents models 2/3). +

+ +

+The use of marginal likelihood for model selection is discussed in +greater detail in the +section on structure learning. + + + + +

Maximum likelihood parameter estimation with missing values

+ +Now we consider learning when some values are not observed. +Let us randomly hide half the values generated from the water +sprinkler example. +
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+
+samples2{i,l} is the value of node i in training case l, or [] if unobserved. +

+Now we will compute the MLEs using the EM algorithm. +We need to use an inference algorithm to compute the expected +sufficient statistics in the E step; the M (maximization) step is as +above. +

+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as +follows: +
+plot(LLtrace, 'x-')
+
+Let's display the results after 10 iterations of EM. +
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+
+We can get improved performance by using one or more of the following +methods: + + +Click
here for a discussion of learning +Gaussians, which can cause numerical problems. + +

Parameter tying

+ +In networks with repeated structure (e.g., chains and grids), it is +common to assume that the parameters are the same at every node. This +is called parameter tying, and reduces the amount of data needed for +learning. +

+When we have tied parameters, there is no longer a one-to-one +correspondence between nodes and CPDs. +Rather, each CPD species the parameters for a whole equivalence class +of nodes. +It is easiest to see this by example. +Consider the following hidden Markov +model (HMM) +

+ +

+ +When HMMs are used for semi-infinite processes like speech recognition, +we assume the transition matrix +P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant +or homogenous Markov chain. +Hence hidden nodes 2, 3, ..., T +are all in the same equivalence class, say class Hclass. +Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the +same for all t, so the observed nodes are all in the same equivalence +class, say class Oclass. +Finally, the prior term P(H(1)) is in a class all by itself, say class +H1class. +This is illustrated below, where we explicitly represent the +parameters as random variables (dotted nodes). +

+ +

+In BNT, we cannot represent parameters as random variables (nodes). +Instead, we "hide" the +parameters inside one CPD for each equivalence class, +and then specify that the other CPDs should share these parameters, as +follows. +

+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+
+Finally, we define the parameters for each equivalence class: +
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a +member of e's equivalence class; that is, it is not always the case +that e == j. You can use bnet.rep_of_eclass(e) to return the +representative of equivalence class e. +BNT will look up the parents of j to determine the size +of the CPT to use. It assumes that this is the same for all members of +the equivalence class. +Click here for +a more complex example of parameter tying. +

+Note: +Normally one would define an HMM as a +Dynamic Bayes Net +(see the function BNT/examples/dynamic/mk_chmm.m). +However, one can define an HMM as a static BN using the function +BNT/examples/static/Models/mk_hmm_bnet.m. + + + +

Structure learning

+ +Update (9/29/03): +Phillipe LeRay is developing some additional structure learning code +on top of BNT. Click here +for details. + +

+ +There are two very different approaches to structure learning: +constraint-based and search-and-score. +In the constraint-based approach, +we start with a fully connected graph, and remove edges if certain +conditional independencies are measured in the data. +This has the disadvantage that repeated independence tests lose +statistical power. +

+In the more popular search-and-score approach, +we perform a search through the space of possible DAGs, and either +return the best one found (a point estimate), or return a sample of the +models found (an approximation to the Bayesian posterior). +

+Unfortunately, the number of DAGs as a function of the number of +nodes, G(n), is super-exponential in n. +A closed form formula for G(n) is not known, but the first few values +are shown below (from Cooper, 1999). + + + + + + + + + + + + + +
n G(n)
1 1
2 3
3 25
4 543
5 29,281
6 3,781,503
7 1.1 x 10^9
8 7.8 x 10^11
9 1.2 x 10^15
10 4.2 x 10^18
+ +Since the number of DAGs is super-exponential in the number of nodes, +we cannot exhaustively search the space, so we either use a local +search algorithm (e.g., greedy hill climbining, perhaps with multiple +restarts) or a global search algorithm (e.g., Markov Chain Monte +Carlo). +

+If we know a total ordering on the nodes, +finding the best structure amounts to picking the best set of parents +for each node independently. +This is what the K2 algorithm does. +If the ordering is unknown, we can search over orderings, +which is more efficient than searching over DAGs (Koller and Friedman, 2000). +

+In addition to the search procedure, we must specify the scoring +function. There are two popular choices. The Bayesian score integrates +out the parameters, i.e., it is the marginal likelihood of the model. +The BIC (Bayesian Information Criterion) is defined as +log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is +the ML estimate of the parameters, d is the number of parameters, and +N is the number of data cases. +The BIC method has the advantage of not requiring a prior. +

+BIC can be derived as a large sample +approximation to the marginal likelihood. +(It is also equal to the Minimum Description Length of a model.) +However, in practice, the sample size does not need to be very large +for the approximation to be good. +For example, in the figure below, we plot the ratio between the log marginal likelihood +and the BIC score against data-set size; we see that the ratio rapidly +approaches 1, especially for non-informative priors. +(This plot was generated by the file BNT/examples/static/bic1.m. It +uses the water sprinkler BN with BDeu Dirichlet priors with different +equivalent sample sizes.) + +

+

+ +
+

+ +

+As with parameter learning, handling missing data/ hidden variables is +much harder than the fully observed case. +The structure learning routines in BNT can therefore be classified into 4 +types, analogously to the parameter learning case. +

+ + + + + + + + + + + + + + + + +
Full obsPartial obs
Pointlearn_struct_K2
+ +
not yet supported
Bayeslearn_struct_mcmcnot yet supported
+ + +

Markov equivalence

+ +If two DAGs encode the same conditional independencies, they are +called Markov equivalent. The set of all DAGs can be paritioned into +Markov equivalence classes. Graphs within the same class can +have +the direction of some of their arcs reversed without changing any of +the CI relationships. +Each class can be represented by a PDAG +(partially directed acyclic graph) called an essential graph or +pattern. This specifies which edges must be oriented in a certain +direction, and which may be reversed. + +

+When learning graph structure from observational data, +the best one can hope to do is to identify the model up to Markov +equivalence. To distinguish amongst graphs within the same equivalence +class, one needs interventional data: see the discussion on active learning below. + + + +

Exhaustive search

+ +The brute-force approach to structure learning is to enumerate all +possible DAGs, and score each one. This provides a "gold standard" +with which to compare other algorithms. We can do this as follows. +
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+
+where data(i,m) is the value of node i in case m, +and ns(i) is the size of node i. +If the DAGs have a lot of families in common, we can cache the sufficient statistics, +making this potentially more efficient than scoring the DAGs one at a time. +(Caching is not currently implemented, however.) +

+By default, we use the Bayesian scoring metric, and assume CPDs are +represented by tables with BDeu(1) priors. +We can override these defaults as follows. +If we want to use uniform priors, we can say +

+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+
+params{i} is a cell-array, containing optional arguments that are +passed to the constructor for CPD i. +

+Now suppose we want to use different node types, e.g., +Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both +these CPDs can support discrete and continuous parents, which is +necessary since all other nodes will be considered as parents). +The Bayesian scoring metric currently only works for tabular CPDs, so +we will use BIC: +

+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+
+In practice, one can't enumerate all possible DAGs for N > 5, +but one can evaluate any reasonably-sized set of hypotheses in this +way (e.g., nearest neighbors of your current best guess). +Think of this as "computer assisted model refinement" as opposed to de +novo learning. + + +

K2

+ +The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows. +Initially each node has no parents. It then adds incrementally that parent whose addition most +increases the score of the resulting structure. When the addition of no single +parent can increase the score, it stops adding parents to the node. +Since we are using a fixed ordering, we do not need to check for +cycles, and can choose the parents for each node independently. +

+The original paper used the Bayesian scoring +metric with tabular CPDs and Dirichlet priors. +BNT generalizes this to allow any kind of CPD, and either the Bayesian +scoring metric or BIC, as in the example above. +In addition, you can specify +an optional upper bound on the number of parents for each node. +The file BNT/examples/static/k2demo1.m gives an example of how to use K2. +We use the water sprinkler network and sample 100 cases from it as before. +Then we see how much data it takes to recover the generating structure: +

+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+
+Here are the results. +
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly, +showing that the prior doesn't matter too much.) +In general, we cannot hope to recover the "true" generating structure, +only one that is in its Markov equivalence +class. + + +

Hill-climbing

+ +Hill-climbing starts at a specific point in space, +considers all nearest neighbors, and moves to the neighbor +that has the highest score; if no neighbors have higher +score than the current point (i.e., we have reached a local maximum), +the algorithm stops. One can then restart in another part of the space. +

+A common definition of "neighbor" is all graphs that can be +generated from the current graph by adding, deleting or reversing a +single arc, subject to the acyclicity constraint. +Other neighborhoods are possible: see + +Optimal Structure Identification with Greedy Search, Max +Chickering, JMLR 2002. + + + + +

MCMC

+ +We can use a Markov Chain Monte Carlo (MCMC) algorithm called +Metropolis-Hastings (MH) to search the space of all +DAGs. +The standard proposal distribution is to consider moving to all +nearest neighbors in the sense defined above. +

+The function can be called +as in the following example. +

+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+
+We can convert our set of sampled graphs to a histogram +(empirical posterior over all the DAGs) thus +
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+
+To see how well this performs, let us compute the exact posterior exhaustively. +

+

+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+
+We plot the results below. +(The data set was 100 samples drawn from a random 4 node bnet; see the +file BNT/examples/static/mcmc1.) +
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+
+ +

+We can also plot the acceptance ratio versus number of MCMC steps, +as a crude convergence diagnostic. +

+clf
+plot(accept_ratio)
+
+ +

+Even though the number of samples needed by MCMC is theoretically +polynomial (not exponential) in the dimensionality of the search space, in practice it has been +found that MCMC does not converge in reasonable time for graphs with +more than about 10 nodes. + + + + +

Active structure learning

+ +As was mentioned above, +one can only learn a DAG up to Markov equivalence, even given infinite data. +If one is interested in learning the structure of a causal network, +one needs interventional data. +(By "intervention" we mean forcing a node to take on a specific value, +thereby effectively severing its incoming arcs.) +

+Most of the scoring functions accept an optional argument +that specifies whether a node was observed to have a certain value, or +was forced to have that value: we set clamped(i,m)=1 if node i was +forced in training case m. e.g., see the file +BNT/examples/static/cooper_yoo. +

+An interesting question is to decide which interventions to perform +(c.f., design of experiments). For details, see the following tech +report +

+ + +

Structural EM

+ +Computing the Bayesian score when there is partial observability is +computationally challenging, because the parameter posterior becomes +multimodal (the hidden nodes induce a mixture distribution). +One therefore needs to use approximations such as BIC. +Unfortunately, search algorithms are still expensive, because we need +to run EM at each step to compute the MLE, which is needed to compute +the score of each model. An alternative approach is +to do the local search steps inside of the M step of EM, which is more +efficient since the data has been "filled in" - this is +called the structural EM algorithm (Friedman 1997), and provably +converges to a local maximum of the BIC score. +

+Wei Hu has implemented SEM for discrete nodes. +You can download his package from +here. +Please address all questions about this code to +wei.hu@intel.com. +See also Phl's implementation of SEM. + + + + +

Visualizing the graph

+ +You can visualize an arbitrary graph (such as one learned using the +structure learning routines) with Matlab code contributed by +Ali +Taylan Cemgil +from the University of Nijmegen. +For static BNs, call it as follows: +
+draw_graph(bnet.dag);
+
+For example, this is the output produced on a +random QMR-like model: +

+ +

+If you install the excellent graphhviz, an +open-source graph visualization package from AT&T, +you can create a much better visualization as follows +

+graph_to_dot(bnet.dag)
+
+This works by converting the adjacency matrix to a file suitable +for input to graphviz (using the dot format), +then converting the output of graphviz to postscript, and displaying the results using +ghostview. +You can do each of these steps separately for more control, as shown +below. +
+graph_to_dot(bnet.dag, 'filename', 'foo.dot');
+dot -Tps foo.dot -o foo.ps
+ghostview foo.ps &
+
+ +

Constraint-based methods

+ +The IC algorithm (Pearl and Verma, 1991), +and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993), +computes many conditional independence tests, +and combines these constraints into a +PDAG to represent the whole +Markov equivalence class. +

+IC*/FCI extend IC/PC to handle latent variables: see below. +(IC stands for inductive causation; PC stands for Peter and Clark, +the first names of Spirtes and Glymour; FCI stands for fast causal +inference. +What we, following Pearl (2000), call IC* was called +IC in the original Pearl and Verma paper.) +For details, see +

+ +

+ +The PC algorithm takes as arguments a function f, the number of nodes N, +the maximum fan in K, and additional arguments A which are passed to f. +The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0 +otherwise. +For example, suppose we cheat by +passing in a CI "oracle" which has access to the true DAG; the oracle +tests for d-separation in this DAG, i.e., +f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows. +

+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+
+pdag(i,j) = -1 if there is definitely an i->j arc, +and pdag(i,j) = 1 if there is either an i->j or and i<-j arc. +

+Applied to the sprinkler network, this returns +

+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+
+So as expected, we see that the V-structure at the W node is uniquely identified, +but the other arcs have ambiguous orientation. +

+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS +book. +This example concerns the female orgasm. +We are given a correlation matrix C between 7 measured factors (such +as subjective experiences of coital and masturbatory experiences), +derived from 281 samples, and want to learn a causal model of the +data. We will not discuss the merits of this type of work here, but +merely show how to reproduce the results in the SGS book. +Their program, +Tetrad, +makes use of the Fisher Z-test for conditional +independence, so we do the same: +

+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+
+In this case, the CI test is +
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+
+The results match those of Fig 12a of SGS apart from two edge +differences; presumably this is due to rounding error (although it +could be a bug, either in BNT or in Tetrad). +This example can be found in the file BNT/examples/static/pc2.m. + +

+ +The IC* algorithm (Pearl and Verma, 1991), +and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993), +are like the IC/PC algorithm, except that they can detect the presence +of latent variables. +See the file learn_struct_pdag_ic_star written by Tamar +Kushnir. The output is a matrix P, defined as follows +(see Pearl (2000), p52 for details): +

+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+
+ + +

Philippe Leray's structure learning package

+ +Philippe Leray has written a + +structure learning package that uses BNT. + +It currently (Juen 2003) has the following features: + + + + + + + + + + + + +

Inference engines

+ +Up until now, we have used the junction tree algorithm for inference. +However, sometimes this is too slow, or not even applicable. +In general, there are many inference algorithms each of which make +different tradeoffs between speed, accuracy, complexity and +generality. Furthermore, there might be many implementations of the +same algorithm; for instance, a general purpose, readable version, +and a highly-optimized, specialized one. +To cope with this variety, we treat each inference algorithm as an +object, which we call an inference engine. + +

+An inference engine is an object that contains a bnet and supports the +'enter_evidence' and 'marginal_nodes' methods. The engine constructor +takes the bnet as argument and may do some model-specific processing. +When 'enter_evidence' is called, the engine may do some +evidence-specific processing. Finally, when 'marginal_nodes' is +called, the engine may do some query-specific processing. + +

+The amount of work done when each stage is specified -- structure, +parameters, evidence, and query -- depends on the engine. The cost of +work done early in this sequence can be amortized. On the other hand, +one can make better optimizations if one waits until later in the +sequence. +For example, the parameters might imply +conditional indpendencies that are not evident in the graph structure, +but can nevertheless be exploited; the evidence indicates which nodes +are observed and hence can effectively be disconnected from the +graph; and the query might indicate that large parts of the network +are d-separated from the query nodes. (Since it is not the actual +values of the evidence that matters, just which nodes are observed, +many engines allow you to specify which nodes will be observed when they are constructed, +i.e., before calling 'enter_evidence'. Some engines can still cope if +the actual pattern of evidence is different, e.g., if there is missing +data.) +

+ +Although being maximally lazy (i.e., only doing work when a query is +issued) may seem desirable, +this is not always the most efficient. +For example, +when learning using EM, we need to call marginal_nodes N times, where N is the +number of nodes. Variable elimination would end +up repeating a lot of work +each time marginal_nodes is called, making it inefficient for +learning. The junction tree algorithm, by contrast, uses dynamic +programming to avoid this redundant computation --- it calculates all +marginals in two passes during 'enter_evidence', so calling +'marginal_nodes' takes constant time. +

+We will discuss some of the inference algorithms implemented in BNT +below, and finish with a summary of all +of them. + + + + + + + +

Variable elimination

+ +The variable elimination algorithm, also known as bucket elimination +or peeling, is one of the simplest inference algorithms. +The basic idea is to "push sums inside of products"; this is explained +in more detail +here. +

+The principle of distributing sums over products can be generalized +greatly to apply to any commutative semiring. +This forms the basis of many common algorithms, such as Viterbi +decoding and the Fast Fourier Transform. For details, see + +

+ +

+Choosing an order in which to sum out the variables so as to minimize +computational cost is known to be NP-hard. +The implementation of this algorithm in +var_elim_inf_engine makes no attempt to optimize this +ordering (in contrast, say, to jtree_inf_engine, which uses a +greedy search procedure to find a good ordering). +

+Note: unlike most algorithms, var_elim does all its computational work +inside of marginal_nodes, not inside of +enter_evidence. + + + + +

Global inference methods

+ +The simplest inference algorithm of all is to explicitely construct +the joint distribution over all the nodes, and then to marginalize it. +This is implemented in global_joint_inf_engine. +Since the size of the joint is exponential in the +number of discrete (hidden) nodes, this is not a very practical algorithm. +It is included merely for pedagogical and debugging purposes. +

+Three specialized versions of this algorithm have also been implemented, +corresponding to the cases where all the nodes are discrete (D), all +are Gaussian (G), and some are discrete and some Gaussian (CG). +They are called enumerative_inf_engine, +gaussian_inf_engine, +and cond_gauss_inf_engine respectively. +

+Note: unlike most algorithms, these global inference algorithms do all their computational work +inside of marginal_nodes, not inside of +enter_evidence. + + +

Quickscore

+ +The junction tree algorithm is quite slow on the QMR network, +since the cliques are so big. +One simple trick we can use is to notice that hidden leaves do not +affect the posteriors on the roots, and hence do not need to be +included in the network. +A second trick is to notice that the negative findings can be +"absorbed" into the prior: +see the file +BNT/examples/static/mk_minimal_qmr_bnet for details. +

+ +A much more significant speedup is obtained by exploiting special +properties of the noisy-or node, as done by the quickscore +algorithm. For details, see +

+ +This has been implemented in BNT as a special-purpose inference +engine, which can be created and used as follows: +
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+
+ + +

Belief propagation

+ +Even using quickscore, exact inference takes time that is exponential +in the number of positive findings. +Hence for large networks we need to resort to approximate inference techniques. +See for example + +The latter approximation +entails applying Pearl's belief propagation algorithm to a model even +if it has loops (hence the name loopy belief propagation). +Pearl's algorithm, implemented as pearl_inf_engine, gives +exact results when applied to singly-connected graphs +(a.k.a. polytrees, since +the underlying undirected topology is a tree, but a node may have +multiple parents). +To apply this algorithm to a graph with loops, +use pearl_inf_engine. +This can use a centralized or distributed message passing protocol. +You can use it as in the following example. +
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+
+We found that this algorithm often converges, and when it does, often +is very accurate, but it depends on the precise setting of the +parameter values of the network. +(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.) +Understanding when and why belief propagation converges/ works +is a topic of ongoing research. +

+pearl_inf_engine can exploit special structure in noisy-or +and gmux nodes to compute messages efficiently. +

+belprop_inf_engine is like pearl, but uses potentials to +represent messages. Hence this is slower. +

+belprop_fg_inf_engine is like belprop, +but is designed for factor graphs. + + + +

Sampling

+ +BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms: + +Note: To generate samples from a network (which is not the same as inference!), +use sample_bnet. + + + +

Summary of inference engines

+ + +The inference engines differ in many ways. Here are +some of the major "axes": + + +

+In terms of topology, most engines handle any kind of DAG. +belprop_fg does approximate inference on factor graphs (FG), which +can be used to represent directed, undirected, and mixed (chain) +graphs. +(In the future, we plan to support exact inference on chain graphs.) +quickscore only works on QMR-like models. +

+In terms of node types: algorithms that use potentials can handle +discrete (D), Gaussian (G) or conditional Gaussian (CG) models. +Sampling algorithms can essentially handle any kind of node (distribution). +Other algorithms make more restrictive assumptions in exchange for +speed. +

+Finally, most algorithms are designed to give the exact answer. +The belief propagation algorithms are exact if applied to trees, and +in some other cases. +Sampling is considered approximate, even though, in the limit of an +infinite number of samples, it gives the exact answer. + +

+ +Here is a summary of the properties +of all the engines in BNT which work on static networks. +

+ +
+ + + + + + + + + + + + + + + +
Name +Exact? +Node type? +topology +
belprop + approx + D + DAG +
belprop_fg + approx + D + factor graph +
cond_gauss + exact + CG + DAG +
enumerative + exact + D + DAG +
gaussian + exact + G + DAG +
gibbs + approx + D + DAG +
global_joint + exact + D,G,CG + DAG +
jtree + exact + D,G,CG + DAG +b
likelihood_weighting + approx + any + DAG +
pearl + approx + D,G + DAG +
pearl + exact + D,G + polytree +
quickscore + exact + noisy-or + QMR +
stab_cond_gauss + exact + CG + DAG +
var_elim + exact + D,G,CG + DAG +
+ + + +

Influence diagrams/ decision making

+ +BNT implements an exact algorithm for solving LIMIDs (limited memory +influence diagrams), described in + +LIMIDs explicitely show all information arcs, rather than implicitely +assuming no forgetting. This allows them to model forgetful +controllers. +

+See the examples in BNT/examples/limids for details. + + + + +

DBNs, HMMs, Kalman filters and all that

+ +Click here for documentation about how to +use BNT for dynamical systems and sequence data. + + + diff --git a/sourcecodes/bnt-master/docs/usage_cropped.html b/sourcecodes/bnt-master/docs/usage_cropped.html new file mode 100644 index 00000000..11bb4e12 --- /dev/null +++ b/sourcecodes/bnt-master/docs/usage_cropped.html @@ -0,0 +1,3232 @@ + +How to use the Bayes Net Toolbox + + + + + +

How to use the Bayes Net Toolbox

+ +This documentation was last updated on 13 November 2002. +
+Click here for a list of changes made to +BNT. +
+Click +here +for a French version of this documentation (which might not +be up-to-date). + + +

+ +

+ + + + + + +

Installation

+ +

Installing the Matlab code

+ + + + +If you are new to Matlab, you might like to check out +some useful Matlab tips. +For instance, this explains how to create a startup file, which can be +used to set your path variable automatically, so you can avoid having +to type the above commands every time. + + + + +

Installing the C code

+ +Some BNT functions also have C implementations. +It is not necessary to install the C code, but it can result in a speedup +of a factor of 2-5 of certain simple functions. +To install all the C code, +edit installC_BNT.m so it contains the right path, +then type installC_BNT. +To uninstall all the C code, +edit uninstallC_BNT.m so it contains the right path, +then type uninstallC_BNT. +For an up-to-date list of the files which have C implementations, see +BNT/installC_BNT.m. + +

+mex is a script that lets you call C code from Matlab - it does not compile matlab to +C (see mcc below). +If your C/C++ compiler is set up correctly, mex should work out of +the box. (Matlab 6 now ships with its own minimal C compiler.) +If not, you might need to type +

+ mex -setup +

+before calling installC. +

+To make mex call gcc on Windows, +you must install gnumex. +You can use the minimalist GNU for +Windows version of gcc, or +the cygwin version. +

+In general, typing +'mex foo.c' from inside Matlab creates a file called +'foo.mexglx' or 'foo.dll' (the exact file +extension is system dependent - on Linux it is 'mexglx', on Windows it is '.dll'). +The resulting file will hide the original 'foo.m' (if it existed), i.e., +typing 'foo' at the prompt will call the compiled C version. +To reveal the original matlab version, just delete foo.mexglx (this is +what uninstallC does). +

+Sometimes it takes time for Matlab to realize that the file has +changed from matlab to C or vice versa; try typing 'clear all' or +restarting Matlab to refresh it. +To find out which version of a file you are running, type +'which foo'. +

+mcc, the +Matlab to C compiler, is a separate product, +and is quite different from mex. It does not yet support +objects/classes, which is why we can't compile all of BNT to C automatically. +Also, hand-written C code is usually much +better than the C code generated by mcc. + + +

+Acknowledgements: +Although I wrote some of the C code, most of +the C code (e.g., for jtree and dpot) was written by Wei Hu; +the triangulation C code was written by Ilya Shpitser. + + +

Creating your first Bayes net

+ +To define a Bayes net, you must specify the graph structure and then +the parameters. We look at each in turn, using a simple example +(adapted from Russell and +Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall, +1995, p454). + + +

Graph structure

+ + +Consider the following network. + +

+

+ +
+

+ +

+To specify this directed acyclic graph (dag), we create an adjacency matrix: +

+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+
+

+We have numbered the nodes as follows: +Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4. +The nodes must always be numbered in topological order, i.e., +ancestors before descendants. +For a more complicated graph, this is a little inconvenient: we will +see how to get around this below. +

+ + + +

Summary of CPD types

+ +We list all the different types of CPDs supported by BNT. +For each CPD, we specify if the child and parents can be discrete (D) or +continuous (C) (Binary (B) nodes are a special case). +We also specify which methods each class supports. +If a method is inherited, the name of the parent class is mentioned. +If a parent class calls a child method, this is mentioned. +

+The CPD_to_CPT method converts a CPD to a table; this +requires that the child and all parents are discrete. +The CPT might be exponentially big... +convert_to_table evaluates a CPD with evidence, and +represents the the resulting potential as an array. +This requires that the child is discrete, and any continuous parents +are observed. +convert_to_pot evaluates a CPD with evidence, and +represents the resulting potential as a dpot, gpot, cgpot or upot, as +requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u = +utility). + +

+When we sample a node, all the parents are observed. +When we compute the (log) probability of a node, all the parents and +the child are observed. +

+We also specify if the parameters are learnable. +For learning with EM, we require +the methods reset_ess, update_ess and +maximize_params. +For learning from fully observed data, we require +the method learn_params. +By default, all classes inherit this from generic_CPD, which simply +calls update_ess N times, once for each data case, followed +by maximize_params, i.e., it is like EM, without the E step. +Some classes implement a batch formula, which is quicker. +

+Bayesian learning means computing a posterior over the parameters +given fully observed data. +

+Pearl means we implement the methods compute_pi and +compute_lambda_msg, used by +pearl_inf_engine, which runs on directed graphs. +belprop_inf_engine only needs convert_to_pot.H +The pearl methods can exploit special properties of the CPDs for +computing the messages efficiently, whereas belprop does not. +

+The only method implemented by generic_CPD is adjustable_CPD, +which is not shown, since it is not very interesting. + + +

+ + + +
+ + + + + + + + + + + + +
Name +Child +Parents +Comments +CPD_to_CPT +conv_to_table +conv_to_pot +sample +prob +learn +Bayes +Pearl + + +
+ + + + + + + + + + + + +
boolean +B +B +Syntactic sugar for tabular +- +- +- +- +- +- +- +- + +
deterministic +D +D +Syntactic sugar for tabular +- +- +- +- +- +- +- +- + +
Discrete +D +C/D +Virtual class +N +Calls CPD_to_CPT +Calls conv_to_table +Calls conv_to_table +Calls conv_to_table +N +N +N + +
Gaussian +C +C/D +- +N +N +Y +Y +Y +Y +N +N + +
gmux +C +C/D +multiplexer +N +N +Y +N +N +N +N +Y + + +
MLP +D +C/D +multi layer perceptron +N +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +N +N + + +
noisy-or +B +B +- +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Inherits from discrete +N +N +Y + + +
root +C/D +none +no params +N +N +Y +Y +Y +N +N +N + + +
softmax +D +C/D +- +N +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +N +N + + +
generic +C/D +C/D +Virtual class +N +N +N +N +N +N +N +N + + +
Tabular +D +D +- +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +Y +Y + +
+ + + +

Example models

+ + +

Gaussian mixture models

+ +Richard W. DeVaul has made a detailed tutorial on how to fit mixtures +of Gaussians using BNT. Available +
here. + + +

PCA, ICA, and all that

+ +In Figure (a) below, we show how Factor Analysis can be thought of as a +graphical model. Here, X has an N(0,I) prior, and +Y|X=x ~ N(mu + Wx, Psi), +where Psi is diagonal and W is called the "factor loading matrix". +Since the noise on both X and Y is diagonal, the components of these +vectors are uncorrelated, and hence can be represented as individual +scalar nodes, as we show in (b). +(This is useful if parts of the observations on the Y vector are occasionally missing.) +We usually take k=|X| << |Y|=D, so the model tries to explain +many observations using a low-dimensional subspace. + + +
+ + + +
+ + + +
(a) + (b) + (c) + (d) +
+
+ +

+We can create this model in BNT as follows. +

+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+
+ +The root node is clamped to the N(0,I) distribution, so that we will +not update these parameters during learning. +The mean of the leaf node is clamped to 0, +since we assume the data has been centered (had its mean subtracted +off); this is just for simplicity. +Finally, the covariance of the leaf node is constrained to be +diagonal. W0 and Psi0 are the initial parameter guesses. + +

+We can fit this model (i.e., estimate its parameters in a maximum +likelihood (ML) sense) using EM, as we +explain below. +Not surprisingly, the ML estimates for mu and Psi turn out to be +identical to the +sample mean and variance, which can be computed directly as +

+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+
+Note that W can only be identified up to a rotation matrix, because of +the spherical symmetry of the source. + +

+If we restrict Psi to be spherical, i.e., Psi = sigma*I, +there is a closed-form solution for W as well, +i.e., we do not need to use EM. +In particular, W contains the first |X| eigenvectors of the sample covariance +matrix, with scalings determined by the eigenvalues and sigma. +Classical PCA can be obtained by taking the sigma->0 limit. +For details, see + +

+ +

+By adding a hidden discrete variable, we can create mixtures of FA +models, as shown in (c). +Now we can explain the data using a set of subspaces. +We can create this model in BNT as follows. +

+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+
+Notice how the covariance matrix for Y is the same for all values of +Q; that is, the noise level in each sub-space is assumed the same. +However, we allow the offset, mu, to vary. +For details, see + + +

+I have included Zoubin's specialized MFA code (with his permission) +with the toolbox, so you can check that BNT gives the same results: +see 'BNT/examples/static/mfa1.m'. + +

+Independent Factor Analysis (IFA) generalizes FA by allowing a +non-Gaussian prior on each component of X. +(Note that we can approximate a non-Gaussian prior using a mixture of +Gaussians.) +This means that the likelihood function is no longer rotationally +invariant, so we can uniquely identify W and the hidden +sources X. +IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y). +We recover classical Independent Components Analysis (ICA) +in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the +weight matrix W is square and invertible. +For details, see +

+ + + +

Mixtures of experts

+ +As an example of the use of the softmax function, +we introduce the Mixture of Experts model. + +As before, +circles denote continuous-valued nodes, +squares denote discrete nodes, clear +means hidden, and shaded means observed. +

+

+ + +
+ +
+
+

+X is the observed +input, Y is the output, and +the Q nodes are hidden "gating" nodes, which select the appropriate +set of parameters for Y. During training, Y is assumed observed, +but for testing, the goal is to predict Y given X. +Note that this is a conditional density model, so we don't +associate any parameters with X. +Hence X's CPD will be a root CPD, which is a way of modelling +exogenous nodes. +If the output is a continuous-valued quantity, +we assume the "experts" are linear-regression units, +and set Y's CPD to linear-Gaussian. +If the output is discrete, we set Y's CPD to a softmax function. +The Q CPDs will always be softmax functions. + +

+As a concrete example, consider the mixture of experts model where X and Y are +scalars, and Q is binary. +This is just piecewise linear regression, where +we have two line segments, i.e., +

+ +

+We can create this model with random parameters as follows. +(This code is bundled in BNT/examples/static/mixexp2.m.) +

+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+
+Now let us fit this model using
EM. +First we load the data (1000 training cases) and plot them. +

+

+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+
+

+

+ +
+

+This is what the model looks like before training. +(Thanks to Thomas Hofman for writing this plotting routine.) +

+

+ +
+

+Now let's train the model, and plot the final performance. +(We will discuss how to train models in more detail below.) +

+

+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+
+(We specify which nodes will be observed when we create the engine. +Hence BNT knows that the hidden nodes are all discrete. +For complex models, this can lead to a significant speedup.) +Below we show what the model looks like after 16 iterations of EM +(with 100 IRLS iterations per M step), when it converged +using the default convergence tolerance (that the +fractional change in the log-likelihood be less than 1e-3). +Before learning, the log-likelihood was +-322.927442; afterwards, it was -13.728778. +

+

+ +
+(See BNT/examples/static/mixexp2.m for details of the code.) + + + +

Hierarchical mixtures of experts

+ +A hierarchical mixture of experts (HME) extends the mixture of experts +model by having more than one hidden node. A two-level example is shown below, along +with its more traditional representation as a neural network. +This is like a (balanced) probabilistic decision tree of height 2. +

+

+ +
+

+Pierpaolo Brutti +has written an extensive set of routines for HMEs, +which are bundled with BNT: see the examples/static/HME directory. +These routines allow you to choose the number of hidden (gating) +layers, and the form of the experts (softmax or MLP). +See the file hmemenu, which provides a demo. +For example, the figure below shows the decision boundaries learned +for a ternary classification problem, using a 2 level HME with softmax +gates and softmax experts; the training set is on the left, the +testing set on the right. +

+

+ + +
+

+ + +

+For more details, see the following: +

+ + +

QMR

+ +Bayes nets originally arose out of an attempt to add probabilities to +expert systems, and this is still the most common use for BNs. +A famous example is +QMR-DT, a decision-theoretic reformulation of the Quick Medical +Reference (QMR) model. +

+

+ +
+Here, the top layer represents hidden disease nodes, and the bottom +layer represents observed symptom nodes. +The goal is to infer the posterior probability of each disease given +all the symptoms (which can be present, absent or unknown). +Each node in the top layer has a Bernoulli prior (with a low prior +probability that the disease is present). +Since each node in the bottom layer has a high fan-in, we use a +noisy-OR parameterization; each disease has an independent chance of +causing each symptom. +The real QMR-DT model is copyright, but +we can create a random QMR-like model as follows. +
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+
+In the file BNT/examples/static/qmr1, we create a random bipartite +graph G, with 5 diseases and 10 findings, and random parameters. +(In general, to create a random dag, use 'mk_random_dag'.) +We can visualize the resulting graph structure using +the methods discussed
below, with the +following results: +

+ + +

+Now let us put some random evidence on all the leaves except the very +first and very last, and compute the disease posteriors. +

+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+
+Junction tree can be quite slow on large QMR models. +Fortunately, it is possible to exploit properties of the noisy-OR +function to speed up exact inference using an algorithm called +quickscore, discussed below. + + + + + +

Conditional Gaussian models

+ +A conditional Gaussian model is one in which, conditioned on all the discrete +nodes, the distribution over the remaining (continuous) nodes is +multivariate Gaussian. This means we can have arcs from discrete (D) +to continuous (C) nodes, but not vice versa. +(We are allowed C->D arcs if the continuous nodes are observed, +as in the mixture of experts model, +since this distribution can be represented with a discrete potential.) +

+We now give an example of a CG model, from +the paper "Propagation of Probabilities, Means amd +Variances in Mixed Graphical Association Models", Steffen Lauritzen, +JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert +Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and +D. J. Spiegelhalter, Springer, 1999.) + +

Specifying the graph

+ +Consider the model of waste emissions from an incinerator plant shown below. +We follow the standard convention that shaded nodes are observed, +clear nodes are hidden. +We also use the non-standard convention that +square nodes are discrete (tabular) and round nodes are +Gaussian. + +

+

+ +
+

+ +We can create this model as follows. +

+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous +nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'. +

+ + +

Specifying the parameters

+ +The parameters of the discrete nodes can be specified as follows. +
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+
+ +

+The parameters of the continuous nodes can be specified as follows. +

+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+
+ + +

Inference

+ + +First we compute the unconditional marginals. +
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+
+ +'marg' is a structure that contains the fields 'mu' and 'Sigma', which +contain the mean and (co)variance of the marginal on E. +In this case, they are both scalars. +Let us check they match the published figures (to 2 decimal places). + +
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+
+We can compute the other posteriors similarly. +Now let us add some evidence. +
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+
+Now we find +
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+
+ + +We can also compute the joint probability on a set of nodes. +For example, P(D, Mout | evidence) is a 2D Gaussian: +
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+
+The mean is +
+marg.mu
+ans =
+    3.6077
+    4.1077
+
+and the covariance matrix is +
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+
+It is easy to visualize this posterior using standard Matlab plotting +functions, e.g., +
+gaussplot2d(marg.mu, marg.Sigma);
+
+produces the following picture. + +

+

+ +
+

+ + +The T field indicates that the mixing weight of this Gaussian +component is 1.0. +If the joint contains discrete and continuous variables, the result +will be a mixture of Gaussians, e.g., +

+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+
+The interpretation is +Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ]. +In this case, E is a scalar, so i=j=1; k specifies the mixture component. +

+We saw in the sprinkler network that BNT sets the effective size of +observed discrete nodes to 1, since they only have one legal value. +For continuous nodes, BNT sets their length to 0, +since they have been reduced to a point. +For example, +

+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+
+It is simple to post-process the output of marginal_nodes. +For example, the file BNT/examples/static/cg1 sets the mu term of +observed nodes to their observed value, and the Sigma term to 0 (since +observed nodes have no variance). + +

+Note that the implemented version of the junction tree is numerically +unstable when using CG potentials +(which is why, in the example above, we only required our answers to agree with +the published ones to 2dp.) +This is why you might want to use stab_cond_gauss_inf_engine, +implemented by Shan Huang. This is described in + +

+ +However, even the numerically stable version +can be computationally intractable if there are many hidden discrete +nodes, because the number of mixture components grows exponentially e.g., in a +
switching linear dynamical system. +In general, one must resort to approximate inference techniques: see +the discussion on inference engines below. + + +

Other hybrid models

+ +When we have C->D arcs, where C is hidden, we need to use +approximate inference. +One approach (not implemented in BNT) is described in + +Of course, one can always use sampling methods +for approximate inference in such models. + + + +

Parameter Learning

+ +The parameter estimation routines in BNT can be classified into 4 +types, depending on whether the goal is to compute +a full (Bayesian) posterior over the parameters or just a point +estimate (e.g., Maximum Likelihood or Maximum A Posteriori), +and whether all the variables are fully observed or there is missing +data/ hidden variables (partial observability). +

+ + + + + + + + + + + + + + + + + +
Full obsPartial obs
Pointlearn_paramslearn_params_em
Bayesbayes_update_paramsnot yet supported
+ + +

Loading data from a file

+ +To load numeric data from an ASCII text file called 'dat.txt', where each row is a +case and columns are separated by white-space, such as +
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+
+you can use +
+data = load('dat.txt');
+
+or +
+load dat.txt -ascii
+
+In the latter case, the data is stored in a variable called 'dat' (the +filename minus the extension). +Alternatively, suppose the data is stored in a .csv file (has commas +separating the columns, and contains a header line), such as +
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+
+You can load this using +
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+
+If your file is not in either of these formats, you can either use Perl to convert +it to this format, or use the Matlab scanf command. +Type + +help iofun + +for more information on Matlab's file functions. + +

+BNT learning routines require data to be stored in a cell array. +data{i,m} is the value of node i in case (example) m, i.e., each +column is a case. +If node i is not observed in case m (missing value), set +data{i,m} = []. +(Not all the learning routines can cope with such missing values, however.) +In the special case that all the nodes are observed and are +scalar-valued (as opposed to vector-valued), the data can be +stored in a matrix (as opposed to a cell-array). +

+Suppose, as in the mixture of experts example, +that we have 3 nodes in the graph: X(1) is the observed input, X(3) is +the observed output, and X(2) is a hidden (gating) node. We can +create the dataset as follows. +

+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+
+Notice how we transposed the data, to convert rows into columns. +Also, cases{2,m} = [] for all m, since X(2) is always hidden. + + +

Maximum likelihood parameter estimation from complete data

+ +As an example, let's generate some data from the sprinkler network, randomize the parameters, +and then try to recover the original model. +First we create some training data using forwards sampling. +
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+
+samples{j,i} contains the value of the j'th node in case i. +sample_bnet returns a cell array because, in general, each node might +be a vector of different length. +In this case, all nodes are discrete (and hence scalars), so we +could have used a regular array instead (which can be quicker): +
+data = cell2num(samples);
+
+Now we create a network with random parameters. +(The initial values of bnet2 don't matter in this case, since we can find the +globally optimal MLE independent of where we start.) +
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+
+Finally, we find the maximum likelihood estimates of the parameters. +
+bnet3 = learn_params(bnet2, samples);
+
+To view the learned parameters, we use a little Matlab hackery. +
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+
+Here are the parameters learned for node 4. +
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+
+So we see that the learned parameters are fairly close to the "true" +ones, which we display below. +
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+
+We can get better results by using a larger training set, or using +informative priors (see
below). + + + +

Parameter priors

+ +Currently, only tabular CPDs can have priors on their parameters. +The conjugate prior for a multinomial is the Dirichlet. +(For binary random variables, the multinomial is the same as the +Bernoulli, and the Dirichlet is the same as the Beta.) +

+The Dirichlet has a simple interpretation in terms of pseudo counts. +If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the +training set, where Pa_i are the parents of X_i, +then the maximum likelihood (ML) estimate is +T_ijk = N_ijk / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0. +To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this +event was not seen in the training set, +we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk) +of times in the past. +The MAP (maximum a posterior) estimate is then +

+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+
+and is never 0 if all alpha_ijk > 0. +For example, consider the network A->B, where A is binary and B has 3 +values. +A uniform prior for B has the form +
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+
+which can be created using +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+
+This prior does not satisfy the likelihood equivalence principle, +which says that
Markov equivalent models +should have the same marginal likelihood. +A prior that does satisfy this principle is shown below. +Heckerman (1995) calls this the +BDeu prior (likelihood equivalent uniform Bayesian Dirichlet). +
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+
+where we put N/(q*r) in each bin; N is the equivalent sample size, +r=|A|, q = |B|. +This can be created as follows +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+
+Here, 1 is the equivalent sample size, and is the strength of the +prior. +You can change this using +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+
+ + + + +

(Sequential) Bayesian parameter updating from complete data

+ +If we use conjugate priors and have fully observed data, we can +compute the posterior over the parameters in batch form as follows. +
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts, +and bnet.CPD{i}.CPT is set to the mean of the posterior (the +normalized counts). +(Hence if the initial pseudo counts are 0, +bayes_update_params and learn_params will give the +same result.) + + + + +

+We can compute the same result sequentially (on-line) as follows. +

+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+
+ +The file BNT/examples/static/StructLearn/model_select1 has an example of +sequential model selection which uses the same idea. +We generate data from the model A->B +and compute the posterior prob of all 3 dags on 2 nodes: + (1) A B, (2) A <- B , (3) A -> B +Models 2 and 3 are
Markov equivalent, and therefore indistinguishable from +observational data alone, so we expect their posteriors to be the same +(assuming a prior which satisfies likelihood equivalence). +If we use random parameters, the "true" model only gets a higher posterior after 2000 trials! +However, if we make B a noisy NOT gate, the true model "wins" after 12 +trials, as shown below (red = model 1, blue/green (superimposed) +represents models 2/3). +

+ +

+The use of marginal likelihood for model selection is discussed in +greater detail in the +section on structure learning. + + + + +

Maximum likelihood parameter estimation with missing values

+ +Now we consider learning when some values are not observed. +Let us randomly hide half the values generated from the water +sprinkler example. +
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+
+samples2{i,l} is the value of node i in training case l, or [] if unobserved. +

+Now we will compute the MLEs using the EM algorithm. +We need to use an inference algorithm to compute the expected +sufficient statistics in the E step; the M (maximization) step is as +above. +

+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as +follows: +
+plot(LLtrace, 'x-')
+
+Let's display the results after 10 iterations of EM. +
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+
+We can get improved performance by using one or more of the following +methods: + + +

Numerical problems when fitting +Gaussians using EM

+ +When fitting a Gaussian CPD using EM, you +might encounter some numerical +problems. See here +for a discussion of this in the context of HMMs. + + + +

Parameter tying

+ +In networks with repeated structure (e.g., chains and grids), it is +common to assume that the parameters are the same at every node. This +is called parameter tying, and reduces the amount of data needed for +learning. +

+When we have tied parameters, there is no longer a one-to-one +correspondence between nodes and CPDs. +Rather, each CPD species the parameters for a whole equivalence class +of nodes. +It is easiest to see this by example. +Consider the following hidden Markov +model (HMM) +

+ +

+ +When HMMs are used for semi-infinite processes like speech recognition, +we assume the transition matrix +P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant +or homogenous Markov chain. +Hence hidden nodes 2, 3, ..., T +are all in the same equivalence class, say class Hclass. +Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the +same for all t, so the observed nodes are all in the same equivalence +class, say class Oclass. +Finally, the prior term P(H(1)) is in a class all by itself, say class +H1class. +This is illustrated below, where we explicitly represent the +parameters as random variables (dotted nodes). +

+ +

+In BNT, we cannot represent parameters as random variables (nodes). +Instead, we "hide" the +parameters inside one CPD for each equivalence class, +and then specify that the other CPDs should share these parameters, as +follows. +

+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+
+Finally, we define the parameters for each equivalence class: +
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a +member of e's equivalence class; that is, it is not always the case +that e == j. You can use bnet.rep_of_eclass(e) to return the +representative of equivalence class e. +BNT will look up the parents of j to determine the size +of the CPT to use. It assumes that this is the same for all members of +the equivalence class. +Click here for +a more complex example of parameter tying. +

+Note: +Normally one would define an HMM as a +Dynamic Bayes Net +(see the function BNT/examples/dynamic/mk_chmm.m). +However, one can define an HMM as a static BN using the function +BNT/examples/static/Models/mk_hmm_bnet.m. + + + +

Structure learning

+ +Update (9/29/03): +Phillipe LeRay is developing some additional structure learning code +on top of BNT. Click here +for details. + +

+ +There are two very different approaches to structure learning: +constraint-based and search-and-score. +In the constraint-based approach, +we start with a fully connected graph, and remove edges if certain +conditional independencies are measured in the data. +This has the disadvantage that repeated independence tests lose +statistical power. +

+In the more popular search-and-score approach, +we perform a search through the space of possible DAGs, and either +return the best one found (a point estimate), or return a sample of the +models found (an approximation to the Bayesian posterior). +

+Unfortunately, the number of DAGs as a function of the number of +nodes, G(n), is super-exponential in n. +A closed form formula for G(n) is not known, but the first few values +are shown below (from Cooper, 1999). + + + + + + + + + + + + + +
n G(n)
1 1
2 3
3 25
4 543
5 29,281
6 3,781,503
7 1.1 x 10^9
8 7.8 x 10^11
9 1.2 x 10^15
10 4.2 x 10^18
+ +Since the number of DAGs is super-exponential in the number of nodes, +we cannot exhaustively search the space, so we either use a local +search algorithm (e.g., greedy hill climbining, perhaps with multiple +restarts) or a global search algorithm (e.g., Markov Chain Monte +Carlo). +

+If we know a total ordering on the nodes, +finding the best structure amounts to picking the best set of parents +for each node independently. +This is what the K2 algorithm does. +If the ordering is unknown, we can search over orderings, +which is more efficient than searching over DAGs (Koller and Friedman, 2000). +

+In addition to the search procedure, we must specify the scoring +function. There are two popular choices. The Bayesian score integrates +out the parameters, i.e., it is the marginal likelihood of the model. +The BIC (Bayesian Information Criterion) is defined as +log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is +the ML estimate of the parameters, d is the number of parameters, and +N is the number of data cases. +The BIC method has the advantage of not requiring a prior. +

+BIC can be derived as a large sample +approximation to the marginal likelihood. +(It is also equal to the Minimum Description Length of a model.) +However, in practice, the sample size does not need to be very large +for the approximation to be good. +For example, in the figure below, we plot the ratio between the log marginal likelihood +and the BIC score against data-set size; we see that the ratio rapidly +approaches 1, especially for non-informative priors. +(This plot was generated by the file BNT/examples/static/bic1.m. It +uses the water sprinkler BN with BDeu Dirichlet priors with different +equivalent sample sizes.) + +

+

+ +
+

+ +

+As with parameter learning, handling missing data/ hidden variables is +much harder than the fully observed case. +The structure learning routines in BNT can therefore be classified into 4 +types, analogously to the parameter learning case. +

+ + + + + + + + + + + + + + + + +
Full obsPartial obs
Pointlearn_struct_K2
+ +
not yet supported
Bayeslearn_struct_mcmcnot yet supported
+ + +

Markov equivalence

+ +If two DAGs encode the same conditional independencies, they are +called Markov equivalent. The set of all DAGs can be paritioned into +Markov equivalence classes. Graphs within the same class can +have +the direction of some of their arcs reversed without changing any of +the CI relationships. +Each class can be represented by a PDAG +(partially directed acyclic graph) called an essential graph or +pattern. This specifies which edges must be oriented in a certain +direction, and which may be reversed. + +

+When learning graph structure from observational data, +the best one can hope to do is to identify the model up to Markov +equivalence. To distinguish amongst graphs within the same equivalence +class, one needs interventional data: see the discussion on active learning below. + + + +

Exhaustive search

+ +The brute-force approach to structure learning is to enumerate all +possible DAGs, and score each one. This provides a "gold standard" +with which to compare other algorithms. We can do this as follows. +
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+
+where data(i,m) is the value of node i in case m, +and ns(i) is the size of node i. +If the DAGs have a lot of families in common, we can cache the sufficient statistics, +making this potentially more efficient than scoring the DAGs one at a time. +(Caching is not currently implemented, however.) +

+By default, we use the Bayesian scoring metric, and assume CPDs are +represented by tables with BDeu(1) priors. +We can override these defaults as follows. +If we want to use uniform priors, we can say +

+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+
+params{i} is a cell-array, containing optional arguments that are +passed to the constructor for CPD i. +

+Now suppose we want to use different node types, e.g., +Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both +these CPDs can support discrete and continuous parents, which is +necessary since all other nodes will be considered as parents). +The Bayesian scoring metric currently only works for tabular CPDs, so +we will use BIC: +

+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+
+In practice, one can't enumerate all possible DAGs for N > 5, +but one can evaluate any reasonably-sized set of hypotheses in this +way (e.g., nearest neighbors of your current best guess). +Think of this as "computer assisted model refinement" as opposed to de +novo learning. + + +

K2

+ +The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows. +Initially each node has no parents. It then adds incrementally that parent whose addition most +increases the score of the resulting structure. When the addition of no single +parent can increase the score, it stops adding parents to the node. +Since we are using a fixed ordering, we do not need to check for +cycles, and can choose the parents for each node independently. +

+The original paper used the Bayesian scoring +metric with tabular CPDs and Dirichlet priors. +BNT generalizes this to allow any kind of CPD, and either the Bayesian +scoring metric or BIC, as in the example above. +In addition, you can specify +an optional upper bound on the number of parents for each node. +The file BNT/examples/static/k2demo1.m gives an example of how to use K2. +We use the water sprinkler network and sample 100 cases from it as before. +Then we see how much data it takes to recover the generating structure: +

+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+
+Here are the results. +
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly, +showing that the prior doesn't matter too much.) +In general, we cannot hope to recover the "true" generating structure, +only one that is in its Markov equivalence +class. + + +

Hill-climbing

+ +Hill-climbing starts at a specific point in space, +considers all nearest neighbors, and moves to the neighbor +that has the highest score; if no neighbors have higher +score than the current point (i.e., we have reached a local maximum), +the algorithm stops. One can then restart in another part of the space. +

+A common definition of "neighbor" is all graphs that can be +generated from the current graph by adding, deleting or reversing a +single arc, subject to the acyclicity constraint. +Other neighborhoods are possible: see + +Optimal Structure Identification with Greedy Search, Max +Chickering, JMLR 2002. + + + + +

MCMC

+ +We can use a Markov Chain Monte Carlo (MCMC) algorithm called +Metropolis-Hastings (MH) to search the space of all +DAGs. +The standard proposal distribution is to consider moving to all +nearest neighbors in the sense defined above. +

+The function can be called +as in the following example. +

+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+
+We can convert our set of sampled graphs to a histogram +(empirical posterior over all the DAGs) thus +
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+
+To see how well this performs, let us compute the exact posterior exhaustively. +

+

+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+
+We plot the results below. +(The data set was 100 samples drawn from a random 4 node bnet; see the +file BNT/examples/static/mcmc1.) +
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+
+ +

+We can also plot the acceptance ratio versus number of MCMC steps, +as a crude convergence diagnostic. +

+clf
+plot(accept_ratio)
+
+ +

+Better convergence diagnostics can be found +here +

+Even though the number of samples needed by MCMC is theoretically +polynomial (not exponential) in the dimensionality of the search space, in practice it has been +found that MCMC does not converge in reasonable time for graphs with +more than about 10 nodes. +

+ +Dirk Husmeier has extended MCMC model selection to DBNs. + + +

Active structure learning

+ +As was mentioned above, +one can only learn a DAG up to Markov equivalence, even given infinite data. +If one is interested in learning the structure of a causal network, +one needs interventional data. +(By "intervention" we mean forcing a node to take on a specific value, +thereby effectively severing its incoming arcs.) +

+Most of the scoring functions accept an optional argument +that specifies whether a node was observed to have a certain value, or +was forced to have that value: we set clamped(i,m)=1 if node i was +forced in training case m. e.g., see the file +BNT/examples/static/cooper_yoo. +

+An interesting question is to decide which interventions to perform +(c.f., design of experiments). For details, see the following tech +report +

+ + +

Structural EM

+ +Computing the Bayesian score when there is partial observability is +computationally challenging, because the parameter posterior becomes +multimodal (the hidden nodes induce a mixture distribution). +One therefore needs to use approximations such as BIC. +Unfortunately, search algorithms are still expensive, because we need +to run EM at each step to compute the MLE, which is needed to compute +the score of each model. An alternative approach is +to do the local search steps inside of the M step of EM, which is more +efficient since the data has been "filled in" - this is +called the structural EM algorithm (Friedman 1997), and provably +converges to a local maximum of the BIC score. +

+Wei Hu has implemented SEM for discrete nodes. +You can download his package from +here. +Please address all questions about this code to +wei.hu@intel.com. +See also Phl's implementation of SEM. + + + + +

Visualizing the graph

+ +You can visualize an arbitrary graph (such as one learned using the +structure learning routines) with Matlab code contributed by +Ali +Taylan Cemgil +from the University of Nijmegen. +For static BNs, call it as follows: +
+draw_graph(bnet.dag);
+
+For example, this is the output produced on a +random QMR-like model: +

+ +

+If you install the excellent graphhviz, an +open-source graph visualization package from AT&T, +you can create a much better visualization as follows +

+graph_to_dot(bnet.dag)
+
+This works by converting the adjacency matrix to a file suitable +for input to graphviz (using the dot format), +then converting the output of graphviz to postscript, and displaying the results using +ghostview. +You can do each of these steps separately for more control, as shown +below. +
+graph_to_dot(bnet.dag, 'filename', 'foo.dot');
+dot -Tps foo.dot -o foo.ps
+ghostview foo.ps &
+
+ +

Constraint-based methods

+ +The IC algorithm (Pearl and Verma, 1991), +and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993), +computes many conditional independence tests, +and combines these constraints into a +PDAG to represent the whole +Markov equivalence class. +

+IC*/FCI extend IC/PC to handle latent variables: see below. +(IC stands for inductive causation; PC stands for Peter and Clark, +the first names of Spirtes and Glymour; FCI stands for fast causal +inference. +What we, following Pearl (2000), call IC* was called +IC in the original Pearl and Verma paper.) +For details, see +

+ +

+ +The PC algorithm takes as arguments a function f, the number of nodes N, +the maximum fan in K, and additional arguments A which are passed to f. +The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0 +otherwise. +For example, suppose we cheat by +passing in a CI "oracle" which has access to the true DAG; the oracle +tests for d-separation in this DAG, i.e., +f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows. +

+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+
+pdag(i,j) = -1 if there is definitely an i->j arc, +and pdag(i,j) = 1 if there is either an i->j or and i<-j arc. +

+Applied to the sprinkler network, this returns +

+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+
+So as expected, we see that the V-structure at the W node is uniquely identified, +but the other arcs have ambiguous orientation. +

+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS +book. +This example concerns the female orgasm. +We are given a correlation matrix C between 7 measured factors (such +as subjective experiences of coital and masturbatory experiences), +derived from 281 samples, and want to learn a causal model of the +data. We will not discuss the merits of this type of work here, but +merely show how to reproduce the results in the SGS book. +Their program, +Tetrad, +makes use of the Fisher Z-test for conditional +independence, so we do the same: +

+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+
+In this case, the CI test is +
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+
+The results match those of Fig 12a of SGS apart from two edge +differences; presumably this is due to rounding error (although it +could be a bug, either in BNT or in Tetrad). +This example can be found in the file BNT/examples/static/pc2.m. + +

+ +The IC* algorithm (Pearl and Verma, 1991), +and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993), +are like the IC/PC algorithm, except that they can detect the presence +of latent variables. +See the file learn_struct_pdag_ic_star written by Tamar +Kushnir. The output is a matrix P, defined as follows +(see Pearl (2000), p52 for details): +

+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+
+ + +

Philippe Leray's structure learning package

+ +Philippe Leray has written a + +structure learning package that uses BNT. + +It currently (Juen 2003) has the following features: + + + + + + + + + + + + +

Inference engines

+ +Up until now, we have used the junction tree algorithm for inference. +However, sometimes this is too slow, or not even applicable. +In general, there are many inference algorithms each of which make +different tradeoffs between speed, accuracy, complexity and +generality. Furthermore, there might be many implementations of the +same algorithm; for instance, a general purpose, readable version, +and a highly-optimized, specialized one. +To cope with this variety, we treat each inference algorithm as an +object, which we call an inference engine. + +

+An inference engine is an object that contains a bnet and supports the +'enter_evidence' and 'marginal_nodes' methods. The engine constructor +takes the bnet as argument and may do some model-specific processing. +When 'enter_evidence' is called, the engine may do some +evidence-specific processing. Finally, when 'marginal_nodes' is +called, the engine may do some query-specific processing. + +

+The amount of work done when each stage is specified -- structure, +parameters, evidence, and query -- depends on the engine. The cost of +work done early in this sequence can be amortized. On the other hand, +one can make better optimizations if one waits until later in the +sequence. +For example, the parameters might imply +conditional indpendencies that are not evident in the graph structure, +but can nevertheless be exploited; the evidence indicates which nodes +are observed and hence can effectively be disconnected from the +graph; and the query might indicate that large parts of the network +are d-separated from the query nodes. (Since it is not the actual +values of the evidence that matters, just which nodes are observed, +many engines allow you to specify which nodes will be observed when they are constructed, +i.e., before calling 'enter_evidence'. Some engines can still cope if +the actual pattern of evidence is different, e.g., if there is missing +data.) +

+ +Although being maximally lazy (i.e., only doing work when a query is +issued) may seem desirable, +this is not always the most efficient. +For example, +when learning using EM, we need to call marginal_nodes N times, where N is the +number of nodes. Variable elimination would end +up repeating a lot of work +each time marginal_nodes is called, making it inefficient for +learning. The junction tree algorithm, by contrast, uses dynamic +programming to avoid this redundant computation --- it calculates all +marginals in two passes during 'enter_evidence', so calling +'marginal_nodes' takes constant time. +

+We will discuss some of the inference algorithms implemented in BNT +below, and finish with a summary of all +of them. + + + + + + + +

Variable elimination

+ +The variable elimination algorithm, also known as bucket elimination +or peeling, is one of the simplest inference algorithms. +The basic idea is to "push sums inside of products"; this is explained +in more detail +here. +

+The principle of distributing sums over products can be generalized +greatly to apply to any commutative semiring. +This forms the basis of many common algorithms, such as Viterbi +decoding and the Fast Fourier Transform. For details, see + +

+ +

+Choosing an order in which to sum out the variables so as to minimize +computational cost is known to be NP-hard. +The implementation of this algorithm in +var_elim_inf_engine makes no attempt to optimize this +ordering (in contrast, say, to jtree_inf_engine, which uses a +greedy search procedure to find a good ordering). +

+Note: unlike most algorithms, var_elim does all its computational work +inside of marginal_nodes, not inside of +enter_evidence. + + + + +

Global inference methods

+ +The simplest inference algorithm of all is to explicitely construct +the joint distribution over all the nodes, and then to marginalize it. +This is implemented in global_joint_inf_engine. +Since the size of the joint is exponential in the +number of discrete (hidden) nodes, this is not a very practical algorithm. +It is included merely for pedagogical and debugging purposes. +

+Three specialized versions of this algorithm have also been implemented, +corresponding to the cases where all the nodes are discrete (D), all +are Gaussian (G), and some are discrete and some Gaussian (CG). +They are called enumerative_inf_engine, +gaussian_inf_engine, +and cond_gauss_inf_engine respectively. +

+Note: unlike most algorithms, these global inference algorithms do all their computational work +inside of marginal_nodes, not inside of +enter_evidence. + + +

Quickscore

+ +The junction tree algorithm is quite slow on the QMR network, +since the cliques are so big. +One simple trick we can use is to notice that hidden leaves do not +affect the posteriors on the roots, and hence do not need to be +included in the network. +A second trick is to notice that the negative findings can be +"absorbed" into the prior: +see the file +BNT/examples/static/mk_minimal_qmr_bnet for details. +

+ +A much more significant speedup is obtained by exploiting special +properties of the noisy-or node, as done by the quickscore +algorithm. For details, see +

+ +This has been implemented in BNT as a special-purpose inference +engine, which can be created and used as follows: +
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+
+ + +

Belief propagation

+ +Even using quickscore, exact inference takes time that is exponential +in the number of positive findings. +Hence for large networks we need to resort to approximate inference techniques. +See for example + +The latter approximation +entails applying Pearl's belief propagation algorithm to a model even +if it has loops (hence the name loopy belief propagation). +Pearl's algorithm, implemented as pearl_inf_engine, gives +exact results when applied to singly-connected graphs +(a.k.a. polytrees, since +the underlying undirected topology is a tree, but a node may have +multiple parents). +To apply this algorithm to a graph with loops, +use pearl_inf_engine. +This can use a centralized or distributed message passing protocol. +You can use it as in the following example. +
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+
+We found that this algorithm often converges, and when it does, often +is very accurate, but it depends on the precise setting of the +parameter values of the network. +(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.) +Understanding when and why belief propagation converges/ works +is a topic of ongoing research. +

+pearl_inf_engine can exploit special structure in noisy-or +and gmux nodes to compute messages efficiently. +

+belprop_inf_engine is like pearl, but uses potentials to +represent messages. Hence this is slower. +

+belprop_fg_inf_engine is like belprop, +but is designed for factor graphs. + + + +

Sampling

+ +BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms: + +Note: To generate samples from a network (which is not the same as inference!), +use sample_bnet. + + + +

Summary of inference engines

+ + +The inference engines differ in many ways. Here are +some of the major "axes": + + +

+In terms of topology, most engines handle any kind of DAG. +belprop_fg does approximate inference on factor graphs (FG), which +can be used to represent directed, undirected, and mixed (chain) +graphs. +(In the future, we plan to support exact inference on chain graphs.) +quickscore only works on QMR-like models. +

+In terms of node types: algorithms that use potentials can handle +discrete (D), Gaussian (G) or conditional Gaussian (CG) models. +Sampling algorithms can essentially handle any kind of node (distribution). +Other algorithms make more restrictive assumptions in exchange for +speed. +

+Finally, most algorithms are designed to give the exact answer. +The belief propagation algorithms are exact if applied to trees, and +in some other cases. +Sampling is considered approximate, even though, in the limit of an +infinite number of samples, it gives the exact answer. + +

+ +Here is a summary of the properties +of all the engines in BNT which work on static networks. +

+ +
+ + + + + + + + + + + + + + + +
Name +Exact? +Node type? +topology +
belprop + approx + D + DAG +
belprop_fg + approx + D + factor graph +
cond_gauss + exact + CG + DAG +
enumerative + exact + D + DAG +
gaussian + exact + G + DAG +
gibbs + approx + D + DAG +
global_joint + exact + D,G,CG + DAG +
jtree + exact + D,G,CG + DAG +b
likelihood_weighting + approx + any + DAG +
pearl + approx + D,G + DAG +
pearl + exact + D,G + polytree +
quickscore + exact + noisy-or + QMR +
stab_cond_gauss + exact + CG + DAG +
var_elim + exact + D,G,CG + DAG +
+ + + +

Influence diagrams/ decision making

+ +BNT implements an exact algorithm for solving LIMIDs (limited memory +influence diagrams), described in + +LIMIDs explicitely show all information arcs, rather than implicitely +assuming no forgetting. This allows them to model forgetful +controllers. +

+See the examples in BNT/examples/limids for details. + + + + +

DBNs, HMMs, Kalman filters and all that

+ +Click here for documentation about how to +use BNT for dynamical systems and sequence data. + + + diff --git a/sourcecodes/bnt-master/docs/usage_dbn.html b/sourcecodes/bnt-master/docs/usage_dbn.html new file mode 100644 index 00000000..7582a0cb --- /dev/null +++ b/sourcecodes/bnt-master/docs/usage_dbn.html @@ -0,0 +1,719 @@ + +How to use BNT for DBNs + + + + + +Documentation last updated on 7 June 2004 + +

How to use BNT for DBNs

+ +

+

+ +Note: +you are recommended to read an introduction +to DBNs first, such as + +this book chapter. +
+You may also want to consider using +GMTk, which is +an excellent C++ package for DBNs. + + +

Model specification

+ + + + +Dynamic Bayesian Networks (DBNs) are directed graphical models of stochastic +processes. +They generalise hidden Markov models (HMMs) +and linear dynamical systems (LDSs) +by representing the hidden (and observed) state in terms of state +variables, which can have complex interdependencies. +The graphical structure provides an easy way to specify these +conditional independencies, and hence to provide a compact +parameterization of the model. +

+Note that "temporal Bayesian network" would be a better name than +"dynamic Bayesian network", since +it is assumed that the model structure does not change, but +the term DBN has become entrenched. +We also normally assume that the parameters do not +change, i.e., the model is time-invariant. +However, we can always add extra +hidden nodes to represent the current "regime", thereby creating +mixtures of models to capture periodic non-stationarities. +

+There are some cases where the size of the state space can change over +time, e.g., tracking a variable, but unknown, number of objects. +In this case, we need to change the model structure over time. +BNT does not support this. + + + +

Hidden Markov Models (HMMs)

+ +The simplest kind of DBN is a Hidden Markov Model (HMM), which has +one discrete hidden node and one discrete or continuous +observed node per slice. We illustrate this below. +As before, circles denote continuous nodes, squares denote +discrete nodes, clear means hidden, shaded means observed. + +

+ +

+We have "unrolled" the model for three "time slices" -- the structure and parameters are +assumed to repeat as the model is unrolled further. +Hence to specify a DBN, we need to +define the intra-slice topology (within a slice), +the inter-slice topology (between two slices), +as well as the parameters for the first two slices. +(Such a two-slice temporal Bayes net is often called a 2TBN.) +

+We can specify the topology as follows. +

+intra = zeros(2);
+intra(1,2) = 1; % node 1 in slice t connects to node 2 in slice t
+
+inter = zeros(2);
+inter(1,1) = 1; % node 1 in slice t-1 connects to node 1 in slice t
+
+We can specify the parameters as follows, +where for simplicity we assume the observed node is discrete. +
+Q = 2; % num hidden states
+O = 2; % num observable symbols
+
+ns = [Q O];
+dnodes = 1:2;
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes);
+for i=1:4
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+

+We assume the distributions P(X(t) | X(t-1)) and +P(Y(t) | X(t)) are independent of t for t > 1. +Hence the CPD for nodes 5, 7, ... is the same as for node 3, so we say they +are in the same equivalence class, with node 3 being the "representative" +for this class. In other words, we have tied the parameters for nodes +3, 5, 7, ... +Similarly, nodes 4, 6, 8, ... are tied. +Note, however, that (the parameters for) nodes 1 and 2 are not tied to +subsequent slices. +

+Above we assumed the observation model P(Y(t) | X(t)) is independent of t for t>1, but +it is conventional to assume this is true for all t. +So we would like to put nodes 2, 4, 6, ... all in the same class. +We can do this by explicitely defining the equivalence classes, as +follows (see here for more details on +parameter tying). +

+We define eclass1(i) to be the equivalence class that node i in slice +1 belongs to. +Similarly, we define eclass2(i) to be the equivalence class that node i in slice +2, 3, ..., belongs to. +For an HMM, we have +

+eclass1 = [1 2];
+eclass2 = [3 2];
+eclass = [eclass1 eclass2];
+
+This ties the observation model across slices, +since e.g., eclass(4) = eclass(2) = 2. +

+By default, +eclass1 = 1:ss, and eclass2 = (1:ss)+ss, where ss = slice size = the +number of nodes per slice. + +But by using the above tieing pattern, +we now only have 3 CPDs to specify, instead of 4: +

+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+obsmat0 = mk_stochastic(rand(Q,O));
+bnet.CPD{1} = tabular_CPD(bnet, 1, prior0);
+bnet.CPD{2} = tabular_CPD(bnet, 2, obsmat0);
+bnet.CPD{3} = tabular_CPD(bnet, 3, transmat0);
+
+We discuss how to do inference and learning on this model +below. +(See also +my HMM toolbox, which is included with BNT.) + +

+Some common variants on HMMs are shown below. +BNT can handle all of these. +

+

+ + + + +
+ +
+ +
+
+ + + +

Linear Dynamical Systems (LDSs) and Kalman filters

+ +A Linear Dynamical System (LDS) has the same topology as an HMM, but +all the nodes are assumed to have linear-Gaussian distributions, i.e., +
+   x(t+1) = A*x(t) + w(t),  w ~ N(0, Q),  x(0) ~ N(init_x, init_V)
+   y(t)   = C*x(t) + v(t),  v ~ N(0, R)
+
+Some simple variants are shown below. +

+

+ + +
+ + + +
+
+

+ +We can create a regular LDS in BNT as follows. +

+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+X = 2; % size of hidden state
+Y = 2; % size of observable state
+
+ns = [X Y];
+dnodes = [];
+onodes = [2];
+eclass1 = [1 2];
+eclass2 = [3 2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+
+x0 = rand(X,1);
+V0 = eye(X); % must be positive semi definite!
+C0 = rand(Y,X);
+R0 = eye(Y);
+A0 = rand(X,X);
+Q0 = eye(X);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', x0, 'cov', V0, 'cov_prior_weight', 0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(Y,1), 'cov', R0, 'weights', C0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', zeros(X,1), 'cov', Q0, 'weights', A0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+
+We discuss how to do
inference and learning on this model +below. +(See also +my Kalman filter toolbox, which is included with BNT.) +

+ + +

Coupled HMMs

+ +Here is an example of a coupled HMM with N=5 chains, unrolled for T=3 +slices. Each hidden discrete node has a private observed Gaussian +child. +

+ +

+We can make this using the function +

+Q = 2; % binary hidden nodes
+discrete_obs = 0; % cts observed nodes
+Y = 1; % scalar observed nodes
+bnet = mk_chmm(N, Q, Y, discrete_obs);
+
+ + + + + +

Water network

+ +Consider the following model +of a water purification plant, developed +by Finn V. Jensen, Uffe Kjærulff, Kristian G. Olesen, and Jan +Pedersen. + + + +

+

+ +
+We now show how to specify this model in BNT. +
+ss = 12; % slice size
+intra = zeros(ss);
+intra(1,9) = 1;
+intra(3,10) = 1;
+intra(4,11) = 1;
+intra(8,12) = 1;
+
+inter = zeros(ss);
+inter(1, [1 3]) = 1; % node 1 in slice 1 connects to nodes 1 and 3 in slice 2
+inter(2, [2 3 7]) = 1;
+inter(3, [3 4 5]) = 1;
+inter(4, [3 4 6]) = 1;
+inter(5, [3 5 6]) = 1;
+inter(6, [4 5 6]) = 1;
+inter(7, [7 8]) = 1;
+inter(8, [6 7 8]) = 1;
+
+onodes = 9:12; % observed
+dnodes = 1:ss; % discrete
+ns = 2*ones(1,ss); % binary nodes
+eclass1 = 1:12;
+eclass2 = [13:20 9:12];
+eclass = [eclass1 eclass2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+for e=1:max(eclass)
+  bnet.CPD{e} = tabular_CPD(bnet, e);
+end
+
+We have tied the observation parameters across all slices. +Click
here for a more complex example +of parameter tieing. + + + + + +

BATnet

+ +As an example of a more complicated DBN, consider the following +example, +which is a model of a car's high level state, as might be used by +an automated car. +(The model is from Forbes, Huang, Kanazawa and Russell, "The BATmobile: Towards a +Bayesian Automated Taxi", IJCAI 95. The figure is from +Boyen and Koller, "Tractable Inference for Complex Stochastic +Processes", UAI98. +For simplicity, we only show the observed nodes for slice 2.) +

+

+ +
+

+Since this topology is so complicated, +it is useful to be able to refer to the nodes by name, instead of +number. +

+names = {'LeftClr', 'RightClr', 'LatAct', ... 'Bclr', 'BYdotDiff'};
+ss = length(names);
+
+We can specify the intra-slice topology using a cell array as follows, +where each row specifies a connection between two named nodes: +
+intrac = {...
+   'LeftClr', 'LeftClrSens';
+  'RightClr', 'RightClrSens';
+  ...
+  'BYdotDiff', 'BcloseFast'};
+
+Finally, we can convert this cell array to an adjacency matrix using +the following function: +
+[intra, names] = mk_adj_mat(intrac, names, 1);
+
+This function also permutes the names so that they are in topological +order. +Given this ordering of the names, we can make the inter-slice +connectivity matrix as follows: +
+interc = {...
+   'LeftClr', 'LeftClr';
+   'LeftClr', 'LatAct';
+   ...
+   'FBStatus', 'LatAct'};
+
+inter = mk_adj_mat(interc, names, 0);  
+
+ +To refer to a node, we must know its number, which can be computed as +in the following example: +
+obs = {'LeftClrSens', 'RightClrSens', 'TurnSignalSens', 'XdotSens', 'YdotSens', 'FYdotDiffSens', ...
+      'FclrSens', 'BXdotSens', 'BclrSens', 'BYdotDiffSens'};
+for i=1:length(obs)
+  onodes(i) = strmatch(obs{i}, names);
+end
+onodes = sort(onodes);
+
+(We sort the onodes since most BNT routines assume that set-valued +arguments are in sorted order.) +We can now make the DBN: +
+dnodes = 1:ss; 
+ns = 2*ones(1,ss); % binary nodes
+bnet = mk_dbn(intra, inter, ns, 'iscrete', dnodes);
+
+To specify the parameters, we must know the order of the parents. +See the function BNT/general/mk_named_CPT for a way to do this in the +case of tabular nodes. For simplicity, we just generate random +parameters: +
+for i=1:2*ss
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+A complete version of this example is available in BNT/examples/dynamic/bat1.m. + + + + +

Inference

+ + +The general inference problem for DBNs is to compute +P(X(i,t0) | Y(:, t1:t2)), where X(i,t) represents the i'th hidden +variable at time t and Y(:,t1:t2) represents all the evidence +between times t1 and t2. +There are several special cases of interest, illustrated below. +The arrow indicates t0: it is X(t0) that we are trying to estimate. +The shaded region denotes t1:t2, the available data. +

+ + + +

+BNT can currently only handle offline smoothing. +(The HMM engine handles filtering and, to a limited extent, prediction.) +The usage is similar to static +inference engines, except now the evidence is a 2D cell array of +size ss*T, where ss is the number of nodes per slice (ss = slice sizee) and T is the +number of slices. +Also, 'marginal_nodes' takes two arguments, the nodes and the time-slice. +For example, to compute P(X(i,t) | y(:,1:T)), we proceed as follows +(where onodes are the indices of the observedd nodes in each slice, +which correspond to y): +

+ev = sample_dbn(bnet, T);
+evidence = cell(ss,T);
+evidence(onodes,:) = ev(onodes, :); % all cells besides onodes are empty
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, i, t);
+
+ + +

Discrete hidden nodes

+ +If all the hidden nodes are discrete, +we can use the junction tree algorithm to perform inference. +The simplest approach, +jtree_unrolled_dbn_inf_engine, +unrolls the DBN into a static network and applies jtree; however, for +long sequences, this +can be very slow and can result in numerical underflow. +A better approach is to apply the jtree algorithm to pairs of +neighboring slices at a time; this is implemented in +jtree_dbn_inf_engine. + +

+A DBN can be converted to an HMM if all the hidden nodes are discrete. +In this case, you can use +hmm_inf_engine. This is faster than jtree for small models +because the constant factors of the algorithm are lower, but can be +exponentially slower for models with many variables +(e.g., > 6 binary hidden nodes). + +

+The use of both +jtree_dbn_inf_engine +and +hmm_inf_engine +is deprecated. +A better approach is to construct a smoother engine out of lower-level +engines, which implement forward/backward operators. +You can create these engines as follows. +

+engine = smoother_engine(hmm_2TBN_inf_engine(bnet));
+or
+engine = smoother_engine(jtree_2TBN_inf_engine(bnet));
+
+You then call them in the usual way: +
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, nodes, t);
+
+Note: you must declare the observed nodes in the bnet before using +hmm_2TBN_inf_engine. + + +

+Unfortunately, when all the hiddden nodes are discrete, +exact inference takes O(2^n) time, where n is the number of hidden +nodes per slice, +even if the model is sparse. +The basic reason for this is that two nodes become correlated, even if +there is no direct connection between them in the 2TBN, +by virtue of sharing common ancestors in the past. +Hence we need to use approximations. +

+A popular approximate inference algorithm for discrete DBNs, known as BK, is described in +

+This approximates the belief state with a product of +marginals on a specified set of clusters. For example, +in the water network, we might use the following clusters: +
+engine = bk_inf_engine(bnet, { [1 2], [3 4 5 6], [7 8] });
+
+This engine can now be used just like the jtree engine. +Two special cases of the BK algorithm are supported: 'ff' (fully +factored) means each node has its own cluster, and 'exact' means there +is 1 cluster that contains the whole slice. These can be created as +follows: +
+engine = bk_inf_engine(bnet, 'ff');
+engine = bk_inf_engine(bnet, 'exact');
+
+For pedagogical purposes, an implementation of BK-FF that uses an HMM +instead of junction tree is available at +bk_ff_hmm_inf_engine. + + + +

Continuous hidden nodes

+ +If all the hidden nodes are linear-Gaussian, and the observed nodes are +linear-Gaussian, +the model is a +linear dynamical system (LDS). +A DBN can be converted to an LDS if all the hidden nodes are linear-Gaussian +and if they are all persistent. In this case, you can use +kalman_inf_engine. +For more general linear-gaussian models, you can use +jtree_dbn_inf_engine or jtree_unrolled_dbn_inf_engine. + +

+For nonlinear systems with Gaussian noise, the unscented Kalman filter (UKF), +due to Julier and Uhlmann, is far superior to the well-known extended Kalman +filter (EKF), both in theory and practice. + +The key idea of the UKF is that it is easier to estimate a Gaussian distribution +from a set of points than to approximate an arbitrary non-linear +function. +We start with points that are plus/minus sigma away from the mean along +each dimension, and then pipe them through the nonlinearity, and +then fit a Gaussian to the transformed points. +(No need to compute Jacobians, unlike the EKF!) + +

+For systems with non-Gaussian noise, I recommend +Particle +filtering (PF), which is a popular sequential Monte Carlo technique. + +

+The EKF can be used as a proposal distribution for a PF. +This method is better than either one alone. +See The Unscented Particle Filter, +by R van der Merwe, A Doucet, JFG de Freitas and E Wan, May 2000. +Matlab +software for the UPF is also available. +

+Note: none of this software is part of BNT. + + + +

Learning

+ +Learning in DBNs can be done online or offline. +Currently only offline learning is implemented in BNT. + + +

Parameter learning

+ +Offline parameter learning is very similar to learning in static networks, +except now the training data is a cell-array of 2D cell-arrays. +For example, +cases{l}{i,t} is the value of node i in slice t in sequence l, or [] +if unobserved. +Each sequence can be a different length, and may have missing values +in arbitrary locations. +Here is a typical code fragment for using EM. +
+ncases = 2;
+cases = cell(1, ncases);
+for i=1:ncases
+  ev = sample_dbn(bnet, T);
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = ev(onodes, :);
+end
+[bnet2, LLtrace] = learn_params_dbn_em(engine, cases, 'max_iter', 10);
+
+If the observed node is vector-valued and stored in an OxT array, you +need to assign each vector to a single cell, as in the following +example. +
+data = [xpos(:)'; ypos(:)']; 
+ncases = 1;
+cases = cell(1, ncases);
+onodes = bnet.observed;
+for i=1:ncases
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = num2cell(data(:,1:T), 1);
+end
+
+

+For a complete code listing of how to do EM in a simple DBN, click +here. + +

Structure learning

+ +There is currently only one structure learning algorithm for DBNs. +This assumes all nodes are tabular and observed, and that there are +no intra-slice connections. Hence we can find the optimal set of +parents for each node separately, without worrying about directed +cycles or node orderings. +The function is called as follows +
+inter = learn_struct_dbn_reveal(cases, ns, max_fan_in, penalty)
+
+A full example is given in BNT/examples/dynamic/reveal1.m. +Setting the penalty term to 0 gives the maximum likelihood model; this +is equivalent to maximizing the mutual information between parents and +child (in the bioinformatics community, this is known as the REVEAL +algorithm). A non-zero penalty invokes the BIC criterion, which +lessens the chance of overfitting. +

+ +Dirk Husmeier has extended MCMC model selection to DBNs. + + diff --git a/sourcecodes/bnt-master/docs/usage_dbn_02nov13.html b/sourcecodes/bnt-master/docs/usage_dbn_02nov13.html new file mode 100644 index 00000000..a1cd8f3a --- /dev/null +++ b/sourcecodes/bnt-master/docs/usage_dbn_02nov13.html @@ -0,0 +1,715 @@ + +How to use BNT for DBNs + + + + + +Documentation last updated on 13 November 2002 + +

How to use BNT for DBNs

+ +

+

+ +Note: +you are recommended to read an introduction +to DBNs first, such as + +this book chapter. + + +

Model specification

+ + + + +Dynamic Bayesian Networks (DBNs) are directed graphical models of stochastic +processes. +They generalise hidden Markov models (HMMs) +and linear dynamical systems (LDSs) +by representing the hidden (and observed) state in terms of state +variables, which can have complex interdependencies. +The graphical structure provides an easy way to specify these +conditional independencies, and hence to provide a compact +parameterization of the model. +

+Note that "temporal Bayesian network" would be a better name than +"dynamic Bayesian network", since +it is assumed that the model structure does not change, but +the term DBN has become entrenched. +We also normally assume that the parameters do not +change, i.e., the model is time-invariant. +However, we can always add extra +hidden nodes to represent the current "regime", thereby creating +mixtures of models to capture periodic non-stationarities. +

+There are some cases where the size of the state space can change over +time, e.g., tracking a variable, but unknown, number of objects. +In this case, we need to change the model structure over time. +BNT does not support this. + + + +

Hidden Markov Models (HMMs)

+ +The simplest kind of DBN is a Hidden Markov Model (HMM), which has +one discrete hidden node and one discrete or continuous +observed node per slice. We illustrate this below. +As before, circles denote continuous nodes, squares denote +discrete nodes, clear means hidden, shaded means observed. + +

+ +

+We have "unrolled" the model for three "time slices" -- the structure and parameters are +assumed to repeat as the model is unrolled further. +Hence to specify a DBN, we need to +define the intra-slice topology (within a slice), +the inter-slice topology (between two slices), +as well as the parameters for the first two slices. +(Such a two-slice temporal Bayes net is often called a 2TBN.) +

+We can specify the topology as follows. +

+intra = zeros(2);
+intra(1,2) = 1; % node 1 in slice t connects to node 2 in slice t
+
+inter = zeros(2);
+inter(1,1) = 1; % node 1 in slice t-1 connects to node 1 in slice t
+
+We can specify the parameters as follows, +where for simplicity we assume the observed node is discrete. +
+Q = 2; % num hidden states
+O = 2; % num observable symbols
+
+ns = [Q O];
+dnodes = 1:2;
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes);
+for i=1:4
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+

+We assume the distributions P(X(t) | X(t-1)) and +P(Y(t) | X(t)) are independent of t for t > 1. +Hence the CPD for nodes 5, 7, ... is the same as for node 3, so we say they +are in the same equivalence class, with node 3 being the "representative" +for this class. In other words, we have tied the parameters for nodes +3, 5, 7, ... +Similarly, nodes 4, 6, 8, ... are tied. +Note, however, that (the parameters for) nodes 1 and 2 are not tied to +subsequent slices. +

+Above we assumed the observation model P(Y(t) | X(t)) is independent of t for t>1, but +it is conventional to assume this is true for all t. +So we would like to put nodes 2, 4, 6, ... all in the same class. +We can do this by explicitely defining the equivalence classes, as +follows (see here for more details on +parameter tying). +

+We define eclass1(i) to be the equivalence class that node i in slice +1 belongs to. +Similarly, we define eclass2(i) to be the equivalence class that node i in slice +2, 3, ..., belongs to. +For an HMM, we have +

+eclass1 = [1 2];
+eclass2 = [3 2];
+eclass = [eclass1 eclass2];
+
+This ties the observation model across slices, +since e.g., eclass(4) = eclass(2) = 2. +

+By default, +eclass1 = 1:ss, and eclass2 = (1:ss)+ss, where ss = slice size = the +number of nodes per slice. + +But by using the above tieing pattern, +we now only have 3 CPDs to specify, instead of 4: +

+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+obsmat0 = mk_stochastic(rand(Q,O));
+bnet.CPD{1} = tabular_CPD(bnet, 1, prior0);
+bnet.CPD{2} = tabular_CPD(bnet, 2, obsmat0);
+bnet.CPD{3} = tabular_CPD(bnet, 3, transmat0);
+
+We discuss how to do inference and learning on this model +below. +(See also +my HMM toolbox, which is included with BNT.) + +

+Some common variants on HMMs are shown below. +BNT can handle all of these. +

+

+ + + + +
+ +
+ +
+
+ + + +

Linear Dynamical Systems (LDSs) and Kalman filters

+ +A Linear Dynamical System (LDS) has the same topology as an HMM, but +all the nodes are assumed to have linear-Gaussian distributions, i.e., +
+   x(t+1) = A*x(t) + w(t),  w ~ N(0, Q),  x(0) ~ N(init_x, init_V)
+   y(t)   = C*x(t) + v(t),  v ~ N(0, R)
+
+Some simple variants are shown below. +

+

+ + +
+ + + +
+
+

+ +We can create a regular LDS in BNT as follows. +

+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+X = 2; % size of hidden state
+Y = 2; % size of observable state
+
+ns = [X Y];
+dnodes = [];
+onodes = [2];
+eclass1 = [1 2];
+eclass2 = [3 2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+
+x0 = rand(X,1);
+V0 = eye(X); % must be positive semi definite!
+C0 = rand(Y,X);
+R0 = eye(Y);
+A0 = rand(X,X);
+Q0 = eye(X);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', x0, 'cov', V0, 'cov_prior_weight', 0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(Y,1), 'cov', R0, 'weights', C0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', zeros(X,1), 'cov', Q0, 'weights', A0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+
+We discuss how to do
inference and learning on this model +below. +(See also +my Kalman filter toolbox, which is included with BNT.) +

+ + +

Coupled HMMs

+ +Here is an example of a coupled HMM with N=5 chains, unrolled for T=3 +slices. Each hidden discrete node has a private observed Gaussian +child. +

+ +

+We can make this using the function +

+Q = 2; % binary hidden nodes
+discrete_obs = 0; % cts observed nodes
+Y = 1; % scalar observed nodes
+bnet = mk_chmm(N, Q, Y, discrete_obs);
+
+ + + + + +

Water network

+ +Consider the following model +of a water purification plant, developed +by Finn V. Jensen, Uffe Kjærulff, Kristian G. Olesen, and Jan +Pedersen. + + + +

+

+ +
+We now show how to specify this model in BNT. +
+ss = 12; % slice size
+intra = zeros(ss);
+intra(1,9) = 1;
+intra(3,10) = 1;
+intra(4,11) = 1;
+intra(8,12) = 1;
+
+inter = zeros(ss);
+inter(1, [1 3]) = 1; % node 1 in slice 1 connects to nodes 1 and 3 in slice 2
+inter(2, [2 3 7]) = 1;
+inter(3, [3 4 5]) = 1;
+inter(4, [3 4 6]) = 1;
+inter(5, [3 5 6]) = 1;
+inter(6, [4 5 6]) = 1;
+inter(7, [7 8]) = 1;
+inter(8, [6 7 8]) = 1;
+
+onodes = 9:12; % observed
+dnodes = 1:ss; % discrete
+ns = 2*ones(1,ss); % binary nodes
+eclass1 = 1:12;
+eclass2 = [13:20 9:12];
+eclass = [eclass1 eclass2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+for e=1:max(eclass)
+  bnet.CPD{e} = tabular_CPD(bnet, e);
+end
+
+We have tied the observation parameters across all slices. +Click
here for a more complex example +of parameter tieing. + + + + + +

BATnet

+ +As an example of a more complicated DBN, consider the following +example, +which is a model of a car's high level state, as might be used by +an automated car. +(The model is from Forbes, Huang, Kanazawa and Russell, "The BATmobile: Towards a +Bayesian Automated Taxi", IJCAI 95. The figure is from +Boyen and Koller, "Tractable Inference for Complex Stochastic +Processes", UAI98. +For simplicity, we only show the observed nodes for slice 2.) +

+

+ +
+

+Since this topology is so complicated, +it is useful to be able to refer to the nodes by name, instead of +number. +

+names = {'LeftClr', 'RightClr', 'LatAct', ... 'Bclr', 'BYdotDiff'};
+ss = length(names);
+
+We can specify the intra-slice topology using a cell array as follows, +where each row specifies a connection between two named nodes: +
+intrac = {...
+   'LeftClr', 'LeftClrSens';
+  'RightClr', 'RightClrSens';
+  ...
+  'BYdotDiff', 'BcloseFast'};
+
+Finally, we can convert this cell array to an adjacency matrix using +the following function: +
+[intra, names] = mk_adj_mat(intrac, names, 1);
+
+This function also permutes the names so that they are in topological +order. +Given this ordering of the names, we can make the inter-slice +connectivity matrix as follows: +
+interc = {...
+   'LeftClr', 'LeftClr';
+   'LeftClr', 'LatAct';
+   ...
+   'FBStatus', 'LatAct'};
+
+inter = mk_adj_mat(interc, names, 0);  
+
+ +To refer to a node, we must know its number, which can be computed as +in the following example: +
+obs = {'LeftClrSens', 'RightClrSens', 'TurnSignalSens', 'XdotSens', 'YdotSens', 'FYdotDiffSens', ...
+      'FclrSens', 'BXdotSens', 'BclrSens', 'BYdotDiffSens'};
+for i=1:length(obs)
+  onodes(i) = stringmatch(obs{i}, names);
+end
+onodes = sort(onodes);
+
+(We sort the onodes since most BNT routines assume that set-valued +arguments are in sorted order.) +We can now make the DBN: +
+dnodes = 1:ss; 
+ns = 2*ones(1,ss); % binary nodes
+bnet = mk_dbn(intra, inter, ns, 'iscrete', dnodes);
+
+To specify the parameters, we must know the order of the parents. +See the function BNT/general/mk_named_CPT for a way to do this in the +case of tabular nodes. For simplicity, we just generate random +parameters: +
+for i=1:2*ss
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+A complete version of this example is available in BNT/examples/dynamic/bat1.m. + + + + +

Inference

+ + +The general inference problem for DBNs is to compute +P(X(i,t0) | Y(:, t1:t2)), where X(i,t) represents the i'th hidden +variable at time t and Y(:,t1:t2) represents all the evidence +between times t1 and t2. +There are several special cases of interest, illustrated below. +The arrow indicates t0: it is X(t0) that we are trying to estimate. +The shaded region denotes t1:t2, the available data. +

+ + + +

+BNT can currently only handle offline smoothing. +(The HMM engine handles filtering and, to a limited extent, prediction.) +The usage is similar to static +inference engines, except now the evidence is a 2D cell array of +size ss*T, where ss is the number of nodes per slice (ss = slice sizee) and T is the +number of slices. +Also, 'marginal_nodes' takes two arguments, the nodes and the time-slice. +For example, to compute P(X(i,t) | y(:,1:T)), we proceed as follows +(where onodes are the indices of the observedd nodes in each slice, +which correspond to y): +

+ev = sample_dbn(bnet, T);
+evidence = cell(ss,T);
+evidence(onodes,:) = ev(onodes, :); % all cells besides onodes are empty
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, i, t);
+
+ + +

Discrete hidden nodes

+ +If all the hidden nodes are discrete, +we can use the junction tree algorithm to perform inference. +The simplest approach, +jtree_unrolled_dbn_inf_engine, +unrolls the DBN into a static network and applies jtree; however, for +long sequences, this +can be very slow and can result in numerical underflow. +A better approach is to apply the jtree algorithm to pairs of +neighboring slices at a time; this is implemented in +jtree_dbn_inf_engine. + +

+A DBN can be converted to an HMM if all the hidden nodes are discrete. +In this case, you can use +hmm_inf_engine. This is faster than jtree for small models +because the constant factors of the algorithm are lower, but can be +exponentially slower for models with many variables +(e.g., > 6 binary hidden nodes). + +

+The use of both +jtree_dbn_inf_engine +and +hmm_inf_engine +is deprecated. +A better approach is to construct a smoother engine out of lower-level +engines, which implement forward/backward operators. +You can create these engines as follows. +

+engine = smoother_engine(hmm_2TBN_inf_engine(bnet));
+or
+engine = smoother_engine(jtree_2TBN_inf_engine(bnet));
+
+You then call them in the usual way: +
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, nodes, t);
+
+Note: you must declare the observed nodes in the bnet before using +hmm_2TBN_inf_engine. + + +

+Unfortunately, when all the hiddden nodes are discrete, +exact inference takes O(2^n) time, where n is the number of hidden +nodes per slice, +even if the model is sparse. +The basic reason for this is that two nodes become correlated, even if +there is no direct connection between them in the 2TBN, +by virtue of sharing common ancestors in the past. +Hence we need to use approximations. +

+A popular approximate inference algorithm for discrete DBNs, known as BK, is described in +

+This approximates the belief state with a product of +marginals on a specified set of clusters. For example, +in the water network, we might use the following clusters: +
+engine = bk_inf_engine(bnet, { [1 2], [3 4 5 6], [7 8] });
+
+This engine can now be used just like the jtree engine. +Two special cases of the BK algorithm are supported: 'ff' (fully +factored) means each node has its own cluster, and 'exact' means there +is 1 cluster that contains the whole slice. These can be created as +follows: +
+engine = bk_inf_engine(bnet, 'ff');
+engine = bk_inf_engine(bnet, 'exact');
+
+For pedagogical purposes, an implementation of BK-FF that uses an HMM +instead of junction tree is available at +bk_ff_hmm_inf_engine. + + + +

Continuous hidden nodes

+ +If all the hidden nodes are linear-Gaussian, and the observed nodes are +linear-Gaussian, +the model is a +linear dynamical system (LDS). +A DBN can be converted to an LDS if all the hidden nodes are linear-Gaussian +and if they are all persistent. In this case, you can use +kalman_inf_engine. +For more general linear-gaussian models, you can use +jtree_dbn_inf_engine or jtree_unrolled_dbn_inf_engine. + +

+For nonlinear systems with Gaussian noise, the unscented Kalman filter (UKF), +due to Julier and Uhlmann, is far superior to the well-known extended Kalman +filter (EKF), both in theory and practice. + +The key idea of the UKF is that it is easier to estimate a Gaussian distribution +from a set of points than to approximate an arbitrary non-linear +function. +We start with points that are plus/minus sigma away from the mean along +each dimension, and then pipe them through the nonlinearity, and +then fit a Gaussian to the transformed points. +(No need to compute Jacobians, unlike the EKF!) + +

+For systems with non-Gaussian noise, I recommend +Particle +filtering (PF), which is a popular sequential Monte Carlo technique. + +

+The EKF can be used as a proposal distribution for a PF. +This method is better than either one alone. +See The Unscented Particle Filter, +by R van der Merwe, A Doucet, JFG de Freitas and E Wan, May 2000. +Matlab +software for the UPF is also available. +

+Note: none of this software is part of BNT. + + + +

Learning

+ +Learning in DBNs can be done online or offline. +Currently only offline learning is implemented in BNT. + + +

Parameter learning

+ +Offline parameter learning is very similar to learning in static networks, +except now the training data is a cell-array of 2D cell-arrays. +For example, +cases{l}{i,t} is the value of node i in slice t in sequence l, or [] +if unobserved. +Each sequence can be a different length, and may have missing values +in arbitrary locations. +Here is a typical code fragment for using EM. +
+ncases = 2;
+cases = cell(1, ncases);
+for i=1:ncases
+  ev = sample_dbn(bnet, T);
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = ev(onodes, :);
+end
+[bnet2, LLtrace] = learn_params_dbn_em(engine, cases, 'max_iter', 10);
+
+If the observed node is vector-valued and stored in an OxT array, you +need to assign each vector to a single cell, as in the following +example. +
+data = [xpos(:)'; ypos(:)']; 
+ncases = 1;
+cases = cell(1, ncases);
+onodes = bnet.observed;
+for i=1:ncases
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = num2cell(data(:,1:T), 1);
+end
+
+

+For a complete code listing of how to do EM in a simple DBN, click +here. + +

Structure learning

+ +There is currently only one structure learning algorithm for DBNs. +This assumes all nodes are tabular and observed, and that there are +no intra-slice connections. Hence we can find the optimal set of +parents for each node separately, without worrying about directed +cycles or node orderings. +The function is called as follows +
+inter = learn_struct_dbn_reveal(cases, ns, max_fan_in, penalty)
+
+A full example is given in BNT/examples/dynamic/reveal1.m. +Setting the penalty term to 0 gives the maximum likelihood model; this +is equivalent to maximizing the mutual information between parents and +child (in the bioinformatics community, this is known as the REVEAL +algorithm). A non-zero penalty invokes the BIC criterion, which +lessens the chance of overfitting. +

+ +Dirk Husmeier has extended MCMC model selection to DBNs. + + diff --git a/sourcecodes/bnt-master/docs/usage_sf.html b/sourcecodes/bnt-master/docs/usage_sf.html new file mode 100644 index 00000000..7fc3d2c5 --- /dev/null +++ b/sourcecodes/bnt-master/docs/usage_sf.html @@ -0,0 +1,3242 @@ + +How to use the Bayes Net Toolbox + + + + + +

How to use the Bayes Net Toolbox

+ +This documentation was last updated on 7 June 2004. +
+Click here for a list of changes made to +BNT. +
+Click +here +for a French version of this documentation (which might not +be up-to-date). +
+Update 23 May 2005: +Philippe LeRay has written +a + +BNT GUI +and + +BNT Structure Learning Package. + +

+ +

+ + + + + + +

Installation

+ +

Installing the Matlab code

+ + + + + +

Installing the C code

+ +Some BNT functions also have C implementations. +It is not necessary to install the C code, but it can result in a speedup +of a factor of 2-5. +To install all the C code, +edit installC_BNT.m so it contains the right path, +then type installC_BNT. +(Ignore warnings of the form 'invalid white space character in directive'.) +To uninstall all the C code, +edit uninstallC_BNT.m so it contains the right path, +then type uninstallC_BNT. +For an up-to-date list of the files which have C implementations, see +BNT/installC_BNT.m. + +

+mex is a script that lets you call C code from Matlab - it does not compile matlab to +C (see mcc below). +If your C/C++ compiler is set up correctly, mex should work out of +the box. +If not, you might need to type +

+ mex -setup +

+before calling installC. +

+To make mex call gcc on Windows, +you must install gnumex. +You can use the minimalist GNU for +Windows version of gcc, or +the cygwin version. +

+In general, typing +'mex foo.c' from inside Matlab creates a file called +'foo.mexglx' or 'foo.dll' (the exact file +extension is system dependent - on Linux it is 'mexglx', on Windows it is '.dll'). +The resulting file will hide the original 'foo.m' (if it existed), i.e., +typing 'foo' at the prompt will call the compiled C version. +To reveal the original matlab version, just delete foo.mexglx (this is +what uninstallC does). +

+Sometimes it takes time for Matlab to realize that the file has +changed from matlab to C or vice versa; try typing 'clear all' or +restarting Matlab to refresh it. +To find out which version of a file you are running, type +'which foo'. +

+mcc, the +Matlab to C compiler, is a separate product, +and is quite different from mex. It does not yet support +objects/classes, which is why we can't compile all of BNT to C automatically. +Also, hand-written C code is usually much +better than the C code generated by mcc. + + +

+Acknowledgements: +Most of the C code (e.g., for jtree and dpot) was written by Wei Hu; +the triangulation C code was written by Ilya Shpitser; +the Gibbs sampling C code (for discrete nodes) was written by Bhaskara +Marthi. + + + +

Creating your first Bayes net

+ +To define a Bayes net, you must specify the graph structure and then +the parameters. We look at each in turn, using a simple example +(adapted from Russell and +Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall, +1995, p454). + + +

Graph structure

+ + +Consider the following network. + +

+

+ +
+

+ +

+To specify this directed acyclic graph (dag), we create an adjacency matrix: +

+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+
+

+We have numbered the nodes as follows: +Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4. +The nodes must always be numbered in topological order, i.e., +ancestors before descendants. +For a more complicated graph, this is a little inconvenient: we will +see how to get around this below. +

+In Matlab 6, you can use logical arrays instead of double arrays, +which are 4 times smaller: +

+dag = false(N,N);
+dag(C,[R S]) = true;
+...
+
+However, some graph functions (eg acyclic) do not work on +logical arrays! +

+A preliminary attempt to make a GUI +has been writte by Philippe LeRay and can be downloaded +from here. +

+You can visualize the resulting graph structure using +the methods discussed below. + +

Creating the Bayes net shell

+ +In addition to specifying the graph structure, +we must specify the size and type of each node. +If a node is discrete, its size is the +number of possible values +each node can take on; if a node is continuous, +it can be a vector, and its size is the length of this vector. +In this case, we will assume all nodes are discrete and binary. +
+discrete_nodes = 1:N;
+node_sizes = 2*ones(1,N); 
+
+If the nodes were not binary, you could type e.g., +
+node_sizes = [4 2 3 5];
+
+meaning that Cloudy has 4 possible values, +Sprinkler has 2 possible values, etc. +Note that these are cardinal values, not ordinal, i.e., +they are not ordered in any way, like 'low', 'medium', 'high'. +

+We are now ready to make the Bayes net: +

+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
+
+By default, all nodes are assumed to be discrete, so we can also just +write +
+bnet = mk_bnet(dag, node_sizes);
+
+You may also specify which nodes will be observed. +If you don't know, or if this not fixed in advance, +just use the empty list (the default). +
+onodes = [];
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+
+Note that optional arguments are specified using a name/value syntax. +This is common for many BNT functions. +In general, to find out more about a function (e.g., which optional +arguments it takes), please see its +documentation string by typing +
+help mk_bnet
+
+See also other useful Matlab tips. +

+It is possible to associate names with nodes, as follows: +

+bnet = mk_bnet(dag, node_sizes, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+
+You can then refer to a node by its name: +
+C = bnet.names('cloudy'); % bnet.names is an associative array
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+
+This feature uses my own associative array class. + + +

Parameters

+ +A model consists of the graph structure and the parameters. +The parameters are represented by CPD objects (CPD = Conditional +Probability Distribution), which define the probability distribution +of a node given its parents. +(We will use the terms "node" and "random variable" interchangeably.) +The simplest kind of CPD is a table (multi-dimensional array), which +is suitable when all the nodes are discrete-valued. Note that the discrete +values are not assumed to be ordered in any way; that is, they +represent categorical quantities, like male and female, rather than +ordinal quantities, like low, medium and high. +(We will discuss CPDs in more detail below.) +

+Tabular CPDs, also called CPTs (conditional probability tables), +are stored as multidimensional arrays, where the dimensions +are arranged in the same order as the nodes, e.g., the CPT for node 4 +(WetGrass) is indexed by Sprinkler (2), Rain (3) and then WetGrass (4) itself. +Hence the child is always the last dimension. +If a node has no parents, its CPT is a column vector representing its +prior. +Note that in Matlab (unlike C), arrays are indexed +from 1, and are layed out in memory such that the first index toggles +fastest, e.g., the CPT for node 4 (WetGrass) is as follows +

+

+

+where we have used the convention that false==1, true==2. +We can create this CPT in Matlab as follows +

+CPT = zeros(2,2,2);
+CPT(1,1,1) = 1.0;
+CPT(2,1,1) = 0.1;
+...
+
+Here is an easier way: +
+CPT = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], [2 2 2]);
+
+In fact, we don't need to reshape the array, since the CPD constructor +will do that for us. So we can just write +
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+
+The other nodes are created similarly (using the old syntax for +optional parameters) +
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+
+ + +

Random Parameters

+ +If we do not specify the CPT, random parameters will be +created, i.e., each "row" of the CPT will be drawn from the uniform distribution. +To ensure repeatable results, use +
+rand('state', seed);
+randn('state', seed);
+
+To control the degree of randomness (entropy), +you can sample each row of the CPT from a Dirichlet(p,p,...) distribution. +If p << 1, this encourages "deterministic" CPTs (one entry near 1, the rest near 0). +If p = 1, each entry is drawn from U[0,1]. +If p >> 1, the entries will all be near 1/k, where k is the arity of +this node, i.e., each row will be nearly uniform. +You can do this as follows, assuming this node +is number i, and ns is the node_sizes. +
+k = ns(i);
+ps = parents(dag, i);
+psz = prod(ns(ps));
+CPT = sample_dirichlet(p*ones(1,k), psz);
+bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', CPT);
+
+ + +

Loading a network from a file

+ +If you already have a Bayes net represented in the XML-based + +Bayes Net Interchange Format (BNIF) (e.g., downloaded from the + +Bayes Net repository), +you can convert it to BNT format using +the +BIF-BNT Java +program written by Ken Shan. +(This is not necessarily up-to-date.) +

+It is currently not possible to save/load a BNT matlab object to +file, but this is easily fixed if you modify all the constructors +for all the classes (see matlab documentation). + +

Creating a model using a GUI

+ +Click here. + + + +

Inference

+ +Having created the BN, we can now use it for inference. +There are many different algorithms for doing inference in Bayes nets, +that make different tradeoffs between speed, +complexity, generality, and accuracy. +BNT therefore offers a variety of different inference +"engines". We will discuss these +in more detail below. +For now, we will use the junction tree +engine, which is the mother of all exact inference algorithms. +This can be created as follows. +
+engine = jtree_inf_engine(bnet);
+
+The other engines have similar constructors, but might take +additional, algorithm-specific parameters. +All engines are used in the same way, once they have been created. +We illustrate this in the following sections. + + +

Computing marginal distributions

+ +Suppose we want to compute the probability that the sprinker was on +given that the grass is wet. +The evidence consists of the fact that W=2. All the other nodes +are hidden (unobserved). We can specify this as follows. +
+evidence = cell(1,N);
+evidence{W} = 2;
+
+We use a 1D cell array instead of a vector to +cope with the fact that nodes can be vectors of different lengths. +In addition, the value [] can be used +to denote 'no evidence', instead of having to specify the observation +pattern as a separate argument. +(Click
here for a quick tutorial on cell +arrays in matlab.) +

+We are now ready to add the evidence to the engine. +

+[engine, loglik] = enter_evidence(engine, evidence);
+
+The behavior of this function is algorithm-specific, and is discussed +in more detail below. +In the case of the jtree engine, +enter_evidence implements a two-pass message-passing scheme. +The first return argument contains the modified engine, which +incorporates the evidence. The second return argument contains the +log-likelihood of the evidence. (Not all engines are capable of +computing the log-likelihood.) +

+Finally, we can compute p=P(S=2|W=2) as follows. +

+marg = marginal_nodes(engine, S);
+marg.T
+ans =
+      0.57024
+      0.42976
+p = marg.T(2);
+
+We see that p = 0.4298. +

+Now let us add the evidence that it was raining, and see what +difference it makes. +

+evidence{R} = 2;
+[engine, loglik] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, S);
+p = marg.T(2);
+
+We find that p = P(S=2|W=2,R=2) = 0.1945, +which is lower than +before, because the rain can ``explain away'' the +fact that the grass is wet. +

+You can plot a marginal distribution over a discrete variable +as a barchart using the built 'bar' function: +

+bar(marg.T)
+
+This is what it looks like + +

+

+ +
+

+ +

Observed nodes

+ +What happens if we ask for the marginal on an observed node, e.g. P(W|W=2)? +An observed discrete node effectively only has 1 value (the observed + one) --- all other values would result in 0 probability. +For efficiency, BNT treats observed (discrete) nodes as if they were + set to 1, as we see below: +
+evidence = cell(1,N);
+evidence{W} = 2;
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, W);
+m.T
+ans =
+     1
+
+This can get a little confusing, since we assigned W=2. +So we can ask BNT to add the evidence back in by passing in an optional argument: +
+m = marginal_nodes(engine, W, 1);
+m.T
+ans =
+     0
+     1
+
+This shows that P(W=1|W=2) = 0 and P(W=2|W=2) = 1. + + + +

Computing joint distributions

+ +We can compute the joint probability on a set of nodes as in the +following example. +
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+
+m is a structure. The 'T' field is a multi-dimensional array (in +this case, 3-dimensional) that contains the joint probability +distribution on the specified nodes. +
+>> m.T
+ans(:,:,1) =
+    0.2900    0.0410
+    0.0210    0.0009
+ans(:,:,2) =
+         0    0.3690
+    0.1890    0.0891
+
+We see that P(S=1,R=1,W=2) = 0, since it is impossible for the grass +to be wet if both the rain and sprinkler are off. +

+Let us now add some evidence to R. +

+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W])
+m = 
+    domain: [2 3 4]
+         T: [2x1x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+    0.0820
+    0.0018
+ans(:,:,2) =
+    0.7380
+    0.1782
+
+The joint T(i,j,k) = P(S=i,R=j,W=k|evidence) +should have T(i,1,k) = 0 for all i,k, since R=1 is incompatible +with the evidence that R=2. +Instead of creating large tables with many 0s, BNT sets the effective +size of observed (discrete) nodes to 1, as explained above. +This is why m.T has size 2x1x2. +To get a 2x2x2 table, type +
+m = marginal_nodes(engine, [S R W], 1)
+m = 
+    domain: [2 3 4]
+         T: [2x2x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+            0        0.082
+            0       0.0018
+ans(:,:,2) =
+            0        0.738
+            0       0.1782
+
+ +

+Note: It is not always possible to compute the joint on arbitrary +sets of nodes: it depends on which inference engine you use, as discussed +in more detail below. + + +

Soft/virtual evidence

+ +Sometimes a node is not observed, but we have some distribution over +its possible values; this is often called "soft" or "virtual" +evidence. +One can use this as follows +
+[engine, loglik] = enter_evidence(engine, evidence, 'soft', soft_evidence);
+
+where soft_evidence{i} is either [] (if node i has no soft evidence) +or is a vector representing the probability distribution over i's +possible values. +For example, if we don't know i's exact value, but we know its +likelihood ratio is 60/40, we can write evidence{i} = [] and +soft_evidence{i} = [0.6 0.4]. +

+Currently only jtree_inf_engine supports this option. +It assumes that all hidden nodes, and all nodes for +which we have soft evidence, are discrete. +For a longer example, see BNT/examples/static/softev1.m. + + +

Most probable explanation

+ +To compute the most probable explanation (MPE) of the evidence (i.e., +the most probable assignment, or a mode of the joint), use +
+[mpe, ll] = calc_mpe(engine, evidence);     
+
+mpe{i} is the most likely value of node i. +This calls enter_evidence with the 'maximize' flag set to 1, which +causes the engine to do max-product instead of sum-product. +The resulting max-marginals are then thresholded. +If there is more than one maximum probability assignment, we must take + care to break ties in a consistent manner (thresholding the + max-marginals may give the wrong result). To force this behavior, + type +
+[mpe, ll] = calc_mpe(engine, evidence, 1);     
+
+Note that computing the MPE is someties called abductive reasoning. + +

+You can also use calc_mpe_bucket written by Ron Zohar, +that does a forwards max-product pass, and then a backwards traceback +pass, which is how Viterbi is traditionally implemented. + + + +

Conditional Probability Distributions

+ +A Conditional Probability Distributions (CPD) +defines P(X(i) | X(Pa(i))), where X(i) is the i'th node, and X(Pa(i)) +are the parents of node i. There are many ways to represent this +distribution, which depend in part on whether X(i) and X(Pa(i)) are +discrete, continuous, or a combination. +We will discuss various representations below. + + +

Tabular nodes

+ +If the CPD is represented as a table (i.e., if it is a multinomial +distribution), it has a number of parameters that is exponential in +the number of parents. See the example above. + + +

Noisy-or nodes

+ +A noisy-OR node is like a regular logical OR gate except that +sometimes the effects of parents that are on get inhibited. +Let the prob. that parent i gets inhibited be q(i). +Then a node, C, with 2 parents, A and B, has the following CPD, where +we use F and T to represent off and on (1 and 2 in BNT). +
+A  B  P(C=off)      P(C=on)
+---------------------------
+F  F  1.0           0.0
+T  F  q(A)          1-q(A)
+F  T  q(B)          1-q(B)
+T  T  q(A)q(B)      q-q(A)q(B)
+
+Thus we see that the causes get inhibited independently. +It is common to associate a "leak" node with a noisy-or CPD, which is +like a parent that is always on. This can account for all other unmodelled +causes which might turn the node on. +

+The noisy-or distribution is similar to the logistic distribution. +To see this, let the nodes, S(i), have values in {0,1}, and let q(i,j) +be the prob. that j inhibits i. Then +

+Pr(S(i)=1 | parents(S(i))) = 1 - prod_{j} q(i,j)^S(j)
+
+Now define w(i,j) = -ln q(i,j) and rho(x) = 1-exp(-x). Then +
+Pr(S(i)=1 | parents(S(i))) = rho(sum_j w(i,j) S(j))
+
+For a sigmoid node, we have +
+Pr(S(i)=1 | parents(S(i))) = sigma(-sum_j w(i,j) S(j))
+
+where sigma(x) = 1/(1+exp(-x)). Hence they differ in the choice of +the activation function (although both are monotonically increasing). +In addition, in the case of a noisy-or, the weights are constrained to be +positive, since they derive from probabilities q(i,j). +In both cases, the number of parameters is linear in the +number of parents, unlike the case of a multinomial distribution, +where the number of parameters is exponential in the number of parents. +We will see an example of noisy-OR nodes
below. + + +

Other (noisy) deterministic nodes

+ +Deterministic CPDs for discrete random variables can be created using +the deterministic_CPD class. It is also possible to 'flip' the output +of the function with some probability, to simulate noise. +The boolean_CPD class is just a special case of a +deterministic CPD, where the parents and child are all binary. +

+Both of these classes are just "syntactic sugar" for the tabular_CPD +class. + + + +

Softmax nodes

+ +If we have a discrete node with a continuous parent, +we can define its CPD using a softmax function +(also known as the multinomial logit function). +This acts like a soft thresholding operator, and is defined as follows: +
+                    exp(w(:,i)'*x + b(i)) 
+Pr(Q=i | X=x)  =  -----------------------------
+                  sum_j   exp(w(:,j)'*x + b(j))
+
+
+The parameters of a softmax node, w(:,i) and b(i), i=1..|Q|, have the +following interpretation: w(:,i)-w(:,j) is the normal vector to the +decision boundary between classes i and j, +and b(i)-b(j) is its offset (bias). For example, suppose +X is a 2-vector, and Q is binary. Then +
+w = [1 -1;
+     0 0];
+
+b = [0 0];
+
+means class 1 are points in the 2D plane with positive x coordinate, +and class 2 are points in the 2D plane with negative x coordinate. +If w has large magnitude, the decision boundary is sharp, otherwise it +is soft. +In the special case that Q is binary (0/1), the softmax function reduces to the logistic +(sigmoid) function. +

+Fitting a softmax function can be done using the iteratively reweighted +least squares (IRLS) algorithm. +We use the implementation from +Netlab. +Note that since +the softmax distribution is not in the exponential family, it does not +have finite sufficient statistics, and hence we must store all the +training data in uncompressed form. +If this takes too much space, one should use online (stochastic) gradient +descent (not implemented in BNT). +

+If a softmax node also has discrete parents, +we use a different set of w/b parameters for each combination of +parent values, as in the conditional linear +Gaussian CPD. +This feature was implemented by Pierpaolo Brutti. +He is currently extending it so that discrete parents can be treated +as if they were continuous, by adding indicator variables to the X +vector. +

+We will see an example of softmax nodes below. + + +

Neural network nodes

+ +Pierpaolo Brutti has implemented the mlp_CPD class, which uses a multi layer perceptron +to implement a mapping from continuous parents to discrete children, +similar to the softmax function. +(If there are also discrete parents, it creates a mixture of MLPs.) +It uses code from Netlab. +This is work in progress. + +

Root nodes

+ +A root node has no parents and no parameters; it can be used to model +an observed, exogeneous input variable, i.e., one which is "outside" +the model. +This is useful for conditional density models. +We will see an example of root nodes below. + + +

Gaussian nodes

+ +We now consider a distribution suitable for the continuous-valued nodes. +Suppose the node is called Y, its continuous parents (if any) are +called X, and its discrete parents (if any) are called Q. +The distribution on Y is defined as follows: +
+- no parents: Y ~ N(mu, Sigma)
+- cts parents : Y|X=x ~ N(mu + W x, Sigma)
+- discrete parents: Y|Q=i ~ N(mu(:,i), Sigma(:,:,i))
+- cts and discrete parents: Y|X=x,Q=i ~ N(mu(:,i) + W(:,:,i) * x, Sigma(:,:,i))
+
+where N(mu, Sigma) denotes a Normal distribution with mean mu and +covariance Sigma. Let |X|, |Y| and |Q| denote the sizes of X, Y and Q +respectively. +If there are no discrete parents, |Q|=1; if there is +more than one, then |Q| = a vector of the sizes of each discrete parent. +If there are no continuous parents, |X|=0; if there is more than one, +then |X| = the sum of their sizes. +Then mu is a |Y|*|Q| vector, Sigma is a |Y|*|Y|*|Q| positive +semi-definite matrix, and W is a |Y|*|X|*|Q| regression (weight) +matrix. +

+We can create a Gaussian node with random parameters as follows. +

+bnet.CPD{i} = gaussian_CPD(bnet, i);
+
+We can specify the value of one or more of the parameters as in the +following example, in which |Y|=2, and |Q|=1. +
+bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', [0; 0], 'weights', randn(Y,X), 'cov', eye(Y));
+
+

+We will see an example of conditional linear Gaussian nodes below. +

+When learning Gaussians from data, it is helpful to ensure the +data has a small magnitde +(see e.g., KPMstats/standardize) to prevent numerical problems. +Unless you have a lot of data, it is also a very good idea to use +diagonal instead of full covariance matrices. +(BNT does not currently support spherical covariances, although it +would be easy to add, since KPMstats/clg_Mstep supports this option; +you would just need to modify gaussian_CPD/update_ess to accumulate +weighted inner products.) + + + +

Other continuous distributions

+ +Currently BNT does not support any CPDs for continuous nodes other +than the Gaussian. +However, you can use a mixture of Gaussians to +approximate other continuous distributions. We will see some an example +of this with the IFA model below. + + +

Generalized linear model nodes

+ +In the future, we may incorporate some of the functionality of +glmlab +into BNT. + + +

Classification/regression tree nodes

+ +We plan to add classification and regression trees to define CPDs for +discrete and continuous nodes, respectively. +Trees have many advantages: they are easy to interpret, they can do +feature selection, they can +handle discrete and continuous inputs, they do not make strong +assumptions about the form of the distribution, the number of +parameters can grow in a data-dependent way (i.e., they are +semi-parametric), they can handle missing data, etc. +However, they are not yet implemented. + + + +

Summary of CPD types

+ +We list all the different types of CPDs supported by BNT. +For each CPD, we specify if the child and parents can be discrete (D) or +continuous (C) (Binary (B) nodes are a special case). +We also specify which methods each class supports. +If a method is inherited, the name of the parent class is mentioned. +If a parent class calls a child method, this is mentioned. +

+The CPD_to_CPT method converts a CPD to a table; this +requires that the child and all parents are discrete. +The CPT might be exponentially big... +convert_to_table evaluates a CPD with evidence, and +represents the the resulting potential as an array. +This requires that the child is discrete, and any continuous parents +are observed. +convert_to_pot evaluates a CPD with evidence, and +represents the resulting potential as a dpot, gpot, cgpot or upot, as +requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u = +utility). + +

+When we sample a node, all the parents are observed. +When we compute the (log) probability of a node, all the parents and +the child are observed. +

+We also specify if the parameters are learnable. +For learning with EM, we require +the methods reset_ess, update_ess and +maximize_params. +For learning from fully observed data, we require +the method learn_params. +By default, all classes inherit this from generic_CPD, which simply +calls update_ess N times, once for each data case, followed +by maximize_params, i.e., it is like EM, without the E step. +Some classes implement a batch formula, which is quicker. +

+Bayesian learning means computing a posterior over the parameters +given fully observed data. +

+Pearl means we implement the methods compute_pi and +compute_lambda_msg, used by +pearl_inf_engine, which runs on directed graphs. +belprop_inf_engine only needs convert_to_pot.H +The pearl methods can exploit special properties of the CPDs for +computing the messages efficiently, whereas belprop does not. +

+The only method implemented by generic_CPD is adjustable_CPD, +which is not shown, since it is not very interesting. + + +

+ + + +
+ + + + + + + + + + + + +
Name +Child +Parents +Comments +CPD_to_CPT +conv_to_table +conv_to_pot +sample +prob +learn +Bayes +Pearl + + +
+ + + + + + + + + + + + +
boolean +B +B +Syntactic sugar for tabular +- +- +- +- +- +- +- +- + +
deterministic +D +D +Syntactic sugar for tabular +- +- +- +- +- +- +- +- + +
Discrete +D +C/D +Virtual class +N +Calls CPD_to_CPT +Calls conv_to_table +Calls conv_to_table +Calls conv_to_table +N +N +N + +
Gaussian +C +C/D +- +N +N +Y +Y +Y +Y +N +N + +
gmux +C +C/D +multiplexer +N +N +Y +N +N +N +N +Y + + +
MLP +D +C/D +multi layer perceptron +N +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +N +N + + +
noisy-or +B +B +- +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Inherits from discrete +N +N +Y + + +
root +C/D +none +no params +N +N +Y +Y +Y +N +N +N + + +
softmax +D +C/D +- +N +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +N +N + + +
generic +C/D +C/D +Virtual class +N +N +N +N +N +N +N +N + + +
Tabular +D +D +- +Y +Inherits from discrete +Inherits from discrete +Inherits from discrete +Inherits from discrete +Y +Y +Y + +
+ + + +

Example models

+ + +

Gaussian mixture models

+ +Richard W. DeVaul has made a detailed tutorial on how to fit mixtures +of Gaussians using BNT. Available +
here. + + +

PCA, ICA, and all that

+ +In Figure (a) below, we show how Factor Analysis can be thought of as a +graphical model. Here, X has an N(0,I) prior, and +Y|X=x ~ N(mu + Wx, Psi), +where Psi is diagonal and W is called the "factor loading matrix". +Since the noise on both X and Y is diagonal, the components of these +vectors are uncorrelated, and hence can be represented as individual +scalar nodes, as we show in (b). +(This is useful if parts of the observations on the Y vector are occasionally missing.) +We usually take k=|X| << |Y|=D, so the model tries to explain +many observations using a low-dimensional subspace. + + +
+ + + +
+ + + +
(a) + (b) + (c) + (d) +
+
+ +

+We can create this model in BNT as follows. +

+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+
+ +The root node is clamped to the N(0,I) distribution, so that we will +not update these parameters during learning. +The mean of the leaf node is clamped to 0, +since we assume the data has been centered (had its mean subtracted +off); this is just for simplicity. +Finally, the covariance of the leaf node is constrained to be +diagonal. W0 and Psi0 are the initial parameter guesses. + +

+We can fit this model (i.e., estimate its parameters in a maximum +likelihood (ML) sense) using EM, as we +explain below. +Not surprisingly, the ML estimates for mu and Psi turn out to be +identical to the +sample mean and variance, which can be computed directly as +

+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+
+Note that W can only be identified up to a rotation matrix, because of +the spherical symmetry of the source. + +

+If we restrict Psi to be spherical, i.e., Psi = sigma*I, +there is a closed-form solution for W as well, +i.e., we do not need to use EM. +In particular, W contains the first |X| eigenvectors of the sample covariance +matrix, with scalings determined by the eigenvalues and sigma. +Classical PCA can be obtained by taking the sigma->0 limit. +For details, see + +

+ +

+By adding a hidden discrete variable, we can create mixtures of FA +models, as shown in (c). +Now we can explain the data using a set of subspaces. +We can create this model in BNT as follows. +

+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+
+Notice how the covariance matrix for Y is the same for all values of +Q; that is, the noise level in each sub-space is assumed the same. +However, we allow the offset, mu, to vary. +For details, see + + +

+I have included Zoubin's specialized MFA code (with his permission) +with the toolbox, so you can check that BNT gives the same results: +see 'BNT/examples/static/mfa1.m'. + +

+Independent Factor Analysis (IFA) generalizes FA by allowing a +non-Gaussian prior on each component of X. +(Note that we can approximate a non-Gaussian prior using a mixture of +Gaussians.) +This means that the likelihood function is no longer rotationally +invariant, so we can uniquely identify W and the hidden +sources X. +IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y). +We recover classical Independent Components Analysis (ICA) +in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the +weight matrix W is square and invertible. +For details, see +

+ + + +

Mixtures of experts

+ +As an example of the use of the softmax function, +we introduce the Mixture of Experts model. + +As before, +circles denote continuous-valued nodes, +squares denote discrete nodes, clear +means hidden, and shaded means observed. +

+

+ + +
+ +
+
+

+X is the observed +input, Y is the output, and +the Q nodes are hidden "gating" nodes, which select the appropriate +set of parameters for Y. During training, Y is assumed observed, +but for testing, the goal is to predict Y given X. +Note that this is a conditional density model, so we don't +associate any parameters with X. +Hence X's CPD will be a root CPD, which is a way of modelling +exogenous nodes. +If the output is a continuous-valued quantity, +we assume the "experts" are linear-regression units, +and set Y's CPD to linear-Gaussian. +If the output is discrete, we set Y's CPD to a softmax function. +The Q CPDs will always be softmax functions. + +

+As a concrete example, consider the mixture of experts model where X and Y are +scalars, and Q is binary. +This is just piecewise linear regression, where +we have two line segments, i.e., +

+ +

+We can create this model with random parameters as follows. +(This code is bundled in BNT/examples/static/mixexp2.m.) +

+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+
+Now let us fit this model using
EM. +First we load the data (1000 training cases) and plot them. +

+

+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+
+

+

+ +
+

+This is what the model looks like before training. +(Thanks to Thomas Hofman for writing this plotting routine.) +

+

+ +
+

+Now let's train the model, and plot the final performance. +(We will discuss how to train models in more detail below.) +

+

+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+
+(We specify which nodes will be observed when we create the engine. +Hence BNT knows that the hidden nodes are all discrete. +For complex models, this can lead to a significant speedup.) +Below we show what the model looks like after 16 iterations of EM +(with 100 IRLS iterations per M step), when it converged +using the default convergence tolerance (that the +fractional change in the log-likelihood be less than 1e-3). +Before learning, the log-likelihood was +-322.927442; afterwards, it was -13.728778. +

+

+ +
+(See BNT/examples/static/mixexp2.m for details of the code.) + + + +

Hierarchical mixtures of experts

+ +A hierarchical mixture of experts (HME) extends the mixture of experts +model by having more than one hidden node. A two-level example is shown below, along +with its more traditional representation as a neural network. +This is like a (balanced) probabilistic decision tree of height 2. +

+

+ +
+

+Pierpaolo Brutti +has written an extensive set of routines for HMEs, +which are bundled with BNT: see the examples/static/HME directory. +These routines allow you to choose the number of hidden (gating) +layers, and the form of the experts (softmax or MLP). +See the file hmemenu, which provides a demo. +For example, the figure below shows the decision boundaries learned +for a ternary classification problem, using a 2 level HME with softmax +gates and softmax experts; the training set is on the left, the +testing set on the right. +

+

+ + +
+

+ + +

+For more details, see the following: +

+ + +

QMR

+ +Bayes nets originally arose out of an attempt to add probabilities to +expert systems, and this is still the most common use for BNs. +A famous example is +QMR-DT, a decision-theoretic reformulation of the Quick Medical +Reference (QMR) model. +

+

+ +
+Here, the top layer represents hidden disease nodes, and the bottom +layer represents observed symptom nodes. +The goal is to infer the posterior probability of each disease given +all the symptoms (which can be present, absent or unknown). +Each node in the top layer has a Bernoulli prior (with a low prior +probability that the disease is present). +Since each node in the bottom layer has a high fan-in, we use a +noisy-OR parameterization; each disease has an independent chance of +causing each symptom. +The real QMR-DT model is copyright, but +we can create a random QMR-like model as follows. +
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+
+In the file BNT/examples/static/qmr1, we create a random bipartite +graph G, with 5 diseases and 10 findings, and random parameters. +(In general, to create a random dag, use 'mk_random_dag'.) +We can visualize the resulting graph structure using +the methods discussed
below, with the +following results: +

+ + +

+Now let us put some random evidence on all the leaves except the very +first and very last, and compute the disease posteriors. +

+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+
+Junction tree can be quite slow on large QMR models. +Fortunately, it is possible to exploit properties of the noisy-OR +function to speed up exact inference using an algorithm called +quickscore, discussed below. + + + + + +

Conditional Gaussian models

+ +A conditional Gaussian model is one in which, conditioned on all the discrete +nodes, the distribution over the remaining (continuous) nodes is +multivariate Gaussian. This means we can have arcs from discrete (D) +to continuous (C) nodes, but not vice versa. +(We are allowed C->D arcs if the continuous nodes are observed, +as in the mixture of experts model, +since this distribution can be represented with a discrete potential.) +

+We now give an example of a CG model, from +the paper "Propagation of Probabilities, Means amd +Variances in Mixed Graphical Association Models", Steffen Lauritzen, +JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert +Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and +D. J. Spiegelhalter, Springer, 1999.) + +

Specifying the graph

+ +Consider the model of waste emissions from an incinerator plant shown below. +We follow the standard convention that shaded nodes are observed, +clear nodes are hidden. +We also use the non-standard convention that +square nodes are discrete (tabular) and round nodes are +Gaussian. + +

+

+ +
+

+ +We can create this model as follows. +

+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous +nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'. +

+ + +

Specifying the parameters

+ +The parameters of the discrete nodes can be specified as follows. +
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+
+ +

+The parameters of the continuous nodes can be specified as follows. +

+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+
+ + +

Inference

+ + +First we compute the unconditional marginals. +
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+
+ +'marg' is a structure that contains the fields 'mu' and 'Sigma', which +contain the mean and (co)variance of the marginal on E. +In this case, they are both scalars. +Let us check they match the published figures (to 2 decimal places). + +
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+
+We can compute the other posteriors similarly. +Now let us add some evidence. +
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+
+Now we find +
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+
+ + +We can also compute the joint probability on a set of nodes. +For example, P(D, Mout | evidence) is a 2D Gaussian: +
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+
+The mean is +
+marg.mu
+ans =
+    3.6077
+    4.1077
+
+and the covariance matrix is +
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+
+It is easy to visualize this posterior using standard Matlab plotting +functions, e.g., +
+gaussplot2d(marg.mu, marg.Sigma);
+
+produces the following picture. + +

+

+ +
+

+ + +The T field indicates that the mixing weight of this Gaussian +component is 1.0. +If the joint contains discrete and continuous variables, the result +will be a mixture of Gaussians, e.g., +

+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+
+The interpretation is +Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ]. +In this case, E is a scalar, so i=j=1; k specifies the mixture component. +

+We saw in the sprinkler network that BNT sets the effective size of +observed discrete nodes to 1, since they only have one legal value. +For continuous nodes, BNT sets their length to 0, +since they have been reduced to a point. +For example, +

+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+
+It is simple to post-process the output of marginal_nodes. +For example, the file BNT/examples/static/cg1 sets the mu term of +observed nodes to their observed value, and the Sigma term to 0 (since +observed nodes have no variance). + +

+Note that the implemented version of the junction tree is numerically +unstable when using CG potentials +(which is why, in the example above, we only required our answers to agree with +the published ones to 2dp.) +This is why you might want to use stab_cond_gauss_inf_engine, +implemented by Shan Huang. This is described in + +

+ +However, even the numerically stable version +can be computationally intractable if there are many hidden discrete +nodes, because the number of mixture components grows exponentially e.g., in a +
switching linear dynamical system. +In general, one must resort to approximate inference techniques: see +the discussion on inference engines below. + + +

Other hybrid models

+ +When we have C->D arcs, where C is hidden, we need to use +approximate inference. +One approach (not implemented in BNT) is described in + +Of course, one can always use sampling methods +for approximate inference in such models. + + + +

Parameter Learning

+ +The parameter estimation routines in BNT can be classified into 4 +types, depending on whether the goal is to compute +a full (Bayesian) posterior over the parameters or just a point +estimate (e.g., Maximum Likelihood or Maximum A Posteriori), +and whether all the variables are fully observed or there is missing +data/ hidden variables (partial observability). +

+ + + + + + + + + + + + + + + + + +
Full obsPartial obs
Pointlearn_paramslearn_params_em
Bayesbayes_update_paramsnot yet supported
+ + +

Loading data from a file

+ +To load numeric data from an ASCII text file called 'dat.txt', where each row is a +case and columns are separated by white-space, such as +
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+
+you can use +
+data = load('dat.txt');
+
+or +
+load dat.txt -ascii
+
+In the latter case, the data is stored in a variable called 'dat' (the +filename minus the extension). +Alternatively, suppose the data is stored in a .csv file (has commas +separating the columns, and contains a header line), such as +
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+
+You can load this using +
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+
+If your file is not in either of these formats, you can either use Perl to convert +it to this format, or use the Matlab scanf command. +Type + +help iofun + +for more information on Matlab's file functions. + +

+BNT learning routines require data to be stored in a cell array. +data{i,m} is the value of node i in case (example) m, i.e., each +column is a case. +If node i is not observed in case m (missing value), set +data{i,m} = []. +(Not all the learning routines can cope with such missing values, however.) +In the special case that all the nodes are observed and are +scalar-valued (as opposed to vector-valued), the data can be +stored in a matrix (as opposed to a cell-array). +

+Suppose, as in the mixture of experts example, +that we have 3 nodes in the graph: X(1) is the observed input, X(3) is +the observed output, and X(2) is a hidden (gating) node. We can +create the dataset as follows. +

+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+
+Notice how we transposed the data, to convert rows into columns. +Also, cases{2,m} = [] for all m, since X(2) is always hidden. + + +

Maximum likelihood parameter estimation from complete data

+ +As an example, let's generate some data from the sprinkler network, randomize the parameters, +and then try to recover the original model. +First we create some training data using forwards sampling. +
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+
+samples{j,i} contains the value of the j'th node in case i. +sample_bnet returns a cell array because, in general, each node might +be a vector of different length. +In this case, all nodes are discrete (and hence scalars), so we +could have used a regular array instead (which can be quicker): +
+data = cell2num(samples);
+
+Now we create a network with random parameters. +(The initial values of bnet2 don't matter in this case, since we can find the +globally optimal MLE independent of where we start.) +
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+
+Finally, we find the maximum likelihood estimates of the parameters. +
+bnet3 = learn_params(bnet2, samples);
+
+To view the learned parameters, we use a little Matlab hackery. +
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+
+Here are the parameters learned for node 4. +
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+
+So we see that the learned parameters are fairly close to the "true" +ones, which we display below. +
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+
+We can get better results by using a larger training set, or using +informative priors (see
below). + + + +

Parameter priors

+ +Currently, only tabular CPDs can have priors on their parameters. +The conjugate prior for a multinomial is the Dirichlet. +(For binary random variables, the multinomial is the same as the +Bernoulli, and the Dirichlet is the same as the Beta.) +

+The Dirichlet has a simple interpretation in terms of pseudo counts. +If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the +training set, where Pa_i are the parents of X_i, +then the maximum likelihood (ML) estimate is +T_ijk = N_ijk / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0. +To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this +event was not seen in the training set, +we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk) +of times in the past. +The MAP (maximum a posterior) estimate is then +

+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+
+and is never 0 if all alpha_ijk > 0. +For example, consider the network A->B, where A is binary and B has 3 +values. +A uniform prior for B has the form +
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+
+which can be created using +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+
+This prior does not satisfy the likelihood equivalence principle, +which says that
Markov equivalent models +should have the same marginal likelihood. +A prior that does satisfy this principle is shown below. +Heckerman (1995) calls this the +BDeu prior (likelihood equivalent uniform Bayesian Dirichlet). +
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+
+where we put N/(q*r) in each bin; N is the equivalent sample size, +r=|A|, q = |B|. +This can be created as follows +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+
+Here, 1 is the equivalent sample size, and is the strength of the +prior. +You can change this using +
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+
+ + + + +

(Sequential) Bayesian parameter updating from complete data

+ +If we use conjugate priors and have fully observed data, we can +compute the posterior over the parameters in batch form as follows. +
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts, +and bnet.CPD{i}.CPT is set to the mean of the posterior (the +normalized counts). +(Hence if the initial pseudo counts are 0, +bayes_update_params and learn_params will give the +same result.) + + + + +

+We can compute the same result sequentially (on-line) as follows. +

+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+
+ +The file BNT/examples/static/StructLearn/model_select1 has an example of +sequential model selection which uses the same idea. +We generate data from the model A->B +and compute the posterior prob of all 3 dags on 2 nodes: + (1) A B, (2) A <- B , (3) A -> B +Models 2 and 3 are
Markov equivalent, and therefore indistinguishable from +observational data alone, so we expect their posteriors to be the same +(assuming a prior which satisfies likelihood equivalence). +If we use random parameters, the "true" model only gets a higher posterior after 2000 trials! +However, if we make B a noisy NOT gate, the true model "wins" after 12 +trials, as shown below (red = model 1, blue/green (superimposed) +represents models 2/3). +

+ +

+The use of marginal likelihood for model selection is discussed in +greater detail in the +section on structure learning. + + + + +

Maximum likelihood parameter estimation with missing values

+ +Now we consider learning when some values are not observed. +Let us randomly hide half the values generated from the water +sprinkler example. +
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+
+samples2{i,l} is the value of node i in training case l, or [] if unobserved. +

+Now we will compute the MLEs using the EM algorithm. +We need to use an inference algorithm to compute the expected +sufficient statistics in the E step; the M (maximization) step is as +above. +

+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as +follows: +
+plot(LLtrace, 'x-')
+
+Let's display the results after 10 iterations of EM. +
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+
+We can get improved performance by using one or more of the following +methods: + + +Click
here for a discussion of learning +Gaussians, which can cause numerical problems. +

+For a more complete example of learning with EM, +see the script BNT/examples/static/learn1.m. + +

Parameter tying

+ +In networks with repeated structure (e.g., chains and grids), it is +common to assume that the parameters are the same at every node. This +is called parameter tying, and reduces the amount of data needed for +learning. +

+When we have tied parameters, there is no longer a one-to-one +correspondence between nodes and CPDs. +Rather, each CPD species the parameters for a whole equivalence class +of nodes. +It is easiest to see this by example. +Consider the following hidden Markov +model (HMM) +

+ +

+ +When HMMs are used for semi-infinite processes like speech recognition, +we assume the transition matrix +P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant +or homogenous Markov chain. +Hence hidden nodes 2, 3, ..., T +are all in the same equivalence class, say class Hclass. +Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the +same for all t, so the observed nodes are all in the same equivalence +class, say class Oclass. +Finally, the prior term P(H(1)) is in a class all by itself, say class +H1class. +This is illustrated below, where we explicitly represent the +parameters as random variables (dotted nodes). +

+ +

+In BNT, we cannot represent parameters as random variables (nodes). +Instead, we "hide" the +parameters inside one CPD for each equivalence class, +and then specify that the other CPDs should share these parameters, as +follows. +

+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+
+Finally, we define the parameters for each equivalence class: +
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a +member of e's equivalence class; that is, it is not always the case +that e == j. You can use bnet.rep_of_eclass(e) to return the +representative of equivalence class e. +BNT will look up the parents of j to determine the size +of the CPT to use. It assumes that this is the same for all members of +the equivalence class. +Click here for +a more complex example of parameter tying. +

+Note: +Normally one would define an HMM as a +Dynamic Bayes Net +(see the function BNT/examples/dynamic/mk_chmm.m). +However, one can define an HMM as a static BN using the function +BNT/examples/static/Models/mk_hmm_bnet.m. + + + +

Structure learning

+ +Update (9/29/03): +Phillipe LeRay is developing some additional structure learning code +on top of BNT. Click here +for details. + +

+ +There are two very different approaches to structure learning: +constraint-based and search-and-score. +In the constraint-based approach, +we start with a fully connected graph, and remove edges if certain +conditional independencies are measured in the data. +This has the disadvantage that repeated independence tests lose +statistical power. +

+In the more popular search-and-score approach, +we perform a search through the space of possible DAGs, and either +return the best one found (a point estimate), or return a sample of the +models found (an approximation to the Bayesian posterior). +

+Unfortunately, the number of DAGs as a function of the number of +nodes, G(n), is super-exponential in n. +A closed form formula for G(n) is not known, but the first few values +are shown below (from Cooper, 1999). + + + + + + + + + + + + + +
n G(n)
1 1
2 3
3 25
4 543
5 29,281
6 3,781,503
7 1.1 x 10^9
8 7.8 x 10^11
9 1.2 x 10^15
10 4.2 x 10^18
+ +Since the number of DAGs is super-exponential in the number of nodes, +we cannot exhaustively search the space, so we either use a local +search algorithm (e.g., greedy hill climbining, perhaps with multiple +restarts) or a global search algorithm (e.g., Markov Chain Monte +Carlo). +

+If we know a total ordering on the nodes, +finding the best structure amounts to picking the best set of parents +for each node independently. +This is what the K2 algorithm does. +If the ordering is unknown, we can search over orderings, +which is more efficient than searching over DAGs (Koller and Friedman, 2000). +

+In addition to the search procedure, we must specify the scoring +function. There are two popular choices. The Bayesian score integrates +out the parameters, i.e., it is the marginal likelihood of the model. +The BIC (Bayesian Information Criterion) is defined as +log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is +the ML estimate of the parameters, d is the number of parameters, and +N is the number of data cases. +The BIC method has the advantage of not requiring a prior. +

+BIC can be derived as a large sample +approximation to the marginal likelihood. +(It is also equal to the Minimum Description Length of a model.) +However, in practice, the sample size does not need to be very large +for the approximation to be good. +For example, in the figure below, we plot the ratio between the log marginal likelihood +and the BIC score against data-set size; we see that the ratio rapidly +approaches 1, especially for non-informative priors. +(This plot was generated by the file BNT/examples/static/bic1.m. It +uses the water sprinkler BN with BDeu Dirichlet priors with different +equivalent sample sizes.) + +

+

+ +
+

+ +

+As with parameter learning, handling missing data/ hidden variables is +much harder than the fully observed case. +The structure learning routines in BNT can therefore be classified into 4 +types, analogously to the parameter learning case. +

+ + + + + + + + + + + + + + + + +
Full obsPartial obs
Pointlearn_struct_K2
+ +
not yet supported
Bayeslearn_struct_mcmcnot yet supported
+ + +

Markov equivalence

+ +If two DAGs encode the same conditional independencies, they are +called Markov equivalent. The set of all DAGs can be paritioned into +Markov equivalence classes. Graphs within the same class can +have +the direction of some of their arcs reversed without changing any of +the CI relationships. +Each class can be represented by a PDAG +(partially directed acyclic graph) called an essential graph or +pattern. This specifies which edges must be oriented in a certain +direction, and which may be reversed. + +

+When learning graph structure from observational data, +the best one can hope to do is to identify the model up to Markov +equivalence. To distinguish amongst graphs within the same equivalence +class, one needs interventional data: see the discussion on active learning below. + + + +

Exhaustive search

+ +The brute-force approach to structure learning is to enumerate all +possible DAGs, and score each one. This provides a "gold standard" +with which to compare other algorithms. We can do this as follows. +
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+
+where data(i,m) is the value of node i in case m, +and ns(i) is the size of node i. +If the DAGs have a lot of families in common, we can cache the sufficient statistics, +making this potentially more efficient than scoring the DAGs one at a time. +(Caching is not currently implemented, however.) +

+By default, we use the Bayesian scoring metric, and assume CPDs are +represented by tables with BDeu(1) priors. +We can override these defaults as follows. +If we want to use uniform priors, we can say +

+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+
+params{i} is a cell-array, containing optional arguments that are +passed to the constructor for CPD i. +

+Now suppose we want to use different node types, e.g., +Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both +these CPDs can support discrete and continuous parents, which is +necessary since all other nodes will be considered as parents). +The Bayesian scoring metric currently only works for tabular CPDs, so +we will use BIC: +

+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+
+In practice, one can't enumerate all possible DAGs for N > 5, +but one can evaluate any reasonably-sized set of hypotheses in this +way (e.g., nearest neighbors of your current best guess). +Think of this as "computer assisted model refinement" as opposed to de +novo learning. + + +

K2

+ +The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows. +Initially each node has no parents. It then adds incrementally that parent whose addition most +increases the score of the resulting structure. When the addition of no single +parent can increase the score, it stops adding parents to the node. +Since we are using a fixed ordering, we do not need to check for +cycles, and can choose the parents for each node independently. +

+The original paper used the Bayesian scoring +metric with tabular CPDs and Dirichlet priors. +BNT generalizes this to allow any kind of CPD, and either the Bayesian +scoring metric or BIC, as in the example above. +In addition, you can specify +an optional upper bound on the number of parents for each node. +The file BNT/examples/static/k2demo1.m gives an example of how to use K2. +We use the water sprinkler network and sample 100 cases from it as before. +Then we see how much data it takes to recover the generating structure: +

+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+
+Here are the results. +
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly, +showing that the prior doesn't matter too much.) +In general, we cannot hope to recover the "true" generating structure, +only one that is in its Markov equivalence +class. + + +

Hill-climbing

+ +Hill-climbing starts at a specific point in space, +considers all nearest neighbors, and moves to the neighbor +that has the highest score; if no neighbors have higher +score than the current point (i.e., we have reached a local maximum), +the algorithm stops. One can then restart in another part of the space. +

+A common definition of "neighbor" is all graphs that can be +generated from the current graph by adding, deleting or reversing a +single arc, subject to the acyclicity constraint. +Other neighborhoods are possible: see + +Optimal Structure Identification with Greedy Search, Max +Chickering, JMLR 2002. + + + + +

MCMC

+ +We can use a Markov Chain Monte Carlo (MCMC) algorithm called +Metropolis-Hastings (MH) to search the space of all +DAGs. +The standard proposal distribution is to consider moving to all +nearest neighbors in the sense defined above. +

+The function can be called +as in the following example. +

+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+
+We can convert our set of sampled graphs to a histogram +(empirical posterior over all the DAGs) thus +
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+
+To see how well this performs, let us compute the exact posterior exhaustively. +

+

+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+
+We plot the results below. +(The data set was 100 samples drawn from a random 4 node bnet; see the +file BNT/examples/static/mcmc1.) +
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+
+ +

+We can also plot the acceptance ratio versus number of MCMC steps, +as a crude convergence diagnostic. +

+clf
+plot(accept_ratio)
+
+ +

+Even though the number of samples needed by MCMC is theoretically +polynomial (not exponential) in the dimensionality of the search space, in practice it has been +found that MCMC does not converge in reasonable time for graphs with +more than about 10 nodes. + + + + +

Active structure learning

+ +As was mentioned above, +one can only learn a DAG up to Markov equivalence, even given infinite data. +If one is interested in learning the structure of a causal network, +one needs interventional data. +(By "intervention" we mean forcing a node to take on a specific value, +thereby effectively severing its incoming arcs.) +

+Most of the scoring functions accept an optional argument +that specifies whether a node was observed to have a certain value, or +was forced to have that value: we set clamped(i,m)=1 if node i was +forced in training case m. e.g., see the file +BNT/examples/static/cooper_yoo. +

+An interesting question is to decide which interventions to perform +(c.f., design of experiments). For details, see the following tech +report +

+ + +

Structural EM

+ +Computing the Bayesian score when there is partial observability is +computationally challenging, because the parameter posterior becomes +multimodal (the hidden nodes induce a mixture distribution). +One therefore needs to use approximations such as BIC. +Unfortunately, search algorithms are still expensive, because we need +to run EM at each step to compute the MLE, which is needed to compute +the score of each model. An alternative approach is +to do the local search steps inside of the M step of EM, which is more +efficient since the data has been "filled in" - this is +called the structural EM algorithm (Friedman 1997), and provably +converges to a local maximum of the BIC score. +

+Wei Hu has implemented SEM for discrete nodes. +You can download his package from +here. +Please address all questions about this code to +wei.hu@intel.com. +See also Phl's implementation of SEM. + + + + +

Visualizing the graph

+ +You can visualize an arbitrary graph (such as one learned using the +structure learning routines) with Matlab code contributed by +Ali +Taylan Cemgil +from the University of Nijmegen. +For static BNs, call it as follows: +
+draw_graph(bnet.dag);
+
+For example, this is the output produced on a +random QMR-like model: +

+ +

+If you install the excellent graphhviz, an +open-source graph visualization package from AT&T, +you can create a much better visualization as follows +

+graph_to_dot(bnet.dag)
+
+This works by converting the adjacency matrix to a file suitable +for input to graphviz (using the dot format), +then converting the output of graphviz to postscript, and displaying the results using +ghostview. +You can do each of these steps separately for more control, as shown +below. +
+graph_to_dot(bnet.dag, 'filename', 'foo.dot');
+dot -Tps foo.dot -o foo.ps
+ghostview foo.ps &
+
+ +

Constraint-based methods

+ +The IC algorithm (Pearl and Verma, 1991), +and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993), +computes many conditional independence tests, +and combines these constraints into a +PDAG to represent the whole +Markov equivalence class. +

+IC*/FCI extend IC/PC to handle latent variables: see below. +(IC stands for inductive causation; PC stands for Peter and Clark, +the first names of Spirtes and Glymour; FCI stands for fast causal +inference. +What we, following Pearl (2000), call IC* was called +IC in the original Pearl and Verma paper.) +For details, see +

+ +

+ +The PC algorithm takes as arguments a function f, the number of nodes N, +the maximum fan in K, and additional arguments A which are passed to f. +The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0 +otherwise. +For example, suppose we cheat by +passing in a CI "oracle" which has access to the true DAG; the oracle +tests for d-separation in this DAG, i.e., +f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows. +

+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+
+pdag(i,j) = -1 if there is definitely an i->j arc, +and pdag(i,j) = 1 if there is either an i->j or and i<-j arc. +

+Applied to the sprinkler network, this returns +

+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+
+So as expected, we see that the V-structure at the W node is uniquely identified, +but the other arcs have ambiguous orientation. +

+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS +book. +This example concerns the female orgasm. +We are given a correlation matrix C between 7 measured factors (such +as subjective experiences of coital and masturbatory experiences), +derived from 281 samples, and want to learn a causal model of the +data. We will not discuss the merits of this type of work here, but +merely show how to reproduce the results in the SGS book. +Their program, +Tetrad, +makes use of the Fisher Z-test for conditional +independence, so we do the same: +

+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+
+In this case, the CI test is +
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+
+The results match those of Fig 12a of SGS apart from two edge +differences; presumably this is due to rounding error (although it +could be a bug, either in BNT or in Tetrad). +This example can be found in the file BNT/examples/static/pc2.m. + +

+ +The IC* algorithm (Pearl and Verma, 1991), +and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993), +are like the IC/PC algorithm, except that they can detect the presence +of latent variables. +See the file learn_struct_pdag_ic_star written by Tamar +Kushnir. The output is a matrix P, defined as follows +(see Pearl (2000), p52 for details): +

+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+
+ + +

Philippe Leray's structure learning package

+ +Philippe Leray has written a + +structure learning package that uses BNT. + +It currently (Juen 2003) has the following features: + + + + + + + + + + + + +

Inference engines

+ +Up until now, we have used the junction tree algorithm for inference. +However, sometimes this is too slow, or not even applicable. +In general, there are many inference algorithms each of which make +different tradeoffs between speed, accuracy, complexity and +generality. Furthermore, there might be many implementations of the +same algorithm; for instance, a general purpose, readable version, +and a highly-optimized, specialized one. +To cope with this variety, we treat each inference algorithm as an +object, which we call an inference engine. + +

+An inference engine is an object that contains a bnet and supports the +'enter_evidence' and 'marginal_nodes' methods. The engine constructor +takes the bnet as argument and may do some model-specific processing. +When 'enter_evidence' is called, the engine may do some +evidence-specific processing. Finally, when 'marginal_nodes' is +called, the engine may do some query-specific processing. + +

+The amount of work done when each stage is specified -- structure, +parameters, evidence, and query -- depends on the engine. The cost of +work done early in this sequence can be amortized. On the other hand, +one can make better optimizations if one waits until later in the +sequence. +For example, the parameters might imply +conditional indpendencies that are not evident in the graph structure, +but can nevertheless be exploited; the evidence indicates which nodes +are observed and hence can effectively be disconnected from the +graph; and the query might indicate that large parts of the network +are d-separated from the query nodes. (Since it is not the actual +values of the evidence that matters, just which nodes are observed, +many engines allow you to specify which nodes will be observed when they are constructed, +i.e., before calling 'enter_evidence'. Some engines can still cope if +the actual pattern of evidence is different, e.g., if there is missing +data.) +

+ +Although being maximally lazy (i.e., only doing work when a query is +issued) may seem desirable, +this is not always the most efficient. +For example, +when learning using EM, we need to call marginal_nodes N times, where N is the +number of nodes. Variable elimination would end +up repeating a lot of work +each time marginal_nodes is called, making it inefficient for +learning. The junction tree algorithm, by contrast, uses dynamic +programming to avoid this redundant computation --- it calculates all +marginals in two passes during 'enter_evidence', so calling +'marginal_nodes' takes constant time. +

+We will discuss some of the inference algorithms implemented in BNT +below, and finish with a summary of all +of them. + + + + + + + +

Variable elimination

+ +The variable elimination algorithm, also known as bucket elimination +or peeling, is one of the simplest inference algorithms. +The basic idea is to "push sums inside of products"; this is explained +in more detail +here. +

+The principle of distributing sums over products can be generalized +greatly to apply to any commutative semiring. +This forms the basis of many common algorithms, such as Viterbi +decoding and the Fast Fourier Transform. For details, see + +

+ +

+Choosing an order in which to sum out the variables so as to minimize +computational cost is known to be NP-hard. +The implementation of this algorithm in +var_elim_inf_engine makes no attempt to optimize this +ordering (in contrast, say, to jtree_inf_engine, which uses a +greedy search procedure to find a good ordering). +

+Note: unlike most algorithms, var_elim does all its computational work +inside of marginal_nodes, not inside of +enter_evidence. + + + + +

Global inference methods

+ +The simplest inference algorithm of all is to explicitely construct +the joint distribution over all the nodes, and then to marginalize it. +This is implemented in global_joint_inf_engine. +Since the size of the joint is exponential in the +number of discrete (hidden) nodes, this is not a very practical algorithm. +It is included merely for pedagogical and debugging purposes. +

+Three specialized versions of this algorithm have also been implemented, +corresponding to the cases where all the nodes are discrete (D), all +are Gaussian (G), and some are discrete and some Gaussian (CG). +They are called enumerative_inf_engine, +gaussian_inf_engine, +and cond_gauss_inf_engine respectively. +

+Note: unlike most algorithms, these global inference algorithms do all their computational work +inside of marginal_nodes, not inside of +enter_evidence. + + +

Quickscore

+ +The junction tree algorithm is quite slow on the QMR network, +since the cliques are so big. +One simple trick we can use is to notice that hidden leaves do not +affect the posteriors on the roots, and hence do not need to be +included in the network. +A second trick is to notice that the negative findings can be +"absorbed" into the prior: +see the file +BNT/examples/static/mk_minimal_qmr_bnet for details. +

+ +A much more significant speedup is obtained by exploiting special +properties of the noisy-or node, as done by the quickscore +algorithm. For details, see +

+ +This has been implemented in BNT as a special-purpose inference +engine, which can be created and used as follows: +
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+
+ + +

Belief propagation

+ +Even using quickscore, exact inference takes time that is exponential +in the number of positive findings. +Hence for large networks we need to resort to approximate inference techniques. +See for example + +The latter approximation +entails applying Pearl's belief propagation algorithm to a model even +if it has loops (hence the name loopy belief propagation). +Pearl's algorithm, implemented as pearl_inf_engine, gives +exact results when applied to singly-connected graphs +(a.k.a. polytrees, since +the underlying undirected topology is a tree, but a node may have +multiple parents). +To apply this algorithm to a graph with loops, +use pearl_inf_engine. +This can use a centralized or distributed message passing protocol. +You can use it as in the following example. +
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+
+We found that this algorithm often converges, and when it does, often +is very accurate, but it depends on the precise setting of the +parameter values of the network. +(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.) +Understanding when and why belief propagation converges/ works +is a topic of ongoing research. +

+pearl_inf_engine can exploit special structure in noisy-or +and gmux nodes to compute messages efficiently. +

+belprop_inf_engine is like pearl, but uses potentials to +represent messages. Hence this is slower. +

+belprop_fg_inf_engine is like belprop, +but is designed for factor graphs. + + + +

Sampling

+ +BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms: + +Note: To generate samples from a network (which is not the same as inference!), +use sample_bnet. + + + +

Summary of inference engines

+ + +The inference engines differ in many ways. Here are +some of the major "axes": + + +

+In terms of topology, most engines handle any kind of DAG. +belprop_fg does approximate inference on factor graphs (FG), which +can be used to represent directed, undirected, and mixed (chain) +graphs. +(In the future, we plan to support exact inference on chain graphs.) +quickscore only works on QMR-like models. +

+In terms of node types: algorithms that use potentials can handle +discrete (D), Gaussian (G) or conditional Gaussian (CG) models. +Sampling algorithms can essentially handle any kind of node (distribution). +Other algorithms make more restrictive assumptions in exchange for +speed. +

+Finally, most algorithms are designed to give the exact answer. +The belief propagation algorithms are exact if applied to trees, and +in some other cases. +Sampling is considered approximate, even though, in the limit of an +infinite number of samples, it gives the exact answer. + +

+ +Here is a summary of the properties +of all the engines in BNT which work on static networks. +

+ +
+ + + + + + + + + + + + + + + +
Name +Exact? +Node type? +topology +
belprop + approx + D + DAG +
belprop_fg + approx + D + factor graph +
cond_gauss + exact + CG + DAG +
enumerative + exact + D + DAG +
gaussian + exact + G + DAG +
gibbs + approx + D + DAG +
global_joint + exact + D,G,CG + DAG +
jtree + exact + D,G,CG + DAG +b
likelihood_weighting + approx + any + DAG +
pearl + approx + D,G + DAG +
pearl + exact + D,G + polytree +
quickscore + exact + noisy-or + QMR +
stab_cond_gauss + exact + CG + DAG +
var_elim + exact + D,G,CG + DAG +
+ + + +

Influence diagrams/ decision making

+ +BNT implements an exact algorithm for solving LIMIDs (limited memory +influence diagrams), described in + +LIMIDs explicitely show all information arcs, rather than implicitely +assuming no forgetting. This allows them to model forgetful +controllers. +

+See the examples in BNT/examples/limids for details. + + + + +

DBNs, HMMs, Kalman filters and all that

+ +Click here for documentation about how to +use BNT for dynamical systems and sequence data. + + + diff --git a/sourcecodes/bnt-master/docs/whyNotSourceforge.html b/sourcecodes/bnt-master/docs/whyNotSourceforge.html new file mode 100644 index 00000000..7c17e425 --- /dev/null +++ b/sourcecodes/bnt-master/docs/whyNotSourceforge.html @@ -0,0 +1,17 @@ +On 4 October 2007, I decided to move BNT back from +sourceforge to my +own website, where I could modify it more easily. I have no plans to +add new functionality, but I at least want it to ensure it runs +correctly on new versions of matlab. Despite new users complaining on +the Yahoo group that BNT would +not work on the latest version of Matlab, nobody in the sourceforce +community did anything about it. As an opensource project, it was basically +a failure (although I would like +to thank Nicholas Saunier and Tom Murray (yozhik) for +making code updates, +as well as Hiroaki Ogawa and mayliszt, +and Bob Welch for answering many questions on the newsgroup.) +For historical purposes, +v1.0.3 (as of 4 Oct 07) has been cached +here. + -- cgit 1.4.1