aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bootstrap/bin/start.bootbin5254 -> 5256 bytes
-rw-r--r--bootstrap/bin/start_clean.bootbin5254 -> 5256 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_asm.beambin11608 -> 11608 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_block.beambin14436 -> 15064 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_bool.beambin16244 -> 16244 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_bsm.beambin12536 -> 12536 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_clean.beambin9476 -> 9476 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_dead.beambin10212 -> 10212 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_dict.beambin5360 -> 5360 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_disasm.beambin25124 -> 25124 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_except.beambin3472 -> 3472 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_flatten.beambin2900 -> 2924 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_jump.beambin8524 -> 8568 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_peep.beambin2428 -> 2428 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_receive.beambin6480 -> 6480 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_split.beambin2048 -> 2048 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_trim.beambin7672 -> 7672 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_type.beambin14328 -> 14488 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_utils.beambin13320 -> 13352 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_validator.beambin34556 -> 34556 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl.beambin30084 -> 30084 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl_clauses.beambin2876 -> 2876 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl_inline.beambin37764 -> 37764 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl_trees.beambin18952 -> 18952 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/compile.beambin37912 -> 37908 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/compiler.app2
-rw-r--r--bootstrap/lib/compiler/ebin/core_lib.beambin5460 -> 5460 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/core_lint.beambin11644 -> 11644 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/core_parse.beambin37664 -> 37664 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/core_pp.beambin12064 -> 12064 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/core_scan.beambin6628 -> 6628 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/rec_env.beambin4772 -> 4772 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_core_dsetel.beambin6992 -> 6992 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_core_fold.beambin47452 -> 47452 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_core_inline.beambin4276 -> 4272 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_pre_attributes.beambin3348 -> 3348 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_pre_expand.beambin13420 -> 13620 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_codegen.beambin51992 -> 51992 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_core.beambin51276 -> 51972 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_kernel.beambin43296 -> 43300 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_kernel_pp.beambin11780 -> 11780 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_life.beambin19992 -> 19992 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/application_controller.beambin31280 -> 31280 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/application_master.beambin6340 -> 6340 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/application_starter.beambin1256 -> 1256 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/auth.beambin6496 -> 6496 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/code.beambin7020 -> 7020 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/code_server.beambin28536 -> 28536 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/disk_log.beambin37132 -> 37132 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/disk_log_1.beambin25080 -> 25080 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/disk_log_server.beambin6604 -> 6604 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/dist_ac.beambin26652 -> 26652 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/dist_util.beambin10512 -> 10512 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erl_boot_server.beambin5924 -> 5924 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erl_ddll.beambin2916 -> 2916 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erl_epmd.beambin7128 -> 7128 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erl_reply.beambin924 -> 924 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/error_logger.beambin4480 -> 4480 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erts_debug.beambin4048 -> 4048 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/file.beambin14544 -> 14544 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/file_io_server.beambin14528 -> 14528 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/file_server.beambin5432 -> 5436 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/gen_sctp.beambin3636 -> 3636 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/global.beambin32676 -> 32676 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/global_group.beambin17740 -> 17740 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/group.beambin13540 -> 13540 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/heart.beambin4072 -> 4072 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/hipe_unified_loader.beambin13256 -> 13256 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet.beambin23500 -> 23500 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet6_tcp.beambin2680 -> 2680 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet6_tcp_dist.beambin6240 -> 6240 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet6_udp.beambin1728 -> 1728 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_config.beambin7784 -> 7784 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_db.beambin26708 -> 26708 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_dns.beambin19772 -> 19772 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_gethost_native.beambin10500 -> 10500 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_hosts.beambin2144 -> 2144 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_parse.beambin12944 -> 12944 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_res.beambin15092 -> 15092 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_sctp.beambin2312 -> 2312 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_tcp.beambin2488 -> 2488 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_tcp_dist.beambin6524 -> 6524 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_udp.beambin1916 -> 1916 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/kernel.app2
-rw-r--r--bootstrap/lib/kernel/ebin/kernel.beambin3852 -> 3852 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/kernel_config.beambin2760 -> 2760 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/net_adm.beambin3088 -> 3088 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/net_kernel.beambin22900 -> 22900 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/os.beambin5448 -> 5448 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/pg2.beambin7900 -> 7900 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/rpc.beambin8616 -> 8616 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/user.beambin11592 -> 11588 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/user_drv.beambin10356 -> 10356 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/wrap_log_reader.beambin3380 -> 3380 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/array.beambin12032 -> 12032 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/base64.beambin4528 -> 4528 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/beam_lib.beambin18180 -> 18180 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/binary.beambin3644 -> 3644 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/c.beambin13872 -> 13872 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/calendar.beambin5176 -> 5176 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets.beambin53624 -> 53624 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_server.beambin6956 -> 6956 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_utils.beambin28876 -> 28876 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_v8.beambin27616 -> 27616 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_v9.beambin50216 -> 50216 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dict.beambin9216 -> 9216 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/digraph.beambin8308 -> 8308 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/digraph_utils.beambin6852 -> 6852 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/edlin.beambin9956 -> 9956 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/edlin_expand.beambin3096 -> 3096 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/epp.beambin27520 -> 27592 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_bits.beambin2552 -> 2552 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_compile.beambin7312 -> 7312 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_eval.beambin22744 -> 29228 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_expand_records.beambin21788 -> 21872 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_lint.beambin84356 -> 84628 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_parse.beambin69084 -> 69620 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_pp.beambin25120 -> 25632 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_scan.beambin30132 -> 30132 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_tar.beambin15320 -> 15320 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/error_logger_file_h.beambin5128 -> 5128 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/error_logger_tty_h.beambin5056 -> 5056 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/escript.beambin17444 -> 17444 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/ets.beambin22328 -> 22316 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/eval_bits.beambin8128 -> 8128 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/file_sorter.beambin30792 -> 30792 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/filelib.beambin7932 -> 7932 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/filename.beambin12436 -> 12436 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gb_sets.beambin8284 -> 8284 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gb_trees.beambin4992 -> 4992 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen.beambin4048 -> 4048 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_event.beambin18264 -> 18264 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_fsm.beambin15628 -> 15628 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_server.beambin17404 -> 17404 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/io.beambin6836 -> 6836 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/io_lib.beambin9472 -> 9472 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/io_lib_format.beambin12408 -> 12408 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/io_lib_fread.beambin7404 -> 7404 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/io_lib_pretty.beambin14124 -> 14124 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/lib.beambin9652 -> 9652 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/lists.beambin29636 -> 29636 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/log_mf_h.beambin2672 -> 2672 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/ms_transform.beambin20236 -> 20360 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/pool.beambin3848 -> 3848 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/proc_lib.beambin9968 -> 9968 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/proplists.beambin4948 -> 4948 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/qlc.beambin70300 -> 70376 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/qlc_pt.beambin73056 -> 73648 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/queue.beambin6184 -> 6184 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/re.beambin13876 -> 13876 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/sets.beambin7096 -> 7096 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/shell.beambin29764 -> 29960 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/slave.beambin4860 -> 4860 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/sofs.beambin40832 -> 40832 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/stdlib.app4
-rw-r--r--bootstrap/lib/stdlib/ebin/supervisor.beambin23596 -> 23596 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/sys.beambin7556 -> 7556 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/timer.beambin5476 -> 5476 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/unicode.beambin11584 -> 11584 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/win32reg.beambin5652 -> 5652 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/zip.beambin26848 -> 26848 bytes
-rw-r--r--erts/doc/src/absform.xml12
-rw-r--r--erts/doc/src/erlc.xml10
-rw-r--r--erts/emulator/beam/atom.names1
-rw-r--r--erts/emulator/beam/bif.tab8
-rw-r--r--erts/emulator/beam/erl_bif_ddll.c26
-rwxr-xr-xerts/emulator/beam/erl_bif_info.c5
-rw-r--r--erts/emulator/beam/erl_bif_port.c2
-rw-r--r--erts/emulator/beam/erl_bif_re.c4
-rw-r--r--erts/emulator/beam/erl_debug.c2
-rw-r--r--erts/emulator/beam/erl_init.c4
-rw-r--r--erts/emulator/beam/erl_nif.c7
-rw-r--r--erts/emulator/beam/erl_process.c9
-rw-r--r--erts/emulator/beam/erl_unicode.c17
-rw-r--r--erts/emulator/beam/erl_zlib.c40
-rw-r--r--erts/emulator/beam/erl_zlib.h6
-rw-r--r--erts/emulator/beam/external.c748
-rw-r--r--erts/emulator/beam/external.h1
-rwxr-xr-xerts/emulator/beam/global.h3
-rw-r--r--erts/emulator/beam/io.c2
-rw-r--r--erts/emulator/beam/sys.h9
-rw-r--r--erts/emulator/drivers/common/inet_drv.c4
-rw-r--r--erts/emulator/internal_doc/CarrierMigration.md201
-rw-r--r--erts/emulator/internal_doc/CodeLoading.md186
-rw-r--r--erts/emulator/internal_doc/DelayedDealloc.md175
-rw-r--r--erts/emulator/internal_doc/PTables.md356
-rw-r--r--erts/emulator/internal_doc/PortSignals.md267
-rw-r--r--erts/emulator/internal_doc/ProcessManagementOptimizations.md172
-rw-r--r--erts/emulator/internal_doc/ThreadProgress.md308
-rw-r--r--erts/emulator/internal_doc/Tracing.md220
-rw-r--r--erts/emulator/sys/unix/erl_unix_sys_ddll.c2
-rw-r--r--erts/emulator/sys/unix/sys.c19
-rw-r--r--erts/emulator/sys/win32/erl_win32_sys_ddll.c2
-rw-r--r--erts/emulator/test/binary_SUITE.erl148
-rw-r--r--erts/emulator/test/fun_SUITE.erl10
-rw-r--r--erts/preloaded/ebin/erlang.beambin97588 -> 97872 bytes
-rw-r--r--erts/preloaded/ebin/erts_internal.beambin3784 -> 4096 bytes
-rw-r--r--erts/preloaded/src/erlang.erl18
-rw-r--r--erts/preloaded/src/erts_internal.erl12
-rw-r--r--lib/Makefile4
-rw-r--r--lib/appmon/AUTHORS5
-rw-r--r--lib/appmon/BUGS_AND_FIXES5
-rw-r--r--lib/appmon/Makefile33
-rw-r--r--lib/appmon/doc/man3/.gitignore0
-rw-r--r--lib/appmon/doc/pdf/.gitignore0
-rw-r--r--lib/appmon/doc/src/Makefile120
-rw-r--r--lib/appmon/doc/src/app_win.gifbin4210 -> 0 bytes
-rw-r--r--lib/appmon/doc/src/app_win.ps680
-rw-r--r--lib/appmon/doc/src/appmon.xml67
-rw-r--r--lib/appmon/doc/src/appmon_chapter.xml328
-rw-r--r--lib/appmon/doc/src/book.xml47
-rw-r--r--lib/appmon/doc/src/fascicules.xml18
-rw-r--r--lib/appmon/doc/src/listbox_win.gifbin4437 -> 0 bytes
-rw-r--r--lib/appmon/doc/src/listbox_win.ps741
-rw-r--r--lib/appmon/doc/src/main_win.gifbin3011 -> 0 bytes
-rw-r--r--lib/appmon/doc/src/main_win.ps691
-rw-r--r--lib/appmon/doc/src/note.gifbin1539 -> 0 bytes
-rw-r--r--lib/appmon/doc/src/notes.xml300
-rw-r--r--lib/appmon/doc/src/part.xml37
-rw-r--r--lib/appmon/doc/src/part_notes.xml39
-rw-r--r--lib/appmon/doc/src/pinfo_win.gifbin7351 -> 0 bytes
-rw-r--r--lib/appmon/doc/src/pinfo_win.ps1353
-rw-r--r--lib/appmon/doc/src/ref_man.xml37
-rw-r--r--lib/appmon/doc/src/warning.gifbin1498 -> 0 bytes
-rw-r--r--lib/appmon/ebin/.gitignore0
-rw-r--r--lib/appmon/info5
-rw-r--r--lib/appmon/priv/Makefile65
-rw-r--r--lib/appmon/priv/appmon.gifbin125 -> 0 bytes
-rw-r--r--lib/appmon/priv/appmon.tool24
-rw-r--r--lib/appmon/priv/appmon_help.txt154
-rw-r--r--lib/appmon/priv/blank.html6
-rw-r--r--lib/appmon/priv/info_frames.html9
-rw-r--r--lib/appmon/priv/main_frame.html9
-rw-r--r--lib/appmon/priv/start_info.html31
-rw-r--r--lib/appmon/src/Makefile103
-rw-r--r--lib/appmon/src/appmon.app.src24
-rw-r--r--lib/appmon/src/appmon.appup.src18
-rw-r--r--lib/appmon/src/appmon.erl1081
-rw-r--r--lib/appmon/src/appmon_a.erl1122
-rw-r--r--lib/appmon/src/appmon_dg.erl205
-rw-r--r--lib/appmon/src/appmon_dg.hrl45
-rw-r--r--lib/appmon/src/appmon_lb.erl696
-rw-r--r--lib/appmon/src/appmon_place.erl192
-rw-r--r--lib/appmon/src/appmon_txt.erl307
-rw-r--r--lib/appmon/src/appmon_web.erl1031
-rw-r--r--lib/appmon/src/process_info.erl662
-rw-r--r--lib/appmon/vsn.mk1
-rw-r--r--lib/compiler/doc/src/compile.xml12
-rw-r--r--lib/compiler/src/beam_block.erl15
-rw-r--r--lib/compiler/src/beam_flatten.erl1
-rw-r--r--lib/compiler/src/beam_jump.erl12
-rw-r--r--lib/compiler/src/beam_type.erl6
-rw-r--r--lib/compiler/src/beam_utils.erl6
-rw-r--r--lib/compiler/src/compile.erl6
-rw-r--r--lib/compiler/src/sys_core_fold.erl35
-rw-r--r--lib/compiler/src/sys_pre_expand.erl14
-rw-r--r--lib/compiler/src/v3_core.erl68
-rw-r--r--lib/compiler/test/andor_SUITE.erl6
-rw-r--r--lib/compiler/test/compilation_SUITE.erl10
-rw-r--r--lib/compiler/test/compile_SUITE.erl6
-rw-r--r--lib/compiler/test/fun_SUITE.erl13
-rw-r--r--lib/crypto/c_src/crypto.c13
-rw-r--r--lib/debugger/src/Makefile14
-rw-r--r--lib/debugger/src/dbg_ieval.erl179
-rw-r--r--lib/debugger/src/dbg_iload.erl3
-rw-r--r--lib/debugger/src/dbg_ui_break.erl98
-rw-r--r--lib/debugger/src/dbg_ui_break_win.erl314
-rw-r--r--lib/debugger/src/dbg_ui_edit.erl91
-rw-r--r--lib/debugger/src/dbg_ui_edit_win.erl128
-rw-r--r--lib/debugger/src/dbg_ui_filedialog_win.erl340
-rw-r--r--lib/debugger/src/dbg_ui_interpret.erl161
-rw-r--r--lib/debugger/src/dbg_ui_mon.erl738
-rw-r--r--lib/debugger/src/dbg_ui_mon_win.erl573
-rw-r--r--lib/debugger/src/dbg_ui_settings.erl162
-rw-r--r--lib/debugger/src/dbg_ui_trace.erl814
-rw-r--r--lib/debugger/src/dbg_ui_trace_win.erl1595
-rw-r--r--lib/debugger/src/dbg_ui_view.erl255
-rw-r--r--lib/debugger/src/dbg_ui_win.erl281
-rw-r--r--lib/debugger/src/dbg_ui_winman.erl182
-rw-r--r--lib/debugger/src/dbg_wx_mon_win.erl9
-rw-r--r--lib/debugger/src/dbg_wx_trace.erl26
-rw-r--r--lib/debugger/src/debugger.app.src20
-rw-r--r--lib/debugger/src/debugger.erl38
-rw-r--r--lib/debugger/test/erl_eval_SUITE.erl26
-rw-r--r--lib/debugger/test/fun_SUITE.erl17
-rw-r--r--lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl4
-rw-r--r--lib/dialyzer/doc/manual.txt6
-rw-r--r--lib/dialyzer/doc/src/dialyzer.xml6
-rw-r--r--lib/dialyzer/src/Makefile5
-rw-r--r--lib/dialyzer/src/dialyzer.erl15
-rw-r--r--lib/dialyzer/src/dialyzer_callgraph.erl24
-rw-r--r--lib/dialyzer/src/dialyzer_cl_parse.erl19
-rw-r--r--lib/dialyzer/src/dialyzer_dataflow.erl11
-rw-r--r--lib/dialyzer/src/dialyzer_dep.erl27
-rw-r--r--lib/dialyzer/src/dialyzer_gui.erl1381
-rw-r--r--lib/dialyzer/test/options1_SUITE_data/src/compiler/sys_expand_pmod.erl2
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/eep37 (renamed from lib/appmon/doc/html/.gitignore)0
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/eep37.erl15
-rw-r--r--lib/et/src/Makefile5
-rw-r--r--lib/et/src/et.app.src4
-rw-r--r--lib/et/src/et_collector.erl2
-rw-r--r--lib/et/src/et_gs_contents_viewer.erl602
-rw-r--r--lib/et/src/et_gs_viewer.erl1498
-rw-r--r--lib/et/src/et_viewer.erl19
-rw-r--r--lib/et/src/modules.mk4
-rw-r--r--lib/hipe/tools/Makefile3
-rw-r--r--lib/hipe/tools/hipe_tool.erl525
-rw-r--r--lib/inets/doc/src/httpc.xml2
-rw-r--r--lib/megaco/doc/src/definitions/term.defs3
-rw-r--r--lib/observer/doc/src/Makefile4
-rw-r--r--lib/observer/doc/src/etop.xml19
-rw-r--r--lib/observer/doc/src/etop_5.gifbin9576 -> 0 bytes
-rw-r--r--lib/observer/doc/src/etop_lines.gifbin14552 -> 0 bytes
-rw-r--r--lib/observer/doc/src/etop_main.gifbin12947 -> 0 bytes
-rw-r--r--lib/observer/doc/src/etop_opt.gifbin13572 -> 0 bytes
-rw-r--r--lib/observer/doc/src/etop_ug.xml44
-rwxr-xr-xlib/observer/priv/bin/getop4
-rw-r--r--lib/observer/priv/bin/getop.bat2
-rw-r--r--lib/observer/src/Makefile4
-rw-r--r--lib/observer/src/etop.erl5
-rw-r--r--lib/observer/src/etop_defs.hrl6
-rw-r--r--lib/observer/src/etop_gui.erl374
-rw-r--r--lib/observer/src/etop_txt.erl13
-rw-r--r--lib/observer/src/observer.app.src3
-rw-r--r--lib/pman/AUTHORS9
-rw-r--r--lib/pman/Makefile34
-rw-r--r--lib/pman/doc/html/.gitignore0
-rw-r--r--lib/pman/doc/man3/.gitignore0
-rw-r--r--lib/pman/doc/pdf/.gitignore0
-rw-r--r--lib/pman/doc/src/Makefile116
-rw-r--r--lib/pman/doc/src/book.xml43
-rw-r--r--lib/pman/doc/src/fascicules.xml18
-rw-r--r--lib/pman/doc/src/main_window.gifbin14431 -> 0 bytes
-rw-r--r--lib/pman/doc/src/main_window.ps1573
-rw-r--r--lib/pman/doc/src/note.gifbin1539 -> 0 bytes
-rw-r--r--lib/pman/doc/src/notes.xml211
-rw-r--r--lib/pman/doc/src/options.gifbin5218 -> 0 bytes
-rw-r--r--lib/pman/doc/src/options.ps829
-rw-r--r--lib/pman/doc/src/part.xml37
-rw-r--r--lib/pman/doc/src/part_notes.xml39
-rw-r--r--lib/pman/doc/src/pman.xml88
-rw-r--r--lib/pman/doc/src/pman_chapter.xml377
-rw-r--r--lib/pman/doc/src/ref_man.xml37
-rw-r--r--lib/pman/doc/src/toolbar.gifbin6848 -> 0 bytes
-rw-r--r--lib/pman/doc/src/trace.gifbin9829 -> 0 bytes
-rw-r--r--lib/pman/doc/src/trace.ps1312
-rw-r--r--lib/pman/doc/src/warning.gifbin1498 -> 0 bytes
-rw-r--r--lib/pman/ebin/.gitignore0
-rw-r--r--lib/pman/info2
-rw-r--r--lib/pman/priv/Makefile58
-rw-r--r--lib/pman/priv/pman.gifbin199 -> 0 bytes
-rw-r--r--lib/pman/priv/pman.tool6
-rw-r--r--lib/pman/src/Makefile112
-rw-r--r--lib/pman/src/assert.hrl81
-rw-r--r--lib/pman/src/pman.app.src40
-rw-r--r--lib/pman/src/pman.appup.src19
-rw-r--r--lib/pman/src/pman.erl132
-rw-r--r--lib/pman/src/pman_buf.erl117
-rw-r--r--lib/pman/src/pman_buf.hrl29
-rw-r--r--lib/pman/src/pman_buf_buffer.erl102
-rw-r--r--lib/pman/src/pman_buf_converter.erl190
-rw-r--r--lib/pman/src/pman_buf_printer.erl91
-rw-r--r--lib/pman/src/pman_buf_utils.erl106
-rw-r--r--lib/pman/src/pman_main.erl789
-rw-r--r--lib/pman/src/pman_module_info.erl133
-rw-r--r--lib/pman/src/pman_options.erl395
-rw-r--r--lib/pman/src/pman_options.hrl34
-rw-r--r--lib/pman/src/pman_process.erl317
-rw-r--r--lib/pman/src/pman_relay.erl127
-rw-r--r--lib/pman/src/pman_relay_server.erl57
-rw-r--r--lib/pman/src/pman_shell.erl827
-rw-r--r--lib/pman/src/pman_tool.erl146
-rw-r--r--lib/pman/src/pman_win.erl677
-rw-r--r--lib/pman/src/pman_win.hrl39
-rw-r--r--lib/pman/vsn.mk1
-rw-r--r--lib/sasl/test/release_handler_SUITE.erl8
-rw-r--r--lib/stdlib/examples/erl_id_trans.erl2
-rw-r--r--lib/stdlib/src/epp.erl2
-rw-r--r--lib/stdlib/src/erl_eval.erl170
-rw-r--r--lib/stdlib/src/erl_expand_records.erl3
-rw-r--r--lib/stdlib/src/erl_lint.erl10
-rw-r--r--lib/stdlib/src/erl_parse.yrl12
-rw-r--r--lib/stdlib/src/erl_pp.erl20
-rw-r--r--lib/stdlib/src/ets.erl2
-rw-r--r--lib/stdlib/src/ms_transform.erl7
-rw-r--r--lib/stdlib/src/orddict.erl8
-rw-r--r--lib/stdlib/src/qlc.erl2
-rw-r--r--lib/stdlib/src/qlc_pt.erl16
-rw-r--r--lib/stdlib/src/shell.erl7
-rw-r--r--lib/stdlib/test/erl_eval_SUITE.erl27
-rw-r--r--lib/stdlib/test/erl_lint_SUITE.erl60
-rw-r--r--lib/stdlib/test/erl_pp_SUITE.erl27
-rw-r--r--lib/stdlib/test/ms_transform_SUITE.erl11
-rw-r--r--lib/stdlib/test/qlc_SUITE.erl14
-rw-r--r--lib/syntax_tools/src/erl_syntax.erl126
-rw-r--r--lib/test_server/src/ts_lib.erl3
-rw-r--r--lib/toolbar/AUTHORS3
-rw-r--r--lib/toolbar/Makefile36
-rw-r--r--lib/toolbar/doc/html/.gitignore0
-rw-r--r--lib/toolbar/doc/man3/.gitignore0
-rw-r--r--lib/toolbar/doc/pdf/.gitignore0
-rw-r--r--lib/toolbar/doc/src/Makefile115
-rw-r--r--lib/toolbar/doc/src/bar.gifbin4591 -> 0 bytes
-rw-r--r--lib/toolbar/doc/src/bar.ps846
-rw-r--r--lib/toolbar/doc/src/book.xml49
-rw-r--r--lib/toolbar/doc/src/create_tool.gifbin5925 -> 0 bytes
-rw-r--r--lib/toolbar/doc/src/create_tool.ps5050
-rw-r--r--lib/toolbar/doc/src/fascicules.xml18
-rw-r--r--lib/toolbar/doc/src/note.gifbin1539 -> 0 bytes
-rw-r--r--lib/toolbar/doc/src/notes.xml180
-rw-r--r--lib/toolbar/doc/src/part.xml38
-rw-r--r--lib/toolbar/doc/src/part_notes.xml38
-rw-r--r--lib/toolbar/doc/src/ref_man.xml38
-rw-r--r--lib/toolbar/doc/src/toolbar.xml101
-rw-r--r--lib/toolbar/doc/src/toolbar_chapter.xml145
-rw-r--r--lib/toolbar/doc/src/warning.gifbin1498 -> 0 bytes
-rw-r--r--lib/toolbar/ebin/.gitignore0
-rw-r--r--lib/toolbar/info2
-rw-r--r--lib/toolbar/src/Makefile93
-rw-r--r--lib/toolbar/src/canvasbutton.erl239
-rw-r--r--lib/toolbar/src/toolbar.app.src30
-rw-r--r--lib/toolbar/src/toolbar.appup.src19
-rw-r--r--lib/toolbar/src/toolbar.erl579
-rw-r--r--lib/toolbar/src/toolbar.hrl34
-rw-r--r--lib/toolbar/src/toolbar_graphics.erl404
-rw-r--r--lib/toolbar/src/toolbar_lib.erl223
-rw-r--r--lib/toolbar/src/toolbar_toolconfig.erl549
-rw-r--r--lib/toolbar/vsn.mk10
-rw-r--r--lib/tools/emacs/erlang.el6
-rw-r--r--lib/tools/emacs/test.erl.indented13
-rw-r--r--lib/tools/emacs/test.erl.orig13
-rw-r--r--lib/tools/src/cover.erl7
-rw-r--r--lib/tools/src/xref_reader.erl10
-rw-r--r--lib/tools/test/cover_SUITE.erl18
-rw-r--r--lib/tools/test/xref_SUITE.erl15
-rw-r--r--lib/tools/test/xref_SUITE_data/read/read.erl27
-rw-r--r--lib/tv/AUTHORS5
-rw-r--r--lib/tv/Makefile35
-rw-r--r--lib/tv/doc/html/.gitignore0
-rw-r--r--lib/tv/doc/man3/.gitignore0
-rw-r--r--lib/tv/doc/pdf/.gitignore0
-rw-r--r--lib/tv/doc/src/Makefile138
-rw-r--r--lib/tv/doc/src/book.xml48
-rw-r--r--lib/tv/doc/src/fascicules.xml19
-rw-r--r--lib/tv/doc/src/info_window.gifbin6315 -> 0 bytes
-rw-r--r--lib/tv/doc/src/info_window.ps814
-rw-r--r--lib/tv/doc/src/note.gifbin1539 -> 0 bytes
-rw-r--r--lib/tv/doc/src/notes.xml288
-rw-r--r--lib/tv/doc/src/part.xml40
-rw-r--r--lib/tv/doc/src/part_notes.xml40
-rw-r--r--lib/tv/doc/src/ref_man.xml40
-rw-r--r--lib/tv/doc/src/set_poll_int.gifbin2789 -> 0 bytes
-rw-r--r--lib/tv/doc/src/set_poll_int.ps483
-rw-r--r--lib/tv/doc/src/table_visualizer_chapter.xml658
-rw-r--r--lib/tv/doc/src/tv.gifbin17015 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv.xml72
-rw-r--r--lib/tv/doc/src/tv_create_table.gifbin6211 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_create_table.ps1120
-rw-r--r--lib/tv/doc/src/tv_record_editor_mnesia.gifbin4982 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_record_editor_mnesia.ps897
-rw-r--r--lib/tv/doc/src/tv_row_marked.gifbin12354 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_row_marked.ps1611
-rw-r--r--lib/tv/doc/src/tv_row_marked_popup.gifbin13216 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_row_marked_popup.ps1324
-rw-r--r--lib/tv/doc/src/tv_search_result.gifbin23525 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_search_result.ps2739
-rw-r--r--lib/tv/doc/src/tv_search_window.gifbin5054 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_search_window.ps975
-rw-r--r--lib/tv/doc/src/tv_start.gifbin8089 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start.ps828
-rw-r--r--lib/tv/doc/src/tv_start_mnesia.gifbin8080 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start_mnesia.ps835
-rw-r--r--lib/tv/doc/src/tv_start_other_node.gifbin17327 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start_other_node.ps2316
-rw-r--r--lib/tv/doc/src/tv_start_pid_sorted.gifbin13775 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start_pid_sorted.ps1853
-rw-r--r--lib/tv/doc/src/tv_start_system.gifbin12372 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start_system.ps1330
-rw-r--r--lib/tv/doc/src/tv_start_system_unreadable.gifbin13890 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_start_system_unreadable.ps1377
-rw-r--r--lib/tv/doc/src/tv_table_browser.gifbin15457 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_table_browser.ps2024
-rw-r--r--lib/tv/doc/src/tv_table_browser_updated.gifbin15857 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_table_browser_updated.ps2124
-rw-r--r--lib/tv/doc/src/tv_table_loaded.gifbin15322 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_table_loaded.ps1430
-rw-r--r--lib/tv/doc/src/tv_table_sorted.gifbin15797 -> 0 bytes
-rw-r--r--lib/tv/doc/src/tv_table_sorted.ps1502
-rw-r--r--lib/tv/doc/src/warning.gifbin1498 -> 0 bytes
-rw-r--r--lib/tv/ebin/.gitignore0
-rw-r--r--lib/tv/info2
-rw-r--r--lib/tv/priv/Makefile72
-rw-r--r--lib/tv/priv/arrow_left.xbm5
-rw-r--r--lib/tv/priv/arrow_right.xbm5
-rw-r--r--lib/tv/priv/edit1.xbm12
-rw-r--r--lib/tv/priv/erlang.gifbin1297 -> 0 bytes
-rw-r--r--lib/tv/priv/help.xbm8
-rw-r--r--lib/tv/priv/info.xbm8
-rw-r--r--lib/tv/priv/key.xbm6
-rw-r--r--lib/tv/priv/more.xbm8
-rw-r--r--lib/tv/priv/no_sort.xbm8
-rw-r--r--lib/tv/priv/open.xbm8
-rw-r--r--lib/tv/priv/poll.xbm8
-rw-r--r--lib/tv/priv/search.xbm8
-rw-r--r--lib/tv/priv/sort.xbm8
-rw-r--r--lib/tv/priv/sort_reverse.xbm8
-rw-r--r--lib/tv/priv/tv.gifbin179 -> 0 bytes
-rw-r--r--lib/tv/priv/tv.tool23
-rw-r--r--lib/tv/src/Makefile135
-rw-r--r--lib/tv/src/tv.app.src56
-rw-r--r--lib/tv/src/tv.appup.src18
-rw-r--r--lib/tv/src/tv.erl38
-rw-r--r--lib/tv/src/tv_comm_func.erl77
-rw-r--r--lib/tv/src/tv_db.erl1271
-rw-r--r--lib/tv/src/tv_db_int_def.hrl80
-rw-r--r--lib/tv/src/tv_db_search.erl475
-rw-r--r--lib/tv/src/tv_db_sort.erl141
-rw-r--r--lib/tv/src/tv_ets_rpc.erl140
-rw-r--r--lib/tv/src/tv_etsread.erl770
-rw-r--r--lib/tv/src/tv_info.erl884
-rw-r--r--lib/tv/src/tv_int_def.hrl56
-rw-r--r--lib/tv/src/tv_int_msg.hrl504
-rw-r--r--lib/tv/src/tv_io_lib.erl223
-rw-r--r--lib/tv/src/tv_io_lib_format.erl386
-rw-r--r--lib/tv/src/tv_io_lib_pretty.erl171
-rw-r--r--lib/tv/src/tv_ip.erl242
-rw-r--r--lib/tv/src/tv_main.erl1821
-rw-r--r--lib/tv/src/tv_main.hrl285
-rw-r--r--lib/tv/src/tv_mnesia_rpc.erl106
-rw-r--r--lib/tv/src/tv_new_table.erl666
-rw-r--r--lib/tv/src/tv_nodewin.erl412
-rw-r--r--lib/tv/src/tv_pb.erl663
-rw-r--r--lib/tv/src/tv_pb_funcs.erl1056
-rw-r--r--lib/tv/src/tv_pb_int_def.hrl99
-rw-r--r--lib/tv/src/tv_pc.erl795
-rw-r--r--lib/tv/src/tv_pc_graph_ctrl.erl120
-rw-r--r--lib/tv/src/tv_pc_int_def.hrl62
-rw-r--r--lib/tv/src/tv_pc_menu_handling.erl489
-rw-r--r--lib/tv/src/tv_pd.erl1127
-rw-r--r--lib/tv/src/tv_pd_display.erl1066
-rw-r--r--lib/tv/src/tv_pd_frames.erl482
-rw-r--r--lib/tv/src/tv_pd_int_def.hrl139
-rw-r--r--lib/tv/src/tv_pd_int_msg.hrl433
-rw-r--r--lib/tv/src/tv_pd_scale.erl305
-rw-r--r--lib/tv/src/tv_pg.erl430
-rw-r--r--lib/tv/src/tv_pg_gridfcns.erl1918
-rw-r--r--lib/tv/src/tv_pg_int_def.hrl92
-rw-r--r--lib/tv/src/tv_poll_dialog.erl363
-rw-r--r--lib/tv/src/tv_pw.erl328
-rw-r--r--lib/tv/src/tv_pw_int_def.hrl55
-rw-r--r--lib/tv/src/tv_pw_window.erl277
-rw-r--r--lib/tv/src/tv_rec_edit.erl754
-rw-r--r--lib/tv/src/tv_table_owner.erl122
-rw-r--r--lib/tv/src/tv_utils.erl179
-rw-r--r--lib/tv/vsn.mk1
-rw-r--r--system/doc/definitions/term.defs5
-rw-r--r--system/doc/reference_manual/expressions.xml23
557 files changed, 3831 insertions, 86772 deletions
diff --git a/bootstrap/bin/start.boot b/bootstrap/bin/start.boot
index db337a8632..c152bd51cb 100644
--- a/bootstrap/bin/start.boot
+++ b/bootstrap/bin/start.boot
Binary files differ
diff --git a/bootstrap/bin/start_clean.boot b/bootstrap/bin/start_clean.boot
index db337a8632..c152bd51cb 100644
--- a/bootstrap/bin/start_clean.boot
+++ b/bootstrap/bin/start_clean.boot
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_asm.beam b/bootstrap/lib/compiler/ebin/beam_asm.beam
index 75bae8060e..bc93332a44 100644
--- a/bootstrap/lib/compiler/ebin/beam_asm.beam
+++ b/bootstrap/lib/compiler/ebin/beam_asm.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_block.beam b/bootstrap/lib/compiler/ebin/beam_block.beam
index 370f328a96..a8465b366c 100644
--- a/bootstrap/lib/compiler/ebin/beam_block.beam
+++ b/bootstrap/lib/compiler/ebin/beam_block.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_bool.beam b/bootstrap/lib/compiler/ebin/beam_bool.beam
index 196e442556..ef7f24b0db 100644
--- a/bootstrap/lib/compiler/ebin/beam_bool.beam
+++ b/bootstrap/lib/compiler/ebin/beam_bool.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_bsm.beam b/bootstrap/lib/compiler/ebin/beam_bsm.beam
index 9e3d9832b1..e50bb669cf 100644
--- a/bootstrap/lib/compiler/ebin/beam_bsm.beam
+++ b/bootstrap/lib/compiler/ebin/beam_bsm.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_clean.beam b/bootstrap/lib/compiler/ebin/beam_clean.beam
index 3fe3225c14..3d9d9f3625 100644
--- a/bootstrap/lib/compiler/ebin/beam_clean.beam
+++ b/bootstrap/lib/compiler/ebin/beam_clean.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_dead.beam b/bootstrap/lib/compiler/ebin/beam_dead.beam
index b664286f0f..dc924a2905 100644
--- a/bootstrap/lib/compiler/ebin/beam_dead.beam
+++ b/bootstrap/lib/compiler/ebin/beam_dead.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_dict.beam b/bootstrap/lib/compiler/ebin/beam_dict.beam
index 50771f4e90..165d848a9a 100644
--- a/bootstrap/lib/compiler/ebin/beam_dict.beam
+++ b/bootstrap/lib/compiler/ebin/beam_dict.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_disasm.beam b/bootstrap/lib/compiler/ebin/beam_disasm.beam
index 959e989b6d..eba17a7bbd 100644
--- a/bootstrap/lib/compiler/ebin/beam_disasm.beam
+++ b/bootstrap/lib/compiler/ebin/beam_disasm.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_except.beam b/bootstrap/lib/compiler/ebin/beam_except.beam
index e340e0f4c6..16d2a29491 100644
--- a/bootstrap/lib/compiler/ebin/beam_except.beam
+++ b/bootstrap/lib/compiler/ebin/beam_except.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_flatten.beam b/bootstrap/lib/compiler/ebin/beam_flatten.beam
index 8f06d7270c..f0a3dfac91 100644
--- a/bootstrap/lib/compiler/ebin/beam_flatten.beam
+++ b/bootstrap/lib/compiler/ebin/beam_flatten.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_jump.beam b/bootstrap/lib/compiler/ebin/beam_jump.beam
index c296bdd18d..5c0f4a9996 100644
--- a/bootstrap/lib/compiler/ebin/beam_jump.beam
+++ b/bootstrap/lib/compiler/ebin/beam_jump.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_peep.beam b/bootstrap/lib/compiler/ebin/beam_peep.beam
index a21cc7e1e1..214fa56911 100644
--- a/bootstrap/lib/compiler/ebin/beam_peep.beam
+++ b/bootstrap/lib/compiler/ebin/beam_peep.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_receive.beam b/bootstrap/lib/compiler/ebin/beam_receive.beam
index 2f1fcc9fe1..5da32b5db6 100644
--- a/bootstrap/lib/compiler/ebin/beam_receive.beam
+++ b/bootstrap/lib/compiler/ebin/beam_receive.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_split.beam b/bootstrap/lib/compiler/ebin/beam_split.beam
index 2271c15ee4..64a946db25 100644
--- a/bootstrap/lib/compiler/ebin/beam_split.beam
+++ b/bootstrap/lib/compiler/ebin/beam_split.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_trim.beam b/bootstrap/lib/compiler/ebin/beam_trim.beam
index b655cdb4cf..b844602370 100644
--- a/bootstrap/lib/compiler/ebin/beam_trim.beam
+++ b/bootstrap/lib/compiler/ebin/beam_trim.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_type.beam b/bootstrap/lib/compiler/ebin/beam_type.beam
index 5fd60ebee1..7f80c1a691 100644
--- a/bootstrap/lib/compiler/ebin/beam_type.beam
+++ b/bootstrap/lib/compiler/ebin/beam_type.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_utils.beam b/bootstrap/lib/compiler/ebin/beam_utils.beam
index 9360e60827..314c300b1f 100644
--- a/bootstrap/lib/compiler/ebin/beam_utils.beam
+++ b/bootstrap/lib/compiler/ebin/beam_utils.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_validator.beam b/bootstrap/lib/compiler/ebin/beam_validator.beam
index b8a3491caa..e769659772 100644
--- a/bootstrap/lib/compiler/ebin/beam_validator.beam
+++ b/bootstrap/lib/compiler/ebin/beam_validator.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl.beam b/bootstrap/lib/compiler/ebin/cerl.beam
index a10f017869..2cba88e8c3 100644
--- a/bootstrap/lib/compiler/ebin/cerl.beam
+++ b/bootstrap/lib/compiler/ebin/cerl.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl_clauses.beam b/bootstrap/lib/compiler/ebin/cerl_clauses.beam
index 97e96c47bd..ec41e1098b 100644
--- a/bootstrap/lib/compiler/ebin/cerl_clauses.beam
+++ b/bootstrap/lib/compiler/ebin/cerl_clauses.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl_inline.beam b/bootstrap/lib/compiler/ebin/cerl_inline.beam
index a7094e5540..bcb9802ba3 100644
--- a/bootstrap/lib/compiler/ebin/cerl_inline.beam
+++ b/bootstrap/lib/compiler/ebin/cerl_inline.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl_trees.beam b/bootstrap/lib/compiler/ebin/cerl_trees.beam
index 49528c1635..ce81e67924 100644
--- a/bootstrap/lib/compiler/ebin/cerl_trees.beam
+++ b/bootstrap/lib/compiler/ebin/cerl_trees.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/compile.beam b/bootstrap/lib/compiler/ebin/compile.beam
index 9de2c1a0cf..c2114e516a 100644
--- a/bootstrap/lib/compiler/ebin/compile.beam
+++ b/bootstrap/lib/compiler/ebin/compile.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/compiler.app b/bootstrap/lib/compiler/ebin/compiler.app
index 19ad28915a..83554a68a5 100644
--- a/bootstrap/lib/compiler/ebin/compiler.app
+++ b/bootstrap/lib/compiler/ebin/compiler.app
@@ -18,7 +18,7 @@
{application, compiler,
[{description, "ERTS CXC 138 10"},
- {vsn, "4.9.1"},
+ {vsn, "4.9.4"},
{modules, [
beam_a,
beam_asm,
diff --git a/bootstrap/lib/compiler/ebin/core_lib.beam b/bootstrap/lib/compiler/ebin/core_lib.beam
index d03dfe646c..5e40c086c2 100644
--- a/bootstrap/lib/compiler/ebin/core_lib.beam
+++ b/bootstrap/lib/compiler/ebin/core_lib.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/core_lint.beam b/bootstrap/lib/compiler/ebin/core_lint.beam
index bfe9914644..831e2acc43 100644
--- a/bootstrap/lib/compiler/ebin/core_lint.beam
+++ b/bootstrap/lib/compiler/ebin/core_lint.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/core_parse.beam b/bootstrap/lib/compiler/ebin/core_parse.beam
index 80820731c1..3f9c212fe7 100644
--- a/bootstrap/lib/compiler/ebin/core_parse.beam
+++ b/bootstrap/lib/compiler/ebin/core_parse.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/core_pp.beam b/bootstrap/lib/compiler/ebin/core_pp.beam
index e96e4bc654..f7e0dc40ae 100644
--- a/bootstrap/lib/compiler/ebin/core_pp.beam
+++ b/bootstrap/lib/compiler/ebin/core_pp.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/core_scan.beam b/bootstrap/lib/compiler/ebin/core_scan.beam
index f14eda5a33..f4742b98db 100644
--- a/bootstrap/lib/compiler/ebin/core_scan.beam
+++ b/bootstrap/lib/compiler/ebin/core_scan.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/rec_env.beam b/bootstrap/lib/compiler/ebin/rec_env.beam
index edabfdf444..4bd37b16c0 100644
--- a/bootstrap/lib/compiler/ebin/rec_env.beam
+++ b/bootstrap/lib/compiler/ebin/rec_env.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam b/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam
index 11c194a5cc..a3a8de17c0 100644
--- a/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam
+++ b/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_core_fold.beam b/bootstrap/lib/compiler/ebin/sys_core_fold.beam
index 9aa5ac5a90..b170623982 100644
--- a/bootstrap/lib/compiler/ebin/sys_core_fold.beam
+++ b/bootstrap/lib/compiler/ebin/sys_core_fold.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_core_inline.beam b/bootstrap/lib/compiler/ebin/sys_core_inline.beam
index d8eabeda7c..29e35496b6 100644
--- a/bootstrap/lib/compiler/ebin/sys_core_inline.beam
+++ b/bootstrap/lib/compiler/ebin/sys_core_inline.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam b/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam
index d3b213e75a..f7621bbc3f 100644
--- a/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam
+++ b/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_pre_expand.beam b/bootstrap/lib/compiler/ebin/sys_pre_expand.beam
index 60933730c3..d726c3ca07 100644
--- a/bootstrap/lib/compiler/ebin/sys_pre_expand.beam
+++ b/bootstrap/lib/compiler/ebin/sys_pre_expand.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_codegen.beam b/bootstrap/lib/compiler/ebin/v3_codegen.beam
index 5b06d8656e..e38d58d349 100644
--- a/bootstrap/lib/compiler/ebin/v3_codegen.beam
+++ b/bootstrap/lib/compiler/ebin/v3_codegen.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_core.beam b/bootstrap/lib/compiler/ebin/v3_core.beam
index 3da6d334b4..2f0d81251a 100644
--- a/bootstrap/lib/compiler/ebin/v3_core.beam
+++ b/bootstrap/lib/compiler/ebin/v3_core.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_kernel.beam b/bootstrap/lib/compiler/ebin/v3_kernel.beam
index a0afb3fac2..a3d29bed82 100644
--- a/bootstrap/lib/compiler/ebin/v3_kernel.beam
+++ b/bootstrap/lib/compiler/ebin/v3_kernel.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_kernel_pp.beam b/bootstrap/lib/compiler/ebin/v3_kernel_pp.beam
index 8f18f5ff25..1b2d02c1d5 100644
--- a/bootstrap/lib/compiler/ebin/v3_kernel_pp.beam
+++ b/bootstrap/lib/compiler/ebin/v3_kernel_pp.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_life.beam b/bootstrap/lib/compiler/ebin/v3_life.beam
index 2392863c3d..bb0ceefdd1 100644
--- a/bootstrap/lib/compiler/ebin/v3_life.beam
+++ b/bootstrap/lib/compiler/ebin/v3_life.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/application_controller.beam b/bootstrap/lib/kernel/ebin/application_controller.beam
index b7081212cb..73ce589a8c 100644
--- a/bootstrap/lib/kernel/ebin/application_controller.beam
+++ b/bootstrap/lib/kernel/ebin/application_controller.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/application_master.beam b/bootstrap/lib/kernel/ebin/application_master.beam
index f44cd9c9ab..14329fa051 100644
--- a/bootstrap/lib/kernel/ebin/application_master.beam
+++ b/bootstrap/lib/kernel/ebin/application_master.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/application_starter.beam b/bootstrap/lib/kernel/ebin/application_starter.beam
index 06d8098af9..f5059a487a 100644
--- a/bootstrap/lib/kernel/ebin/application_starter.beam
+++ b/bootstrap/lib/kernel/ebin/application_starter.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/auth.beam b/bootstrap/lib/kernel/ebin/auth.beam
index 62617ce3ef..3cc607cb14 100644
--- a/bootstrap/lib/kernel/ebin/auth.beam
+++ b/bootstrap/lib/kernel/ebin/auth.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/code.beam b/bootstrap/lib/kernel/ebin/code.beam
index 2994e5257a..5428f2cf0c 100644
--- a/bootstrap/lib/kernel/ebin/code.beam
+++ b/bootstrap/lib/kernel/ebin/code.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/code_server.beam b/bootstrap/lib/kernel/ebin/code_server.beam
index 896e3cb61b..265d714238 100644
--- a/bootstrap/lib/kernel/ebin/code_server.beam
+++ b/bootstrap/lib/kernel/ebin/code_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/disk_log.beam b/bootstrap/lib/kernel/ebin/disk_log.beam
index 63253eeaaa..1b160a7c12 100644
--- a/bootstrap/lib/kernel/ebin/disk_log.beam
+++ b/bootstrap/lib/kernel/ebin/disk_log.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/disk_log_1.beam b/bootstrap/lib/kernel/ebin/disk_log_1.beam
index 49c6b674cd..12d2523889 100644
--- a/bootstrap/lib/kernel/ebin/disk_log_1.beam
+++ b/bootstrap/lib/kernel/ebin/disk_log_1.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/disk_log_server.beam b/bootstrap/lib/kernel/ebin/disk_log_server.beam
index 7c886a6ff3..ec9422d41b 100644
--- a/bootstrap/lib/kernel/ebin/disk_log_server.beam
+++ b/bootstrap/lib/kernel/ebin/disk_log_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/dist_ac.beam b/bootstrap/lib/kernel/ebin/dist_ac.beam
index c2e361d8c6..9d3f7548b6 100644
--- a/bootstrap/lib/kernel/ebin/dist_ac.beam
+++ b/bootstrap/lib/kernel/ebin/dist_ac.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/dist_util.beam b/bootstrap/lib/kernel/ebin/dist_util.beam
index 84738305f7..4cd98bd217 100644
--- a/bootstrap/lib/kernel/ebin/dist_util.beam
+++ b/bootstrap/lib/kernel/ebin/dist_util.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erl_boot_server.beam b/bootstrap/lib/kernel/ebin/erl_boot_server.beam
index c84d69c1f5..7e43b0fb36 100644
--- a/bootstrap/lib/kernel/ebin/erl_boot_server.beam
+++ b/bootstrap/lib/kernel/ebin/erl_boot_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erl_ddll.beam b/bootstrap/lib/kernel/ebin/erl_ddll.beam
index 90c831b045..e15e49d61c 100644
--- a/bootstrap/lib/kernel/ebin/erl_ddll.beam
+++ b/bootstrap/lib/kernel/ebin/erl_ddll.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erl_epmd.beam b/bootstrap/lib/kernel/ebin/erl_epmd.beam
index 143147298c..1a74da7f1f 100644
--- a/bootstrap/lib/kernel/ebin/erl_epmd.beam
+++ b/bootstrap/lib/kernel/ebin/erl_epmd.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erl_reply.beam b/bootstrap/lib/kernel/ebin/erl_reply.beam
index 2a2e9dbc92..79fb539bd3 100644
--- a/bootstrap/lib/kernel/ebin/erl_reply.beam
+++ b/bootstrap/lib/kernel/ebin/erl_reply.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/error_logger.beam b/bootstrap/lib/kernel/ebin/error_logger.beam
index bf3963693a..10f7a0b984 100644
--- a/bootstrap/lib/kernel/ebin/error_logger.beam
+++ b/bootstrap/lib/kernel/ebin/error_logger.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erts_debug.beam b/bootstrap/lib/kernel/ebin/erts_debug.beam
index d915dc0891..7d059d10cf 100644
--- a/bootstrap/lib/kernel/ebin/erts_debug.beam
+++ b/bootstrap/lib/kernel/ebin/erts_debug.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/file.beam b/bootstrap/lib/kernel/ebin/file.beam
index 04f6da0687..3141747738 100644
--- a/bootstrap/lib/kernel/ebin/file.beam
+++ b/bootstrap/lib/kernel/ebin/file.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/file_io_server.beam b/bootstrap/lib/kernel/ebin/file_io_server.beam
index 6916cdcc58..a611bdc2b4 100644
--- a/bootstrap/lib/kernel/ebin/file_io_server.beam
+++ b/bootstrap/lib/kernel/ebin/file_io_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/file_server.beam b/bootstrap/lib/kernel/ebin/file_server.beam
index d656c5e610..48352e9dfd 100644
--- a/bootstrap/lib/kernel/ebin/file_server.beam
+++ b/bootstrap/lib/kernel/ebin/file_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/gen_sctp.beam b/bootstrap/lib/kernel/ebin/gen_sctp.beam
index 81f496edb5..e2bb806f2b 100644
--- a/bootstrap/lib/kernel/ebin/gen_sctp.beam
+++ b/bootstrap/lib/kernel/ebin/gen_sctp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/global.beam b/bootstrap/lib/kernel/ebin/global.beam
index b404e24cdf..c44ac55d16 100644
--- a/bootstrap/lib/kernel/ebin/global.beam
+++ b/bootstrap/lib/kernel/ebin/global.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/global_group.beam b/bootstrap/lib/kernel/ebin/global_group.beam
index e0ca1de771..d11f60015a 100644
--- a/bootstrap/lib/kernel/ebin/global_group.beam
+++ b/bootstrap/lib/kernel/ebin/global_group.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/group.beam b/bootstrap/lib/kernel/ebin/group.beam
index f151913df2..412b8e0007 100644
--- a/bootstrap/lib/kernel/ebin/group.beam
+++ b/bootstrap/lib/kernel/ebin/group.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/heart.beam b/bootstrap/lib/kernel/ebin/heart.beam
index 84b12d081c..d4972ecdd2 100644
--- a/bootstrap/lib/kernel/ebin/heart.beam
+++ b/bootstrap/lib/kernel/ebin/heart.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam b/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam
index c46eced0e4..31a54ecef4 100644
--- a/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam
+++ b/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet.beam b/bootstrap/lib/kernel/ebin/inet.beam
index 16749a3948..261e7fa6d0 100644
--- a/bootstrap/lib/kernel/ebin/inet.beam
+++ b/bootstrap/lib/kernel/ebin/inet.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet6_tcp.beam b/bootstrap/lib/kernel/ebin/inet6_tcp.beam
index dc592e336c..036b0495c8 100644
--- a/bootstrap/lib/kernel/ebin/inet6_tcp.beam
+++ b/bootstrap/lib/kernel/ebin/inet6_tcp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam b/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam
index 4b5543b994..83305c1826 100644
--- a/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam
+++ b/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet6_udp.beam b/bootstrap/lib/kernel/ebin/inet6_udp.beam
index 2c94263b99..73f0b52b90 100644
--- a/bootstrap/lib/kernel/ebin/inet6_udp.beam
+++ b/bootstrap/lib/kernel/ebin/inet6_udp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_config.beam b/bootstrap/lib/kernel/ebin/inet_config.beam
index 7db3eddc6e..03b42209e6 100644
--- a/bootstrap/lib/kernel/ebin/inet_config.beam
+++ b/bootstrap/lib/kernel/ebin/inet_config.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_db.beam b/bootstrap/lib/kernel/ebin/inet_db.beam
index d55c06c002..45e7d9e0d0 100644
--- a/bootstrap/lib/kernel/ebin/inet_db.beam
+++ b/bootstrap/lib/kernel/ebin/inet_db.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_dns.beam b/bootstrap/lib/kernel/ebin/inet_dns.beam
index b962e1ef21..92dabef630 100644
--- a/bootstrap/lib/kernel/ebin/inet_dns.beam
+++ b/bootstrap/lib/kernel/ebin/inet_dns.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_gethost_native.beam b/bootstrap/lib/kernel/ebin/inet_gethost_native.beam
index 03cb896d1c..098c397936 100644
--- a/bootstrap/lib/kernel/ebin/inet_gethost_native.beam
+++ b/bootstrap/lib/kernel/ebin/inet_gethost_native.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_hosts.beam b/bootstrap/lib/kernel/ebin/inet_hosts.beam
index 78e81ce23d..3e70a8b8c1 100644
--- a/bootstrap/lib/kernel/ebin/inet_hosts.beam
+++ b/bootstrap/lib/kernel/ebin/inet_hosts.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_parse.beam b/bootstrap/lib/kernel/ebin/inet_parse.beam
index d2ef990dba..90ccd8b440 100644
--- a/bootstrap/lib/kernel/ebin/inet_parse.beam
+++ b/bootstrap/lib/kernel/ebin/inet_parse.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_res.beam b/bootstrap/lib/kernel/ebin/inet_res.beam
index 88d1f5f2c7..c590292850 100644
--- a/bootstrap/lib/kernel/ebin/inet_res.beam
+++ b/bootstrap/lib/kernel/ebin/inet_res.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_sctp.beam b/bootstrap/lib/kernel/ebin/inet_sctp.beam
index 726edcd4c9..503cbc11e2 100644
--- a/bootstrap/lib/kernel/ebin/inet_sctp.beam
+++ b/bootstrap/lib/kernel/ebin/inet_sctp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_tcp.beam b/bootstrap/lib/kernel/ebin/inet_tcp.beam
index 00a8175665..d854abd830 100644
--- a/bootstrap/lib/kernel/ebin/inet_tcp.beam
+++ b/bootstrap/lib/kernel/ebin/inet_tcp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam b/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam
index 358d9ae403..2e54f1e1f4 100644
--- a/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam
+++ b/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_udp.beam b/bootstrap/lib/kernel/ebin/inet_udp.beam
index 6fb98bd777..6fbdd29f6d 100644
--- a/bootstrap/lib/kernel/ebin/inet_udp.beam
+++ b/bootstrap/lib/kernel/ebin/inet_udp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/kernel.app b/bootstrap/lib/kernel/ebin/kernel.app
index c42f63d2c6..f491239a45 100644
--- a/bootstrap/lib/kernel/ebin/kernel.app
+++ b/bootstrap/lib/kernel/ebin/kernel.app
@@ -21,7 +21,7 @@
{application, kernel,
[
{description, "ERTS CXC 138 10"},
- {vsn, "2.17"},
+ {vsn, "3.0"},
{modules, [application,
application_controller,
application_master,
diff --git a/bootstrap/lib/kernel/ebin/kernel.beam b/bootstrap/lib/kernel/ebin/kernel.beam
index 838a57718c..c938b218e1 100644
--- a/bootstrap/lib/kernel/ebin/kernel.beam
+++ b/bootstrap/lib/kernel/ebin/kernel.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/kernel_config.beam b/bootstrap/lib/kernel/ebin/kernel_config.beam
index e3f6589104..c35da2c73d 100644
--- a/bootstrap/lib/kernel/ebin/kernel_config.beam
+++ b/bootstrap/lib/kernel/ebin/kernel_config.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/net_adm.beam b/bootstrap/lib/kernel/ebin/net_adm.beam
index 4c8b6525a6..fb722b3b4e 100644
--- a/bootstrap/lib/kernel/ebin/net_adm.beam
+++ b/bootstrap/lib/kernel/ebin/net_adm.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/net_kernel.beam b/bootstrap/lib/kernel/ebin/net_kernel.beam
index 0d39aa5ff5..722fcdefed 100644
--- a/bootstrap/lib/kernel/ebin/net_kernel.beam
+++ b/bootstrap/lib/kernel/ebin/net_kernel.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/os.beam b/bootstrap/lib/kernel/ebin/os.beam
index 4602e68e17..b8b01b31ab 100644
--- a/bootstrap/lib/kernel/ebin/os.beam
+++ b/bootstrap/lib/kernel/ebin/os.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/pg2.beam b/bootstrap/lib/kernel/ebin/pg2.beam
index 3eafd8c43b..c26b5a4ffc 100644
--- a/bootstrap/lib/kernel/ebin/pg2.beam
+++ b/bootstrap/lib/kernel/ebin/pg2.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/rpc.beam b/bootstrap/lib/kernel/ebin/rpc.beam
index 4782908361..4a8aa5da69 100644
--- a/bootstrap/lib/kernel/ebin/rpc.beam
+++ b/bootstrap/lib/kernel/ebin/rpc.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/user.beam b/bootstrap/lib/kernel/ebin/user.beam
index 1ba5d096e2..0e06c78fce 100644
--- a/bootstrap/lib/kernel/ebin/user.beam
+++ b/bootstrap/lib/kernel/ebin/user.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/user_drv.beam b/bootstrap/lib/kernel/ebin/user_drv.beam
index 51ba491410..4a2cd01b0d 100644
--- a/bootstrap/lib/kernel/ebin/user_drv.beam
+++ b/bootstrap/lib/kernel/ebin/user_drv.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/wrap_log_reader.beam b/bootstrap/lib/kernel/ebin/wrap_log_reader.beam
index 7a328be682..f35187c269 100644
--- a/bootstrap/lib/kernel/ebin/wrap_log_reader.beam
+++ b/bootstrap/lib/kernel/ebin/wrap_log_reader.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/array.beam b/bootstrap/lib/stdlib/ebin/array.beam
index 28d04dea2c..76cb41da49 100644
--- a/bootstrap/lib/stdlib/ebin/array.beam
+++ b/bootstrap/lib/stdlib/ebin/array.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/base64.beam b/bootstrap/lib/stdlib/ebin/base64.beam
index 2ca9a4d0b8..54ea68b9c0 100644
--- a/bootstrap/lib/stdlib/ebin/base64.beam
+++ b/bootstrap/lib/stdlib/ebin/base64.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/beam_lib.beam b/bootstrap/lib/stdlib/ebin/beam_lib.beam
index 36d5e56806..d496dbebbb 100644
--- a/bootstrap/lib/stdlib/ebin/beam_lib.beam
+++ b/bootstrap/lib/stdlib/ebin/beam_lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/binary.beam b/bootstrap/lib/stdlib/ebin/binary.beam
index 6077d965ed..14d6ba7976 100644
--- a/bootstrap/lib/stdlib/ebin/binary.beam
+++ b/bootstrap/lib/stdlib/ebin/binary.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/c.beam b/bootstrap/lib/stdlib/ebin/c.beam
index b2999a6255..3c34406adc 100644
--- a/bootstrap/lib/stdlib/ebin/c.beam
+++ b/bootstrap/lib/stdlib/ebin/c.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/calendar.beam b/bootstrap/lib/stdlib/ebin/calendar.beam
index 3f4f14abc3..19e0443dd2 100644
--- a/bootstrap/lib/stdlib/ebin/calendar.beam
+++ b/bootstrap/lib/stdlib/ebin/calendar.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets.beam b/bootstrap/lib/stdlib/ebin/dets.beam
index cfadae3caa..ac36354796 100644
--- a/bootstrap/lib/stdlib/ebin/dets.beam
+++ b/bootstrap/lib/stdlib/ebin/dets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_server.beam b/bootstrap/lib/stdlib/ebin/dets_server.beam
index 2b6026d29d..6bbefbbf1e 100644
--- a/bootstrap/lib/stdlib/ebin/dets_server.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_server.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_utils.beam b/bootstrap/lib/stdlib/ebin/dets_utils.beam
index 6ef251a140..6984331480 100644
--- a/bootstrap/lib/stdlib/ebin/dets_utils.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_utils.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_v8.beam b/bootstrap/lib/stdlib/ebin/dets_v8.beam
index 018c2e8cbb..2a670d30df 100644
--- a/bootstrap/lib/stdlib/ebin/dets_v8.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_v8.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_v9.beam b/bootstrap/lib/stdlib/ebin/dets_v9.beam
index fdfd8e84cf..7d7a926a6c 100644
--- a/bootstrap/lib/stdlib/ebin/dets_v9.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_v9.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dict.beam b/bootstrap/lib/stdlib/ebin/dict.beam
index df8bdae61d..e39c79bd5a 100644
--- a/bootstrap/lib/stdlib/ebin/dict.beam
+++ b/bootstrap/lib/stdlib/ebin/dict.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/digraph.beam b/bootstrap/lib/stdlib/ebin/digraph.beam
index 82735d07cc..40db38c992 100644
--- a/bootstrap/lib/stdlib/ebin/digraph.beam
+++ b/bootstrap/lib/stdlib/ebin/digraph.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/digraph_utils.beam b/bootstrap/lib/stdlib/ebin/digraph_utils.beam
index b9fdd6eac3..64783f4e1d 100644
--- a/bootstrap/lib/stdlib/ebin/digraph_utils.beam
+++ b/bootstrap/lib/stdlib/ebin/digraph_utils.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/edlin.beam b/bootstrap/lib/stdlib/ebin/edlin.beam
index 7b8e03a722..12aa74c4ac 100644
--- a/bootstrap/lib/stdlib/ebin/edlin.beam
+++ b/bootstrap/lib/stdlib/ebin/edlin.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/edlin_expand.beam b/bootstrap/lib/stdlib/ebin/edlin_expand.beam
index 01570cb1d4..85ce43d1ed 100644
--- a/bootstrap/lib/stdlib/ebin/edlin_expand.beam
+++ b/bootstrap/lib/stdlib/ebin/edlin_expand.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/epp.beam b/bootstrap/lib/stdlib/ebin/epp.beam
index 1d438315ae..a5462e86d3 100644
--- a/bootstrap/lib/stdlib/ebin/epp.beam
+++ b/bootstrap/lib/stdlib/ebin/epp.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_bits.beam b/bootstrap/lib/stdlib/ebin/erl_bits.beam
index 7149491121..627b9ca711 100644
--- a/bootstrap/lib/stdlib/ebin/erl_bits.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_bits.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_compile.beam b/bootstrap/lib/stdlib/ebin/erl_compile.beam
index 244bb5e290..88da2b246f 100644
--- a/bootstrap/lib/stdlib/ebin/erl_compile.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_compile.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_eval.beam b/bootstrap/lib/stdlib/ebin/erl_eval.beam
index 1124de722e..7e797acf16 100644
--- a/bootstrap/lib/stdlib/ebin/erl_eval.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_eval.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
index 411f453a95..0563699d5e 100644
--- a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_lint.beam b/bootstrap/lib/stdlib/ebin/erl_lint.beam
index c087684fa1..2bab926e97 100644
--- a/bootstrap/lib/stdlib/ebin/erl_lint.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_lint.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_parse.beam b/bootstrap/lib/stdlib/ebin/erl_parse.beam
index b66feba048..2815cad4a3 100644
--- a/bootstrap/lib/stdlib/ebin/erl_parse.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_parse.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_pp.beam b/bootstrap/lib/stdlib/ebin/erl_pp.beam
index ecc8933bef..f699719358 100644
--- a/bootstrap/lib/stdlib/ebin/erl_pp.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_pp.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_scan.beam b/bootstrap/lib/stdlib/ebin/erl_scan.beam
index c8da05cb67..4b5d3467c1 100644
--- a/bootstrap/lib/stdlib/ebin/erl_scan.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_scan.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_tar.beam b/bootstrap/lib/stdlib/ebin/erl_tar.beam
index 256ea5c3f5..6401818109 100644
--- a/bootstrap/lib/stdlib/ebin/erl_tar.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_tar.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam b/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam
index 496e41c858..673ee6e8b2 100644
--- a/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam
+++ b/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam b/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam
index 47073d155f..87d58cf378 100644
--- a/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam
+++ b/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/escript.beam b/bootstrap/lib/stdlib/ebin/escript.beam
index 12a578278f..e660705631 100644
--- a/bootstrap/lib/stdlib/ebin/escript.beam
+++ b/bootstrap/lib/stdlib/ebin/escript.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/ets.beam b/bootstrap/lib/stdlib/ebin/ets.beam
index b9cb892454..2de24e86b3 100644
--- a/bootstrap/lib/stdlib/ebin/ets.beam
+++ b/bootstrap/lib/stdlib/ebin/ets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/eval_bits.beam b/bootstrap/lib/stdlib/ebin/eval_bits.beam
index 0b12a41b1c..e92fadd53c 100644
--- a/bootstrap/lib/stdlib/ebin/eval_bits.beam
+++ b/bootstrap/lib/stdlib/ebin/eval_bits.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/file_sorter.beam b/bootstrap/lib/stdlib/ebin/file_sorter.beam
index 3273021913..a2825af89a 100644
--- a/bootstrap/lib/stdlib/ebin/file_sorter.beam
+++ b/bootstrap/lib/stdlib/ebin/file_sorter.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/filelib.beam b/bootstrap/lib/stdlib/ebin/filelib.beam
index 14ab68a7e1..b70aa54301 100644
--- a/bootstrap/lib/stdlib/ebin/filelib.beam
+++ b/bootstrap/lib/stdlib/ebin/filelib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/filename.beam b/bootstrap/lib/stdlib/ebin/filename.beam
index de676f2bed..a558c5cbef 100644
--- a/bootstrap/lib/stdlib/ebin/filename.beam
+++ b/bootstrap/lib/stdlib/ebin/filename.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gb_sets.beam b/bootstrap/lib/stdlib/ebin/gb_sets.beam
index 444c2745a0..feadc1d1ed 100644
--- a/bootstrap/lib/stdlib/ebin/gb_sets.beam
+++ b/bootstrap/lib/stdlib/ebin/gb_sets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gb_trees.beam b/bootstrap/lib/stdlib/ebin/gb_trees.beam
index 24aab57544..879b8cdf76 100644
--- a/bootstrap/lib/stdlib/ebin/gb_trees.beam
+++ b/bootstrap/lib/stdlib/ebin/gb_trees.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen.beam b/bootstrap/lib/stdlib/ebin/gen.beam
index 277a881630..6f15e461f6 100644
--- a/bootstrap/lib/stdlib/ebin/gen.beam
+++ b/bootstrap/lib/stdlib/ebin/gen.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_event.beam b/bootstrap/lib/stdlib/ebin/gen_event.beam
index 313bd2dcce..46f1512a24 100644
--- a/bootstrap/lib/stdlib/ebin/gen_event.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_event.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_fsm.beam b/bootstrap/lib/stdlib/ebin/gen_fsm.beam
index 561b562115..d6719e68d9 100644
--- a/bootstrap/lib/stdlib/ebin/gen_fsm.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_fsm.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_server.beam b/bootstrap/lib/stdlib/ebin/gen_server.beam
index d7221a4ea3..806c4d58d7 100644
--- a/bootstrap/lib/stdlib/ebin/gen_server.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_server.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/io.beam b/bootstrap/lib/stdlib/ebin/io.beam
index 19ae65b3bf..6c80bfe78b 100644
--- a/bootstrap/lib/stdlib/ebin/io.beam
+++ b/bootstrap/lib/stdlib/ebin/io.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/io_lib.beam b/bootstrap/lib/stdlib/ebin/io_lib.beam
index 08e497e35a..d34f69097a 100644
--- a/bootstrap/lib/stdlib/ebin/io_lib.beam
+++ b/bootstrap/lib/stdlib/ebin/io_lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/io_lib_format.beam b/bootstrap/lib/stdlib/ebin/io_lib_format.beam
index a476dcc6be..e579d3cb2e 100644
--- a/bootstrap/lib/stdlib/ebin/io_lib_format.beam
+++ b/bootstrap/lib/stdlib/ebin/io_lib_format.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/io_lib_fread.beam b/bootstrap/lib/stdlib/ebin/io_lib_fread.beam
index f3f059df26..8c45cf484c 100644
--- a/bootstrap/lib/stdlib/ebin/io_lib_fread.beam
+++ b/bootstrap/lib/stdlib/ebin/io_lib_fread.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam b/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam
index b9bcaf8cf2..720f19461e 100644
--- a/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam
+++ b/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/lib.beam b/bootstrap/lib/stdlib/ebin/lib.beam
index 0de626c384..c9086e1796 100644
--- a/bootstrap/lib/stdlib/ebin/lib.beam
+++ b/bootstrap/lib/stdlib/ebin/lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/lists.beam b/bootstrap/lib/stdlib/ebin/lists.beam
index 332a2088d0..a44b412d23 100644
--- a/bootstrap/lib/stdlib/ebin/lists.beam
+++ b/bootstrap/lib/stdlib/ebin/lists.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/log_mf_h.beam b/bootstrap/lib/stdlib/ebin/log_mf_h.beam
index 190b5d2af5..58a8d68ed5 100644
--- a/bootstrap/lib/stdlib/ebin/log_mf_h.beam
+++ b/bootstrap/lib/stdlib/ebin/log_mf_h.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/ms_transform.beam b/bootstrap/lib/stdlib/ebin/ms_transform.beam
index f532375e3a..6e7a19c78a 100644
--- a/bootstrap/lib/stdlib/ebin/ms_transform.beam
+++ b/bootstrap/lib/stdlib/ebin/ms_transform.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/pool.beam b/bootstrap/lib/stdlib/ebin/pool.beam
index 8ad59de20d..72934a42d7 100644
--- a/bootstrap/lib/stdlib/ebin/pool.beam
+++ b/bootstrap/lib/stdlib/ebin/pool.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/proc_lib.beam b/bootstrap/lib/stdlib/ebin/proc_lib.beam
index a297dff09c..ee23fef6f0 100644
--- a/bootstrap/lib/stdlib/ebin/proc_lib.beam
+++ b/bootstrap/lib/stdlib/ebin/proc_lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/proplists.beam b/bootstrap/lib/stdlib/ebin/proplists.beam
index c768955ca7..2640cfe4ae 100644
--- a/bootstrap/lib/stdlib/ebin/proplists.beam
+++ b/bootstrap/lib/stdlib/ebin/proplists.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/qlc.beam b/bootstrap/lib/stdlib/ebin/qlc.beam
index a1a8ed113f..d3ef6e3b36 100644
--- a/bootstrap/lib/stdlib/ebin/qlc.beam
+++ b/bootstrap/lib/stdlib/ebin/qlc.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/qlc_pt.beam b/bootstrap/lib/stdlib/ebin/qlc_pt.beam
index 2f1db1d159..7ac58096e7 100644
--- a/bootstrap/lib/stdlib/ebin/qlc_pt.beam
+++ b/bootstrap/lib/stdlib/ebin/qlc_pt.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/queue.beam b/bootstrap/lib/stdlib/ebin/queue.beam
index 8907a03b57..b7eab3f8d1 100644
--- a/bootstrap/lib/stdlib/ebin/queue.beam
+++ b/bootstrap/lib/stdlib/ebin/queue.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/re.beam b/bootstrap/lib/stdlib/ebin/re.beam
index ef5be96cda..74b369bb0c 100644
--- a/bootstrap/lib/stdlib/ebin/re.beam
+++ b/bootstrap/lib/stdlib/ebin/re.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/sets.beam b/bootstrap/lib/stdlib/ebin/sets.beam
index 74eb720790..d8546de28d 100644
--- a/bootstrap/lib/stdlib/ebin/sets.beam
+++ b/bootstrap/lib/stdlib/ebin/sets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/shell.beam b/bootstrap/lib/stdlib/ebin/shell.beam
index 190ca28439..3756c0d46a 100644
--- a/bootstrap/lib/stdlib/ebin/shell.beam
+++ b/bootstrap/lib/stdlib/ebin/shell.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/slave.beam b/bootstrap/lib/stdlib/ebin/slave.beam
index 23a7091c96..ba741284ac 100644
--- a/bootstrap/lib/stdlib/ebin/slave.beam
+++ b/bootstrap/lib/stdlib/ebin/slave.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/sofs.beam b/bootstrap/lib/stdlib/ebin/sofs.beam
index b6a3f88679..6f21292509 100644
--- a/bootstrap/lib/stdlib/ebin/sofs.beam
+++ b/bootstrap/lib/stdlib/ebin/sofs.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/stdlib.app b/bootstrap/lib/stdlib/ebin/stdlib.app
index f00712df60..d1da05048b 100644
--- a/bootstrap/lib/stdlib/ebin/stdlib.app
+++ b/bootstrap/lib/stdlib/ebin/stdlib.app
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2011. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -19,7 +19,7 @@
%%
{application, stdlib,
[{description, "ERTS CXC 138 10"},
- {vsn, "1.20"},
+ {vsn, "2.0"},
{modules, [array,
base64,
beam_lib,
diff --git a/bootstrap/lib/stdlib/ebin/supervisor.beam b/bootstrap/lib/stdlib/ebin/supervisor.beam
index f8ef186a9b..cfc34ae41e 100644
--- a/bootstrap/lib/stdlib/ebin/supervisor.beam
+++ b/bootstrap/lib/stdlib/ebin/supervisor.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/sys.beam b/bootstrap/lib/stdlib/ebin/sys.beam
index 7e2ba3c19b..2aed63dc88 100644
--- a/bootstrap/lib/stdlib/ebin/sys.beam
+++ b/bootstrap/lib/stdlib/ebin/sys.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/timer.beam b/bootstrap/lib/stdlib/ebin/timer.beam
index 4269f1ebec..106d75c18a 100644
--- a/bootstrap/lib/stdlib/ebin/timer.beam
+++ b/bootstrap/lib/stdlib/ebin/timer.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/unicode.beam b/bootstrap/lib/stdlib/ebin/unicode.beam
index 572cb2b6fa..5484f5ac35 100644
--- a/bootstrap/lib/stdlib/ebin/unicode.beam
+++ b/bootstrap/lib/stdlib/ebin/unicode.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/win32reg.beam b/bootstrap/lib/stdlib/ebin/win32reg.beam
index 6df20f8db7..5d023ecb93 100644
--- a/bootstrap/lib/stdlib/ebin/win32reg.beam
+++ b/bootstrap/lib/stdlib/ebin/win32reg.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/zip.beam b/bootstrap/lib/stdlib/ebin/zip.beam
index 17006f313d..465a8b95a7 100644
--- a/bootstrap/lib/stdlib/ebin/zip.beam
+++ b/bootstrap/lib/stdlib/ebin/zip.beam
Binary files differ
diff --git a/erts/doc/src/absform.xml b/erts/doc/src/absform.xml
index 55aef9f8ab..4acc03b133 100644
--- a/erts/doc/src/absform.xml
+++ b/erts/doc/src/absform.xml
@@ -290,6 +290,18 @@
<item>If E is <c><![CDATA[fun Fc_1 ; ... ; Fc_k end]]></c>
where each <c><![CDATA[Fc_i]]></c> is a function clause then Rep(E) =
<c><![CDATA[{'fun',LINE,{clauses,[Rep(Fc_1), ..., Rep(Fc_k)]}}]]></c>.</item>
+ <item>If E is <c><![CDATA[fun Name Fc_1 ; ... ; Name Fc_k end]]></c>
+ where <c><![CDATA[Name]]></c> is a variable and each
+ <c><![CDATA[Fc_i]]></c> is a function clause then Rep(E) =
+ <c><![CDATA[{named_fun,LINE,Name,[Rep(Fc_1), ..., Rep(Fc_k)]}]]></c>.
+ </item>
+ <item>If E is <c><![CDATA[query [E_0 || W_1, ..., W_k] end]]></c>,
+ where each <c><![CDATA[W_i]]></c> is a generator or a filter, then
+ Rep(E) = <c><![CDATA[{'query',LINE,{lc,LINE,Rep(E_0),[Rep(W_1), ..., Rep(W_k)]}}]]></c>.
+ For Rep(W), see below.</item>
+ <item>If E is <c><![CDATA[E_0.Field]]></c>, a Mnesia record access
+ inside a query, then
+ Rep(E) = <c><![CDATA[{record_field,LINE,Rep(E_0),Rep(Field)}]]></c>.</item>
<item>If E is <c><![CDATA[( E_0 )]]></c>, then
Rep(E) = <c><![CDATA[Rep(E_0)]]></c>,
i.e., parenthesized expressions cannot be distinguished from their bodies.</item>
diff --git a/erts/doc/src/erlc.xml b/erts/doc/src/erlc.xml
index 10cab344b0..c3fc3b1686 100644
--- a/erts/doc/src/erlc.xml
+++ b/erts/doc/src/erlc.xml
@@ -234,6 +234,16 @@ erlc +export_all file.erl</pre>
from the shell.</p>
<p>Supported options: -I, -o, -D, -v, -W, -b.</p>
</item>
+ <tag>.S</tag>
+ <item>
+ <p>Erlang assembler source code. It generates a <c><![CDATA[.beam]]></c> file.</p>
+ <p>Supported options: same as for .erl.</p>
+ </item>
+ <tag>.core</tag>
+ <item>
+ <p>Erlang core source code. It generates a <c><![CDATA[.beam]]></c> file.</p>
+ <p>Supported options: same as for .erl.</p>
+ </item>
<tag>.yrl</tag>
<item>
<p>Yecc source code. It generates an <c><![CDATA[.erl]]></c> file.</p>
diff --git a/erts/emulator/beam/atom.names b/erts/emulator/beam/atom.names
index eee4badfb8..96547ba743 100644
--- a/erts/emulator/beam/atom.names
+++ b/erts/emulator/beam/atom.names
@@ -116,6 +116,7 @@ atom binary_longest_prefix_trap
atom binary_longest_suffix_trap
atom binary_match_trap
atom binary_matches_trap
+atom binary_to_term_trap
atom block
atom blocked
atom bm
diff --git a/erts/emulator/beam/bif.tab b/erts/emulator/beam/bif.tab
index dd50df636c..3ec534f0bc 100644
--- a/erts/emulator/beam/bif.tab
+++ b/erts/emulator/beam/bif.tab
@@ -45,7 +45,6 @@ bif erlang:apply/3
bif erlang:atom_to_list/1
bif erlang:binary_to_list/1
bif erlang:binary_to_list/3
-bif erlang:binary_to_term/1
bif erlang:crc32/1
bif erlang:crc32/2
bif erlang:crc32_combine/3
@@ -152,6 +151,8 @@ bif erts_internal:port_command/3
bif erts_internal:port_control/3
bif erts_internal:port_close/1
bif erts_internal:port_connect/2
+bif erts_internal:binary_to_term/1
+bif erts_internal:binary_to_term/2
bif erts_internal:request_system_task/3
bif erts_internal:check_process_code/2
@@ -479,11 +480,6 @@ bif erlang:call_on_load_function/1
bif erlang:finish_after_on_load/2
#
-# New Bifs in R13B4
-#
-bif erlang:binary_to_term/2
-
-#
# The binary match bifs (New in R14A - EEP9)
#
diff --git a/erts/emulator/beam/erl_bif_ddll.c b/erts/emulator/beam/erl_bif_ddll.c
index 1c3e955f47..1728b200f7 100644
--- a/erts/emulator/beam/erl_bif_ddll.c
+++ b/erts/emulator/beam/erl_bif_ddll.c
@@ -182,7 +182,7 @@ BIF_RETTYPE erl_ddll_try_load_3(BIF_ALIST_3)
Eterm name_term = BIF_ARG_2;
Eterm options = BIF_ARG_3;
char *path = NULL;
- ErlDrvSizeT path_len;
+ Sint path_len;
char *name = NULL;
DE_Handle *dh;
erts_driver_t *drv;
@@ -198,6 +198,7 @@ BIF_RETTYPE erl_ddll_try_load_3(BIF_ALIST_3)
int kill_ports = 0;
int do_build_load_error = 0;
int build_this_load_error = 0;
+ int encoding;
for(l = options; is_list(l); l = CDR(list_val(l))) {
Eterm opt = CAR(list_val(l));
@@ -257,18 +258,23 @@ BIF_RETTYPE erl_ddll_try_load_3(BIF_ALIST_3)
goto error;
}
- if (erts_iolist_size(path_term, &path_len)) {
- goto error;
+ encoding = erts_get_native_filename_encoding();
+ if (encoding == ERL_FILENAME_WIN_WCHAR) {
+ /* Do not convert the lib name to utf-16le yet, do that in win32 specific code */
+ /* since lib_name is used in error messages */
+ encoding = ERL_FILENAME_UTF8;
}
- path = erts_alloc(ERTS_ALC_T_DDLL_TMP_BUF, path_len + 1 /* might need path separator */ + sys_strlen(name) + 1);
- if (erts_iolist_to_buf(path_term, path, path_len) != 0) {
+ path = erts_convert_filename_to_encoding(path_term, NULL, 0,
+ ERTS_ALC_T_DDLL_TMP_BUF, 1, 0,
+ encoding, &path_len,
+ sys_strlen(name) + 2); /* might need path separator */
+ if (!path) {
goto error;
}
- while (path_len > 0 && (path[path_len-1] == '\\' || path[path_len-1] == '/')) {
- --path_len;
- }
+ ASSERT(path_len > 0 && path[path_len-1] == 0);
+ while (--path_len > 0 && (path[path_len-1] == '\\' || path[path_len-1] == '/'))
+ ;
path[path_len++] = '/';
- /*path[path_len] = '\0';*/
sys_strcpy(path+path_len,name);
#if DDLL_SMP
@@ -1524,7 +1530,7 @@ static int do_load_driver_entry(DE_Handle *dh, char *path, char *name)
assert_drv_list_rwlocked();
- if ((res = erts_sys_ddll_open(path, &(dh->handle))) != ERL_DE_NO_ERROR) {
+ if ((res = erts_sys_ddll_open(path, &(dh->handle), NULL)) != ERL_DE_NO_ERROR) {
return res;
}
diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c
index 2b40f9272d..414ae2f046 100755
--- a/erts/emulator/beam/erl_bif_info.c
+++ b/erts/emulator/beam/erl_bif_info.c
@@ -3613,8 +3613,9 @@ BIF_RETTYPE erts_debug_set_internal_state_2(BIF_ALIST_2)
default: BIF_ERROR(BIF_P, BADARG); break;
}
- res = erts_set_gc_state(BIF_P, enable);
- BIF_RET(res ? am_true : am_false);
+ res = (BIF_P->flags & F_DISABLE_GC) ? am_false : am_true;
+ erts_set_gc_state(BIF_P, enable);
+ BIF_RET(res);
}
else if (ERTS_IS_ATOM_STR("send_fake_exit_signal", BIF_ARG_1)) {
/* Used by signal_SUITE (emulator) */
diff --git a/erts/emulator/beam/erl_bif_port.c b/erts/emulator/beam/erl_bif_port.c
index 864349491a..f298422267 100644
--- a/erts/emulator/beam/erl_bif_port.c
+++ b/erts/emulator/beam/erl_bif_port.c
@@ -808,7 +808,7 @@ open_port(Process* p, Eterm name, Eterm settings, int *err_typep, int *err_nump)
if (encoding == ERL_FILENAME_WIN_WCHAR) {
encoding = ERL_FILENAME_UTF8;
}
- if ((name_buf = erts_convert_filename_to_encoding(name, NULL, 0, ERTS_ALC_T_TMP,0,1, encoding, NULL))
+ if ((name_buf = erts_convert_filename_to_encoding(name, NULL, 0, ERTS_ALC_T_TMP,0,1, encoding, NULL, 0))
== NULL) {
goto badarg;
}
diff --git a/erts/emulator/beam/erl_bif_re.c b/erts/emulator/beam/erl_bif_re.c
index 99c31738a5..448c6f6f6d 100644
--- a/erts/emulator/beam/erl_bif_re.c
+++ b/erts/emulator/beam/erl_bif_re.c
@@ -1196,8 +1196,8 @@ re_run(Process *p, Eterm arg1, Eterm arg2, Eterm arg3)
ovsize = 3*(unsigned_val(tp[2])+1);
code_size = binary_size(tp[5]);
- if ((code_tmp = (const pcre *)
- erts_get_aligned_binary_bytes(tp[5], &temp_alloc)) == NULL) {
+ code_tmp = (const pcre *) erts_get_aligned_binary_bytes(tp[5], &temp_alloc);
+ if (code_tmp == NULL || code_size < 4) {
erts_free_aligned_binary_bytes(temp_alloc);
BIF_ERROR(p, BADARG);
}
diff --git a/erts/emulator/beam/erl_debug.c b/erts/emulator/beam/erl_debug.c
index dc79d45be7..873a9860da 100644
--- a/erts/emulator/beam/erl_debug.c
+++ b/erts/emulator/beam/erl_debug.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2012. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2013. All Rights Reserved.
*
* The contents of this file are subject to the Erlang Public License,
* Version 1.1, (the "License"); you may not use this file except in
diff --git a/erts/emulator/beam/erl_init.c b/erts/emulator/beam/erl_init.c
index 8c4fffa75b..1af80dd04b 100644
--- a/erts/emulator/beam/erl_init.c
+++ b/erts/emulator/beam/erl_init.c
@@ -553,8 +553,8 @@ void erts_usage(void)
erts_fprintf(stderr, " numbers is %d\n",
ERTS_MAX_NO_OF_SCHEDULERS);
erts_fprintf(stderr, "-SP p1:p2 specify schedulers (p1) and schedulers online (p2)\n");
- erts_fprintf(stderr, " as percentages of logical processors configured and logical\n");
- erts_fprintf(stderr, " processors available, respectively\n");
+ erts_fprintf(stderr, " as percentages of logical processors configured and logical\n");
+ erts_fprintf(stderr, " processors available, respectively\n");
erts_fprintf(stderr, "-t size set the maximum number of atoms the "
"emulator can handle\n");
erts_fprintf(stderr, " valid range is [%d-%d]\n",
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c
index e87959f0ab..dc285b3cf7 100644
--- a/erts/emulator/beam/erl_nif.c
+++ b/erts/emulator/beam/erl_nif.c
@@ -1407,7 +1407,7 @@ void* enif_dlopen(const char* lib,
ErtsSysDdllError errdesc = ERTS_SYS_DDLL_ERROR_INIT;
void* handle;
void* init_func;
- if (erts_sys_ddll_open2(lib, &handle, &errdesc) == ERL_DE_NO_ERROR) {
+ if (erts_sys_ddll_open(lib, &handle, &errdesc) == ERL_DE_NO_ERROR) {
if (erts_sys_ddll_load_nif_init(handle, &init_func, &errdesc) == ERL_DE_NO_ERROR) {
erts_sys_ddll_call_nif_init(init_func);
}
@@ -1587,7 +1587,8 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
encoding = ERL_FILENAME_UTF8;
}
lib_name = erts_convert_filename_to_encoding(BIF_ARG_1, NULL, 0,
- ERTS_ALC_T_TMP, 1, 0, encoding, NULL);
+ ERTS_ALC_T_TMP, 1, 0, encoding,
+ NULL, 0);
if (!lib_name) {
BIF_ERROR(BIF_P, BADARG);
}
@@ -1626,7 +1627,7 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
"module '%T' not allowed", mod_atom);
}
else if (init_func == NULL &&
- (err=erts_sys_ddll_open2(lib_name, &handle, &errdesc)) != ERL_DE_NO_ERROR) {
+ (err=erts_sys_ddll_open(lib_name, &handle, &errdesc)) != ERL_DE_NO_ERROR) {
const char slogan[] = "Failed to load NIF library";
if (strstr(errdesc.str, lib_name) != NULL) {
ret = load_nif_error(BIF_P, "load_failed", "%s: '%s'", slogan, errdesc.str);
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index 0a41fb596d..21fd8dd50a 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -8271,25 +8271,22 @@ save_gc_task(Process *c_p, ErtsProcSysTask *st, int prio)
int
erts_set_gc_state(Process *c_p, int enable)
{
- int res;
ErtsProcSysTaskQs *dgc_tsk_qs;
ASSERT(c_p == erts_get_current_process());
ASSERT((ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS)
& erts_smp_atomic32_read_nob(&c_p->state));
ERTS_SMP_LC_ASSERT(ERTS_PROC_LOCK_MAIN == erts_proc_lc_my_proc_locks(c_p));
- res = !(c_p->flags & F_DISABLE_GC);
-
if (!enable) {
c_p->flags |= F_DISABLE_GC;
- return res;
+ return 0;
}
c_p->flags &= ~F_DISABLE_GC;
dgc_tsk_qs = ERTS_PROC_GET_DELAYED_GC_TASK_QS(c_p);
if (!dgc_tsk_qs)
- return res;
+ return 0;
/* Move delayed gc tasks into sys tasks queues. */
@@ -8387,7 +8384,7 @@ erts_set_gc_state(Process *c_p, int enable)
if (dgc_tsk_qs)
proc_sys_task_queues_free(dgc_tsk_qs);
- return res;
+ return 1;
}
void
diff --git a/erts/emulator/beam/erl_unicode.c b/erts/emulator/beam/erl_unicode.c
index 7e3c6681d9..3a968594f3 100644
--- a/erts/emulator/beam/erl_unicode.c
+++ b/erts/emulator/beam/erl_unicode.c
@@ -1990,12 +1990,14 @@ char *erts_convert_filename_to_native(Eterm name, char *statbuf, size_t statbuf_
{
int encoding = erts_get_native_filename_encoding();
return erts_convert_filename_to_encoding(name, statbuf, statbuf_size, alloc_type,
- allow_empty, allow_atom, encoding, used);
+ allow_empty, allow_atom, encoding,
+ used, 0);
}
char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, size_t statbuf_size,
ErtsAlcType_t alloc_type, int allow_empty,
- int allow_atom, int encoding, Sint *used)
+ int allow_atom, int encoding, Sint *used,
+ Uint extra)
{
char* name_buf = NULL;
@@ -2008,13 +2010,14 @@ char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, size_t statbu
}
if (encoding == ERL_FILENAME_WIN_WCHAR) {
need += 2;
+ extra *= 2;
} else {
++need;
}
if (used)
*used = (Sint) need;
- if (need > statbuf_size) {
- name_buf = (char *) erts_alloc(alloc_type, need);
+ if (need+extra > statbuf_size) {
+ name_buf = (char *) erts_alloc(alloc_type, need+extra);
} else {
name_buf = statbuf;
}
@@ -2035,8 +2038,8 @@ char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, size_t statbu
/*Add 0 termination only*/
if (used)
*used = (Sint) size+1;
- if (size+1 > statbuf_size) {
- name_buf = (char *) erts_alloc(alloc_type, size+1);
+ if (size+1+extra > statbuf_size) {
+ name_buf = (char *) erts_alloc(alloc_type, size+1+extra);
} else {
name_buf = statbuf;
}
@@ -2045,7 +2048,7 @@ char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, size_t statbu
} else {
name_buf = erts_convert_filename_to_wchar(bytes, size,
statbuf, statbuf_size,
- alloc_type, used, 0);
+ alloc_type, used, extra);
}
erts_free_aligned_binary_bytes(temp_alloc);
} else {
diff --git a/erts/emulator/beam/erl_zlib.c b/erts/emulator/beam/erl_zlib.c
index 47fd92988e..8e33144f96 100644
--- a/erts/emulator/beam/erl_zlib.c
+++ b/erts/emulator/beam/erl_zlib.c
@@ -87,6 +87,46 @@ int ZEXPORT erl_zlib_deflate_finish(z_stream *streamp)
return deflateEnd(streamp);
}
+int ZEXPORT erl_zlib_inflate_start(z_stream *streamp, const Bytef* source,
+ uLong sourceLen)
+{
+ streamp->next_in = (Bytef*)source;
+ streamp->avail_in = (uInt)sourceLen;
+ streamp->total_out = streamp->avail_out = 0;
+ streamp->next_out = NULL;
+ erl_zlib_alloc_init(streamp);
+ return inflateInit(streamp);
+}
+/*
+ * Inflate a chunk, The destination length is the limit.
+ * Returns Z_OK if more to process, Z_STREAM_END if we are done.
+ */
+int ZEXPORT erl_zlib_inflate_chunk(z_stream *streamp, Bytef* dest, uLongf* destLen)
+{
+ int err;
+ uLongf last_tot = streamp->total_out;
+
+ streamp->next_out = dest;
+ streamp->avail_out = (uInt)*destLen;
+
+ if ((uLong)streamp->avail_out != *destLen) return Z_BUF_ERROR;
+
+ err = inflate(streamp, Z_NO_FLUSH);
+ ASSERT(err != Z_STREAM_ERROR);
+ *destLen = streamp->total_out - last_tot;
+ return err;
+}
+
+/*
+ * When we are done, free up the inflate structure
+ * Retyurns Z_OK or Error
+ */
+int ZEXPORT erl_zlib_inflate_finish(z_stream *streamp)
+{
+ return inflateEnd(streamp);
+}
+
+
int ZEXPORT erl_zlib_compress2 (Bytef* dest, uLongf* destLen,
const Bytef* source, uLong sourceLen,
int level)
diff --git a/erts/emulator/beam/erl_zlib.h b/erts/emulator/beam/erl_zlib.h
index 5ac849d21c..160166c66b 100644
--- a/erts/emulator/beam/erl_zlib.h
+++ b/erts/emulator/beam/erl_zlib.h
@@ -39,6 +39,12 @@ int ZEXPORT erl_zlib_deflate_start(z_stream *streamp, const Bytef* source,
int ZEXPORT erl_zlib_deflate_chunk(z_stream *streamp, Bytef* dest, uLongf* destLen);
int ZEXPORT erl_zlib_deflate_finish(z_stream *streamp);
+int ZEXPORT erl_zlib_inflate_start(z_stream *streamp, const Bytef* source,
+ uLong sourceLen);
+int ZEXPORT erl_zlib_inflate_chunk(z_stream *streamp, Bytef* dest, uLongf* destLen);
+int ZEXPORT erl_zlib_inflate_finish(z_stream *streamp);
+
+
/* Use instead of compress
*/
#define erl_zlib_compress(dest,destLen,source,sourceLen) \
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c
index 22b0a02937..2cb44a5b64 100644
--- a/erts/emulator/beam/external.c
+++ b/erts/emulator/beam/external.c
@@ -61,6 +61,9 @@
*/
# define ERTS_DEBUG_USE_DIST_SEP
# endif
+# define IF_DEBUG(X) X
+#else
+# define IF_DEBUG(X)
#endif
/* Does Sint fit in Sint32?
@@ -89,10 +92,11 @@ static int enc_term_int(Process *p,ErtsAtomCacheMap *acmp, Eterm obj, byte* ep,
static Uint is_external_string(Eterm obj, int* p_is_string);
static byte* enc_atom(ErtsAtomCacheMap *, Eterm, byte*, Uint32);
static byte* enc_pid(ErtsAtomCacheMap *, Eterm, byte*, Uint32);
-static byte* dec_term(ErtsDistExternal *, Eterm**, byte*, ErlOffHeap*, Eterm*);
+struct B2TContext_t;
+static byte* dec_term(ErtsDistExternal *, Eterm**, byte*, ErlOffHeap*, Eterm*, struct B2TContext_t*);
static byte* dec_atom(ErtsDistExternal *, byte*, Eterm*);
static byte* dec_pid(ErtsDistExternal *, Eterm**, byte*, ErlOffHeap*, Eterm*);
-static Sint decoded_size(byte *ep, byte* endp, int internal_tags);
+static Sint decoded_size(byte *ep, byte* endp, int internal_tags, struct B2TContext_t*);
static BIF_RETTYPE term_to_binary_trap_1(BIF_ALIST_1);
static Eterm erts_term_to_binary_int(Process* p, Eterm Term, int level, Uint flags,
@@ -102,11 +106,19 @@ static Uint encode_size_struct2(ErtsAtomCacheMap *, Eterm, unsigned);
static int encode_size_struct_int(Process *p, ErtsAtomCacheMap *acmp, Eterm obj,
unsigned dflags, Sint *reds, Uint *res);
+static Export binary_to_term_trap_export;
+static BIF_RETTYPE binary_to_term_trap_1(BIF_ALIST_1);
+static Eterm binary_to_term_int(Process* p, Uint32 flags, Eterm bin, Binary* context_b);
+
void erts_init_external(void) {
#if 1 /* In R16 */
erts_init_trap_export(&term_to_binary_trap_export,
am_erlang, am_term_to_binary_trap, 1,
&term_to_binary_trap_1);
+
+ erts_init_trap_export(&binary_to_term_trap_export,
+ am_erlang, am_binary_to_term_trap, 1,
+ &binary_to_term_trap_1);
#else
sys_memset((void *) &term_to_binary_trap_export, 0, sizeof(Export));
term_to_binary_trap_export.address = &term_to_binary_trap_export.code[3];
@@ -877,7 +889,7 @@ erts_decode_dist_ext_size(ErtsDistExternal *edep)
goto fail;
ep = edep->extp+1;
}
- res = decoded_size(ep, edep->ext_endp, 0);
+ res = decoded_size(ep, edep->ext_endp, 0, NULL);
if (res >= 0)
return res;
fail:
@@ -889,12 +901,12 @@ Sint erts_decode_ext_size(byte *ext, Uint size)
{
if (size == 0 || *ext != VERSION_MAGIC)
return -1;
- return decoded_size(ext+1, ext+size, 0);
+ return decoded_size(ext+1, ext+size, 0, NULL);
}
Sint erts_decode_ext_size_ets(byte *ext, Uint size)
{
- Sint sz = decoded_size(ext, ext+size, 1);
+ Sint sz = decoded_size(ext, ext+size, 1, NULL);
ASSERT(sz >= 0);
return sz;
}
@@ -927,7 +939,7 @@ erts_decode_dist_ext(Eterm** hpp,
goto error;
ep++;
}
- ep = dec_term(edep, hpp, ep, off_heap, &obj);
+ ep = dec_term(edep, hpp, ep, off_heap, &obj, NULL);
if (!ep)
goto error;
@@ -948,7 +960,7 @@ Eterm erts_decode_ext(Eterm **hpp, ErlOffHeap *off_heap, byte **ext)
byte *ep = *ext;
if (*ep++ != VERSION_MAGIC)
return THE_NON_VALUE;
- ep = dec_term(NULL, hpp, ep, off_heap, &obj);
+ ep = dec_term(NULL, hpp, ep, off_heap, &obj, NULL);
if (!ep) {
#ifdef DEBUG
bin_write(ERTS_PRINT_STDERR,NULL,*ext,500);
@@ -962,7 +974,7 @@ Eterm erts_decode_ext(Eterm **hpp, ErlOffHeap *off_heap, byte **ext)
Eterm erts_decode_ext_ets(Eterm **hpp, ErlOffHeap *off_heap, byte *ext)
{
Eterm obj;
- ext = dec_term(NULL, hpp, ext, off_heap, &obj);
+ ext = dec_term(NULL, hpp, ext, off_heap, &obj, NULL);
ASSERT(ext);
return obj;
}
@@ -1043,9 +1055,14 @@ static BIF_RETTYPE term_to_binary_trap_1(BIF_ALIST_1)
Binary *bin = ((ProcBin *) binary_val(bt))->val;
Eterm res = erts_term_to_binary_int(BIF_P, Term, 0, 0,bin);
if (is_tuple(res)) {
+ ASSERT(BIF_P->flags & F_DISABLE_GC);
BIF_TRAP1(&term_to_binary_trap_export,BIF_P,res);
} else {
- BIF_RET(res);
+ if (erts_set_gc_state(BIF_P, 1)
+ || MSO(BIF_P).overhead > BIN_VHEAP_SZ(BIF_P))
+ ERTS_BIF_YIELD_RETURN(BIF_P, res);
+ else
+ BIF_RET(res);
}
}
@@ -1053,8 +1070,10 @@ BIF_RETTYPE term_to_binary_1(BIF_ALIST_1)
{
Eterm res = erts_term_to_binary_int(BIF_P, BIF_ARG_1, 0, TERM_TO_BINARY_DFLAGS, NULL);
if (is_tuple(res)) {
+ erts_set_gc_state(BIF_P, 0);
BIF_TRAP1(&term_to_binary_trap_export,BIF_P,res);
} else {
+ ASSERT(!(BIF_P->flags & F_DISABLE_GC));
BIF_RET(res);
}
}
@@ -1106,12 +1125,72 @@ BIF_RETTYPE term_to_binary_2(BIF_ALIST_2)
res = erts_term_to_binary_int(p, Term, level, flags, bin);
if (is_tuple(res)) {
+ erts_set_gc_state(p, 0);
BIF_TRAP1(&term_to_binary_trap_export,BIF_P,res);
} else {
+ ASSERT(!(BIF_P->flags & F_DISABLE_GC));
BIF_RET(res);
}
}
+
+enum B2TState { /* order is somewhat significant */
+ B2TPrepare,
+ B2TUncompressChunk,
+ B2TSizeInit,
+ B2TSize,
+ B2TDecodeInit,
+ B2TDecode,
+ B2TDecodeList,
+ B2TDecodeTuple,
+ B2TDecodeString,
+ B2TDecodeBinary,
+
+ B2TDone,
+ B2TDecodeFail,
+ B2TBadArg
+};
+
+typedef struct {
+ int heap_size;
+ int terms;
+ byte* ep;
+ int atom_extra_skip;
+} B2TSizeContext;
+
+typedef struct {
+ byte* ep;
+ Eterm res;
+ Eterm* next;
+ Eterm* hp_start;
+ Eterm* hp;
+ Eterm* hp_end;
+ int remaining_n;
+ char* remaining_bytes;
+} B2TDecodeContext;
+
+typedef struct {
+ z_stream stream;
+ byte* dbytes;
+ Uint dleft;
+} B2TUncompressContext;
+
+typedef struct B2TContext_t {
+ Sint heap_size;
+ byte* aligned_alloc;
+ ErtsBinary2TermState b2ts;
+ Uint32 flags;
+ SWord reds;
+ Eterm trap_bin;
+ enum B2TState state;
+ union {
+ B2TSizeContext sc;
+ B2TDecodeContext dc;
+ B2TUncompressContext uc;
+ } u;
+} B2TContext;
+
+
static uLongf binary2term_uncomp_size(byte* data, Sint size)
{
z_stream stream;
@@ -1141,48 +1220,62 @@ static uLongf binary2term_uncomp_size(byte* data, Sint size)
return err == Z_STREAM_END ? uncomp_size : 0;
}
-static ERTS_INLINE Sint
-binary2term_prepare(ErtsBinary2TermState *state, byte *data, Sint data_size)
+static ERTS_INLINE int
+binary2term_prepare(ErtsBinary2TermState *state, byte *data, Sint data_size,
+ B2TContext* ctx)
{
- Sint res;
byte *bytes = data;
Sint size = data_size;
state->exttmp = 0;
if (size < 1 || *bytes != VERSION_MAGIC) {
- error:
- if (state->exttmp)
- erts_free(ERTS_ALC_T_TMP, state->extp);
- state->extp = NULL;
- state->exttmp = 0;
return -1;
}
bytes++;
size--;
if (size < 5 || *bytes != COMPRESSED) {
state->extp = bytes;
+ if (ctx)
+ ctx->state = B2TSizeInit;
}
else {
uLongf dest_len = (Uint32) get_int32(bytes+1);
bytes += 5;
size -= 5;
if (dest_len > 32*1024*1024
- || (state->extp = erts_alloc_fnf(ERTS_ALC_T_TMP, dest_len)) == NULL) {
+ || (state->extp = erts_alloc_fnf(ERTS_ALC_T_EXT_TERM_DATA, dest_len)) == NULL) {
+ /*
+ * Try avoid out-of-memory crash due to corrupted 'dest_len'
+ * by checking the actual length of the uncompressed data.
+ * The only way to do that is to uncompress it. Sad but true.
+ */
if (dest_len != binary2term_uncomp_size(bytes, size)) {
- goto error;
+ return -1;
}
- state->extp = erts_alloc(ERTS_ALC_T_TMP, dest_len);
+ state->extp = erts_alloc(ERTS_ALC_T_EXT_TERM_DATA, dest_len);
+ ctx->reds -= dest_len;
}
state->exttmp = 1;
- if (erl_zlib_uncompress(state->extp, &dest_len, bytes, size) != Z_OK)
- goto error;
+ if (ctx) {
+ if (erl_zlib_inflate_start(&ctx->u.uc.stream, bytes, size) != Z_OK)
+ return -1;
+
+ ctx->u.uc.dbytes = state->extp;
+ ctx->u.uc.dleft = dest_len;
+ ctx->state = B2TUncompressChunk;
+ }
+ else {
+ uLongf dlen = dest_len;
+ if (erl_zlib_uncompress(state->extp, &dlen, bytes, size) != Z_OK
+ || dlen != dest_len) {
+ return -1;
+ }
+ }
size = (Sint) dest_len;
}
- res = decoded_size(state->extp, state->extp + size, 0);
- if (res < 0)
- goto error;
- return res;
+ state->extsize = size;
+ return 0;
}
static ERTS_INLINE void
@@ -1190,7 +1283,7 @@ binary2term_abort(ErtsBinary2TermState *state)
{
if (state->exttmp) {
state->exttmp = 0;
- erts_free(ERTS_ALC_T_TMP, state->extp);
+ erts_free(ERTS_ALC_T_EXT_TERM_DATA, state->extp);
}
}
@@ -1198,11 +1291,11 @@ static ERTS_INLINE Eterm
binary2term_create(ErtsDistExternal *edep, ErtsBinary2TermState *state, Eterm **hpp, ErlOffHeap *ohp)
{
Eterm res;
- if (!dec_term(edep, hpp, state->extp, ohp, &res))
+ if (!dec_term(edep, hpp, state->extp, ohp, &res, NULL))
res = THE_NON_VALUE;
if (state->exttmp) {
state->exttmp = 0;
- erts_free(ERTS_ALC_T_TMP, state->extp);
+ erts_free(ERTS_ALC_T_EXT_TERM_DATA, state->extp);
}
return res;
}
@@ -1210,7 +1303,18 @@ binary2term_create(ErtsDistExternal *edep, ErtsBinary2TermState *state, Eterm **
Sint
erts_binary2term_prepare(ErtsBinary2TermState *state, byte *data, Sint data_size)
{
- return binary2term_prepare(state, data, data_size);
+ Sint res;
+
+ if (binary2term_prepare(state, data, data_size, NULL) < 0 ||
+ (res=decoded_size(state->extp, state->extp + state->extsize, 0, NULL)) < 0) {
+
+ if (state->exttmp)
+ erts_free(ERTS_ALC_T_EXT_TERM_DATA, state->extp);
+ state->extp = NULL;
+ state->exttmp = 0;
+ return -1;
+ }
+ return res;
}
void
@@ -1225,68 +1329,233 @@ erts_binary2term_create(ErtsBinary2TermState *state, Eterm **hpp, ErlOffHeap *oh
return binary2term_create(NULL,state, hpp, ohp);
}
-BIF_RETTYPE binary_to_term_1(BIF_ALIST_1)
+static void b2t_destroy_context(B2TContext* context)
{
- Sint heap_size;
- Eterm res;
+ erts_free_aligned_binary_bytes_extra(context->aligned_alloc,
+ ERTS_ALC_T_EXT_TERM_DATA);
+ context->aligned_alloc = NULL;
+ binary2term_abort(&context->b2ts);
+ if (context->state == B2TUncompressChunk) {
+ erl_zlib_inflate_finish(&context->u.uc.stream);
+ }
+}
+
+static void b2t_context_destructor(Binary *context_bin)
+{
+ B2TContext* ctx = (B2TContext*) ERTS_MAGIC_BIN_DATA(context_bin);
+ ASSERT(ERTS_MAGIC_BIN_DESTRUCTOR(context_bin) == b2t_context_destructor);
+
+ b2t_destroy_context(ctx);
+}
+
+static BIF_RETTYPE binary_to_term_trap_1(BIF_ALIST_1)
+{
+ Binary *context_bin = ((ProcBin *) binary_val(BIF_ARG_1))->val;
+ ASSERT(ERTS_MAGIC_BIN_DESTRUCTOR(context_bin) == b2t_context_destructor);
+
+ return binary_to_term_int(BIF_P, 0, THE_NON_VALUE, context_bin);
+}
+
+
+#define B2T_BYTES_PER_REDUCTION 128
+#define B2T_MEMCPY_FACTOR 8
+
+/* Define for testing */
+/*#define EXTREME_B2T_TRAPPING 1*/
+
+#ifdef EXTREME_B2T_TRAPPING
+static unsigned b2t_rand(void)
+{
+ static unsigned prev = 17;
+ prev = (prev * 214013 + 2531011);
+ return prev;
+}
+#endif
+
+
+static B2TContext* b2t_export_context(Process* p, B2TContext* src)
+{
+ Binary* context_b = erts_create_magic_binary(sizeof(B2TContext),
+ b2t_context_destructor);
+ B2TContext* ctx = ERTS_MAGIC_BIN_DATA(context_b);
Eterm* hp;
- Eterm* endp;
- Sint size;
- byte* bytes;
- byte* temp_alloc = NULL;
- ErtsBinary2TermState b2ts;
+ sys_memcpy(ctx, src, sizeof(B2TContext));
+ if (ctx->state >= B2TDecode && ctx->u.dc.next == &src->u.dc.res) {
+ ctx->u.dc.next = &ctx->u.dc.res;
+ }
+ hp = HAlloc(p, PROC_BIN_SIZE);
+ ctx->trap_bin = erts_mk_magic_binary_term(&hp, &MSO(p), context_b);
+ return ctx;
+}
- if ((bytes = erts_get_aligned_binary_bytes(BIF_ARG_1, &temp_alloc)) == NULL) {
- error:
- erts_free_aligned_binary_bytes(temp_alloc);
- BIF_ERROR(BIF_P, BADARG);
+static Eterm binary_to_term_int(Process* p, Uint32 flags, Eterm bin, Binary* context_b)
+{
+#ifdef EXTREME_B2T_TRAPPING
+ SWord initial_reds = 1 + b2t_rand() % 4;
+#else
+ SWord initial_reds = (Uint)(ERTS_BIF_REDS_LEFT(p) * B2T_BYTES_PER_REDUCTION);
+#endif
+ B2TContext c_buff;
+ B2TContext *ctx;
+ int is_first_call;
+
+ if (context_b == NULL) {
+ /* Setup enough to get started */
+ is_first_call = 1;
+ ctx = &c_buff;
+ ctx->state = B2TPrepare;
+ ctx->aligned_alloc = NULL;
+ ctx->flags = flags;
+ IF_DEBUG(ctx->trap_bin = THE_NON_VALUE;)
+ } else {
+ is_first_call = 0;
+ ctx = ERTS_MAGIC_BIN_DATA(context_b);
+ ASSERT(ctx->state != B2TPrepare);
}
- size = binary_size(BIF_ARG_1);
+ ctx->reds = initial_reds;
+
+ do {
+ switch (ctx->state) {
+ case B2TPrepare: {
+ byte* bytes;
+ Uint bin_size;
+ bytes = erts_get_aligned_binary_bytes_extra(bin,
+ &ctx->aligned_alloc,
+ ERTS_ALC_T_EXT_TERM_DATA,
+ 0);
+ if (bytes == NULL) {
+ ctx->b2ts.exttmp = 0;
+ ctx->state = B2TBadArg;
+ break;
+ }
+ bin_size = binary_size(bin);
+ if (ctx->aligned_alloc) {
+ ctx->reds -= bin_size / 8;
+ }
+ if (binary2term_prepare(&ctx->b2ts, bytes, bin_size, ctx) < 0) {
+ ctx->state = B2TBadArg;
+ }
+ break;
+ }
+ case B2TUncompressChunk: {
+ uLongf chunk = ctx->reds;
+ int zret;
+
+ if (chunk > ctx->u.uc.dleft)
+ chunk = ctx->u.uc.dleft;
+ zret = erl_zlib_inflate_chunk(&ctx->u.uc.stream,
+ ctx->u.uc.dbytes, &chunk);
+ ctx->u.uc.dbytes += chunk;
+ ctx->u.uc.dleft -= chunk;
+ if (zret == Z_OK && ctx->u.uc.dleft > 0) {
+ ctx->reds = 0;
+ }
+ else if (erl_zlib_inflate_finish(&ctx->u.uc.stream) == Z_OK
+ && zret == Z_STREAM_END
+ && ctx->u.uc.dleft == 0) {
+ ctx->reds -= chunk;
+ ctx->state = B2TSizeInit;
+ }
+ else {
+ ctx->state = B2TBadArg;
+ }
+ break;
+ }
+ case B2TSizeInit:
+ ctx->u.sc.ep = NULL;
+ ctx->state = B2TSize;
+ /*fall through*/
+ case B2TSize:
+ ctx->heap_size = decoded_size(ctx->b2ts.extp,
+ ctx->b2ts.extp + ctx->b2ts.extsize,
+ 0, ctx);
+ break;
+
+ case B2TDecodeInit:
+ if (ctx == &c_buff && ctx->b2ts.extsize > ctx->reds) {
+ /* dec_term will maybe trap, allocate space for magic bin
+ before result term to make it easy to trim with HRelease.
+ */
+ ctx = b2t_export_context(p, &c_buff);
+ }
+ ctx->u.dc.ep = ctx->b2ts.extp;
+ ctx->u.dc.res = (Eterm) (UWord) NULL;
+ ctx->u.dc.next = &ctx->u.dc.res;
+ ctx->u.dc.hp_start = HAlloc(p, ctx->heap_size);
+ ctx->u.dc.hp = ctx->u.dc.hp_start;
+ ctx->u.dc.hp_end = ctx->u.dc.hp_start + ctx->heap_size;
+ ctx->state = B2TDecode;
+ /*fall through*/
+ case B2TDecode:
+ case B2TDecodeList:
+ case B2TDecodeTuple:
+ case B2TDecodeString:
+ case B2TDecodeBinary: {
+ ErtsDistExternal fakedep;
+ fakedep.flags = ctx->flags;
+ dec_term(&fakedep, NULL, NULL, &MSO(p), NULL, ctx);
+ break;
+ }
+ case B2TDecodeFail:
+ HRelease(p, ctx->u.dc.hp_end, ctx->u.dc.hp_start);
+ /*fall through*/
+ case B2TBadArg:
+ b2t_destroy_context(ctx);
+ if (!is_first_call) {
+ erts_set_gc_state(p, 1);
+ }
+ BUMP_REDS(p, (initial_reds - ctx->reds) / B2T_BYTES_PER_REDUCTION);
+ BIF_ERROR(p, BADARG & ~EXF_SAVETRACE);
- heap_size = binary2term_prepare(&b2ts, bytes, size);
- if (heap_size < 0)
- goto error;
+ case B2TDone:
+ b2t_destroy_context(ctx);
- hp = HAlloc(BIF_P, heap_size);
- endp = hp + heap_size;
+ if (ctx->u.dc.hp > ctx->u.dc.hp_end) {
+ erl_exit(1, ":%s, line %d: heap overrun by %d words(s)\n",
+ __FILE__, __LINE__, ctx->u.dc.hp - ctx->u.dc.hp_end);
+ }
+ HRelease(p, ctx->u.dc.hp_end, ctx->u.dc.hp);
- res = binary2term_create(NULL, &b2ts, &hp, &MSO(BIF_P));
+ if (!is_first_call) {
+ erts_set_gc_state(p, 1);
+ }
+ BUMP_REDS(p, (initial_reds - ctx->reds) / B2T_BYTES_PER_REDUCTION);
+ return ctx->u.dc.res;
- erts_free_aligned_binary_bytes(temp_alloc);
+ default:
+ ASSERT(!"Unknown state in binary_to_term");
+ }
+ }while (ctx->reds > 0 || ctx->state >= B2TDone);
- if (hp > endp) {
- erl_exit(1, ":%s, line %d: heap overrun by %d words(s)\n",
- __FILE__, __LINE__, hp-endp);
+ if (ctx == &c_buff) {
+ ASSERT(ctx->trap_bin == THE_NON_VALUE);
+ ctx = b2t_export_context(p, &c_buff);
}
+ ASSERT(ctx->trap_bin != THE_NON_VALUE);
- HRelease(BIF_P, endp, hp);
-
- if (res == THE_NON_VALUE)
- goto error;
+ if (is_first_call) {
+ erts_set_gc_state(p, 0);
+ }
+ BUMP_ALL_REDS(p);
+ BIF_TRAP1(&binary_to_term_trap_export, p, ctx->trap_bin);
+}
- return res;
+BIF_RETTYPE erts_internal_binary_to_term_1(BIF_ALIST_1)
+{
+ return binary_to_term_int(BIF_P, 0, BIF_ARG_1, NULL);
}
-BIF_RETTYPE binary_to_term_2(BIF_ALIST_2)
+BIF_RETTYPE erts_internal_binary_to_term_2(BIF_ALIST_2)
{
- Sint heap_size;
- Eterm res;
Eterm opts;
Eterm opt;
- Eterm* hp;
- Eterm* endp;
- Sint size;
- byte* bytes;
- byte* temp_alloc = NULL;
- ErtsBinary2TermState b2ts;
- ErtsDistExternal fakedep;
+ Uint32 flags = 0;
- fakedep.flags = 0;
opts = BIF_ARG_2;
while (is_list(opts)) {
opt = CAR(list_val(opts));
if (opt == am_safe) {
- fakedep.flags |= ERTS_DIST_EXT_BTT_SAFE;
+ flags |= ERTS_DIST_EXT_BTT_SAFE;
}
else {
goto error;
@@ -1297,35 +1566,10 @@ BIF_RETTYPE binary_to_term_2(BIF_ALIST_2)
if (is_not_nil(opts))
goto error;
- if ((bytes = erts_get_aligned_binary_bytes(BIF_ARG_1, &temp_alloc)) == NULL) {
- error:
- erts_free_aligned_binary_bytes(temp_alloc);
- BIF_ERROR(BIF_P, BADARG);
- }
- size = binary_size(BIF_ARG_1);
-
- heap_size = binary2term_prepare(&b2ts, bytes, size);
- if (heap_size < 0)
- goto error;
-
- hp = HAlloc(BIF_P, heap_size);
- endp = hp + heap_size;
-
- res = binary2term_create(&fakedep, &b2ts, &hp, &MSO(BIF_P));
-
- erts_free_aligned_binary_bytes(temp_alloc);
-
- if (hp > endp) {
- erl_exit(1, ":%s, line %d: heap overrun by %d words(s)\n",
- __FILE__, __LINE__, hp-endp);
- }
-
- HRelease(BIF_P, endp, hp);
-
- if (res == THE_NON_VALUE)
- goto error;
+ return binary_to_term_int(BIF_P, flags, BIF_ARG_1, NULL);
- return res;
+error:
+ BIF_ERROR(BIF_P, BADARG);
}
Eterm
@@ -1473,12 +1717,10 @@ erts_term_to_binary(Process* p, Eterm Term, int level, Uint flags) {
/* #define EXTREME_TTB_TRAPPING 1 */
#ifndef EXTREME_TTB_TRAPPING
-#define TERM_TO_BINARY_LOOP_FACTOR 500
-#define TERM_TO_BINARY_SIZE_FACTOR 500000
-#define TERM_TO_BINARY_COMPRESS_CHUNK 500000
+#define TERM_TO_BINARY_LOOP_FACTOR 32
+#define TERM_TO_BINARY_COMPRESS_CHUNK (1 << 18)
#else
#define TERM_TO_BINARY_LOOP_FACTOR 1
-#define TERM_TO_BINARY_SIZE_FACTOR 10
#define TERM_TO_BINARY_COMPRESS_CHUNK 10
#endif
@@ -1514,7 +1756,7 @@ typedef struct {
} s;
} TTBContext;
-static void context_destructor(Binary *context_bin)
+static void ttb_context_destructor(Binary *context_bin)
{
TTBContext *context = ERTS_MAGIC_BIN_DATA(context_bin);
if (context->alive) {
@@ -1567,7 +1809,7 @@ static Eterm erts_term_to_binary_int(Process* p, Eterm Term, int level, Uint fla
do { \
if (context_b == NULL) { \
context_b = erts_create_magic_binary(sizeof(TTBContext), \
- context_destructor); \
+ ttb_context_destructor); \
context = ERTS_MAGIC_BIN_DATA(context_b); \
memcpy(context,&c_buff,sizeof(TTBContext)); \
} \
@@ -1615,7 +1857,7 @@ static Eterm erts_term_to_binary_int(Process* p, Eterm Term, int level, Uint fla
/* Finish in one go */
res = erts_term_to_binary_simple(p, Term, size,
level, flags);
- BUMP_REDS(p, size / TERM_TO_BINARY_SIZE_FACTOR);
+ BUMP_REDS(p, 1);
return res;
}
@@ -2604,21 +2846,112 @@ undo_offheap_in_area(ErlOffHeap* off_heap, Eterm* start, Eterm* end)
#endif /* DEBUG */
}
+
/* Decode term from external format into *objp.
** On failure return NULL and (R13B04) *hpp will be unchanged.
*/
static byte*
-dec_term(ErtsDistExternal *edep, Eterm** hpp, byte* ep, ErlOffHeap* off_heap, Eterm* objp)
+dec_term(ErtsDistExternal *edep, Eterm** hpp, byte* ep, ErlOffHeap* off_heap,
+ Eterm* objp, B2TContext* ctx)
{
- Eterm* hp_saved = *hpp;
+ Eterm* hp_saved;
int n;
ErtsAtomEncoding char_enc;
- register Eterm* hp = *hpp; /* Please don't take the address of hp */
- Eterm* next = objp;
+ register Eterm* hp; /* Please don't take the address of hp */
+ Eterm* next;
+ SWord reds;
+
+ if (ctx) {
+ hp_saved = ctx->u.dc.hp_start;
+ reds = ctx->reds;
+ next = ctx->u.dc.next;
+ ep = ctx->u.dc.ep;
+ hpp = &ctx->u.dc.hp;
+
+ if (ctx->state != B2TDecode) {
+ int n_limit = reds;
+
+ n = ctx->u.dc.remaining_n;
+ if (ctx->state == B2TDecodeBinary) {
+ n_limit *= B2T_MEMCPY_FACTOR;
+ ASSERT(n_limit >= reds);
+ reds -= n / B2T_MEMCPY_FACTOR;
+ }
+ else
+ reds -= n;
- *next = (Eterm) (UWord) NULL;
+ if (n > n_limit) {
+ ctx->u.dc.remaining_n -= n_limit;
+ n = n_limit;
+ reds = 0;
+ }
+ else {
+ ctx->u.dc.remaining_n = 0;
+ }
+
+ switch (ctx->state) {
+ case B2TDecodeList:
+ objp = next - 2;
+ while (n > 0) {
+ objp[0] = (Eterm) COMPRESS_POINTER(next);
+ objp[1] = make_list(next);
+ next = objp;
+ objp -= 2;
+ n--;
+ }
+ break;
+
+ case B2TDecodeTuple:
+ objp = next - 1;
+ while (n-- > 0) {
+ objp[0] = (Eterm) COMPRESS_POINTER(next);
+ next = objp;
+ objp--;
+ }
+ break;
+
+ case B2TDecodeString:
+ hp = *hpp;
+ hp[-1] = make_list(hp); /* overwrite the premature NIL */
+ while (n-- > 0) {
+ hp[0] = make_small(*ep++);
+ hp[1] = make_list(hp+2);
+ hp += 2;
+ }
+ hp[-1] = NIL;
+ *hpp = hp;
+ break;
+
+ case B2TDecodeBinary:
+ sys_memcpy(ctx->u.dc.remaining_bytes, ep, n);
+ ctx->u.dc.remaining_bytes += n;
+ ep += n;
+ break;
+
+ default:
+ ASSERT(!"Unknown state");
+ }
+ if (!ctx->u.dc.remaining_n) {
+ ctx->state = B2TDecode;
+ }
+ if (reds <= 0) {
+ ctx->u.dc.next = next;
+ ctx->u.dc.ep = ep;
+ ctx->reds = 0;
+ return NULL;
+ }
+ }
+ }
+ else {
+ hp_saved = *hpp;
+ reds = ERTS_SWORD_MAX;
+ next = objp;
+ *next = (Eterm) (UWord) NULL;
+ }
+ hp = *hpp;
while (next != NULL) {
+
objp = next;
next = (Eterm *) EXPAND_POINTER(*objp);
@@ -2738,7 +3071,16 @@ dec_term_atom_common:
*objp = make_tuple(hp);
*hp++ = make_arityval(n);
hp += n;
- objp = hp - 1;
+ objp = hp - 1;
+ if (ctx) {
+ if (reds < n) {
+ ASSERT(reds > 0);
+ ctx->state = B2TDecodeTuple;
+ ctx->u.dc.remaining_n = n - reds;
+ n = reds;
+ }
+ reds -= n;
+ }
while (n-- > 0) {
objp[0] = (Eterm) COMPRESS_POINTER(next);
next = objp;
@@ -2756,17 +3098,27 @@ dec_term_atom_common:
break;
}
*objp = make_list(hp);
- hp += 2*n;
+ hp += 2 * n;
objp = hp - 2;
objp[0] = (Eterm) COMPRESS_POINTER((objp+1));
objp[1] = (Eterm) COMPRESS_POINTER(next);
next = objp;
objp -= 2;
- while (--n > 0) {
+ n--;
+ if (ctx) {
+ if (reds < n) {
+ ctx->state = B2TDecodeList;
+ ctx->u.dc.remaining_n = n - reds;
+ n = reds;
+ }
+ reds -= n;
+ }
+ while (n > 0) {
objp[0] = (Eterm) COMPRESS_POINTER(next);
- objp[1] = make_list(objp + 2);
+ objp[1] = make_list(next);
next = objp;
objp -= 2;
+ n--;
}
break;
case STRING_EXT:
@@ -2777,6 +3129,14 @@ dec_term_atom_common:
break;
}
*objp = make_list(hp);
+ if (ctx) {
+ if (reds < n) {
+ ctx->state = B2TDecodeString;
+ ctx->u.dc.remaining_n = n - reds;
+ n = reds;
+ }
+ reds -= n;
+ }
while (n-- > 0) {
hp[0] = make_small(*ep++);
hp[1] = make_list(hp+2);
@@ -2984,7 +3344,6 @@ dec_term_atom_common:
dbin->flags = 0;
dbin->orig_size = n;
erts_refc_init(&dbin->refc, 1);
- sys_memcpy(dbin->orig_bytes, ep, n);
pb = (ProcBin *) hp;
hp += PROC_BIN_SIZE;
pb->thing_word = HEADER_PROC_BIN;
@@ -2995,7 +3354,20 @@ dec_term_atom_common:
pb->bytes = (byte*) dbin->orig_bytes;
pb->flags = 0;
*objp = make_binary(pb);
- }
+ if (ctx) {
+ int n_limit = reds * B2T_MEMCPY_FACTOR;
+ if (n > n_limit) {
+ ctx->state = B2TDecodeBinary;
+ ctx->u.dc.remaining_n = n - n_limit;
+ ctx->u.dc.remaining_bytes = dbin->orig_bytes + n_limit;
+ n = n_limit;
+ reds = 0;
+ }
+ else
+ reds -= n / B2T_MEMCPY_FACTOR;
+ }
+ sys_memcpy(dbin->orig_bytes, ep, n);
+ }
ep += n;
break;
}
@@ -3018,13 +3390,14 @@ dec_term_atom_common:
sys_memcpy(hb->data, ep, n);
bin = make_binary(hb);
hp += heap_bin_size(n);
+ ep += n;
} else {
Binary* dbin = erts_bin_nrml_alloc(n);
ProcBin* pb;
+
dbin->flags = 0;
dbin->orig_size = n;
erts_refc_init(&dbin->refc, 1);
- sys_memcpy(dbin->orig_bytes, ep, n);
pb = (ProcBin *) hp;
pb->thing_word = HEADER_PROC_BIN;
pb->size = n;
@@ -3035,8 +3408,23 @@ dec_term_atom_common:
pb->flags = 0;
bin = make_binary(pb);
hp += PROC_BIN_SIZE;
- }
- ep += n;
+ if (ctx) {
+ int n_limit = reds * B2T_MEMCPY_FACTOR;
+ if (n > n_limit) {
+ ctx->state = B2TDecodeBinary;
+ ctx->u.dc.remaining_n = n - n_limit;
+ ctx->u.dc.remaining_bytes = dbin->orig_bytes + n_limit;
+ n = n_limit;
+ reds = 0;
+ }
+ else
+ reds -= n / B2T_MEMCPY_FACTOR;
+ }
+ sys_memcpy(dbin->orig_bytes, ep, n);
+ ep += n;
+ n = pb->size;
+ }
+
if (bitsize == 8 || n == 0) {
*objp = bin;
} else {
@@ -3067,7 +3455,7 @@ dec_term_atom_common:
goto error;
}
*hpp = hp;
- ep = dec_term(edep, hpp, ep, off_heap, &temp);
+ ep = dec_term(edep, hpp, ep, off_heap, &temp, NULL);
hp = *hpp;
if (ep == NULL) {
goto error;
@@ -3127,7 +3515,7 @@ dec_term_atom_common:
}
*hpp = hp;
/* Index */
- if ((ep = dec_term(edep, hpp, ep, off_heap, &temp)) == NULL) {
+ if ((ep = dec_term(edep, hpp, ep, off_heap, &temp, NULL)) == NULL) {
goto error;
}
if (!is_small(temp)) {
@@ -3136,7 +3524,7 @@ dec_term_atom_common:
old_index = unsigned_val(temp);
/* Uniq */
- if ((ep = dec_term(edep, hpp, ep, off_heap, &temp)) == NULL) {
+ if ((ep = dec_term(edep, hpp, ep, off_heap, &temp, NULL)) == NULL) {
goto error;
}
if (!is_small(temp)) {
@@ -3204,7 +3592,7 @@ dec_term_atom_common:
}
/* Index */
- if ((ep = dec_term(edep, hpp, ep, off_heap, &temp)) == NULL) {
+ if ((ep = dec_term(edep, hpp, ep, off_heap, &temp, NULL)) == NULL) {
goto error;
}
if (!is_small(temp)) {
@@ -3213,7 +3601,7 @@ dec_term_atom_common:
old_index = unsigned_val(temp);
/* Uniq */
- if ((ep = dec_term(edep, hpp, ep, off_heap, &temp)) == NULL) {
+ if ((ep = dec_term(edep, hpp, ep, off_heap, &temp, NULL)) == NULL) {
goto error;
}
if (!is_small(temp)) {
@@ -3313,8 +3701,31 @@ dec_term_atom_common:
}
undo_offheap_in_area(off_heap, hp_saved, hp);
*hpp = hp_saved;
- return NULL;
+ if (ctx) {
+ ctx->state = B2TDecodeFail;
+ ctx->reds = reds;
+ }
+ return NULL;
}
+
+ if (--reds <= 0) {
+ if (ctx) {
+ if (next || ctx->state != B2TDecode) {
+ ctx->u.dc.ep = ep;
+ ctx->u.dc.next = next;
+ ctx->u.dc.hp = hp;
+ ctx->reds = 0;
+ return NULL;
+ }
+ }
+ else {
+ reds = ERTS_SWORD_MAX;
+ }
+ }
+ }
+ if (ctx) {
+ ctx->state = B2TDone;
+ ctx->reds = reds;
}
*hpp = hp;
return ep;
@@ -3602,18 +4013,37 @@ encode_size_struct_int(Process *p, ErtsAtomCacheMap *acmp, Eterm obj,
}
static Sint
-decoded_size(byte *ep, byte* endp, int internal_tags)
+decoded_size(byte *ep, byte* endp, int internal_tags, B2TContext* ctx)
{
- int heap_size = 0;
+ int heap_size;
int terms;
- int atom_extra_skip = 0;
+ int atom_extra_skip;
Uint n;
+ SWord reds;
+
+ if (ctx) {
+ reds = ctx->reds;
+ if (ctx->u.sc.ep) {
+ heap_size = ctx->u.sc.heap_size;
+ terms = ctx->u.sc.terms;
+ ep = ctx->u.sc.ep;
+ atom_extra_skip = ctx->u.sc.atom_extra_skip;
+ goto init_done;
+ }
+ }
+ else
+ reds = 0; /* not used but compiler warns anyway */
+
+ heap_size = 0;
+ terms = 1;
+ atom_extra_skip = 0;
+init_done:
#define SKIP(sz) \
do { \
if ((sz) <= endp-ep) { \
ep += (sz); \
- } else { return -1; }; \
+ } else { goto error; }; \
} while (0)
#define SKIP2(sz1, sz2) \
@@ -3621,25 +4051,24 @@ decoded_size(byte *ep, byte* endp, int internal_tags)
Uint sz = (sz1) + (sz2); \
if (sz1 < sz && (sz) <= endp-ep) { \
ep += (sz); \
- } else { return -1; } \
+ } else { goto error; } \
} while (0)
#define CHKSIZE(sz) \
do { \
- if ((sz) > endp-ep) { return -1; } \
+ if ((sz) > endp-ep) { goto error; } \
} while (0)
#define ADDTERMS(n) \
do { \
int before = terms; \
terms += (n); \
- if (terms < before) return -1; \
+ if (terms < before) goto error; \
} while (0)
-
- for (terms=1; terms > 0; terms--) {
- int tag;
-
+ ASSERT(terms > 0);
+ do {
+ int tag;
CHKSIZE(1);
tag = ep++[0];
switch (tag) {
@@ -3660,7 +4089,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags)
CHKSIZE(4);
n = get_int32(ep);
if (n > BIG_ARITY_MAX*sizeof(ErtsDigit)) {
- return -1;
+ goto error;
}
SKIP2(n,4+1); /* skip, size,sign,digits */
heap_size += 1+1+(n+sizeof(Eterm)-1)/sizeof(Eterm); /* XXX: 1 too much? */
@@ -3669,7 +4098,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags)
CHKSIZE(2);
n = get_int16(ep);
if (n > MAX_ATOM_CHARACTERS) {
- return -1;
+ goto error;
}
SKIP(n+2+atom_extra_skip);
atom_extra_skip = 0;
@@ -3679,7 +4108,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags)
n = get_int16(ep);
ep += 2;
if (n > MAX_ATOM_SZ_LIMIT) {
- return -1;
+ goto error;
}
SKIP(n+atom_extra_skip);
atom_extra_skip = 0;
@@ -3688,7 +4117,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags)
CHKSIZE(1);
n = get_int8(ep);
if (n > MAX_ATOM_CHARACTERS) {
- return -1;
+ goto error;
}
SKIP(n+1+atom_extra_skip);
atom_extra_skip = 0;
@@ -3698,7 +4127,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags)
n = get_int8(ep);
ep++;
if (n > MAX_ATOM_SZ_LIMIT) {
- return -1;
+ goto error;
}
SKIP(n+atom_extra_skip);
atom_extra_skip = 0;
@@ -3727,7 +4156,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags)
id_words = get_int16(ep);
if (id_words > ERTS_MAX_REF_NUMBERS)
- return -1;
+ goto error;
ep += 2;
atom_extra_skip = 1 + 4*id_words;
@@ -3829,7 +4258,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags)
num_free = get_int32(ep);
ep += 4;
if (num_free > MAX_ARG) {
- return -1;
+ goto error;
}
terms += 4 + num_free;
heap_size += ERL_FUN_SIZE + num_free;
@@ -3846,24 +4275,47 @@ decoded_size(byte *ep, byte* endp, int internal_tags)
case BINARY_INTERNAL_REF:
if (!internal_tags) {
- return -1;
+ goto error;
}
SKIP(sizeof(ProcBin));
heap_size += PROC_BIN_SIZE;
break;
case BIT_BINARY_INTERNAL_REF:
if (!internal_tags) {
- return -1;
+ goto error;
}
SKIP(2+sizeof(ProcBin));
heap_size += PROC_BIN_SIZE + ERL_SUB_BIN_SIZE;
break;
default:
- return -1;
+ goto error;
}
- }
+ terms--;
+
+ if (ctx && --reds <= 0 && terms > 0) {
+ ctx->u.sc.heap_size = heap_size;
+ ctx->u.sc.terms = terms;
+ ctx->u.sc.ep = ep;
+ ctx->u.sc.atom_extra_skip = atom_extra_skip;
+ ctx->reds = 0;
+ return 0;
+ }
+ }while (terms > 0);
+
/* 'terms' may be non-zero if it has wrapped around */
- return terms==0 ? heap_size : -1;
+ if (terms == 0) {
+ if (ctx) {
+ ctx->state = B2TDecodeInit;
+ ctx->reds = reds;
+ }
+ return heap_size;
+ }
+
+error:
+ if (ctx) {
+ ctx->state = B2TBadArg;
+ }
+ return -1;
#undef SKIP
#undef SKIP2
#undef CHKSIZE
diff --git a/erts/emulator/beam/external.h b/erts/emulator/beam/external.h
index ff29e84972..83001b2c7e 100644
--- a/erts/emulator/beam/external.h
+++ b/erts/emulator/beam/external.h
@@ -146,6 +146,7 @@ typedef struct {
typedef struct {
byte *extp;
int exttmp;
+ Uint extsize;
} ErtsBinary2TermState;
/* -------------------------------------------------------------------------- */
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h
index 94bc1b172a..6e5d352e5b 100755
--- a/erts/emulator/beam/global.h
+++ b/erts/emulator/beam/global.h
@@ -921,7 +921,8 @@ char *erts_convert_filename_to_encoding(Eterm name, char *statbuf,
ErtsAlcType_t alloc_type,
int allow_empty, int allow_atom,
int encoding,
- Sint *used /* out */);
+ Sint *used /* out */,
+ Uint extra);
char* erts_convert_filename_to_wchar(byte* bytes, Uint size,
char *statbuf, size_t statbuf_size,
ErtsAlcType_t alloc_type, Sint* used,
diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c
index d4623c0450..49af86b36a 100644
--- a/erts/emulator/beam/io.c
+++ b/erts/emulator/beam/io.c
@@ -7061,7 +7061,7 @@ void *driver_dl_open(char * path)
int res;
int *last_error_p = erts_smp_tsd_get(driver_list_last_error_key);
int locked = maybe_lock_driver_list();
- if ((res = erts_sys_ddll_open(path, &ptr)) == 0) {
+ if ((res = erts_sys_ddll_open(path, &ptr, NULL)) == 0) {
maybe_unlock_driver_list(locked);
return ptr;
} else {
diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h
index 31252ed78f..189d9ebac8 100644
--- a/erts/emulator/beam/sys.h
+++ b/erts/emulator/beam/sys.h
@@ -279,18 +279,21 @@ typedef unsigned long UWord;
typedef long SWord;
#define SWORD_CONSTANT(Const) Const##L
#define UWORD_CONSTANT(Const) Const##UL
+#define ERTS_UWORD_MAX ULONG_MAX
#define ERTS_SWORD_MAX LONG_MAX
#elif SIZEOF_VOID_P == SIZEOF_INT
typedef unsigned int UWord;
typedef int SWord;
#define SWORD_CONSTANT(Const) Const
#define UWORD_CONSTANT(Const) Const##U
+#define ERTS_UWORD_MAX UINT_MAX
#define ERTS_SWORD_MAX INT_MAX
#elif SIZEOF_VOID_P == SIZEOF_LONG_LONG
typedef unsigned long long UWord;
typedef long long SWord;
#define SWORD_CONSTANT(Const) Const##LL
#define UWORD_CONSTANT(Const) Const##ULL
+#define ERTS_UWORD_MAX ULLONG_MAX
#define ERTS_SWORD_MAX LLONG_MAX
#else
#error Found no appropriate type to use for 'Eterm', 'Uint' and 'Sint'
@@ -304,6 +307,7 @@ typedef unsigned long Uint;
typedef long Sint;
#define SWORD_CONSTANT(Const) Const##L
#define UWORD_CONSTANT(Const) Const##UL
+#define ERTS_UWORD_MAX ULONG_MAX
#define ERTS_SWORD_MAX LONG_MAX
#define ERTS_SIZEOF_ETERM SIZEOF_LONG
#define ErtsStrToSint strtol
@@ -313,6 +317,7 @@ typedef unsigned int Uint;
typedef int Sint;
#define SWORD_CONSTANT(Const) Const
#define UWORD_CONSTANT(Const) Const##U
+#define ERTS_UWORD_MAX UINT_MAX
#define ERTS_SWORD_MAX INT_MAX
#define ERTS_SIZEOF_ETERM SIZEOF_INT
#define ErtsStrToSint strtol
@@ -322,6 +327,7 @@ typedef unsigned long long Uint;
typedef long long Sint;
#define SWORD_CONSTANT(Const) Const##LL
#define UWORD_CONSTANT(Const) Const##ULL
+#define ERTS_UWORD_MAX ULLONG_MAX
#define ERTS_SWORD_MAX LLONG_MAX
#define ERTS_SIZEOF_ETERM SIZEOF_LONG_LONG
#if defined(__WIN32__)
@@ -661,8 +667,7 @@ typedef struct {
#define ERTS_SYS_DDLL_ERROR_INIT {NULL}
extern void erts_sys_ddll_free_error(ErtsSysDdllError*);
extern void erl_sys_ddll_init(void); /* to initialize mutexes etc */
-extern int erts_sys_ddll_open2(const char *path, void **handle, ErtsSysDdllError*);
-#define erts_sys_ddll_open(P,H) erts_sys_ddll_open2(P,H,NULL)
+extern int erts_sys_ddll_open(const char *path, void **handle, ErtsSysDdllError*);
extern int erts_sys_ddll_open_noext(char *path, void **handle, ErtsSysDdllError*);
extern int erts_sys_ddll_load_driver_init(void *handle, void **function);
extern int erts_sys_ddll_load_nif_init(void *handle, void **function,ErtsSysDdllError*);
diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c
index 978a766de9..80937dfcc8 100644
--- a/erts/emulator/drivers/common/inet_drv.c
+++ b/erts/emulator/drivers/common/inet_drv.c
@@ -1490,8 +1490,8 @@ static int load_ip_and_port
unsigned int alen = len;
char abuf [len];
int res = inet_get_address(abuf, (inet_address*) addr, &alen);
- ASSERT(res==0);
- res = 0;
+ ASSERT(res==0); (void)res;
+
/* Now "abuf" contains: Family(1b), Port(2b), IP(4|16b) */
/* NB: the following functions are safe to use, as they create tuples
diff --git a/erts/emulator/internal_doc/CarrierMigration.md b/erts/emulator/internal_doc/CarrierMigration.md
new file mode 100644
index 0000000000..b93c11c6ec
--- /dev/null
+++ b/erts/emulator/internal_doc/CarrierMigration.md
@@ -0,0 +1,201 @@
+Carrier Migration
+=================
+
+The ERTS memory allocators manage memory blocks in two types of raw
+memory chunks. We call these chunks of raw memory
+*carriers*. Singleblock carriers which only contain one large block,
+and multiblock carriers which contain multiple blocks. A carrier is
+typically created using `mmap()` on unix systems. However, how a
+carrier is created is of minor importance. An allocator instance
+typically manages a mixture of single- and multiblock carriers.
+
+Problem
+-------
+
+When a carrier is empty, i.e. contains only one large free block, it
+is deallocated. Since multiblock carriers can contain both allocated
+blocks and free blocks at the same time, an allocator instance might
+be stuck with a large amount of poorly utilized carriers if the memory
+load decrease. After a peak in memory usage it is expected that not
+all memory can be returned since the blocks still allocated is likely
+to be dispersed over multiple carriers. Such poorly utilized carriers
+can usually be reused if the memory load increase again. However,
+since each scheduler thread manages its own set of allocator
+instances, and memory load is not necessarily connected to CPU load we
+might get into a situation where there are lots of poorly utilized
+multiblock carriers on some allocator instances while we need to
+allocate new multiblock carriers on other allocator instances. In
+scenarios like this, the demand for multiblock carriers in the system
+might increase at the same time as the actual memory demand in the
+system has decreased which is both unwanted and quite unexpected for
+the end user.
+
+Solution
+--------
+
+In order to prevent scenarios like this we've implemented support for
+migration of multiblock carriers between allocator instances of the
+same type.
+
+### Management of Free Blocks ###
+
+In order to be able to remove a carrier from one allocator instance
+and add it to another we need to be able to move references to the
+free blocks of the carrier between the allocator instances. The
+allocator instance specific data structure referring to the free
+blocks it manages often refers to the same carrier from multiple
+places. For example, when the address order bestfit strategy is used
+this data structure is a binary search tree spanning all carriers that
+the allocator instance manages. Free blocks in one specific carrier
+can be referred to from potentially every other carrier that is
+managed, and the amount of such references can be huge. That is, the
+work of removing the free blocks of such a carrier from the search
+tree will be huge. One way of solving this could be to not migrate
+carriers that contain lots of free blocks, but this would prevent us
+from migrating carriers that potentially needs to be migrated in order
+to solve the problem we set out to solve.
+
+By using one data structure of free blocks in each carrier and an
+allocator instance wide data structure of carriers managed by the
+allocator instance, the work needed in order to remove and add
+carriers can be kept to a minimum. When migration of carriers is
+enabled on a specific allocator type, we require that an allocation
+strategy with such an implementation is used. Currently we've
+implemented this for three different allocation strategies. All of
+these strategies use a search tree of carriers sorted so that we can
+find the carrier with the lowest address that can satisfy the
+request. Internally in carriers we use yet another search tree that
+either implement address order first fit, address order best fit,
+or best fit. The abbreviations used for these different allocation
+strategies are `aoff`, and `aoffcaobf`, `aoffcbf`.
+
+### Carrier Pool ###
+
+In order to migrate carriers between allocator instances we move them
+through a pool of carriers. In order for a carrier migration to
+complete, one scheduler needs to move the carrier into the pool, and
+another scheduler needs to take the carrier out of the pool.
+
+The pool is implemented as a lock free, circular, double linked,
+list. The list contains a sentinel which is used as the starting point
+when inserting to, or fetching from the pool. Carriers in the pool are
+elements in this list.
+
+The list can be modified by all scheduler threads
+simultaneously. During modifications the double linked list is allowed
+to get a bit "out of shape". For example, following the `next` pointer
+to the next element and then following the `prev` pointer does not
+always take you back to were you started. The following is however
+always true:
+
+* Repeatedly following `next` pointers will eventually take you to the
+ sentinel.
+* Repeatedly following `prev` pointers will eventually take you to the
+ sentinel.
+* Following a `next` or a `prev` pointer will take you to either an
+ element in the pool, or an element that used to be in the pool.
+
+When inserting a new element we search for a place to insert the
+element by only following `next` pointers, and we always begin by
+skipping the first element encountered. When trying to fetch an
+element we do the same thing, but instead only follow `prev` pointers.
+
+By going different directions when inserting and fetching, we avoid
+contention between threads inserting and threads fetching as much as
+possible. By skipping one element when we begin searching, we preserve
+the sentinel unmodified as much as possible. This is beneficial since
+all search operations need to read the content of the sentinel. If we
+were to modify the sentinel, the cache line containing the sentinel
+would unnecessarily be bounced between processors.
+
+The `prev`, and `next` fields in the elements of the list contains the
+value of the pointer, a modification marker, and a deleted
+marker. Memory operations on these fields are done using atomic memory
+operations. When a thread has set the modification marker in a field,
+no-one except the thread that set the marker is allowed to modify the
+field. If multiple modification markers needs to be set, we always
+begin with `next` fields followed by `prev` fields in the order
+following the actual pointers. This guarantees that no deadlocks will
+occur.
+
+When a carrier is being removed from a pool, we mark it with a thread
+progress value that needs to be reached before we are allowed to
+modify the `next`, and `prev` fields. That is, until we reach this
+thread progress we are not allowed to insert the carrier into the pool
+again, and we are not allowed to deallocate the carrier. This ensures
+that threads inspecting the pool always will be able to traverse the
+pool and reach valid elements. Once we have reached the thread
+progress value that the carrier was tagged with, we know that no
+threads may have references to it via the pool.
+
+### Migration ###
+
+There exist one pool for each allocator type enabling migration of
+carriers between scheduler specific allocator instances of the same
+allocator type.
+
+Each allocator instance keeps track of the current utilization of its
+multiblock carriers. When the utilization falls below the "abandon
+carrier utilization limit" it starts to inspect the utilization of the
+current carrier when deallocations are made. If also the utilization
+of the carrier falls below the "abandon carrier utilization limit" it
+unlinks the carrier from its data structure of available free blocks
+and inserts the carrier into the pool.
+
+Since the carrier has been unlinked from the data structure of
+available free blocks, no more allocations will be made in the
+carrier. The allocator instance putting the carrier into the pool,
+however, still has the responsibility of performing deallocations in
+it while it remains in the pool.
+
+Each carrier has a flag field containing information about allocator
+instance owning the carrier, a flag indicating if the carrier is in
+the pool or not, and a flag indicating if it is busy or not. When the
+carrier is in the pool, the owning allocator instance needs to mark it
+as busy while operating on it. If another thread inspects it in order
+to try to fetch it from the pool, it will abort the fetch if it is
+busy. When fetching the carrier from the pool, ownership will changed
+and further deallocations in the carrier will be redirected to the new
+owner using the delayed dealloc functionality.
+
+If a carrier in the pool becomes empty, it will be withdrawn from the
+pool. All carriers that become empty are also always passed to its
+originating allocator instance for deallocation using the delayed
+dealloc functionality. Since carriers this way always will be
+deallocated by the allocator instance that allocated the carrier the
+underlying functionality of allocating and deallocating carriers can
+remain simple and doesn't have to bother about multiple threads. In a
+NUMA system we will also not mix carriers originating from multiple
+NUMA nodes.
+
+When an allocator instance needs more carrier space, it always begins
+by inspecting its own carriers that are waiting for thread progress
+before they can be deallocated. If no such carrier could be found, it
+then inspects the pool. If no carrier could be fetched from the pool,
+it will allocate a new carrier. Regardless of where the allocator
+instance gets the carrier from it the just links in the carrier into
+its data structure of free blocks.
+
+### Result ###
+
+The use of this strategy of abandoning carriers with poor utilization
+and reusing these in allocator instances with an increased carrier
+demand is extremely effective and completely eliminates the problems
+that otherwise sometimes occurred when CPU load dropped while memory
+load did not.
+
+When using the `aoffcaobf` or `aoff` strategies compared to `gf` or
+`bf`, we loose some performance since we get more modifications in the
+data structure of free blocks. This performance penalty is however
+reduced using the `aoffcbf` strategy. A tradeoff between memory
+consumption and performance is however inevitable, and it is up to
+the user to decide what is most important.
+
+Further work
+------------
+
+It would be quite easy to extend this to allow migration of multiblock
+carriers between all allocator types. More or less the only obstacle
+is maintenance of the statistics information.
+
+
diff --git a/erts/emulator/internal_doc/CodeLoading.md b/erts/emulator/internal_doc/CodeLoading.md
new file mode 100644
index 0000000000..151b9cd57c
--- /dev/null
+++ b/erts/emulator/internal_doc/CodeLoading.md
@@ -0,0 +1,186 @@
+Non-Blocking Code Loading
+=========================
+
+Introduction
+------------
+
+Before OTP R16 when an Erlang code module was loaded, all other
+execution in the VM were halted while the load operation was carried
+out in single threaded mode. This might not be a big problem for
+initial loading of modules during VM boot, but it can be a severe
+problem for availability when upgrading modules or adding new code on
+a VM with running payload. This problem grows with the number of cores
+as both the time it takes to wait for all schedulers to stop increases
+as well as the potential amount of halted ongoing work.
+
+In OTP R16, modules are loaded without blocking the VM.
+Erlang processes may continue executing undisturbed in parallel during
+the entire load operation. The code loading is carried out by a normal
+Erlang process that is scheduled like all the others. The load
+operation is completed by making the loaded code visible to all
+processes in a consistent way with one single atomic
+instruction. Non-blocking code loading will improve real-time
+characteristics when modules are loaded/upgraded on a running SMP
+system.
+
+
+The Load Phases
+---------------
+
+The loading of a module is divided into two phases; a *prepare phase*
+and a *finishing phase*. The prepare phase contains reading the BEAM
+file format and all the preparations of the loaded code that can
+easily be done without interference with the running code. The
+finishing phase will make the loaded (and prepared) code accessible
+from the running code. Old module versions (replaced or deleted) will
+also be made inaccessible by the finishing phase.
+
+The prepare phase is designed to allow several "loader" processes to
+prepare separate modules in parallel while the finishing phase can
+only be done by one loader process at a time. A second loader process
+trying to enter finishing phase will be suspended until the first
+loader is done. This will only block the process, the scheduler is
+free to schedule other work while the second loader is waiting. (See
+`erts_try_seize_code_write_permission` and
+`erts_release_code_write_permission`).
+
+The ability to prepare several modules in parallel is not currently
+used as almost all code loading is serialized by the code_server
+process. The BIF interface is however prepared for this.
+
+ erlang:prepare_loading(Module, Code) -> LoaderState
+ erlang:finish_loading([LoaderState])
+
+The idea is that `prepare_loading` could be called in parallel for
+different modules and returns a "magic binary" containing the internal
+state of each prepared module. Function `finish_loading` could take a
+list of such states and do the finishing of all of them in one go.
+
+Currenlty we use the legacy BIF `erlang:load_module` which is now
+implemented in Erlang by calling the above two functions in
+sequence. Function `finish_loading` is limited to only accepts a list
+with one module state as we do not yet use the multi module loading
+feature.
+
+
+The Finishing Sequence
+----------------------
+
+During VM execution, code is accessed through a number of data
+structures. These *code access structures* are
+
+* Export table. One entry for every exported function.
+* Module table. One entry for each loaded module.
+* "beam_catches". Identifies jump destinations for catch instructions.
+* "beam_ranges". Map code address to function and line in source file.
+
+The most frequently used of these structures is the export table that
+is accessed in run time for every executed external function call to
+get the address of the callee. For performance reasons, we want to
+access all these structures without any overhead from thread
+synchronization. Earlier this was solved with an emergency break. Stop
+the entire VM to mutate these code access structures, otherwise treat
+them as read-only.
+
+The solution in R16 is instead to *replicate* the code access
+structures. We have one set of active structures read by the running
+code. When new code is loaded the active structures are copied, the
+copy is updated to include the newly loaded module and then a switch
+is made to make the updated copy the new active set. The active set is
+identified by a single global atomic variable
+`the_active_code_index`. The switch can thus be made by a single
+atomic write operation. The running code have to read this atomic
+variable when using the active access structures, which means one
+atomic read operation per external function call for example. The
+performance penalty from this extra atomic read is however very small
+as it can be done without any memory barriers at all (as described
+below). With this solution we also preserve the transactional feature
+of a load operation. Running code will never see the intermediate
+result of a half loaded module.
+
+The finishing phase is carried out in the following sequence by the
+BIF `erlang:finish_loading`:
+
+1. Seize exclusive code write permission (suspend process if needed
+ until we get it).
+
+2. Make a full copy of all the active access structures. This copy is
+ called the staging area and is identified by the global atomic
+ variable `the_staging_code_index`.
+
+3. Update all access structures in the staging area to include the
+ newly prepared module.
+
+4. Schedule a thread progress event. That is a time in the future when
+ all schedulers have yielded and executed a full memory barrier.
+
+5. Suspend the loader process.
+
+6. After thread progress, commit the staging area by assigning
+ `the_staging_code_index` to `the_active_code_index`.
+
+7. Release the code write permission allowing other processes to stage
+ new code.
+
+8. Resume the loader process allowing it to return from
+ `erlang:finish_loading`.
+
+
+### Thread Progress
+
+The waiting for thread progress in 4-6 is necessary in order for
+processes to read `the_active_code_index` atomic during normal
+execution without any expensive memory barriers. When we write a new
+value into `the_active_code_index` in step 6, we know that all
+schedulers will see an updated and consistent view of all the new
+active access structures once they become reachable through
+`the_active_code_index`.
+
+The total lack of memory barrier when reading `the_active_code_index`
+has one interesting consequence however. Different processes may see
+the new code at different point in time depending on when different
+cores happen to refresh their hardware caches. This may sound unsafe
+but it actually does not matter. The only property we must guarantee
+is that the ability to see the new code must spread with process
+communication. After receiving a message that was triggered by new
+code, the receiver must be guaranteed to also see the new code. This
+will be guaranteed as all types of process communication involves
+memory barriers in order for the receiver to be sure to read what the
+sender has written. This implicit memory barrier will then also make
+sure that the receiver reads the new value of `the_active_code_index`
+and thereby also sees the new code. This is true for all kinds of
+inter process communication (TCP, ETS, process name registering,
+tracing, drivers, NIFs, etc) not just Erlang messages.
+
+### Code Index Reuse
+
+To optimize the copy operation in step 2, code access structures are
+reused. In current solution we have three sets of code access
+structures, identified by a code index of 0, 1 and 2. These indexes
+are used in a round robin fashion. Instead of having to initialize a
+completely new copy of all access structures for every load operation
+we just have to update with the changes that have happened since the
+last two code load operations. We could get by with only two code
+indexes (0 and 1), but that would require yet another round of waiting
+for thread progress before step 2 in the `finish_loading` sequence. We
+cannot start reusing a code index as staging area until we know that
+no lingering scheduler thread is still using it as the active code
+index. With three generations of code indexes, the waiting for thread
+progress in step 4-6 will give this guarantee for us. Thread progress
+will wait for all running schedulers to reschedule at least one
+time. No ongoing execution reading code access structures reached from
+an old value of `the_active_code_index` can exist after a second round
+of thread progress.
+
+The design choice between two or three generations of code access
+structures is a trade-off between memory consumption and code loading
+latency.
+
+### A Consistent Code View
+
+Some native BIFs may need to get a consistent snapshot view of the
+active code. To do this it is important to only read
+`the_active_code_index` one time and then use that index value for all
+code accessing during the BIF. If a load operation is executed in
+parallel, reading `the_active_code_index` a second time might result
+in a different value, and thereby a different view of the code.
diff --git a/erts/emulator/internal_doc/DelayedDealloc.md b/erts/emulator/internal_doc/DelayedDealloc.md
new file mode 100644
index 0000000000..b7d87b839f
--- /dev/null
+++ b/erts/emulator/internal_doc/DelayedDealloc.md
@@ -0,0 +1,175 @@
+Delayed Dealloc
+===============
+
+Problem
+-------
+
+An easy way to handle memory allocation in a multi-threaded
+environment is to protect the memory allocator with a global lock
+which threads performing memory allocations or deallocations have to
+have locked during the whole operation. This solution of course scales
+very poorly, due to heavy lock contention. An improved solution of
+this scheme is to use multiple thread specific instances of such an
+allocator. That is, each thread allocates in its own allocator
+instance which is protected by a lock. In the general case references
+to memory need to be passed between threads. In the case where a
+thread that needs to deallocate memory that originates from another
+threads allocator instance a lock conflict is possible. In a system as
+the Erlang VM where memory allocation/deallocation is frequent and
+references to memory also are passed around between threads this
+solution will also scale poorly due to lock contention.
+
+Functionality Used to Adress This problem
+-----------------------------------------
+
+In order to reduce contention due to locking of allocator instances we
+introduced completely lock free instances tied to each scheduler
+thread, and an extra locked instance for other threads. The scheduler
+threads in the system is expected to do the major part of the
+work. Other threads may still be needed but should not perform any
+major and/or time critical work. The limited amount of contention that
+appears on the locked allocator instance can more or less be
+disregarded.
+
+Since we still need to be able to pass references to memory between
+scheduler threads we need some way to manage this. An allocator
+instance belonging to one scheduler thread is only allowed to be
+manipulated by that scheduler thread. When other threads need to
+deallocate memory originating from a foreign allocator instance, they
+only pass the memory block to a "message box" containing deallocation
+jobs attached to the originating allocator instance. When a scheduler
+thread detects such deallocation job it performs the actual
+deallocation.
+
+The "message box" is implemented using a lock free single linked list
+through the memory blocks to deallocate. The order of the elements in
+this list is not important. Insertion of new free blocks will be made
+somewhere near the end of this list. Requirering that the new blocks
+need to be inserted at the end would cause unnecessary contention when
+large amount of memory blocks are inserted simultaneous by multiple
+threads.
+
+The data structure refering to this single linked list cover two cache
+lines. One cache line containing information about the head of the
+list, and one cache line containing information about the tail of the
+list. This in order to reduce cache line ping ponging of this data
+structure. The head of the list will only be manipulated by the thread
+owning the allocator instance, and the tail will be manipulated by
+other threads inserting deallocation jobs.
+
+### Tail ###
+
+In the tail part of the data structure we find a pointer to the last
+element of the list, or at least something that is near the end of the
+list. In the uncontended case it will point to the end of the list,
+but when simultaneous insert operations are performed it will point to
+something near the end of the list.
+
+When insterting an element one will try to write a pointer to the new
+element in the next pointer of the element pointed to by the last
+pointer. This is done using an atomic compare and swap that expects
+the next pointer to be `NULL`. If this succeds the thread performing
+this operation moves the last pointer to point to the newly inserted
+element.
+
+If the atomic compare and swap described above failed, the last
+pointer didn't point to the last element. In this case we need to
+insert the new element somewhere inbetween the element that the last
+pointer pointed to and the actual last element. If we do it this way
+the last pointer will eventually end up at the last element when
+threads stop adding new elements. When trying to insert somewhere near
+the end and failing to do so, the inserting thread sometimes moves to
+the next element and somtimes tries with the same element again. This
+in order to spread the inserted elements during heavy contention. That
+is, we try to spread the modifications of memory to different
+locations instead of letting all threads continue to try to modify the
+same location in memory.
+
+### Head ###
+
+The head contains pointers to begining of the list (`head.first`), and
+to the first block which other threads may refer to
+(`head.unref_end`). Blocks between these pointers are only refered to
+by the head part of the data structure which is only used by the
+thread owning the allocator instance. When these two pointers are not
+equal the thread owning the allocator instance deallocate block after
+block until `head.first` reach `head.unref_end`.
+
+We of course periodically need to move the `head.unref_end` closer to
+the end in order to be able to continue deallocating memory
+blocks. Since all threads inserting new elements in the linked list
+will enter the list using the last pointer we can use this
+knowledge. If we call `erts_thr_progress_later()` and wait until we
+have reached that thread progress we know that no managed threads can
+refer the elements up to the element pointed to by the last pointer at
+the time when we called `erts_thr_progress_later()`. This since, all
+managed threads must have left the code implementing this at least
+once, and they always enters into the list via the last pointer. The
+`tail.next` field contains information about next `head.unref_end`
+pointer and thread progress that needs to be reached before we can
+move `head.unref_end`.
+
+Unfortunately not only threads managed by the thread progress
+functionality may insert memory blocks. Other threads also needs to be
+taken care of. Other threads will not be as frequent users of this
+functionality as managed threads, so using a less efficient scheme for
+them is not that big of a problem. In order to handle unmanaged
+threads we use two reference counters. When an unmanaged thread enters
+this implementation it increments the reference counter currently
+used, and when it leaves this implementation it decrements the same
+reference counter. When the consumer thread calls
+`erts_thr_progress_later()` in order to determine when it is safe to
+move `head.unref_end`, it also swaps reference counters for unmanaged
+threads. The previous current represents outstanding references from
+the time up to this point. The new current represents future reference
+following this point. When the consumer thread detects that we have
+both reached the desired thread progress and when the previous current
+reference counter reach zero it is safe to move the `head.unref_end`.
+
+The reason for using two reference counters is that we need to know
+that the reference counter eventually will reach zero. If we only used
+one reference counter it would potentially be held above zero for ever
+by different unmanaged threads.
+
+### Empty List ###
+
+If no new memory blocks are inserted into the list, it should
+eventually be emptied. All pointers to the list however expect to
+always point to something. This is solved by inserting an empty
+"marker" element, which only has to purpose of being there in the
+absense of other elements. That is when the list is empty it only
+contains this "marker" element.
+
+### Contention ###
+
+When elements are continously inserted by threads not owning the
+allocator instance, the thread owning the allocator instance will be
+able to work more or less undisturbed by other threads at the head end
+of the list. At the tail end large amounts of simultaneous inserts may
+cause contention, but we reduce such contention by spreading inserts
+of new elements near the end instead of requiring all new elements to
+be inserted at the end.
+
+### Schedulers and The Locked Allocator Instance ###
+
+Also the locked allocator instance for use by non-scheduler threads
+have a message box for deallocation jobs just as all the other
+allocator instances. The reason for this is that other threads may
+allocate memory pass it to a scheduler that then needs to deallocate
+it. We do not want the scheduler to have to wait for the lock on this
+locked instance. Since also locked instances has message boxes for
+deallocation jobs, the scheduler can just insert the job and avoid the
+locking.
+
+
+### A Benchmark Result ###
+
+When running the ehb benchmark, large amount of messages are passed
+around between schedulers. All message passing will in some way or the
+other cause memory allocation and deallocation. Since messages are
+passed between different schedulers we will get contention on the
+allocator instances where messages were allocated. By the introduction
+of the delayed dealloc feature, we got a speedup of between 25-45%,
+depending on configuration of the benchmark, when running on a
+relatively new machine with an Intel i7 quad core processor with
+hyper-threading using 8 schedulers. \ No newline at end of file
diff --git a/erts/emulator/internal_doc/PTables.md b/erts/emulator/internal_doc/PTables.md
new file mode 100644
index 0000000000..6fe0e7665d
--- /dev/null
+++ b/erts/emulator/internal_doc/PTables.md
@@ -0,0 +1,356 @@
+Process and Port Tables
+=======================
+
+Problems
+--------
+
+The process table is a mapping from process identifiers to process
+structure pointers. The process structure contains miscellaneous
+information about a process, as for example pointers to its heap,
+message queue, etc. When the runtime system needs to operate on a
+process, it looks up the process structure in the process table using
+the process identifier. An example of this is when passing a message
+to a process.
+
+The process table has for a very long time just been an array of
+pointers to process structures. Since process identifiers internally
+in the runtime system are 28-bit integers it is quite easy to map a
+process identifier to index into the array. The 28-bits were divided
+into two sets. The least significant set of bits was used as index
+into the array. The most significant set of bits was only used to be
+able to distinguish between a number of identifiers with which map to
+the same index in the array. As long as process table sizes of a power
+of two was used we had 2^28 unique process identifiers.
+
+When the first SMP support was implemented, the table still was kept
+more or less the same way, but protected by two types of locks. One
+lock that protected the whole table against modifications and an array
+of locks protecting different parts of the table. The exact locking
+strategy previously used isn't interesting. What is interesting is
+that it suffered from heavy lock contention especially when lots of
+modifications was being made, but also when only performing lookups.
+
+In order to be able to detect when it is safe to deallocate a
+previously used process structure, reference counting of the structure
+was used. Also this was problematic, since simultaneous lookups needed
+to modify the reference counter which also caused contention on the
+cache line where the reference counter was located. This since all
+modifications needs to be communicated between all involved
+processors.
+
+The port table is very similar to the process table. The major
+difference, at least in concept, is that it is a mapping from port
+identifiers to port structures. It had a similar implementation, but
+with some differences. Instead of being an array of pointers it was an
+array of structures, and instead of being protected by two types of
+locks it was only protected by one global lock. This table also
+suffered from lock contention in various situations.
+
+Solution
+--------
+
+The process table was the major problem to address since processes are
+much more frequently used than ports. The first implementation only
+implemented this for processes, but since the port table is very
+similar and very similar problems occur on the port table, the process
+table implementation was later generalized so that it could also be
+used implementing the port table. For simplicity I will only talk
+about the process table in the following text, but the same will apply
+to the port table unless otherwise stated.
+
+If we disregard the locking issues, the original solution is very
+appealing. The mapping from process identifier to index into the array
+is very fast, and this property is something we would like to
+keep. The vast majority of operations on these tables are lookups so
+optimizing for lookups is what we want to do.
+
+### Lookup ###
+
+Using a set of bits in the process identifier as index into an array
+seems hard to beat. By replacing the array of pointers with an array
+of our pointer sized atomic data type, a lookup will consist of the
+following:
+
+1. Mapping the 28-bit integer to an index into the array.
+
+ More about this mapping later.
+
+2. Read the pointer using an atomic memory operation at determined
+ index in array.
+
+ On all platforms that we provide atomic memory operations, this is
+ just a `volatile` read, preventing the compiler to use values in
+ registers, forcing the a read from memory.
+
+3. Depending on use, issue appropriate memory barrier.
+
+ A common barrier used is a barrier with acquire semantics. On
+ x86/x86_64 this maps to a compiler barrier preventing the compiler
+ to reorder instructions, but on other hardware often some kind of
+ light weight hardware memory barrier is also needed.
+
+ When comparing with a locked approach, at least one heavy weight
+ memory barrier will be issued when locking the lock on most, if
+ not all, hardware architectures (including x86/x86_64), and often
+ some kind of light weight memory barrier will be issued when
+ unlocking the lock.
+
+When looking at this very simple solution with very little overhead
+you might wonder why we didn't implement it this way from the
+beginning. It all boils down to the read operation of the pointer. We
+need some way to know that it is safe to access the memory pointed
+to. One way of doing this is to place a reference counter in the
+process structure. Increment of the reference counter at lookup needs
+to be done atomically with the lookup. A lock can typically provide
+this service for us, which was the approach we previously
+used. Another approach could be to co-locate the reference counter
+with the pointer in the table. The major problem with this approach is
+the modifications of the reference counter. This since these
+modification would have to be communicated between all involved
+processor cause contention on the cache line containing the reference
+counter. The new lookup approach above is possible since we can use
+the "thread progress" functionality in order to determine when it is
+safe to deallocate the process structure. We'll get back to this when
+describing deletion in the table.
+
+Using this new lookup approach we wont modify any memory at all which
+is important. A lookup conceptually only read memory, now this is true
+in the implementation also which is important from a scalability
+perspective. The previous implementation modified the cache line
+containing the reference counter two times, and the cache line
+containing the corresponding lock two times at each lookup.
+
+### Modifications of the Table ###
+
+A lightweight lookup in the table was the most important feature, but
+we also wanted to improve modifications of the table. The process
+table is modified when a new process is spawned, i.e. a new pointer is
+inserted into the table, and when a process terminates, i.e. a pointer
+is deleted in the table.
+
+Assuming that we spawn fewer processes than the maximum amount of
+unique process identifiers in the system, one has always been able to
+determine the order of process creation just by comparing process
+identifiers. If PidX is larger than PidY, then PidX was created after
+PidY assuming both identifiers originates from the same node. However,
+since we have a quite limited amount of unique identifiers today
+(2^28), this property cannot be relied upon if we create large amount
+of processes. But never the less, this is a property the system always
+have had.
+
+If we would have had a huge amount of unique identifiers available, it
+would have tempting to drop or modify this ordering property as
+described above. The ordering property could for example be based on
+the scheduler performing the spawn operation. It would have been
+possible to reserve large ranges of identifiers exclusive for each
+scheduler thread which could be used minimizing the need for
+communication when allocating identifiers. The amount of identifiers
+we got to work with today is, however, not even close to be enough for
+such an approach.
+
+Since we have a limited amount of unique identifiers, we need to be
+careful not to waste them. If previously used identifiers are reused
+too quick, identifiers originating from terminated processes will
+refer to newly created processes, and mixups will occur. The
+previously used approach was quite good at not wasting
+identifiers. Using a modified version of the same approach also lets
+us keep the ordering property that we have always had.
+
+#### Insert ####
+
+The original approach is more or less to search for next free index or
+slot in the array. The search starts from the last slot allocated. If
+we reach the end of the array we increase a "wrapped counter" and then
+continue the search. The process identifier is constructed by writing
+the index to the least significant set of bits, and the "wrapped
+counter" to the most significant set of bits. The amount of bits in
+each set of bits is decided at boot time, so that maximum index will
+just fit into the least significant set of bits.
+
+In the modified lock free version of this approach we more or less do
+it the same way, but with some important modifications trying to avoid
+unnecessary contention when multiple schedulers create processes
+simultaneously. Since multiple threads might be trying to search for
+the next free slot at the same time from the same starting point we
+want subsequent slots to be located in different cache lines. Multiple
+schedulers simultaneously writing new pointers into the table are
+therefore very likely to write into adjacent slots. If adjacent slots
+are located in the same cache line all modification of this cache line
+needs to be communicated between all involved processors which will be
+very expensive and scale very poor. By locating adjacent slots in
+different cache lines only true conflicts will trigger communication
+between involved processors, i.e., avoiding false sharing.
+
+A cache line is larger than a pointer, typically 8 or 16 times larger,
+so using one cache line for each slot only containing one pointer
+would be a waste of space. Each cache line will be able to hold a
+fixed amount of slots. The first slot of the table will be the first
+slot of the first cache line, the second slot of the table will be the
+first slot of the second cache line until we reach the end of the
+array. The next slot after that will be the second slot of the first
+cache line, etc, moving forward one cache line internal slot each time
+we wrap. This way we will be able to fit the same amount of pointers
+into an array of the same size while always keeping adjacent slots in
+different cache lines.
+
+The mapping from identifier to slot or index into the array gets a bit
+more complicated than before. Instead of a `shift` and a bitwise
+`and`, we get two `shift`s, two bitwise `and`s, and an `add` (see
+implementation of `erts_ptab_data2pix()` in `erl_ptab.h`). However, by
+storing this information optimized for lookup we only need a `shift`
+and a bitwise `and` on 32-bit platforms. On 64-bit platforms we got
+enough room for the 28-bit identifier in the least significant
+halfword, and the index in the most significant halfword, in other
+words, we just need to read the most significant halfword to get the
+index. That is, this operation is as fast, or faster than before. The
+downside is that on 32-bit platforms we need to convert this
+information into the 28-bit identifier number when printing, or when
+ordering identifiers from the same node. These operations are,
+however, extremely infrequent compared to lookups.
+
+When we insert a new element in the table we do the following:
+
+1. We begin by reserving space in the table by atomically
+ incrementing a counter of processes in the table. If our increment
+ brings the counter above the maximum size of the table, the
+ operation fail and a `system_limit` exception is raised.
+
+2. The table contains a 64-bit atomic variable of the last identifier
+ used. Only the least significant bits will be used when actually
+ creating the identifier. This identifier is where the search
+ begin.
+
+3. We increment last identifier value used. In order determine the
+ slot that corresponds to this identifier we call
+ `erts_ptab_data2pix()` that maps identifier to slot. We read the
+ content of the slot. If the slot is free we try to write a
+ reservation marker using an atomic compare and swap. If this fails
+ we repeat this step until it succeeds.
+
+4. Change the table variable of last identifier used. Since multiple
+ writes might occur at the same time this value may already have
+ been changed by to an identifier larger that the one we got. In
+ this case we can continue; otherwise, we need to change it to the
+ identifier we got.
+
+5. We now do some initializations of the process structure that
+ cannot be done before we know the process identifier, and have to
+ be done before we publish the structure in the table. This, for
+ example, includes storing the identifier in the process structure.
+
+6. Now we can publish the structure in the table by writing the the
+ pointer to the process structure in the slot previously reserved
+ in 3.
+
+Using this approach we keep the properties like identifier ordering,
+and identifier reuse while improving performance and scalability. It
+has one flaw, though. There is no guarantee that the operation will
+terminate. This can quite easily be fixed though, and will be fixed in
+the next release. We will get back to this below.
+
+#### Delete ####
+
+When a process terminates, we mark the process as terminated in the
+process structure, the counter of number of processes in the table is
+decreased, and the reference to the process structure is removed by
+writing a `NULL` pointer into the corresponding slot. The scheduler
+thread performing this then schedule a thread progress later job which
+will do the final cleanup and deallocate the process structure. The
+thread progress functionality will make sure that this job will not
+execute until it is certain that all managed threads have dropped all
+references to the process structure.
+
+### BIF Iterating Over the Table ###
+
+The `erlang:processes/1` and `erlang:port/1` BIFs iterate over the
+tables and return corresponding identifiers. These BIF should return a
+consistent snapshot of the table content during some time when the BIF
+is executing. In order to implement this we use locking in a strange
+way. We use an "inverted rwlock".
+
+When performing lookups in the table we do not need to bother about
+the locking at all, but when modifying the table we read lock the
+rwlock protecting the table which allows for multiple writers during
+normal operation. When the BIF that iterates over the table need
+access to the table it write locks the rwlock and reads content of the
+table. The BIF do not read the whole table in one go but instead read
+small chunks at time only write locking while reading. The actual
+implementation of the BIFs is out of the scope of this document.
+
+An out of the box rwlock will typically suffer from contention on the
+single cache line containing the state of the rwlock even in the case
+we are only read locking. Instead of using such an rwlock, we have our
+own implementation of reader optimized rwlocks which keeps track of
+reader threads in separate thread specific cache lines. This in order
+to avoid contention on a singe cache line. As long as we only do read
+lock operations, threads only need to read a global cache line and
+modify its own cache line, and by this minimize communication between
+involved processors. The iterating BIFs are normally very infrequently
+used, so in the normal case we will only do read lock operations on
+the table global rwlock.
+
+### Future Improvements ###
+
+The first improvement is to fix the guarantee so that insert
+operations will be guaranteed to terminate. When the operation starts
+we verify that there actually exist a free slot that we can use. The
+problem is that we might not find it since it may move when multiple
+threads modify the table at the same time as we are trying to find the
+slot. The easy fix is to abort the operation if an empty slot could
+not be found in a finite number operation, and then restart the
+operation under a write lock. This will be implemented in next
+release, but furter work should be made trying to find a better
+solution.
+
+This and also previous implementation do not work well when the table
+is nearly full. We will both get long search times for free slots, and
+we will reuse identifiers more frequently since we more frequently
+wrap during the search. These tables works best when the table is much
+larger than the amount of simultaneous existing processes. One easy
+improvement is to always have room for more processes than we allow in
+the table. This will also be implemented in the next release, but this
+should probably also be worked more on trying to find an even better
+solution.
+
+It would also be nice to get rid of the rwlock all together. The use
+of a reader optimized rwlock makes sure we do not any contention on
+the lock, but unnecessary memory barriers will be issued due to the
+lock. The main issue here is to modify iterating BIFs so that they do
+not require exclusive access to the table while reading a sequence of
+slots. In principle this should be rather easy, the code can handle
+sequences of variable sizes, so shrinking the sequence size of slots
+to one would solv the problem. This will, however, need some tweeks
+and modifications of not trival code, but is something that should be
+looked at in the future.
+
+By increasing the size of identifiers, at least on 64-bit machines
+(which isn't as easy as it first might seem) we get further room for
+improvement. Besides the obvious improvement of not reusing
+identifiers as fast as we currently do, it makes it possible to
+further avoid contention when inserting elements in the table. At
+least if we drop this ordering property, which isn't that useful
+anyway.
+
+### Some Benchmark Results ###
+
+In order to test modifications of the process table we ran a couple of
+benchmarks where lots of processes are spawned and terminated
+simultaneously, and got a speedup of between 150-200%. Running a
+similar benchmark but with ports we got a speedup of about 130%.
+
+The BIF `erlang:is_process_alive/1` is the closest you can get to a
+process table lookup only. The BIF looks up the process corresponding
+to the process identifier passed as argument, and then checks if it is
+alive. By running multiple processes looping over this BIF checking
+the same process, we get a speedup between 20000-23000%. Conceptually
+this operation only involve read operations. In the implementation
+used in R16B also only read operation are performed, while the
+previous implementation need to lock structures in order to read the
+data, suffering from both lock contention and contention due to
+modifications of cache lines used by lock internal data structures and
+the reference counter on the process being looked up.
+
+The benchmarks were run on a relatively new machine with an Intel i7
+quad core processor with hyper-threading using 8 schedulers. On a
+machine with more communication overhead and/or larger amount of
+logical processors the speedups are expected to be even larger.
diff --git a/erts/emulator/internal_doc/PortSignals.md b/erts/emulator/internal_doc/PortSignals.md
new file mode 100644
index 0000000000..b1afb7c5cb
--- /dev/null
+++ b/erts/emulator/internal_doc/PortSignals.md
@@ -0,0 +1,267 @@
+Port Signals
+============
+
+Problems
+--------
+
+Erlang ports conceptually are very similar to Erlang processes. Erlang
+processes execute Erlang code in the virtual machine, while an Erlang
+port execute native code typically used for communication with the
+outside world. For example, when an Erlang process wants to
+communicate using TCP over the network, it communicates via an Erlang
+port implementing the TCP socket interface in native code. Both Erlang
+Processes and Ports communicate using asynchronous signaling. The
+native code executed by an Erlang port is a collection of callback
+functions, called a driver. Each callback more or less implements the
+code of a signal to, or from the port.
+
+Even though processes and ports conceptually always have been very
+similar, the implementations have been very different. Originally,
+more or less all port signals were handled synchronously at the time
+they occurred. Very early in the development of the SMP support for
+the runtime system we recognized that this was a huge problem for
+signals between ports and the outside world. That is, I/O events to
+and from the outside world, or I/O signals. This was one of the first
+things that had to be rewritten in order to be able to do I/O in
+parallel at all. The solution was to implement scheduling of these
+signals. I/O signals corresponding to different ports could then be
+executed in parallel on different scheduler threads. Signals from
+processes to ports was not as big of a problem as the I/O signals, and
+the implementation of those was left as they were.
+
+Each port is protected by its own lock to protect against simultaneous
+execution in multiple threads. Previously when a process, executing on
+a scheduler thread, sent a port a signal, it locked the port lock and
+synchronously executed the code corresponding to the signal. If the
+lock was busy, the scheduler thread blocked waiting until it could
+lock the lock. If multiple processes executing simultaneously on
+different scheduler threads, sent signals to the same port, schedulers
+suffered from heavy lock contention. Such contention could also occur
+between I/O signals for the port executing on one scheduler thread,
+and a signal from a process to the port executing on another scheduler
+thread. Beside the contention issues, we also loose potential work to
+execute in parallel on different scheduler threads. This since the
+process sending the *asynchronous* signal is blocked while the code
+implementing the signal is executed synchronously.
+
+Solution
+--------
+
+In order to prevent multiple schedulers from trying to execute signals
+to/from the same port simultaneously, we need to be able to ensure
+that all signals to/from a port are executed in sequence on one
+scheduler. More or less, the only way to do this is to schedule all
+types of signals. Signals corresponding to a port can then be executed
+in sequence by one single scheduler thread. If only one thread tries
+to execute the port, no contention will appear on the port
+lock. Besides getting rid of the contention, processes sending signals
+to the port can also continue execution of their own Erlang code on
+other schedulers at the same time as the signaling code is executing
+on another scheduler.
+
+When implementing this there are a couple of important properties that
+we either need, or want to preserve:
+
+* Signal ordering guarantee. Signals from process `X` to port `Y`,
+ *must* be delivered to `Y` in the same order as sent from `X`.
+
+* Signal latency. Due to the previous synchronous implementation,
+ latency of signals sent from processes to ports have usually been
+ very low. During contention the latency has of course
+ increased. Users expect latency of these signals to be low, a
+ sudden increase in latency would not be appreciated by our users.
+
+* Compatible flow control. Ports have for a very long time had the
+ possibility to use the busy port functionality when implementing
+ flow control. One may argue that this functionality fits very bad
+ with the conceptually completely asynchronous signaling, but the
+ functionality has been there for ages and is expected to be
+ there. When a port sets itself into a busy state, `command`
+ signals should not be delivered, and senders of such signals
+ should suspend until the port sets itself in a not busy state.
+
+### Scheduling of Port Signals ###
+
+A run queue has four queues for processes of different priority and
+one queue for ports. The scheduler thread associated with the run
+queue switch evenly between execution of processes and execution of
+ports while both processes and ports exist in the queue. This is not
+completely true, but not important for this discussion. A port that is
+in a run queue also has a queue of tasks to execute. Each task
+corresponds to an in- or outgoing signal. When the port is selected
+for execution each task will be executed in sequence. The run queue
+locks not only protected the queues of ports, but also the queues of
+port tasks.
+
+Since we go from a state where I/O signals are the only port related
+signals scheduled, to a state where potentially all port related
+signals may be scheduled we may drastically increase the load on the
+run queue lock. The amount of scheduled port tasks very much depend on
+the Erlang application executing, which we do not control, and we do
+not want to get increased contention on the run queue locks. We
+therefore need another approach of protecting the port task queue.
+
+#### Task Queue ####
+
+We chose a "semi locked" approach, with one public locked task queue,
+and a private, lock free, queue like, task data structure. This "semi
+locked" approach is similar to how the message boxes of processes are
+managed. The lock is port specific and only used for protection of
+port tasks, so the run queue lock is now needed in more or less the
+same way for ports as for processes. This ensures that we wont see an
+increased lock contention on run queue locks due to this rewrite of
+the port functionality.
+
+When an executing port runs out of work to execute in the private task
+data structure, it moves the public task queue into the private task
+data structure while holding the lock. Once tasks has been moved to
+the private data structure no lock protects them. This way the port
+can continue working on tasks in the private data structure without
+having to fight for the lock.
+
+I/O signals may however be aborted. This could be solved by letting
+the port specific scheduling lock also protect the private task data
+structure, but then the port very frequently would have to fight with
+others enqueueing new tasks. In order to handle this while keeping the
+private task data structure lock free, we use a similar "non
+aggressive" approach as we use when handling processes that gets
+suspended while in the run queue. Instead of removing the aborted port
+task, we just mark it as aborted using an atomic memory
+operation. When a task is selected for execution, we first verify that
+it has not been aborted. If aborted we, just drop the task.
+
+A task that can be aborted is referred via another data structure from
+other parts of the system, so that a thread that needs to abort the
+task can reach it. In order to be sure to safely deallocate a task
+that is no longer used, we first clear this reference and then use the
+thread progress functionality in order to make sure no references can
+exist to the task. Unfortunately, also unmanaged threads might abort
+tasks. This is very infrequent, but might occur. This could be handled
+locally for each port, but would require extra information in each
+port structure which very infrequently would be used. Instead of
+implementing this in each port, we implemented general functionality
+that can be used from unmanaged threads to delay thread progress.
+
+The private "queue like" task data structure could have been an
+ordinary queue if it wasn't for the busy port functionality. When the
+port has flagged itself as busy, `command` signals are not allowed to
+be delivered and need to be blocked. Other signals sent from the same
+sender following a `command` signal that has been blocked also have to
+be blocked; otherwise, we would violate the ordering guarantee. At the
+same time, other signals that have no dependencies to blocked
+`command` signals are expected to be delivered.
+
+The above requirements makes the private task data structure a rather
+complex data structure. It has a queue of unprocessed tasks, and a
+busy queue. The busy queue contains blocked tasks corresponding to
+`command` signals, and tasks with dependencies to such tasks. The busy
+queue is accompanied by a table over blocked tasks based on sender
+with a references into last task in the busy queue from a specific
+sender. This since we need check for dependencies when new tasks are
+processed in the queue of unprocessed tasks. When a new task is
+processed that needs to be blocked it isn't enqueued at the end of the
+busy queue, but instead directly after the last task with the same
+sender. This in order to easily be able to detect when we have tasks
+that no longer have any dependencies to tasks corresponding to
+`command` signals which should be moved out of the busy queue. When
+the port executes, it switches between processing tasks from the busy
+queue, and processing directly from the unprocessed queue based on its
+busy state. When processing directly from the unprocessed queue it
+might, of course, have to move a task into the busy queue instead of
+executing it.
+
+#### Busy Port Queue ####
+
+Since it is the port itself which decides when it is time to enter a
+busy state, it needs to be executing in order to enter the busy
+state. As a result of `command` signals being scheduled, we may get
+into a situation where the port gets flooded by a huge amount of
+`command` signals before it even gets a chance to set itself into a
+busy state. This since it has not been scheduled for execution
+yet. That is, under these circumstances the busy port functionality
+loose the flow control properties it was intended to provide.
+
+In order to solve this, we introduced a new busy feature, namely "busy
+port queue". The port has a limit of `command` data that is allowed to
+be enqueued in the task queue. When this limit is reached, the port
+will automatically enter a busy port queue state. When in this state,
+senders of `command` signals will be suspended, but `command` signals
+will still be delivered to the port unless it is also in a busy port
+state. This limit is known as the high limit.
+
+There is also a low limit. When the amount of queued `command` data
+falls below this limit and the port is in a busy port queue state, the
+busy port queue state is automatically disabled. The low limit should
+typically be significantly lower than the high limit in order to
+prevent frequent oscillation around the busy port queue state.
+
+By introduction of this new busy state we still can provide the flow
+control. Old driver do not even have to be changed. The limits can,
+however, be configured and even disabled by the port. By default the
+high limit is 8 KB and the low limit is 4 KB.
+
+### Preparation of Signal Send ###
+
+Previously all operations sending signals to ports began by acquiring
+the port lock, then performed preparations for sending the signal, and
+then finaly sent the signal. The preparations typically included
+inspecting the state of the port, and preparing the data to pass along
+with the signal. The preparation of data is frequently quite time
+consuming, and did not really depend on the port. That is we would
+like to do this without having the port lock locked.
+
+In order to improve this, state information was re-organized in the
+port structer, so that we can access it using atomic memory
+operations. This together with the new port table implementation,
+enabled us to lookup the port and inspect the state before acquiring
+the port lock, which in turn made it possible to perform preparations
+of signal data before acquiring the port lock.
+
+### Preserving Low Latency ###
+
+If we disregard the contended cases, we will inevitably get a higher
+latency when scheduling signals for execution at a later time than by
+executing the signal immediately. In order to preserve the low latency
+we now first check if this is a contended case or not. If it is, we
+schedule the signal for later execution; otherwise, we execute the
+signal immediately. It is a contended case if other signals already
+are scheduled on the port, or if we fail to acquire the port
+lock. That is we will not block waiting for the lock.
+
+Doing it this way we will preserve the low latency at the expense of
+lost potential parallel execution of the signal and other code in the
+process sending the signal. This default behaviour can however be
+changed on port basis or system wide, forcing scheduling of all
+signals from processes to ports that are not part of a synchronous
+communication. That is, an unconditional request/response pair of
+asynchronous signals. In this case it is no potential for parallelism,
+and by that no point forcing scheduling of the request signal.
+
+The immediate execution of signals may also cause a scheduler that is
+about to execute scheduled tasks to block waiting for the port
+lock. This is however more or less the only scenario where a scheduler
+needs to wait for the port lock. The maximum time it has to wait is
+the time it takes to execute one signal, since we always schedule
+signals when contention occurs.
+
+### Signal Operations ###
+
+Besides implementing the functionality enabling the scheduling,
+preparation of signal data without port lock, etc, each operation
+sending signals to ports had to be quite extensively re-written. This
+in order to move all sub-operations that can be done without the lock
+to a place before we have acquired the lock, and also since signals
+now sometimes are executed immediately and sometimes scheduled for
+execution at a later time which put different requirements on the data
+to pass along with the signal.
+
+### Some Benchmark Results ###
+
+When running some simple benchmarks where contention only occur due to
+I/O signals contending with signals from one single process we got a
+speedup of 5-15%. When multiple processes send signals to one single
+port the improvements can be much larger, but the scenario with one
+process contending with I/O is the most common one.
+
+The benchmarks were run on a relatively new machine with an Intel i7
+quad core processor with hyper-threading using 8 schedulers. \ No newline at end of file
diff --git a/erts/emulator/internal_doc/ProcessManagementOptimizations.md b/erts/emulator/internal_doc/ProcessManagementOptimizations.md
new file mode 100644
index 0000000000..9e83633bef
--- /dev/null
+++ b/erts/emulator/internal_doc/ProcessManagementOptimizations.md
@@ -0,0 +1,172 @@
+Process Management Optimizations
+================================
+
+Problems
+--------
+
+Early versions of the SMP support for the runtime system completely
+relied on locking in order to protect data accesses from multiple
+threads. In some cases this isn't that problematic, but in some cases
+it really is. It complicates the code, ensuring all locks needed are
+actually held, and ensuring that all locks are acquired in such an
+order that no deadlock occur. Acquiring locks in the right order often
+also involve releasing locks held, forcing threads to reread data
+already read. A good recipe for creation of bugs. Trying to use more
+fine-grained locking in order to increase possible parallelism in the
+system makes the complexity situation even worse. Having to acquire a
+bunch of locks when doing operations also often cause heavy lock
+contention which cause poor scalability.
+
+Management of processes internally in the runtime system suffered from
+these problems. When changing state on a process, for example from
+`waiting` to `runnable`, a lock on the process needed to be
+locked. When inserting a process into a run queue also a lock
+protecting the run queue had to be locked. When migrating a process
+from one run queue to another run queue, locks on both run queues and
+on the process had to be locked.
+
+This last example is a quite common case in during normal
+operation. For example, when a scheduler thread runs out of work it
+tries to steal work from another scheduler threads run queue. When
+searching for a victim to steal from there was a lot of juggling of
+run queue locks involved, and during the actual theft finalized by
+having to lock both run queues and the process. When one scheduler
+runs out of work, often others also do, causing lots of lock
+contention.
+
+Solution
+--------
+
+### Process ###
+
+In order to avoid these situations we wanted to be able to do most of
+the fundamental operations on a process without having to acquire a
+lock on the process. Some examples of such fundamental operations are,
+moving a process between run queues, detecting if we need to insert it
+into a run queue or not, detecting if it is alive or not.
+
+All of this information in the process structure that was needed by
+these operations was protected by the process `status` lock, but the
+information was spread across a number of fields. The fields used was
+typically state fields that could contain a small number of different
+states. By reordering this information a bit we could *easily* fit
+this information into a 32-bit wide field of bit flags (only 12-flags
+were needed). By moving this information we could remove five 32-bit
+wide fields and one pointer field from the process structure! The move
+also enabled us to easily read and change the state using atomic
+memory operations.
+
+### Run Queue ###
+
+As with processes we wanted to be able to do the most fundamental
+operations without having to acquire a lock on it. The most important
+being able to determine if we should enqueue a process in a specific
+run queue or not. This involves being able to read actual load, and
+load balancing information.
+
+The load balancing functionality is triggered at repeated fixed
+intervals. The load balancing more or less strives to even out run
+queue lengths over the system. When balancing is triggered,
+information about every run queue is gathered, migrations paths and
+run queue length limits are set up. Migration paths and limits are
+fixed until the next balancing has been done. The most important
+information about each run queue is the maximum run queue length since
+last balancing. All of this information were previously stored in the
+run queues themselves.
+
+When a process has become runnable, for example due to reception of a
+message, we need to determine which run queue to enqueue it
+in. Previously this at least involved locking the run queue that the
+process currently was assigned to while holding the status lock on the
+process. Depending on load we sometimes also had to acquire a lock on
+another run queue in order to be able to determine if it should be
+migrated to that run queue or not.
+
+In order to be able to decide which run queue to use without having to
+lock any run queues, we moved all fixed balancing information out of
+the run queues into a global memory block. That is, migration paths
+and run queue limits. Information that need to be frequently updated,
+like for example maximum run queue length, were kept in the run queue,
+but instead of operating on this information under locks we now use
+atomic memory operations when accessing this information. This made it
+possible to first determine which run queue to use, without locking
+any run queues, and when decided, lock the chosen run queue and insert
+the process.
+
+#### Fixed Balancing Information ####
+
+When determining which run queue to choose we need to read the fixed
+balancing information that we moved out of the run queues. This
+information is global, read only between load balancing operations,
+but will be changed during a load balancing. We do not want to
+introduce a global lock that needs to be acquired when accessing this
+information. A reader optimized rwlock could avoid some of the
+overhead since the data is most frequently read, but it would
+unavoidably cause disruption during load balancing, since this
+information is very frequently read. The likelihood of a large
+disruption due to this also increase as number of schedulers grows.
+
+Instead of using a global lock protecting modifications of this
+information, we write a completely new version of it at each load
+balancing. The new version is written in another memory block than the
+previous one, and published by issuing a write memory barrier and then
+storing a pointer to the new memory block in a global variable using
+an atomic write operation.
+
+When schedulers need to read this information, they read the pointer
+to currently used information using an atomic read operation, and then
+issue a data dependency read barrier, which on most architectures is a
+no-op. That is, it is very little overhead getting access to this
+information.
+
+Instead of allocating and deallocating memory blocks for the different
+versions of the balancing information we keep old memory blocks and
+reuse them when it is safe to do so. In order to be able to determine
+when it is safe to reuse a block we use the thread progress
+functionality, ensuring that no threads have any references to the
+memory block when we reuse it.
+
+#### Be Less Aggressive ####
+
+We implemented a test version using lock free run queues. This
+implementation did however not perform as good as the version using
+one lock per run queue. The reason for this was not investigated
+enough to say why this was. Since the locked version performed better
+we kept it, at least for now. The lock free version, however, forced
+us to use other solutions, some of them we kept.
+
+Previously when a process that was in a run queue got suspended, we
+removed it from the queue straight away. This involved locking the
+process, locking the run queue, and then unlinking it from the double
+linked list implementing the queue. Removing a process from a lock
+free queue gets really complicated. Instead, of removing it from the
+queue, we just leave it in the queue and mark it as suspended. When
+later selected for execution we check if the process is suspended, if
+so just dropped it. During its time in the queue, it might also get
+resumed again, if so execute it when it get selected for execution.
+
+By keeping this part when reverting back to a locked implementation,
+we could remove a pointer field in each process structure, and avoid
+unnecessary operations on the process and the queue which might cause
+contention.
+
+### Combined Modifications ###
+
+By combining the modifications of the process state management and the
+run queue management, we can do large parts of the work involved when
+managing processes with regards to scheduling and migration without
+having any locks locked at all. In these situations we previously had
+to have multiple locks locked. This of course caused a lot of rewrites
+across large parts of the runtime system, but the rewrite both
+simplified code and eliminated locking at a number of places. The
+major benefit is, of course, reduced contention.
+
+### A Benchmark Result ###
+
+When running the chameneosredux benchmark, schedulers frequently run
+out of work trying to steal work from each other. That is, either
+succeeding in migrating, or trying to migrate processes which is a
+scenario which we wanted to optimize. By the introduction of these
+improvements, we got a speedup of 25-35% when running this benchmark
+on a relatively new machine with an Intel i7 quad core processor with
+hyper-threading using 8 schedulers. \ No newline at end of file
diff --git a/erts/emulator/internal_doc/ThreadProgress.md b/erts/emulator/internal_doc/ThreadProgress.md
new file mode 100644
index 0000000000..6118bcf0f6
--- /dev/null
+++ b/erts/emulator/internal_doc/ThreadProgress.md
@@ -0,0 +1,308 @@
+Thread Progress
+===============
+
+Problems
+--------
+
+### Knowing When Threads Have Completed Accesses to a Data Structure ###
+
+When multiple threads access the same data structure you often need to
+know when all threads have completed their accesses. For example, in
+order to know when it is safe to deallocate the data structure. One
+simple way to accomplish this is to reference count all accesses to
+the data structure. The problem with this approach is that the cache
+line where the reference counter is located needs to be communicated
+between all involved processors. Such communication can become
+extremely expensive and will scale poorly if the reference counter is
+frequently accessed. That is, we want to use some other approach of
+keeping track of threads than reference counting.
+
+### Knowing That Modifications of Memory is Consistently Observed ###
+
+Different hardware architectures have different memory models. Some
+architectures allows very aggressive reordering of memory accesses
+while other architectures only reorder a few specific cases. Common to
+all modern hardware is, however, that some type of reordering will
+occur. When using locks to protect all memory accesses made from
+multiple threads such reorderings will not be visible. The locking
+primitives will ensure that the memory accesses will be ordered. When
+using lock free algorithms one do however have to take this reordering
+made by the hardware into account.
+
+Hardware memory barriers or memory fences are instructions that can be
+used to enforce order between memory accesses. Different hardware
+architectures provide different memory barriers. Lock free algorithms
+need to use memory barriers in order to ensure that memory accesses
+are not reordered in such ways that the algorithm breaks down. Memory
+barriers are also expensive instructions, so you typically want to
+minimize the use of these instructions.
+
+Functionality Used to Address These Problems
+-------------------------------------------
+
+The "thread progress" functionality in the Erlang VM is used to
+address these problems. The name "thread progress" was chosen since we
+want to use it to determine when all threads in a set of threads have
+made such progress so that two specific events have taken place for
+all them.
+
+The set of threads that we are interested in we call managed
+threads. The managed threads are the only threads that we get any
+information about. These threads *have* to frequently report
+progress. Not all threads in the system are able to frequently report
+progress. Such threads cannot be allowed in the set of managed threads
+and are called unmanaged threads. An example of unmanaged threads are
+threads in the async thread pool. Async threads can be blocked for
+very long times and by this be prevented from frequently reporting
+progress. Currently only scheduler threads and a couple of other
+threads are managed threads.
+
+### Thread Progress Events ###
+
+Any thread in the system may use the thread progress functionality in
+order to determine when the following events have occured at least
+once in all managed threads:
+
+1. The thread has returned from other code to a known state in the
+ thread progress functionality, which is independent of any other
+ code.
+2. The thread has executed a full memory barrier.
+
+These events, of course, need to occur ordered to other memory
+operations. The operation of determining this begins by initiating the
+thread progress operation. The thread that initiated the thread
+progress operation after this poll for the completion of the
+operation. Both of these events must occur at least once *after* the
+thread progress operation has been initiated, and at least once
+*before* the operation has completed in each managed thread. This is
+ordered using communication via memory which makes it possible to draw
+conclusion about the memory state after the thread progress operation
+has completed. Lets call the progress made from initiation to
+comletion for "thread progress".
+
+Assuming that the thread progress functionality is efficient, a lot of
+algorithms can both be simplified and made more efficient than using
+the first approach that comes to mind. A couple of examples follows.
+
+By being able to determine when the first event above has occurred we
+can easily know when all managed threads have completed accesses to a
+data structure. This can be determined the following way. We have an
+implementation of some functionality `F` using a data structure
+`D`. The reference to `D` is always looked up before `D` is being
+accessed, and the references to `D` is always dropped before we leave
+the code implementing `F`. If we remove the possibility to look up `D`
+and then wait until the first event has occurred in all managed
+threads, no managed threads can have any references to the data
+structure `D`. This could for example have been achieved by using
+reference counting, but the cache line containing the reference
+counter would in this case be ping ponged between all processors
+accessing `D` at every access.
+
+By being able to determine when the second event has occurred it is
+quite easy to do complex modifications of memory that needs to be seen
+consistently by other threads without having to resort to locking. By
+doing the modifications, then issuing a full memory barrier, then wait
+until the second event has occurred in all managed threads, and then
+publish the modifications, we know that all managed threads reading
+this memory will get a consistent view of the modifications. Managed
+threads reading this will not have to issue any extra memory barriers
+at all.
+
+Implementation of the Thread Progress Functionality
+---------------------------------------------------
+
+### Requirement on the Implementation ###
+
+In order to be able to determine when all managed threads have reached
+the states that we are interested in we need to communicate between
+all involved threads. We of course want to minimize this
+communication.
+
+We also want threads to be able to determine when thread progress has
+been made relatively fast. That is we need to have some balance
+between comunication overhead and time to complete the operation.
+
+### API ###
+
+I will only present the most important functions in the API here.
+
+* `ErtsThrPrgrVal erts_thr_progress_later(void)` - Initiation of the
+ operation. The thread progress value returned can be used testing
+ for completion of the operation.
+* `int erts_thr_progress_has_reached(ErtsThrPrgrVal val)` - Returns
+ a non zero value when we have reached the thread progress value
+ passed as argument. That is, when a non zero value is returned the
+ operation has completed.
+
+When a thread calls `my_val = erts_thr_progress_later()` and waits for
+`erts_thr_progress_has_reached(my_val)` to return a non zero value it
+knows that thread progress has been made.
+
+While waiting for `erts_thr_progress_has_reached()` to return a non
+zero value we typically do not want to block waiting, but instead want
+to continue working with other stuff. If we run out of other stuff to
+work on we typically do want to block waiting until we have reached
+the thread progress value that we are waiting for. In order to be able
+to do this we provide functionality for waking up a thread when a
+certain thread progress value has been reached:
+
+* `void erts_thr_progress_wakeup(ErtsSchedulerData *esdp,
+ ErtsThrPrgrVal val)` - Request wake up. The calling thread will be
+ woken when thread progress has reached val.
+
+Managed threads frequently need to update their thread progress by
+calling the following functions:
+
+* `int erts_thr_progress_update(ErtsSchedulerData *esdp)` - Update
+ thread progress. If a non zero value is returned
+ `erts_thr_progress_leader_update()` has to be called without any
+ locks held.
+* `int erts_thr_progress_leader_update(ErtsSchedulerData *esdp)` -
+ Leader update thread progress.
+
+Unmanaged threads can delay thread progress beeing made:
+
+* `ErtsThrPrgrDelayHandle erts_thr_progress_unmanaged_delay(void)` -
+ Delay thread progress.
+* `void erts_thr_progress_unmanaged_continue(ErtsThrPrgrDelayHandle
+ handle)` - Let thread progress continue.
+
+Scheduler threads can schedule an operation to be executed by the
+scheduler itself when thread progress has been made:
+
+* `void erts_schedule_thr_prgr_later_op(void (*funcp)(void *), void
+ *argp, ErtsThrPrgrLaterOp *memp)` - Schedule a call to `funcp`. The
+ call `(*funcp)(argp)` will be executed when thread progress has been
+ made since the call to `erts_schedule_thr_prgr_later_op()` was
+ made.
+
+### Implementation ###
+
+In order to determine when the events has happened we use a global
+counter that is incremented when all managed threads have called
+`erts_thr_progress_update()` (or `erts_thr_progress_leader_update()`).
+This could naively be implemented using a "thread confirmed" counter.
+This would however cause an explosion of communication where all
+involved processors would need to communicate with each other at each
+update.
+
+Instead of confirming at a global location each thread confirms that
+it accepts in increment of the global counter in its own cache
+line. These confirmation cache lines are located in sequence in an
+array, and each confirmation cache line will only be written by one
+and only one thread. One of the managed threads always have the leader
+responsibility. This responsibility may jump between threads, but as
+long as there are some activity in the system always one of them will
+have the leader responsibility. The thread with the leader
+responsibility will call `erts_thr_progress_leader_update()` which
+will check that all other threads have confirmed an increment of the
+global counter before doing the increment of the global counter. The
+leader thread is the only thread reading the confirmation cache
+lines.
+
+Doing it this way we will get a communication pattern of information
+going from the leader thread out to all other managed threads and then
+back from the other threads to the leader thread. This since only the
+leader thread will write to the global counter and all other threads
+will only read it, and since each confirmation cache lines will only
+be written by one specific thread and only read by the leader
+thread. When each managed thread is distributed over different
+processors, the communication between processors will be a reflection
+of this communication pattern between threads.
+
+The value returned from `erts_thr_progress_later()` equals the, by
+this thread, latest confirmed value plus two. The global value may be
+latest confirmed value or latest confirmed value minus one. In order
+to be certain that all other managed threads actually will call
+`erts_thr_progress_update()` at least once before we reach the value
+returned from `erts_thr_progress_later()`, the global counter plus one
+is not enough. This since all other threads may already have confirmed
+current global value plus one at the time when we call
+`erts_thr_progress_later()`. They are however guaranteed not to have
+confirmed global value plus two at this time.
+
+The above described implementation more or less minimizes the
+comunication needed before we can increment the global counter. The
+amount of communication in the system due to the thread progress
+functionality however also depend on the frequency with which managed
+threads call `erts_thr_progress_update()`. Today each scheduler thread
+calls `erts_thr_progress_update()` more or less each time an Erlang
+process is scheduled out. One way of further reducing communication
+due to the thread progress functionality is to only call
+`erts_thr_progress_update()` every second, or third time an Erlang
+process is scheduled out, or even less frequently than that. However,
+by doing updates of thread progress less frequently all operations
+depending on the thread progress functionality will also take a longer
+time.
+
+#### Delay of Thread Progress by Unmanaged Threads ####
+
+In order to implement delay of thread progress from unmanaged threads
+we use two reference counters. One being `current` and one being
+`waiting`. When an unmanaged thread wants to delay thread progress it
+increments `current` and gets a handle back to the reference counter
+it incremented. When it later wants to enable continuation of thread
+progress it uses the handle to decrement the reference counter it
+previously incremented.
+
+When the leader threads is about to increment the global thread
+progress counter it verifies that the `waiting` counter is zero before
+doing so. If not zero, the leader isn't allowed to increment the
+global counter, and needs to wait before it can do this. When it is
+zero, it swaps the `waiting` and `current` counters before increasing
+the global counter. From now on the new `waiting` counter will
+decrease, so that it eventualy will reach zero, making it possible to
+increment the global counter the next time. If we only used one
+reference counter it would potentially be held above zero for ever by
+different unmanaged threads.
+
+When an unmanaged thread increment the `current` counter it will not
+prevent the next increment of the global counter, but instead the
+increment after that. This is sufficient since the global counter
+needs to be incremented two times before thread progress has been
+made. It is also desirable not to prevent the first increment, since
+the likelyhood increases that the delay is withdrawn before any
+increment of the global counter is delayed. That is, the operation
+will cause as little disruption as possible.
+
+However, this feature of delaying thread progress from unmanaged
+threads should preferably be used as little as possible, since heavy
+use of it will cause contention on the reference counter cache
+lines. The functionality is however very useful in code which normally
+only executes in managed threads, but which may under some infrequent
+circumstances be executed in other threads.
+
+#### Overhead ####
+
+The overhead caused by the thread progress functionality is more or
+less fixed using the same amount of schedulers regardless of the
+number of uses of the functionality. Already today quite a lot of
+functionality use it, and we plan to use it even more. When rewriting
+old implementations of ERTS internal functionality to use the thread
+progress functionality, this implies removing communication in the old
+implementation. Otherwise it is simply no point rewriting the old
+implementation to use the thread progress functionality. Since the
+thread progress overhead is more or less fixed, the rewrite will cause
+a reduction of the total communication in the system.
+
+##### An Example #####
+
+The main structure of an ETS table was originally managed using
+reference counting. Already a long time ago we replaced this strategy
+since the reference counter caused contention on each access of the
+table. The solution used was to schedule "confirm deletion" jobs on
+each scheduler in order to know when it was safe to deallocate the
+table structure of a removed table. These confirm deletion jobs needed
+to be allocated. That is, we had to allocate and deallocate as many
+blocks as schedulers in order to deallocate one block. This of course
+was a quite an expensive operation, but we only needed to do this once
+when removing a table. It was more important to get rid of the
+contention on the reference counter which was present on every
+operation on the table.
+
+When the thread progress functionality had been introduced, we could
+remove the code implementing the "confirm deletion" jobs, and then
+just schedule a thread progress later operation which deallocates the
+structure. Besides simplifying the code a lot, we got an increase of
+more than 10% of the number of transactions per second handled on a
+mnesia tpcb benchmark executing on a quad core machine.
diff --git a/erts/emulator/internal_doc/Tracing.md b/erts/emulator/internal_doc/Tracing.md
new file mode 100644
index 0000000000..30bc5327a7
--- /dev/null
+++ b/erts/emulator/internal_doc/Tracing.md
@@ -0,0 +1,220 @@
+Non-blocking trace setting
+==========================
+
+Introduction
+------------
+
+Before OTP R16 when trace settings were changed by `erlang:trace_pattern`,
+all other execution in the VM were halted while the trace operation
+was carried out in single threaded mode. Similar to code loading, this
+can impose a severe problem for availability that grows with the
+number of cores.
+
+In OTP R16, trace breakpoints are set in the code without blocking the
+VM. Erlang processes may continue executing undisturbed in parallel
+during the entire operation. The same base technique is used as for
+code loading. A staging area of breakpoints is prepared and then made
+active with a single atomic operation.
+
+
+Redesign of Breakpoint Wheel
+----------------------------
+
+To make it easier to manage breakpoints without single threaded mode a
+redesign of the breakpoint mechanism has been made. The old
+"breakpoint wheel" data structure was a circular double-linked list of
+breakpoints for each instrumented function. It was invented before the
+SMP emulator. To support it in the SMP emulator, is was essentially
+expanded to one breakpoint wheel per scheduler. As more breakpoint
+types have been added, the implementation have become messy and hard
+to understand and maintain.
+
+In the new design the old wheel was dropped and instead replaced by
+one struct (`GenericBp`) to hold the data for all types of breakpoints
+for each instrumented function. A bit-flag field is used to indicate
+what different type of break actions that are enabled.
+
+
+Same Same but Different
+-----------------------
+Even though `trace_pattern` use the same technique as the non-blocking
+code loading with replicated generations of data structures and an
+atomic switch, the implementations are quite separate from each
+other. One initial idea was to use the existing mechanism of code
+loading to do a dummy load operation that would make a copy of the
+affected modules. That copy could then be instrumented with
+breakpoints before making it reachable with the same atomic switch as
+done for code loading. This approach seems straight forward but has a
+number of shortcomings, one being the large memory footprint when many
+modules are instrumented. Another problem is how execution will reach
+the new instrumented code. Normally loaded code can only be reached
+through external functions calls. Trace settings must be activated
+instantaneously without the need of external function calls.
+
+The choosen solution is instead for tracing to use the technique of
+replication applied on the data structures for breakpoints. Two
+generations of breakpoints are kept and indentified by index of 0 and
+1. The global atomic variables `erts_active_bp_index` will determine
+which generation of breakpoints running code will use.
+
+### Atomicy Without Atomic Operations
+
+Not using the code loading generations (or any other code duplication)
+means that `trace_pattern` must at some point write to the active beam
+code in order for running processes to reach the staged breakpoints
+structures. This can be done with one single atomic write operation
+per instrumented function. The beam instruction words are however read
+with normal memory loads and not through the atomic API. The only
+guarantee we need is that the written instruction word is seen as
+atomic. Either fully written or not at all. This is true for word
+aligned write operation on all hardware architectures we use.
+
+
+Adding a new Breakpoint
+-----------------------
+This is a simplified sequence describing what `trace_pattern` goes
+through when adding a new breakpoint.
+
+1. Seize exclusive code write permission (suspend process until we get it).
+
+2. Allocate breakpoint structure `GenericBp` including both generations.
+ Set the active part as disabled with a zeroed flagfield. Save the original
+ instruction word in the breakpoint.
+
+3. Write a pointer to the breakpoint at offset -4 from the first
+ instruction "func_info" header.
+
+4. Set the staging part of the breakpoint as enabled with specified
+ breakpoint data.
+
+5. Wait for thread progress.
+
+6. Write a `op_i_generic_breakpoint` as the first instruction for the function.
+ This instruction will execute the breakpoint that it finds at offset -4.
+
+7. Wait for thread progress.
+
+8. Commit the breadpoint by switching `erts_active_bp_index`.
+
+9. Wait for thread progress.
+
+10. Prepare for next call to `trace_pattern` by updating the new staging part
+ (the old active) of the breakpoint to be identic to the the new active part.
+
+11. Release code write permission and return from `trace_pattern`.
+
+
+The code write permission "lock" seized in step 1 is the same as used
+by code loading. This will ensure that only one process at a time can
+stage new trace settings but it will also prevent concurrent code
+loading and make sure we see a consistent view of the beam code during
+the entire sequence.
+
+Between step 6 and 8, runninng processes might execute the written
+`op_i_generic_breakpoint` instruction. They will get the breakpoint
+structure written in step 3, read `erts_active_bp_index` and execute
+the corresponding part of the breakpoint. Before the switch in step 8
+becomes visible they will however execute the disabled part of the
+breakpoint structure and do nothing other than executing the saved
+original instruction.
+
+
+To Updating and Remove Breakpoints
+----------------------------------
+
+The above sequence did only describe adding a new breakpoint. We do
+basically the same sequence to update the settings of an existing
+breakpoint except step 2,3 and 6 can be skipped as it has already been
+done.
+
+To remove a breakpoint some more steps are needed. The idea is to
+first stage the breakpoint as disabled, do the switch, wait for thread
+progress and then remove the disabled breakpoint by restoring the
+original beam instruction.
+
+Here is a more complete sequence that contains both adding, updating
+and removing breakpoints.
+
+1. Seize exclusive code write permission (suspend process until we get it).
+
+2. Allocate new breakpoint structures with a disabled active part and
+ the original beam instruction. Write a pointer to the breakpoint in
+ "func_info" header at offset -4.
+
+3. Update the staging part of all affected breakpoints. Disable
+ breakpoints that are to be removed.
+
+4. Wait for thread progress.
+
+5. Write a `op_i_generic_breakpoint` as the first instruction for all
+ functions with new breakpoints.
+
+6. Wait for thread progress.
+
+7. Commit all staged breadpoints by switching `erts_active_bp_index`.
+
+8. Wait for thread progress.
+
+
+9. Restore original beam instruction for disabled breakpoints.
+
+10. Wait for thread progress.
+
+11. Prepare for next call to `trace_pattern` by updating the new
+ staging area (the old active) for all enabled breakpoints.
+
+12. Deallocate disabled breakpoint structures.
+
+13. Release code write permission and return from `trace_pattern`.
+
+
+### All that Waiting for Thread Progress
+
+There are four rounds of waiting for thread progress in the above
+sequence. In the code loading sequence we sacrificed memory overhead
+of three generations to avoid a second round of thread progress. The
+latency of `trace_pattern` should not be such a big problem for
+however, as it is normally not called in a rapid sequence.
+
+The waiting in step 4 is to make sure all threads will see an updated
+view of the breakpoint structures once they become reachable through
+the `op_i_generic_breakpoint` instruction written in step 5.
+
+The waiting in step 6 is to make the activation of the new trace
+settings "as atomic as possible". Different cores might see the new
+value of `erts_active_bp_index` at different times as it is read
+without any memory barrier. But this is the best we can do without
+more expensive thread synchronization.
+
+The waiting in step 8 is to make sure we dont't restore the original
+bream instructions for disabled breakpoints until we know that no
+thread is still accessing the old enabled part of a disabled
+breakpoint.
+
+The waiting in step 10 is to make sure no lingering thread is still
+accessing disabled breakpoint structures to be deallocated in step
+12.
+
+
+Global Tracing
+--------------
+
+Call tracing with `global` option only affects external function
+calls. This was earlier handled by inserting a special trace
+instruction in export entries without the use of breakpoints. With the
+new non-blocking tracing we want to avoid special handling for global
+tracing and make use of the staging and atomic switching within the
+breakpoint mechanism. The solution was to create the same type of
+breakpoint structure for a global call trace. The difference to local
+tracing is that we insert the `op_i_generic_breakpoint` instruction
+(with its pointer at offset -4) in the export entry rather than in the
+code.
+
+
+Future work
+-----------
+
+We still go to single threaded mode when new code is loaded for a
+module that is traced, or when loading code when there is a default
+trace pattern set. That is not impossible to fix, but that requires
+much closer cooperation between tracing BIFs and the loader BIFs.
diff --git a/erts/emulator/sys/unix/erl_unix_sys_ddll.c b/erts/emulator/sys/unix/erl_unix_sys_ddll.c
index 12c47d0088..8760b58839 100644
--- a/erts/emulator/sys/unix/erl_unix_sys_ddll.c
+++ b/erts/emulator/sys/unix/erl_unix_sys_ddll.c
@@ -101,7 +101,7 @@ void erl_sys_ddll_init(void) {
/*
* Open a shared object
*/
-int erts_sys_ddll_open2(const char *full_name, void **handle, ErtsSysDdllError* err)
+int erts_sys_ddll_open(const char *full_name, void **handle, ErtsSysDdllError* err)
{
#if defined(HAVE_DLOPEN)
char* dlname;
diff --git a/erts/emulator/sys/unix/sys.c b/erts/emulator/sys/unix/sys.c
index 61f9f6a59a..59e34eb819 100644
--- a/erts/emulator/sys/unix/sys.c
+++ b/erts/emulator/sys/unix/sys.c
@@ -547,6 +547,25 @@ erts_sys_pre_init(void)
#endif
#endif /* USE_THREADS */
erts_smp_atomic_init_nob(&sys_misc_mem_sz, 0);
+
+ {
+ /*
+ * Unfortunately we depend on fd 0,1,2 in the old shell code.
+ * So if for some reason we do not have those open when we start
+ * we have to open them here. Not doing this can cause the emulator
+ * to deadlock when reaping the fd_driver ports :(
+ */
+ int fd;
+ /* Make sure fd 0 is open */
+ if ((fd = open("/dev/null", O_RDONLY)) != 0)
+ close(fd);
+ /* Make sure fds 1 and 2 are open */
+ while (fd < 3) {
+ fd = open("/dev/null", O_WRONLY);
+ }
+ close(fd);
+ }
+
}
void
diff --git a/erts/emulator/sys/win32/erl_win32_sys_ddll.c b/erts/emulator/sys/win32/erl_win32_sys_ddll.c
index 2d3f073cc2..338f0d7386 100644
--- a/erts/emulator/sys/win32/erl_win32_sys_ddll.c
+++ b/erts/emulator/sys/win32/erl_win32_sys_ddll.c
@@ -59,7 +59,7 @@ void erl_sys_ddll_init(void) {
* Open a shared object
* Expecting 'full_name' as an UTF-8 string.
*/
-int erts_sys_ddll_open2(const char *full_name, void **handle, ErtsSysDdllError* err)
+int erts_sys_ddll_open(const char *full_name, void **handle, ErtsSysDdllError* err)
{
HINSTANCE hinstance;
int len;
diff --git a/erts/emulator/test/binary_SUITE.erl b/erts/emulator/test/binary_SUITE.erl
index a340a805b5..bce4278337 100644
--- a/erts/emulator/test/binary_SUITE.erl
+++ b/erts/emulator/test/binary_SUITE.erl
@@ -447,26 +447,26 @@ terms(Config) when is_list(Config) ->
Sz1 when is_integer(Sz1), size(Bin1) =< Sz1 ->
ok
end,
- Term = binary_to_term(Bin),
- Term = binary_to_term(Bin, [safe]),
+ Term = binary_to_term_stress(Bin),
+ Term = binary_to_term_stress(Bin, [safe]),
Unaligned = make_unaligned_sub_binary(Bin),
- Term = binary_to_term(Unaligned),
- Term = binary_to_term(Unaligned, []),
- Term = binary_to_term(Bin, [safe]),
+ Term = binary_to_term_stress(Unaligned),
+ Term = binary_to_term_stress(Unaligned, []),
+ Term = binary_to_term_stress(Bin, [safe]),
BinC = erlang:term_to_binary(Term, [compressed]),
- Term = binary_to_term(BinC),
+ Term = binary_to_term_stress(BinC),
true = size(BinC) =< size(Bin),
Bin = term_to_binary(Term, [{compressed,0}]),
terms_compression_levels(Term, size(Bin), 1),
UnalignedC = make_unaligned_sub_binary(BinC),
- Term = binary_to_term(UnalignedC)
+ Term = binary_to_term_stress(UnalignedC)
end,
?line test_terms(TestFun),
ok.
terms_compression_levels(Term, UncompressedSz, Level) when Level < 10 ->
BinC = erlang:term_to_binary(Term, [{compressed,Level}]),
- Term = binary_to_term(BinC),
+ Term = binary_to_term_stress(BinC),
Sz = byte_size(BinC),
true = Sz =< UncompressedSz,
terms_compression_levels(Term, UncompressedSz, Level+1);
@@ -476,9 +476,9 @@ terms_float(Config) when is_list(Config) ->
?line test_floats(fun(Term) ->
Bin0 = term_to_binary(Term),
Bin0 = term_to_binary(Term, [{minor_version,0}]),
- Term = binary_to_term(Bin0),
+ Term = binary_to_term_stress(Bin0),
Bin1 = term_to_binary(Term, [{minor_version,1}]),
- Term = binary_to_term(Bin1),
+ Term = binary_to_term_stress(Bin1),
true = size(Bin1) < size(Bin0),
Size0 = erlang:external_size(Term),
Size00 = erlang:external_size(Term, [{minor_version, 0}]),
@@ -490,7 +490,7 @@ terms_float(Config) when is_list(Config) ->
float_middle_endian(Config) when is_list(Config) ->
%% Testing for roundtrip is not enough.
?line <<131,70,63,240,0,0,0,0,0,0>> = term_to_binary(1.0, [{minor_version,1}]),
- ?line 1.0 = binary_to_term(<<131,70,63,240,0,0,0,0,0,0>>).
+ ?line 1.0 = binary_to_term_stress(<<131,70,63,240,0,0,0,0,0,0>>).
external_size(Config) when is_list(Config) ->
%% Build a term whose external size only fits in a big num (on 32-bit CPU).
@@ -608,10 +608,10 @@ bad_binary_to_term(Config) when is_list(Config) ->
ok.
bad_bin_to_term(BadBin) ->
- {'EXIT',{badarg,_}} = (catch binary_to_term(BadBin)).
+ {'EXIT',{badarg,_}} = (catch binary_to_term_stress(BadBin)).
bad_bin_to_term(BadBin,Opts) ->
- {'EXIT',{badarg,_}} = (catch binary_to_term(BadBin,Opts)).
+ {'EXIT',{badarg,_}} = (catch binary_to_term_stress(BadBin,Opts)).
safe_binary_to_term2(doc) -> "Test safety options for binary_to_term/2";
safe_binary_to_term2(Config) when is_list(Config) ->
@@ -622,7 +622,7 @@ safe_binary_to_term2(Config) when is_list(Config) ->
BadRef = <<131,114,0,3,BadHostAtom/binary,0,<<0,0,0,255>>/binary,
Empty/binary,Empty/binary>>,
?line bad_bin_to_term(BadRef, [safe]), % good ref, with a bad atom
- ?line fullsweep_after = binary_to_term(<<131,100,0,15,"fullsweep_after">>, [safe]), % should be a good atom
+ ?line fullsweep_after = binary_to_term_stress(<<131,100,0,15,"fullsweep_after">>, [safe]), % should be a good atom
BadExtFun = <<131,113,100,0,4,98,108,117,101,100,0,4,109,111,111,110,97,3>>,
?line bad_bin_to_term(BadExtFun, [safe]),
ok.
@@ -679,14 +679,14 @@ corrupter0(Term) ->
corrupter(Bin, Pos) when Pos >= 0 ->
?line {ShorterBin, Rest} = split_binary(Bin, Pos),
- ?line catch binary_to_term(ShorterBin), %% emulator shouldn't crash
+ ?line catch binary_to_term_stress(ShorterBin), %% emulator shouldn't crash
?line MovedBin = list_to_binary([ShorterBin]),
- ?line catch binary_to_term(MovedBin), %% emulator shouldn't crash
+ ?line catch binary_to_term_stress(MovedBin), %% emulator shouldn't crash
%% Bit faults, shouldn't crash
<<Byte,Tail/binary>> = Rest,
Fun = fun(M) -> FaultyByte = Byte bxor M,
- catch binary_to_term(<<ShorterBin/binary,
+ catch binary_to_term_stress(<<ShorterBin/binary,
FaultyByte, Tail/binary>>) end,
?line lists:foreach(Fun,[1,2,4,8,16,32,64,128,255]),
?line corrupter(Bin, Pos-1);
@@ -700,7 +700,7 @@ more_bad_terms(Config) when is_list(Config) ->
?line ok = io:format("File: ~s\n", [BadFile]),
?line case file:read_file(BadFile) of
{ok,Bin} ->
- ?line {'EXIT',{badarg,_}} = (catch binary_to_term(Bin)),
+ ?line {'EXIT',{badarg,_}} = (catch binary_to_term_stress(Bin)),
ok;
Other ->
?line ?t:fail(Other)
@@ -709,7 +709,7 @@ more_bad_terms(Config) when is_list(Config) ->
otp_5484(Config) when is_list(Config) ->
?line {'EXIT',_} =
(catch
- binary_to_term(
+ binary_to_term_stress(
<<131,
104,2, %Tuple, 2 elements
103, %Pid
@@ -722,7 +722,7 @@ otp_5484(Config) when is_list(Config) ->
?line {'EXIT',_} =
(catch
- binary_to_term(
+ binary_to_term_stress(
<<131,
104,2, %Tuple, 2 elements
103, %Pid
@@ -734,13 +734,13 @@ otp_5484(Config) when is_list(Config) ->
?line {'EXIT',_} =
(catch
- binary_to_term(
+ binary_to_term_stress(
%% A old-type fun in a list containing a bad creator pid.
<<131,108,0,0,0,1,117,0,0,0,0,103,100,0,13,110,111,110,111,100,101,64,110,111,104,111,115,116,255,255,0,25,255,0,0,0,0,100,0,1,116,97,0,98,6,142,121,72,106>>)),
?line {'EXIT',_} =
(catch
- binary_to_term(
+ binary_to_term_stress(
%% A new-type fun in a list containing a bad creator pid.
%%
<<131,
@@ -752,7 +752,7 @@ otp_5484(Config) when is_list(Config) ->
?line {'EXIT',_} =
(catch
- binary_to_term(
+ binary_to_term_stress(
%% A new-type fun in a list containing a bad module.
<<131,
108,0,0,0,1, %List, 1 element
@@ -763,7 +763,7 @@ otp_5484(Config) when is_list(Config) ->
?line {'EXIT',_} =
(catch
- binary_to_term(
+ binary_to_term_stress(
%% A new-type fun in a list containing a bad index.
<<131,
108,0,0,0,1, %List, 1 element
@@ -775,7 +775,7 @@ otp_5484(Config) when is_list(Config) ->
?line {'EXIT',_} =
(catch
- binary_to_term(
+ binary_to_term_stress(
%% A new-type fun in a list containing a bad unique value.
<<131,
108,0,0,0,1, %List, 1 element
@@ -788,46 +788,46 @@ otp_5484(Config) when is_list(Config) ->
%% An absurdly large atom.
?line {'EXIT',_} =
- (catch binary_to_term(iolist_to_binary([<<131,100,65000:16>>|
+ (catch binary_to_term_stress(iolist_to_binary([<<131,100,65000:16>>|
lists:duplicate(65000, 42)]))),
%% Longer than 255 characters.
?line {'EXIT',_} =
- (catch binary_to_term(iolist_to_binary([<<131,100,256:16>>|
+ (catch binary_to_term_stress(iolist_to_binary([<<131,100,256:16>>|
lists:duplicate(256, 42)]))),
%% OTP-7218. Thanks to Matthew Dempsky. Also make sure that we
%% cover the other error cases for external funs (EXPORT_EXT).
?line {'EXIT',_} =
- (catch binary_to_term(
+ (catch binary_to_term_stress(
<<131,
113, %EXPORT_EXP
97,13, %Integer: 13
97,13, %Integer: 13
97,13>>)), %Integer: 13
?line {'EXIT',_} =
- (catch binary_to_term(
+ (catch binary_to_term_stress(
<<131,
113, %EXPORT_EXP
100,0,1,64, %Atom: '@'
97,13, %Integer: 13
97,13>>)), %Integer: 13
?line {'EXIT',_} =
- (catch binary_to_term(
+ (catch binary_to_term_stress(
<<131,
113, %EXPORT_EXP
100,0,1,64, %Atom: '@'
100,0,1,64, %Atom: '@'
106>>)), %NIL
?line {'EXIT',_} =
- (catch binary_to_term(
+ (catch binary_to_term_stress(
<<131,
113, %EXPORT_EXP
100,0,1,64, %Atom: '@'
100,0,1,64, %Atom: '@'
98,255,255,255,255>>)), %Integer: -1
?line {'EXIT',_} =
- (catch binary_to_term(
+ (catch binary_to_term_stress(
<<131,
113, %EXPORT_EXP
100,0,1,64, %Atom: '@'
@@ -835,7 +835,7 @@ otp_5484(Config) when is_list(Config) ->
113,97,13,97,13,97,13>>)), %fun 13:13/13
%% Bad funs.
- ?line {'EXIT',_} = (catch binary_to_term(fake_fun(0, lists:seq(0, 256)))),
+ ?line {'EXIT',_} = (catch binary_to_term_stress(fake_fun(0, lists:seq(0, 256)))),
ok.
fake_fun(Arity, Env0) ->
@@ -869,7 +869,7 @@ try_bad_lengths(B) ->
try_bad_lengths(B, L) when L > 16#FFFFFFF0 ->
Bin = <<B/binary,L:32>>,
io:format("~p\n", [Bin]),
- {'EXIT',_} = (catch binary_to_term(Bin)),
+ {'EXIT',_} = (catch binary_to_term_stress(Bin)),
try_bad_lengths(B, L-1);
try_bad_lengths(_, _) -> ok.
@@ -923,7 +923,7 @@ otp_6817_try_bin(Bin) ->
%% If the bug is present, the heap pointer will moved when the invalid term
%% is found and we will have a linked list passing through the limbo area
%% between the heap top and the stack pointer.
- catch binary_to_term(Bin),
+ catch binary_to_term_stress(Bin),
%% If the bug is present, we will overwrite the pointers in the limbo area.
Filler = erlang:make_tuple(1024, 16#3FA),
@@ -935,7 +935,7 @@ otp_6817_try_bin(Bin) ->
otp_8117(doc) -> "Some bugs in binary_to_term when 32-bit integers are negative.";
otp_8117(suite) -> [];
otp_8117(Config) when is_list(Config) ->
- [otp_8117_do(Op,-(1 bsl N)) || Op <- ['fun',list,tuple],
+ [otp_8117_do(Op,-(1 bsl N)) || Op <- ['fun',named_fun,list,tuple],
N <- lists:seq(0,31)],
ok.
@@ -944,6 +944,11 @@ otp_8117_do('fun',Neg) ->
FunBin = term_to_binary(fun() -> ok end),
?line <<B1:27/binary,_NumFree:32,Rest/binary>> = FunBin,
?line bad_bin_to_term(<<B1/binary,Neg:32,Rest/binary>>);
+otp_8117_do(named_fun,Neg) ->
+ % Named fun with negative num_free
+ FunBin = term_to_binary(fun F() -> F end),
+ ?line <<B1:27/binary,_NumFree:32,Rest/binary>> = FunBin,
+ ?line bad_bin_to_term(<<B1/binary,Neg:32,Rest/binary>>);
otp_8117_do(list,Neg) ->
%% List with negative length
?line bad_bin_to_term(<<131,104,2,108,Neg:32,97,11,104,1,97,12,97,13,106,97,14>>);
@@ -1233,7 +1238,7 @@ bit_sized_binary_sizes(Config) when is_list(Config) ->
bsbs_1(A) ->
BinSize = 32+A,
io:format("A: ~p BinSize: ~p", [A,BinSize]),
- Bin = binary_to_term(<<131,$M,5:32,A,0,0,0,0,0>>),
+ Bin = binary_to_term_stress(<<131,$M,5:32,A,0,0,0,0,0>>),
BinSize = bit_size(Bin).
deep(Config) when is_list(Config) ->
@@ -1250,7 +1255,7 @@ deep(Config) when is_list(Config) ->
deep_roundtrip(T) ->
B = term_to_binary(T),
- T = binary_to_term(B).
+ T = binary_to_term_stress(B).
obsolete_funs(Config) when is_list(Config) ->
erts_debug:set_internal_state(available_internal_state, true),
@@ -1285,29 +1290,29 @@ obsolete_fun(Fun) ->
Tuple = no_fun_roundtrip(Fun).
no_fun_roundtrip(Term) ->
- binary_to_term(erts_debug:get_internal_state({term_to_binary_no_funs,Term})).
+ binary_to_term_stress(erts_debug:get_internal_state({term_to_binary_no_funs,Term})).
%% Test non-standard encodings never generated by term_to_binary/1
%% but recognized by binary_to_term/1.
robustness(Config) when is_list(Config) ->
- ?line [] = binary_to_term(<<131,107,0,0>>), %Empty string.
- ?line [] = binary_to_term(<<131,108,0,0,0,0,106>>), %Zero-length list.
+ ?line [] = binary_to_term_stress(<<131,107,0,0>>), %Empty string.
+ ?line [] = binary_to_term_stress(<<131,108,0,0,0,0,106>>), %Zero-length list.
%% {[],a} where [] is a zero-length list.
- ?line {[],a} = binary_to_term(<<131,104,2,108,0,0,0,0,106,100,0,1,97>>),
+ ?line {[],a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0,106,100,0,1,97>>),
%% {42,a} where 42 is a zero-length list with 42 in the tail.
- ?line {42,a} = binary_to_term(<<131,104,2,108,0,0,0,0,97,42,100,0,1,97>>),
+ ?line {42,a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0,97,42,100,0,1,97>>),
%% {{x,y},a} where {x,y} is a zero-length list with {x,y} in the tail.
- ?line {{x,y},a} = binary_to_term(<<131,104,2,108,0,0,0,0,
+ ?line {{x,y},a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0,
104,2,100,0,1,120,100,0,1,
121,100,0,1,97>>),
%% Bignums fitting in 32 bits.
- ?line 16#7FFFFFFF = binary_to_term(<<131,98,127,255,255,255>>),
- ?line -1 = binary_to_term(<<131,98,255,255,255,255>>),
+ ?line 16#7FFFFFFF = binary_to_term_stress(<<131,98,127,255,255,255>>),
+ ?line -1 = binary_to_term_stress(<<131,98,255,255,255,255>>),
ok.
@@ -1325,7 +1330,7 @@ run_otp_8180(Name) ->
?line {ok,Bins} = file:consult(Name),
[begin
io:format("~p\n", [Bin]),
- ?line {'EXIT',{badarg,_}} = (catch binary_to_term(Bin))
+ ?line {'EXIT',{badarg,_}} = (catch binary_to_term_stress(Bin))
end || Bin <- Bins],
ok.
@@ -1394,3 +1399,52 @@ unaligned_sub_bin(Bin0, Offs) ->
Bin.
id(I) -> I.
+
+
+%% Stress binary_to_term with different initial reductions
+binary_to_term_stress(Bin) ->
+ binary_to_term_stress(Bin, no_opts).
+
+binary_to_term_stress(Bin, Opts) ->
+ Reds = get_reds(),
+ T = b2t(erlang:system_info(context_reductions),
+ Bin, Opts, catch_binary_to_term(Bin, Opts)),
+ set_reds(Reds),
+ T = case Opts of
+ no_opts -> binary_to_term(Bin);
+ _ -> binary_to_term(Bin,Opts)
+ end.
+
+catch_binary_to_term(Bin, no_opts) ->
+ try binary_to_term(Bin)
+ catch
+ error:badarg -> binary_to_term_throws_badarg
+ end;
+catch_binary_to_term(Bin, Opts) ->
+ try binary_to_term(Bin, Opts)
+ catch
+ error:badarg -> binary_to_term_throws_badarg
+ end.
+
+b2t(0, _Bin, _Opts, Term) ->
+ Term;
+b2t(Reds, Bin, Opts, Term) ->
+ set_reds(Reds),
+ Term = catch_binary_to_term(Bin,Opts),
+ b2t(Reds div 3, Bin, Opts, Term).
+
+set_reds(Reds) ->
+ try erts_debug:set_internal_state(reds_left, Reds)
+ catch
+ error:undef ->
+ erts_debug:set_internal_state(available_internal_state, true),
+ set_reds(Reds)
+ end.
+
+get_reds() ->
+ try erts_debug:get_internal_state(reds_left)
+ catch
+ error:undef ->
+ erts_debug:set_internal_state(available_internal_state, true),
+ get_reds()
+ end.
diff --git a/erts/emulator/test/fun_SUITE.erl b/erts/emulator/test/fun_SUITE.erl
index 36ba4e0f48..8ad5f290ed 100644
--- a/erts/emulator/test/fun_SUITE.erl
+++ b/erts/emulator/test/fun_SUITE.erl
@@ -262,6 +262,16 @@ equality(Config) when is_list(Config) ->
?line false = eq(FF2, FF4),
?line false = eq(FF3, FF4),
+ %% EEP37
+ H1 = fun Fact(N) when N > 0 -> N * Fact(N - 1); Fact(0) -> 1 end,
+ H2 = fun Pow(N, M) when M > 0 -> N * Pow(N, M - 1); Pow(_, 0) -> 1 end,
+ H1_copy = copy_term(H1),
+
+ true = eq(H1, H1),
+ true = eq(H1, H1_copy),
+ true = eq(H2, H2),
+ false = eq(H1, H2),
+
ok.
eq(X, X) -> true;
diff --git a/erts/preloaded/ebin/erlang.beam b/erts/preloaded/ebin/erlang.beam
index fb222cb64b..73fac27161 100644
--- a/erts/preloaded/ebin/erlang.beam
+++ b/erts/preloaded/ebin/erlang.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_internal.beam b/erts/preloaded/ebin/erts_internal.beam
index 9ab806718b..12b36913a9 100644
--- a/erts/preloaded/ebin/erts_internal.beam
+++ b/erts/preloaded/ebin/erts_internal.beam
Binary files differ
diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl
index a21da2ecc9..0ed677c3d8 100644
--- a/erts/preloaded/src/erlang.erl
+++ b/erts/preloaded/src/erlang.erl
@@ -362,15 +362,25 @@ binary_to_list(_Binary, _Start, _Stop) ->
%% binary_to_term/1
-spec binary_to_term(Binary) -> term() when
Binary :: ext_binary().
-binary_to_term(_Binary) ->
- erlang:nif_error(undefined).
+binary_to_term(Binary) ->
+ %% This BIF may throw badarg while trapping
+ try
+ erts_internal:binary_to_term(Binary)
+ catch
+ error:Reason -> erlang:error(Reason,[Binary])
+ end.
%% binary_to_term/2
-spec binary_to_term(Binary, Opts) -> term() when
Binary :: ext_binary(),
Opts :: [safe].
-binary_to_term(_Binary, _Opts) ->
- erlang:nif_error(undefined).
+binary_to_term(Binary, Opts) ->
+ %% This BIF may throw badarg while trapping
+ try
+ erts_internal:binary_to_term(Binary,Opts)
+ catch
+ error:Reason -> erlang:error(Reason,[Binary,Opts])
+ end.
%% bit_size/1
%% Shadowed by erl_bif_types: erlang:bit_size/1
diff --git a/erts/preloaded/src/erts_internal.erl b/erts/preloaded/src/erts_internal.erl
index c8e8e7e069..d6a185482e 100644
--- a/erts/preloaded/src/erts_internal.erl
+++ b/erts/preloaded/src/erts_internal.erl
@@ -29,7 +29,7 @@
-module(erts_internal).
-export([await_port_send_result/3]).
-
+-export([binary_to_term/1, binary_to_term/2]).
-export([port_command/3, port_connect/2, port_close/1,
port_control/3, port_call/3, port_info/1, port_info/2]).
@@ -160,3 +160,13 @@ request_system_task(_Pid, _Prio, _Request) ->
check_process_code(_Module, _OptionList) ->
erlang:nif_error(undefined).
+-spec binary_to_term(Binary) -> term() when
+ Binary :: binary().
+binary_to_term(_Binary) ->
+ erlang:nif_error(undefined).
+
+-spec binary_to_term(Binary, Opts) -> term() when
+ Binary :: binary(),
+ Opts :: [safe].
+binary_to_term(_Binary, _Opts) ->
+ erlang:nif_error(undefined).
diff --git a/lib/Makefile b/lib/Makefile
index ec26a01dc6..5128241563 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -28,10 +28,10 @@ ERLANG_APPLICATIONS = tools test_server common_test runtime_tools \
inets xmerl edoc erl_docgen
# These are only build if -a is given to otp_build or make is used directly
-ALL_ERLANG_APPLICATIONS = snmp otp_mibs appmon erl_interface asn1 jinterface \
+ALL_ERLANG_APPLICATIONS = snmp otp_mibs erl_interface asn1 jinterface \
wx debugger reltool gs \
ic mnesia crypto orber os_mon parsetools syntax_tools \
- pman public_key ssl toolbar tv observer odbc diameter \
+ public_key ssl observer odbc diameter \
cosTransactions cosEvent cosTime cosNotification \
cosProperty cosFileTransfer cosEventDomain et megaco webtool \
eunit ssh typer percept eldap dialyzer hipe
diff --git a/lib/appmon/AUTHORS b/lib/appmon/AUTHORS
deleted file mode 100644
index b727dae36d..0000000000
--- a/lib/appmon/AUTHORS
+++ /dev/null
@@ -1,5 +0,0 @@
-Original Authors and Contributors:
-
-Peter Lundell
-Stefan Anbratt
-Gunilla Arendt
diff --git a/lib/appmon/BUGS_AND_FIXES b/lib/appmon/BUGS_AND_FIXES
deleted file mode 100644
index fdac7f34c5..0000000000
--- a/lib/appmon/BUGS_AND_FIXES
+++ /dev/null
@@ -1,5 +0,0 @@
-
-***) reverse the list of children for a process, to match the starting
-order.
-
-***)
diff --git a/lib/appmon/Makefile b/lib/appmon/Makefile
deleted file mode 100644
index 62033ab92e..0000000000
--- a/lib/appmon/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Macros
-# ----------------------------------------------------
-
-SUB_DIRECTORIES = src priv doc/src
-
-SPECIAL_TARGETS =
-
-# ----------------------------------------------------
-# Default Subdir Targets
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_subdir.mk
-
diff --git a/lib/appmon/doc/man3/.gitignore b/lib/appmon/doc/man3/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/appmon/doc/man3/.gitignore
+++ /dev/null
diff --git a/lib/appmon/doc/pdf/.gitignore b/lib/appmon/doc/pdf/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/appmon/doc/pdf/.gitignore
+++ /dev/null
diff --git a/lib/appmon/doc/src/Makefile b/lib/appmon/doc/src/Makefile
deleted file mode 100644
index 7c93abe6d8..0000000000
--- a/lib/appmon/doc/src/Makefile
+++ /dev/null
@@ -1,120 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../../vsn.mk
-VSN=$(APPMON_VSN)
-APPLICATION=appmon
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-XML_APPLICATION_FILES = ref_man.xml
-XML_REF3_FILES = appmon.xml
-
-XML_PART_FILES = \
- part.xml \
- part_notes.xml
-
-XML_CHAPTER_FILES = \
- appmon_chapter.xml \
- notes.xml
-
-BOOK_FILES = book.xml
-
-XML_FILES = $(BOOK_FILES) $(XML_APPLICATION_FILES) $(XML_REF3_FILES) \
- $(XML_PART_FILES) $(XML_CHAPTER_FILES)
-
-GIF_FILES = \
- app_win.gif \
- listbox_win.gif \
- main_win.gif \
- pinfo_win.gif \
- note.gif
-
-# ----------------------------------------------------
-
-HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
-
-INFO_FILE = ../../info
-
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-$(HTMLDIR)/%.gif: %.gif
- $(INSTALL_DATA) $< $@
-
-docs: pdf html man
-
-$(TOP_PDF_FILE): $(XML_FILES)
-
-pdf: $(TOP_PDF_FILE)
-
-html: gifs $(HTML_REF_MAN_FILE)
-
-clean clean_docs:
- rm -rf $(HTMLDIR)/*
- rm -f $(MAN3DIR)/*
- rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
- rm -f errs core *~
- rm -f $(JD_HTML) $(JD_PACK)
-
-man: $(MAN3_FILES)
-
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
-
-debug opt:
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_docs_spec: docs
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(HTMLDIR)/* \
- "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
- $(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
-
-release_spec:
-
diff --git a/lib/appmon/doc/src/app_win.gif b/lib/appmon/doc/src/app_win.gif
deleted file mode 100644
index 06f21d04a9..0000000000
--- a/lib/appmon/doc/src/app_win.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/doc/src/app_win.ps b/lib/appmon/doc/src/app_win.ps
deleted file mode 100644
index 73d4cad278..0000000000
--- a/lib/appmon/doc/src/app_win.ps
+++ /dev/null
@@ -1,680 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./app_win.tmp.eps)
-%%CreationDate: (Tue Jun 12 17:59:02 2001)
-%%BoundingBox: 0 46 300 384
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 46 300 384
-userdict begin
-%%BeginData:
-DisplayImage
-0 46
-300.000000 338.000000
-12
-382 431
-1
-0
-0
-16
-ffffff
-000000
-e8e3dc
-708090
-b03060
-d9d9d9
-b3b3b3
-7f7f7f
-a3a3a3
-828282
-000000
-000000
-000000
-000000
-000000
-000000
-04ff04ff04ff04de05000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500041a050c04d1050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000408
-050c04050500040a0500040a050104030505040105050401050104040501040305030403
-050104020501044a05010400050104000501040005010411050104050504040205010404
-050104050501040005010409050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000407050004020500040205000402
-050004050500040a05000409050304020501040205010400050104020501040005010404
-050104020501040105010402050204010501044a05010403050104000501041105010403
-050104040500040805010408050104080500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004080500040205000402
-050004020500040505000403050204030500040905000401050004020501040205010400
-050104020501040005020402050204010501040305010401050204010501040105010404
-050004000502040005020401050104020501040105030401050104000501040105010400
-050104060503040105010400050104060501040005010400050104000501040005010400
-050104020503040105010400050504020500040605000400050104010501040005010400
-050104000503040005010409050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000407050004020500040205000402
-050004050500040205040402050004080501040105010401050104020501040005010402
-050104000502040205020401050104030501040105010400050004000501040105010404
-050104010501040105010400050104020501040005010401050104000502040005010400
-050204000501040405010401050104000502040005010404050104000502040005010400
-050104000502040005010400050104010501040005040400050104020500040205010400
-050004000500040005010400050104000502040005060400050104080500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004080504040205000402050004050500040105060401050004080501040105010401
-050504010505040105030400050304010501040305010401050104000500040005010408
-050104010501040105010401050104000501040505010400050104010501040005010401
-050104040501040105010400050104010501040405010401050104000501040005010400
-050104010501040005010401050104000502040205010402050004010500040105000401
-050004000501040005010401050104000502040105010400050104090500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004070500040605000402050004050500040105060401050004080505040105010405
-050104050501040005000400050004000501040105010403050104010501040105020408
-050104010501040105010401050104000501040205040400050104010501040005010401
-050104040501040105010400050104010501040405010401050104000501040005010400
-050104010501040005050400050104030501040205000400050004020500040105000400
-050104000501040105010400050104020501040005010408050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000408
-050004060500040205000405050004010506040105000407050104030501040005010405
-050104050501040005020400050104010501040305010401050104010502040805010401
-050104010501040205020402050104010501040005010401050104000501040105010404
-050104010501040005010401050104040501040105010400050104000501040005010401
-050104000501040405010403050104020500040005000401050104000500040105010400
-050104010501040005010402050104000501040905000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040705000406
-050004020500040505000402050404020500040705010403050104000501040505010405
-050104010500040105010402050104010501040205010402050104010501040405010401
-050104010501040205020402050104010501040005020400050104000502040005010404
-050104010501040005010401050104040501040005020400050104000501040005020400
-050104000501040105010400050104030501040005000400050004010501040005010402
-050104000501040005020400050104020501040005010408050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000408
-050804020500040505000403050204030500040705010403050104000501040505010405
-050104010500040105010403050304030501040205010401050104040501040105010401
-050104030501040305020400050304000501040105010400050104060503040105010401
-050104050501040005010400050104000501040005010400050104020503040105010404
-050104020500040805010401050104000501040005010402050104000501040905000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-05000400050004070500040a050004050500040a050004530500040a0501040405010442
-050404200500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004080500040a050004050500040a050004520501040a
-050104040501046905000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-05000400050004000500040005000400050004070500040a05000405050c04510501040b
-050104040501046805000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-0500040005000400050004000500040005000408050c04e5050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-050004000500040005000400050004000500040005000400050004000500040005000400
-0500040005000400050004000500040005000400050004000500040005000400050004ff
-04ff04ff041303ff03ff03fb00ff00ff00fa0900000105ff05790901000105ff05790901
-000105ff05790901000105ff05790901000105ff05790901000105040104050401000503
-010205120102050b01000506010005ff051801000502010005090102050c090100010504
-0100050f01000511010005020100050a010005ff0520010005020100050b0100050c0901
-000105040100050601020505010005030102050a01000502010005010100050001010502
-0104050201020503010205020100050001010503010205ff050301000502010005020102
-050501000502010005000101050509010001050401000508010005050100050201000502
-010005090100050201000501010105010100050301000506010005020100050201000501
-010105010100050101000502010005ff0502010005020100050101000502010005040100
-050201010501010005040901000105040103050501000505010005020100050201000509
-010005020100050101000502010005030100050601000502010005020100050101000502
-01000501010005ff05060104050101000502010005040100050201000502010005040901
-000105040100050801000505010005020104050901000502010005010100050201000503
-010005060100050201000502010005010100050201000502010205ff0503010005020100
-050101040504010005020100050201000504090100010504010005080100050501000502
-0100050d0100050201000501010005020100050301000506010005020100050201000501
-0100050201000505010005ff050201000502010005010100050801000502010005020100
-050409010001050401000508010005050100050201000502010005090100050201000501
-010105010100050301000506010005020100050201000501010005020100050101000502
-010005ff0502010005020100050101000502010005040100050201010501010005040901
-000105040100050801000505010005030102050b01020502010005000101050501010504
-01000503010205020100050201000502010205ff05030100050201000502010205050100
-0502010005000101050509010001052f010005ff053e0100050809010001052f010005ff
-053e0100050809010001052f010005ff053e010005080901000105ff05790901000105ff
-05790901000105ff05790901000109ff097b000009ff097c02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02730800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000020900450209004502090045024700000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000000080000000800
-000008000000080000000800000008000000080000000800000008000209004409000209
-004409000209004409000247080000000842010002090001054109010209000105410901
-020900010541090102470000084201000800020900010541090102090001054109010209
-000105410901024708000000084201000209000105410901020900010541090102090001
-054109010247000008420100080002090001054109010209000105410901020900010541
-090102470800000008120104080b0101081c010002090001051301020514010005140901
-02090001050e0104052d0901020900010512010005020100050401000503010205030102
-051509010247000008150100080c0100081d010008000209000105120100050201000513
-0100051409010209000105100100052f0901020900010512010005010100050c01000505
-010005150901024708000000081401000803010008000101080401000804010208160100
-020900010512010005060102050201000500010105030101050001000514090102090001
-051001000503010005000101050301020503010205030102051209010209000105120100
-050001000504010205050100050501000515090102470000081501000803010108010100
-080101040801010008020100081401000800020900010513010005040100050201000501
-010105010100050101000501010105140901020900010510010005030101050101000501
-010005020100050101000502010005010100050201000511090102090001051201010507
-010005050100050501000515090102470800000008140100080301000802010008030100
-080301000802010008150100020900010514010105020100050201000501010005020100
-050101000502010005140901020900010510010005030100050901000501010005050100
-050201000511090102090001051201000500010005060100050501000505010005150901
-024700000815010008030100080201000803010008030100080201000814010008000209
-000105160100050101040501010005020100050101000502010005140901020900010510
-010005030100050601030501010005050104051109010209000105120100050101000505
-010005050100050501000515090102470800000008140100080301000802010008030100
-080301000802010008150100020900010512010005020100050101000505010005020100
-050101000502010005140901020900010510010005030100050501000502010005010100
-050501000515090102090001051201000501010005050100050501000505010005150901
-024700000815010008030100080201000803010008030100080201000814010008000209
-000105120100050201000501010005020100050101000502010005010100050101010514
-090102090001051001000503010005050100050201000501010005020100050101000502
-010005110901020900010512010005020100050401000505010005050100051509010247
-080000000812010408010100080201000803010008040102081601000209000105130102
-050301020502010005020100050201010500010005140901020900010510010005030100
-050601030502010205030102051209010209000105120100050201000504010005050100
-050501000515090102470000084201000800020900010541090102090001054109010209
-000105410901024708000000084201000209000105410901020900010541090102090001
-054109010247000008420100080002090001054109010209000105410901020900010541
-090102470800000008420100020900010541090102090001054109010209000105410901
-024700000842010008000209000105410901020900010541090102090001054109010247
-080000000842010002090001054109010209000105410901020900010541090102470000
-084201000800020900010541090102090001054109010209000105410901024708000000
-084201000209000105410901020900010541090102090001054109010247000008000100
-080001000800010008000100080001000800010008000100080001000800010008000100
-080001000800010008000100080001000800010008000100080001000800010008000100
-080001000800010008000100080001000800010008000100080001000800010008000100
-080001000800010008000100080001000800010008000100080002090001094302090001
-094302090001094302470800010008000100080001000800010008000100080001000800
-010008000100080001000800010008000100080001000800010008000100080001000800
-010008000100080001000800010008000100080001000800010008000100080001000800
-010008000100080001000800010008000100080001000800010008000100080001000800
-01000800010002090000094402090000094402090000094402ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff022901ff017d05ff05ff05ff05ff05ff05ff
-05ff05ff05ff05ff05ff05ff05ff056d02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02d5014902ff023301000647010002ff023301000647010002ff02330100
-0647010002ff023301000647010002ff02330100060e0103060701010603010306020103
-060601030610010002ff02330100060d0101060101010604010306020101060101010600
-0101060101010604010106010101060f010002ff02330100060d01010601010106060101
-060201010601010106000101060101010604010106010101060f010002ff02330100060a
-010106000101060101010606010106020101060101010600010106010101060401010601
-010106010101060b010002ff023301000608010206010101060101010606010106020101
-0601010106000101060101010604010106010101060201020609010002ff023301000607
-010106030101060101010606010106020101060101010600010106010101060401010601
-0101060401010608010002ff023301000608010206010101060101010606010106020101
-0601010106000101060101010604010106010101060201020609010002ff02330100060a
-010106000101060101010601010106020101060201010601010106000101060101010601
-0101060001010601010106010101060b010002ff02330100060e01030602010106020101
-060301030602010306020101060101030610010002ff023301000647010002ff02330100
-0647010002ff023301000647010002ff023301000647010002ff023301000647010002ff
-023301000647010002ff023301220701012402ff0256070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff0258014902ff023301000647010002ff023301000647010002ff0233
-01000647010002ff023301000647010002ff02330100060e010306070101060301030603
-0101060701030610010002ff02330100060d010106010101060401030602010106010101
-060001030606010106010101060f010002ff02330100060d010106010101060601010602
-010106010101060201010606010106010101060f010002ff02330100060a010106000101
-0601010106060101060201010601010106020101060601010601010106010101060b0100
-02ff02330100060801020601010106010101060601010602010106010101060201010606
-010106010101060201020609010002ff0233010006070101060301010601010106060101
-0602010106010101060201010606010106010101060401010608010002ff023301000608
-010206010101060101010606010106020101060101010602010106060101060101010602
-01020609010002ff02330100060a01010600010106010101060101010602010106020101
-060101010602010106030101060001010601010106010101060b010002ff02330100060e
-01030602010106020101060301030603010106030101060101030610010002ff02330100
-0647010002ff023301000647010002ff023301000647010002ff023301000647010002ff
-023301000647010002ff023301000647010002ff023301220701012402ff0256070102ff
-027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff
-027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff
-027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff
-027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff
-027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff
-027b070102ff027b070102ff027b070102ff0258014902ff023301000647010002ff0233
-01000647010002ff023301000647010002ff023301000647010002ff0233010006470100
-02ff023301000647010002ff023301000600010006000102060001020601010106020101
-060101030601010106000101060101010600010106090103060101010601010106000101
-060001010604010002ff0233010006000101060101010601010106000101060201010600
-010106010101060001020600010106000102060001010607010106010101060001010601
-010106000102060001010603010002ff0233010006000101060101010601010106010101
-060001010605010106000101060101010600010106010101060701020603010106010101
-06000101060101010603010002ff02330100060001010601010106010101060101010600
-010106020104060001010601010106000101060101010609010206010101060101010600
-0101060101010603010002ff023301000600010106010101060101010602010206020101
-0601010106000101060101010600010106010101060a0102060001010601010106000101
-060101010603010002ff0233010006000101060101010601010106020102060201010601
-010106000102060001010600010206000101060701010601010106000101060001020600
-0102060001010603010002ff023301000600010106010101060101010603010106030102
-060001030600010106010101060001010609010306020101060001010600010106000101
-0604010002ff02330100060e0100060a010106040101061901010607010002ff02330100
-060d0101060a010106040101061901010607010002ff02330100060c0101060b01010604
-010106040106060d01010607010002ff023301000647010002ff023301000647010002ff
-023301000647010002ff023301220701012402ff0256070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701
-02ff0254074802ff0233074902ff023307010245070102ff023307010245070102ff0233
-07010245070102ff023307010245070102ff023307010245070102ff0233070102450701
-02ff023307010245070102ff023307010245070102ff023307010245070102ff02330701
-0245070102ff023307010245070102ff023307010245070102ff023307010245070102ff
-023307010245070102ff023307010245070102ff023307010245070102ff023307010245
-070102ff021e012d0212013b02ff02000100062b0100021201000639010002ff02000100
-062b0100021201000639010002ff02000100062b0100021201000639010002ff02000100
-062b0100021201000639010002ff02000100062b010002120100063201010604010002ff
-02000100062b010002120100063201010604010002ff0200010006000100060001020600
-010206010101060201010601010306010101060101010600010106000101060401000212
-010006010100060001020600010206010101060201010601010306010101060201010601
-01030601010106000101060101030603010002ff02000100060001010601010106010101
-060001010602010106000101060101010600010106010101060001020600010106030100
-021201000601010106010101060101010600010106020101060001010601010106000101
-0602010106000101060101010600010206000101060101010604010002ff020001000600
-010106010101060101010601010106000101060101020603010106010101060001010601
-010106030100021201000601010106010101060101010601010106000101060101010601
-0101060101010600010106010101060101010600010106010101060101010604010002ff
-020001000600010106010101060101010601010106000101060301020601010106010101
-060001010601010106030100021201000601010106010101060101010601010106000101
-060101050601010106000101060101050600010106010101060101010604010002ff0200
-010006000101060101010601010106020102060501020600010106010101060001010601
-010106030100021201000601010106010101060101010602010206020101060601020602
-01010604010106010101060101010604010002ff02000100060001010601010106010101
-060201020602010106010101060001010600010206000102060001010603010002120100
-060101010601010106010101060201020602010106010101060201020602010106010101
-060001010601010106010101060001000602010002ff0200010006000101060101010601
-010106030101060301030602010106000101060001010600010106040100021201000601
-010106010101060101010603010106030103060401000604010306010101060101010602
-01010603010002ff02000100060e0100061101010607010002120100060f010006280100
-02ff02000100060d0101061101010607010002120100060e01010628010002ff02000100
-060c0101061201010607010002120100060d01010629010002ff02000100062b01000212
-01000639010002ff02000100062b0100021201000639010002ff02000100062b01000212
-01000639010002ff02000114070101160212013b02ff0215070102ff027b070102ff027b
-070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b
-070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b
-070102ff025c074b02ff0230074c02ff023007010248070102ff023007010248070102ff
-023007010248070102ff023007010248070102ff023007010248070102ff023007010248
-070102ff023007010248070102ff023007010248070102ff023007010248070102ff0230
-07010248070102ff023007010248070102ff023007010248070102ff0230070102480701
-02ff023007010248070102ff023007010248070102ff023007010248070102ff02300701
-0248070102ff021001420212012d02f901000640010002120100062b010002f901000640
-010002120100062b010002f901000640010002120100062b010002f90100064001000212
-0100062b010002f901000640010002120100061401020613010002f90100064001000212
-0100061301010615010002f9010006020100060001020600010206010101060201010601
-010306020103060101010600010306020101060101030601010106000101060301000212
-010106000102060001020601010106020101060001030601010306010100060001020600
-01020603010002f901000602010106010101060101010600010106020101060001010601
-010106000101060101010600010606020101060001010601010106000104060301000212
-010206010101060101010600010106020101060101010601010106010101060001010601
-0101060101010602010002f9010006020101060101010601010106010101060001010601
-010206030101060101010600010206020101060001010601010106010101060001020605
-010002120102060101010601010106010101060001010602010106010102060301010601
-0101060101010602010002f9010006020101060101010601010106010101060001010603
-010206010105060001010603010106000101060101050600010106060100021201020601
-010106010101060101010600010106020101060301020601010106010101060101010602
-010002f90100060201010601010106010101060201020605010206000101060401010604
-010206020101060401010606010002120102060101010601010106020102060301010604
-01020600010106010101060101010602010002f901000602010106010101060101010602
-010206020101060101010600010106010101060001010604010206020101060101010600
-010106060100021201020601010106010101060201020603010106010101060101010600
-010106010101060101010602010002f90100060201010601010106010101060301010603
-010306020103060101010605010006040103060101010606010002120102060101010601
-01010603010106030101060201030601010106010101060101010602010002f901000610
-0100062e010002120100060d0100061c010002f90100060f0101062e010002120100060c
-0101061c010002f90100060e0101062f010002120100060b0101061d010002f901000640
-010002120100062b010002f901000640010002120100062b010002f90100064001000212
-0100062b010002f901420212012d02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff
-02ff0236
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 46 300 384
-%%EOF
diff --git a/lib/appmon/doc/src/appmon.xml b/lib/appmon/doc/src/appmon.xml
deleted file mode 100644
index 2707ea4d9a..0000000000
--- a/lib/appmon/doc/src/appmon.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>1996</year>
- <year>2013</year>
- <holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- The Initial Developer of the Original Code is Ericsson AB.
- </legalnotice>
-
- <title>appmon</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <module>appmon</module>
- <modulesummary>A graphical node and application process tree viewer.</modulesummary>
- <description>
- <warning>
- <p>
- The Appmon application has been superseded by the Observer application.
- Appmon will be removed in R16.
- </p>
- </warning>
- <p>The application monitor Appmon is a graphical utility used to
- supervise applications executing either locally or on remote nodes.
- The process tree of an application can furthermore be monitored.</p>
- </description>
- <funcs>
- <func>
- <name>start()</name>
- <fsummary>Start Appmon.</fsummary>
- <desc>
- <p>Starts Appmon.</p>
- </desc>
- </func>
- <func>
- <name>stop()</name>
- <fsummary>Stop Appmon.</fsummary>
- <desc>
- <p>Stops Appmon.</p>
- </desc>
- </func>
- </funcs>
-
- <section>
- <title>See Also</title>
- <p>Appmon User's Guide</p>
- </section>
-</erlref>
-
diff --git a/lib/appmon/doc/src/appmon_chapter.xml b/lib/appmon/doc/src/appmon_chapter.xml
deleted file mode 100644
index 1b6054f622..0000000000
--- a/lib/appmon/doc/src/appmon_chapter.xml
+++ /dev/null
@@ -1,328 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2000</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Appmon</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>appmon_chapter.xml</file>
- </header>
-
- <section>
- <title>Introduction</title>
- <warning>
- <p>
- The Appmon application has been superseded by the Observer application.
- Appmon will be removed in R16.
- </p>
- </warning>
- <p>The application monitor Appmon is a graphical node and application viewer. The tool shows an overview of all applications on all known nodes, and it is possible to view the process tree for an application running on any of the nodes.</p>
- <note>
- <p>If the Appmon code is not available at a node, for example an
- embedded node, this node is ignored by Appmon and is not shown
- in the Appmon window.</p>
- </note>
- </section>
-
- <section>
- <title>Getting Started with Appmon</title>
- <p>Start Appmon by calling <c><![CDATA[appmon:start()]]></c>. It will start the <seealso marker="#main_win">main window</seealso> showing a load meter and the applications running at the current node. By clicking on one of the applications a window showing the process tree of the application will be opened, the <seealso marker="#app_win">application window</seealso>.</p>
- <p>The main window is equipped with a menubar from which it is possible to:</p>
- <list type="bulleted">
- <item>exit Appmon</item>
- <item>perform some operations on the node</item>
- <item>set how information should be displayed</item>
- <item>select which node to show</item>
- <item>open help (this document).</item>
- </list>
- <p>The application window shows the process tree for an application with each process displayed as a box. It is possible to view information about the processes, to send messages to them, and to trace and kill them.</p>
- </section>
-
- <section>
- <title>The Main Window</title>
- <marker id="main_win"></marker>
- <p>The main window shows a load meter and all applications running at the displayed node. Select which node to display in the window by choosing the node name from the Nodes menu. It is also possible to run Appmon in a many-window mode where a new instance of the main window is opened for each node to be displayed.</p>
- <image file="main_win.gif">
- <icaption>The Main Window.</icaption>
- </image>
- <p>The load meter shows load measured as processor time, or as the length of the ready queue.</p>
- <p>Every application running at the node is shown as a button. Clicking the button will open the application window showing the process tree for the application.</p>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Show List Box...</em></tag>
- <item>This will open the <seealso marker="#listbox_win">listbox window</seealso> which lists all nodes and applications. This window can be more easy to use than the normal, graphical user interface when the system consists of a large number of nodes and/or applications.</item>
- <tag><em>Close</em></tag>
- <item>Close the window. If no other instance of the main window exists, Appmon will be stopped.</item>
- <tag><em>Exit</em></tag>
- <item>Stop Appmon.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Actions Menu</title>
- <taglist>
- <tag><em>Reboot</em></tag>
- <item>Call <c><![CDATA[init:reboot()]]></c> at the currently displayed node. This will stop the node. If the <c><![CDATA[-heart]]></c> system flag was given, the heart program will try to reboot the system.</item>
- <tag><em>Restart</em></tag>
- <item>Call <c><![CDATA[init:restart()]]></c> at the currently displayed node. This will restart the node.</item>
- <tag><em>Stop</em></tag>
- <item>Call <c><![CDATA[init:stop()]]></c> at the currently displayed node. This will stop the node.</item>
- <tag><em>Ping</em></tag>
- <item>Call <c><![CDATA[net:ping(Node)]]></c> where <c><![CDATA[Node]]></c> is the currently displayed node. This can be useful when the connection to the node has been lost.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Options Menu</title>
- <taglist>
- <tag><em>One window/Many windows</em></tag>
- <item>Select one of these radio button to run Appmon in one-window or many-window mode. In many-windows mode, a new instance of the main window is opened for each node to be displayed. The default value is one-window mode.</item>
- <tag><em>Load: time/queue</em></tag>
- <item>Select one of these radio buttons to either calculate load as processor time or as the length of the ready queue, which is the number of processes ready to execute. By default, the load is calculated as processor time.</item>
- <tag><em>Load: progressive/linear</em></tag>
- <item>Select one of these radio buttons to show load either according to a progressive or a linear scale. By default, the load is shown according to a progressive scale. </item>
- </taglist>
- </section>
-
- <section>
- <title>The Nodes Menu</title>
- <p>The Nodes menu contains all currently and previously known nodes,
- where the Appmon code is available. Nodes where the Appmon code is
- not available, for example embedded nodes, are ignored by Appmon and
- are not shown.</p>
- <p>Selecting a node from the Nodes menu will cause that node to be displayed in either the same window, or in a new window, depending on if Appmon is run in one-window or many-windows mode. If the connection to the node has been lost, this will be shown in the window.</p>
- </section>
-
- <section>
- <title>The Help Menu</title>
- <taglist>
- <tag><em>Help</em></tag>
- <item>Selecting Help from the Help menu will cause the HTML version of the Appmon User's Guide (this document) to be displayed. Currently this function requires Netscape to be up and running.</item>
- </taglist>
- </section>
- </section>
-
- <section>
- <title>The Application Window</title>
- <marker id="app_win"></marker>
- <p>The application window shows the process tree for an application. The window title contains the application name and the node name. The window also contains a menubar and a toolbar.</p>
- <p>The application window can be opened from the main window by clicking on the button denoting the application, or from the listbox window by selecting the application and clicking on the <em>Load</em> button.
- </p>
- <image file="app_win.gif">
- <icaption>The Application Window.</icaption>
- </image>
- <p>The application can be shown either as a strict supervision tree, or as a process view with all linked processes. In supervision mode, the tree-gathering and -building algorithm assumes conformance to the OTP design principles.</p>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Close</em></tag>
- <item>Close the application window.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Options Menu</title>
- <taglist>
- <tag><em>Refresh</em></tag>
- <item>Refresh the application window.</item>
- <tag><em>Sup. view/ Proc. view</em></tag>
- <item>Select one of these radio buttons to show the application as a strict supervision tree, or as a process view with all linked processes. By default, the process view is used.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Toolbar</title>
- <p>The toolbar consists of four buttons: <em>Info</em>, <em>Send</em>, <em>Trace</em> and <em>Kill</em>. First select one of these buttons and then select to which process the action should apply by clicking on a process in the process tree. By default <em>Info</em> is selected which means that clicking on a process, without selecting <em>Send</em>, <em>Trace</em> or <em>Kill</em> first, will open the <seealso marker="#pinfo_win">process information window</seealso>.</p>
- <taglist>
- <tag><em>Info</em></tag>
- <item>Open the <seealso marker="#pinfo_win">process information window</seealso>, which displays the information about the process given by <c><![CDATA[process_info(Pid)]]></c>.</item>
- <tag><em>Send</em></tag>
- <item>Send a message to a process. A window is opened where the message can be specified. Click <em>Ok</em> to send the message or <em>Cancel</em> to cancel.</item>
- <tag><em>Trace</em></tag>
- <item>Switch on OTP tracing of a process. <c><![CDATA[sys:trace(Pid,true)]]></c> is called. Selecting <em>Trace</em> a second time for the same process will switch the tracing off instead.</item>
- <tag><em>Kill</em></tag>
- <item>Kill a process. <c><![CDATA[exit(Pid,kill)]]></c> is called.</item>
- </taglist>
- </section>
- </section>
-
- <section>
- <title>The Listbox Window</title>
- <marker id="listbox_win"></marker>
- <p>The listbox window lists all nodes and applications. This window can be more easy to use than the normal, graphical user interface when the system consists of a large number of nodes and/or applications.</p>
- <image file="listbox_win.gif">
- <icaption>The Listbox Window.</icaption>
- </image>
- <p>The window contains three buttons:</p>
- <taglist>
- <tag><em>Load</em></tag>
- <item>First selecting an application and then clicking the <em>Load</em> button will open the <seealso marker="#app_win">application window</seealso> for that application.</item>
- <tag><em>Clear</em></tag>
- <item>De-select any selected node or application name.</item>
- <tag><em>Close</em></tag>
- <item>Close the listbox window.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Process Information Window</title>
- <marker id="pinfo_win"></marker>
- <p>The process information window shows information about different processes as given by <c><![CDATA[process_info(Pid)]]></c>.</p>
- <image file="pinfo_win.gif">
- <icaption>The Process Information Window.</icaption>
- </image>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Close</em></tag>
- <item>Close the process information window.</item>
- </taglist>
- </section>
- </section>
-
- <section>
- <title>Using the Web Based version of Appmon</title>
-
- <section>
- <title>Introduction</title>
- <p>The web based version of Appmon is an alternative version of
- Appmon. The main difference between the web based version of
- Appmon and the original version of Appmon is that the web based
- version of Appmon can monitor nodes and applications on nodes where
- Appmon not is installed.</p>
- </section>
-
- <section>
- <title>Start the Web Based version of Appmon</title>
- <p>To start the web based user interface configure and start
- WebTool, see <em>WebTool User's Guide</em>. The web based
- version of Appmon is compatible with the browsers
- Netscape Navigator and Internet Explorer 4.0 and higher.</p>
- <p>When WebTool is started, start the Web based version of Appmon via
- WebTool. If WebTool succeeded to start the web based version of Appmon
- a link named WebAppmon will appear in the topmost frame. Click on the link and
- the main frame of the browser will show two frames.The left frame will
- show a combo box for node selection and a list of all applications on
- the currently selected node. </p>
- <p>In the left frame it is possible to:</p>
- <list type="bulleted">
- <item>Select which node to supervise.</item>
- <item>Select an application to view its process tree.</item>
- <item>Select an application to view its specification.</item>
- </list>
- <p>The right frame shows the selected information, either the application
- specification or the process tree and process information.</p>
- </section>
-
- <section>
- <title>Selecting a Different Node</title>
- <p>In the top of the left frame there is a combo box with all known
- nodes. The name of the node that is monitored is the node whose name
- is visible in the combo box. At startup the node on which the web
- based version of Appmon is running on will be monitored.</p>
- <p>To change node, select another node in the combo box, and
- the list of running applications will change to the applications
- that runs on the selected node.</p>
- </section>
-
- <section>
- <title>Viewing the Process Tree of an Application</title>
- <p>To view the process tree of an application click on the application
- name in the list of applications. The process tree of the selected
- application will then appear in the right frame.</p>
- <p>The processes in the process tree can have three different colors:</p>
- <taglist>
- <tag><em>Blue</em></tag>
- <item>The relation to the process above in the process hierarchy
- is a primary relation. That means that the process above is the
- only process that link to it or the process above is a supervisor. </item>
- <tag><em>Red</em></tag>
- <item>The relation to the process above in the process hierarchy is a secondary
- relation. This means that more than one process has a relation to it
- and the process above in the hierarchy is not a supervisor.</item>
- <tag><em>Black</em></tag>
- <item>The process isn't a regular process instead it's a Port. The name of
- the process will also begin with <em>Port:</em></item>
- </taglist>
- <p>If the process name begins with <em>Runs on another node:</em> The
- monitored application runs on more than one node and this process is
- the first process on a branch that runs on another node. </p>
- </section>
-
- <section>
- <title>Viewing the Application Specification</title>
- <p>After the application name in the list of applications there are a
- link named <em>Spec</em>, Click on this link and the application
- specification will appear in the right frame. The application
- specification is the data in the <em>.app</em> file of the selected
- application. </p>
- </section>
-
- <section>
- <title>Select Process View</title>
- <p>In the top of the page that shows the process tree, there are three
- radio buttons for selecting which processes that shall be included
- in the process tree. The default mode is that all processes
- that one process in the application tree has a relation to is
- included. It's possible to filter which of the processes
- in the process tree that will be included. To reduce the number
- of processes in the process tree select one of the radio buttons
- on the top of the page </p>
- <taglist>
- <tag><em>All processes</em></tag>
- <item>All processes that at least one process in the application
- tree has a link to.</item>
- <tag><em>Supervised processes</em></tag>
- <item>All processes that are supervised by one of the supervisors in
- the application</item>
- <tag><em>Supervisors only</em></tag>
- <item>Only the processes that actually are supervisors in the
- applications supervision tree is included</item>
- </taglist>
- </section>
-
- <section>
- <marker id="proc_info"></marker>
- <title>Process Information</title>
- <p>To see more information about a specific process click on the process
- name and more information will be loaded under the application tree.</p>
- <p>The Process information page shows information about a process as given
- by the <c><![CDATA[process_info(Pid)]]></c>, but formatted in a more human readable form.</p>
- </section>
-
- <section>
- <title>Trace a process</title>
- <p>If the link after the process name in the process tree is <em>start trace</em>
- the process is not traced. If the link is <em>stop trace</em> then the process
- id traced.</p>
- <p>To toggle the trace flag for a process click on the link <em>start trace</em> or
- <em>stop trace</em> after the process name in the process tree.</p>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/appmon/doc/src/book.xml b/lib/appmon/doc/src/book.xml
deleted file mode 100644
index c9979c6050..0000000000
--- a/lib/appmon/doc/src/book.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE book SYSTEM "book.dtd">
-
-<book xmlns:xi="http://www.w3.org/2001/XInclude">
- <header titlestyle="normal">
- <copyright>
- <year>1997</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>appmon</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev>2.0</rev>
- </header>
- <insidecover>
- </insidecover>
- <pagetext>Appmon</pagetext>
- <preamble>
- </preamble>
- <parts lift="no">
- <xi:include href="part.xml"/>
- </parts>
- <applications>
- <xi:include href="ref_man.xml"/>
- </applications>
- <releasenotes>
- <xi:include href="notes.xml"/>
- </releasenotes>
- <listofterms></listofterms>
- <index></index>
-</book>
-
diff --git a/lib/appmon/doc/src/fascicules.xml b/lib/appmon/doc/src/fascicules.xml
deleted file mode 100644
index 37feca543f..0000000000
--- a/lib/appmon/doc/src/fascicules.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE fascicules SYSTEM "fascicules.dtd">
-
-<fascicules>
- <fascicule file="part" href="part_frame.html" entry="no">
- User's Guide
- </fascicule>
- <fascicule file="ref_man" href="ref_man_frame.html" entry="yes">
- Reference Manual
- </fascicule>
- <fascicule file="part_notes" href="part_notes_frame.html" entry="no">
- Release Notes
- </fascicule>
- <fascicule file="" href="../../../../doc/print.html" entry="no">
- Off-Print
- </fascicule>
-</fascicules>
-
diff --git a/lib/appmon/doc/src/listbox_win.gif b/lib/appmon/doc/src/listbox_win.gif
deleted file mode 100644
index 38258b7552..0000000000
--- a/lib/appmon/doc/src/listbox_win.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/doc/src/listbox_win.ps b/lib/appmon/doc/src/listbox_win.ps
deleted file mode 100644
index 0f1e2eeda0..0000000000
--- a/lib/appmon/doc/src/listbox_win.ps
+++ /dev/null
@@ -1,741 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./listbox_win.tmp.eps)
-%%CreationDate: (Tue Jun 12 18:01:07 2001)
-%%BoundingBox: 0 85 200 356
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 85 200 356
-userdict begin
-%%BeginData:
-DisplayImage
-0 85
-200.000000 271.000000
-12
-325 441
-1
-0
-0
-8
-ffffff
-000000
-708090
-b03060
-d9d9d9
-808080
-c3c3c3
-000000
-03ff03ff03ff036704000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003000400031a040c03cc0400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000308040c03050400030a0400030a04010343040103240401031904010300
-0401030f040103010401031e040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003070400030204000302
-04000302040003050400030a040003090403034204010324040103190401031204010321
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003080400030204000302040003020400030504000303
-040203030400030904000301040003010401030004010301040103000401030104000300
-040203000402030204030301040103000401030204010304040103000401030204030302
-040103000401030104030302040303060403030104010300040103020401030004010305
-040303010401030004010301040103000401030104010300040103010403030204030301
-04030300040103010403030104010300040103020403030a040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003070400030204000302040003020400030504000302040403020400030804010301
-040103000402030004010300040203000401030004010301040103010401030004010301
-040103000402030004010301040103040402030004010300040103010401030004010300
-040203000401030104010300040103010401030404010301040103000402030004010300
-040103000402030404010301040103000402030004010300040203000401030004010300
-040103000401030104010300040103010401030104010301040103000401030104010300
-040203000401030004010301040103080400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030804040302
-040003020400030504000301040603010400030804010301040103000401030104010300
-040103010401030004010301040103010401030004010301040103000401030104010308
-04010301040103000401030104010300040103010401030004010301040103000402030b
-040103000401030104010300040103010401030804010300040103010401030004010301
-040103000401030004010300040103080401030104010301040103000401030104010300
-04010301040103000402030c040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003070400030604000302
-040003050400030104060301040003080405030004010301040103000401030104010300
-040103010401030104010300040103010401030004010301040103080401030104010300
-040103010401030004010301040103000405030204020306040403000401030104010300
-040103010401030504040300040103010401030004010301040103000401030004010300
-040103050404030104010301040103000401030104010300040103010401030204020309
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003080400030604000302040003050400030104060301
-040003070401030304030301040103000401030104010300040103010401030104010300
-040103010401030004010301040103080401030104010300040103010401030004010301
-040103000401030704020304040103010401030004010301040103000401030104010304
-040103010401030004010301040103000401030104010300040103000401030004010304
-040103010401030104010301040103000401030104010300040103010401030304020309
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070400030604000302040003050400030204040302
-040003070401030304040300040103000402030004010300040103010401030104010300
-040103010401030004010301040103010401030404010301040103000401030104010300
-040103000402030004010301040103000401030104010304040103010401030004010301
-040103000401030004020304040103010401030004020300040103000402030004010300
-040103000401030004010301040103000401030104010301040103000402030004010301
-040103000401030104010300040103010401030804000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000308
-040803020400030504000303040203030400030704010303040303000401030104010300
-040103010401030104010301040103010403030104010301040103010401030404010301
-040103010403030204010300040103010403030204030306040203000403030104010301
-040103000401030504020300040303000401030104010300040103010401030004010301
-04030302040203000401030104010300040103010403030104010301040103010403030a
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070400030a040003050400030a0400030f04010304
-0401036c040103040401033d040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003080400030a04000305
-0400030a0400030f040103040401036c040103040401033e040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003070400030a04000305040c030f040103040401036c040103040401033d04000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000308040c03e00400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003000400030004000300040003ff03ff03a1
-02ff02ff028904ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff046b0512
-04ff043105110000047e05b0040105010606050006060001047e05af0000040105010605
-0000050006060001047e050104ac00010401050106050000050106050001047e050104ac
-00010401050106040001050106050001047e0501043301000430010004260100041d0001
-04010501060400010400050106040001047e050104040100040401000403010204020100
-0415010004040100040001000405010004060100040b010004030102040b0100040b0102
-0405010004120100041c000104010501060300010401050106040001047e050104040100
-040b010004020100041501000403010004020100040c010004120100040b0100040d0100
-04190100041c000104010501060300010402050106030001047e05010401010104000100
-040201020405010004020100040001010403010204020100040001010402010404010100
-0400010204020102040301010400010004010100040001010403010204050100040a0100
-04050102040501000403010204020100040201000402010204050100041b000104010501
-060200010403050106030001047e05010400010004010101040401000405010004020101
-040101000401010004020100040101010401010004030100040301000400010004000100
-04040100040201000401010104010101040101000404010004050100040a010004040100
-0402010004040100040501000402010004020100040101000402010004040100041b0001
-04010501060200010404050106020001047e050104000100040201000404010004050100
-040201000402010004010100040201000401010004070100040301000400010004000100
-040401000402010004020100040101000408010004050100040a01000408010004040100
-040501000402010004020100040101000402010004040100041b00010401050106010001
-0405050106020001047e0501040001000402010004040100040501000402010004020100
-040101040401010004070100040301000400010204040100040201000402010004010100
-0408010004050100040a0100040501030404010004050100040301000400010004020104
-04040100041b000104010501060100010406050106010001047e05010400010004020100
-040401000405010004020100040201000401010004050100040701000403010004080100
-0402010004020100040101000408010004050100040a0100040401000402010004040100
-0405010004030100040001000402010004080100041b0001040105010600000104070501
-06010001047e050104000100040101010404010004050100040201010401010004010100
-040201000401010004070100040401000401010004040100040201000401010104010100
-0408010004050100040b0100040301000402010004040100040501000404010004030100
-0402010004030100041c000104010501060000010408050106000001047e050104010101
-040001000404010004050100040201000400010104030102040201000408010104030101
-040501000403010104000100040101000408010004050100040b01000404010304040100
-04050100040401000404010204040100041c0001040105010001050b06000001047e0501
-0465010004260100041d0001040105010000050d0001047e050104ac000104010501060e
-0001047e050104ac0001040105010010047e050104ac000104010501000d05000001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104160101040001000402010004020100040201020402
-010004000101040201000400010104750001040105010001040a05010001047e05010416
-010004000100040001000401010004020100040101000402010004010101040101000401
-01010401010004740001040105010001040a05010001047e050104160100040001000400
-010004020100040101000405010004010100040201000401010004020100047400010401
-05010001040a05010001047e050104160100040001000400010004020100040101000402
-01030401010004020100040101000402010004740001040105010001040a05010001047e
-050104160100040001000400010004030100040001000401010004020100040101000402
-0100040101000402010004740001040105010001040a05010001047e0501041601000400
-010004000100040301010402010004020100040101010401010004010101040101000474
-0001040105010001040a05010001047e0501041601000400010004000100040401000403
-01030401010004000101040201000400010104750001040105010001040a05010001047e
-050104200100040901000405010004780001040105010001040a05010001047e0501041d
-010004000100040a01000405010004780001040105010001040a05010001047e0501041e
-0100040b01000405010004780001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e05010416010004220102046e00010401
-05010001040a05010001047e05010416010004240100046e0001040105010001040a0501
-0001047e0501041601000401010004030102040201000400010104020100040001010403
-010204050100046e0001040105010001040a05010001047e050104160100040001000403
-01000402010004010101040101000401010104010100040101000402010004040100046e
-0001040105010001040a05010001047e0501041601010404010004020100040101000405
-010004020100040101000402010004040100046e0001040105010001040a05010001047e
-050104160101040401040401010004050100040201000401010404040100046e00010401
-05010001040a05010001047e050104160100040001000403010004050100040501000402
-01000401010004080100046e0001040105010001040a05010001047e0501041601000401
-01000402010004020100040101000405010004020100040101000402010004040100046e
-0001040105010001040a05010001047e0501041601000402010004020102040201000405
-0100040201000402010204050100046e0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e0501042c0102047c0001040105010001040a05010001047e
-0501042e0100047c0001040105010001040a05010001047e050104170102040301020403
-010204050100047c0001040105010001040a05010001047e050104160100040201000401
-010004020100040101000402010004040100047c0001040105010001040a05010001047e
-050104160100040901000401010004080100047c0001040105010001040a05010001047e
-050104170102040301030402010204050100047c0001040105010001040a05010001047e
-0501041a010004010100040201000405010004040100047c0001040105010001040a0501
-0001047e050104160100040201000401010004020100040101000402010004040100047c
-0001040105010001040a05010001047e050104170102040301030402010204050100047c
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e0501043301000430010004260100041d0001040105010001
-040a05010001047e050104040100040f0100041501000404010004000100040501000406
-0100040b010004030102040b0100040b01020405010004120100041c0001040105010001
-040a05010001047e050104040100040f0100041501000403010004020100040c01000412
-0100040b0100040d010004190100041c0001040105010001040a05010001047e05010401
-010104000100040201020403010104000100040101000400010104030102040201000400
-010104020104040101000400010204020102040301010400010004010100040001010403
-010204050100040a01000405010204050100040301020402010004020100040201020405
-0100041b0001040105010001040a05010001047e05010400010004010101040101000402
-010004010100040101010401010104010100040101000402010004010101040101000403
-010004030100040001000400010004040100040201000401010104010101040101000404
-010004050100040a01000404010004020100040401000405010004020100040201000401
-01000402010004040100041b0001040105010001040a05010001047e0501040001000402
-010004010100040201000401010004020100040101000402010004010100040201000401
-010004070100040301000400010004000100040401000402010004020100040101000408
-010004050100040a01000408010004040100040501000402010004020100040101000402
-010004040100041b0001040105010001040a05010001047e050104000100040201000401
-010004020100040101000402010004010100040201000401010404010100040701000403
-010004000102040401000402010004020100040101000408010004050100040a01000405
-0103040401000405010004030100040001000402010404040100041b0001040105010001
-040a05010001047e05010400010004020100040101000402010004010100040201000401
-010004020100040101000405010004070100040301000408010004020100040201000401
-01000408010004050100040a010004040100040201000404010004050100040301000400
-01000402010004080100041b0001040105010001040a05010001047e0501040001000401
-010104010100040201000401010004010101040101010401010004010100040201000401
-010004070100040401000401010004040100040201000401010104010100040801000405
-0100040b0100040301000402010004040100040501000404010004030100040201000403
-0100041c0001040105010001040a05010001047e05010401010104000100040201020403
-010104000100040101000400010104030102040201000408010104030101040501000403
-010104000100040101000408010004050100040b01000404010304040100040501000404
-01000404010204040100041c0001040105010001040a05010001047e0501041201000451
-010004260100041d0001040105010001040a05010001047e0501040e0100040201000498
-0001040105010001040a05010001047e0501040f010204990001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e05010416
-010004220102046e0001040105010001040a05010001047e05010416010004240100046e
-0001040105010001040a05010001047e0501041601000401010004030102040201000400
-010104020100040001010403010204050100046e0001040105010001040a05010001047e
-050104160100040001000403010004020100040101010401010004010101040101000401
-01000402010004040100046e0001040105010001040a05010001047e0501041601010404
-010004020100040101000405010004020100040101000402010004040100046e00010401
-05010001040a05010001047e050104160101040401040401010004050100040201000401
-010404040100046e0001040105010001040a05010001047e050104160100040001000403
-01000405010004050100040201000401010004080100046e0001040105010001040a0501
-0001047e0501041601000401010004020100040201000401010004050100040201000401
-01000402010004040100046e0001040105010001040a05010001047e0501041601000402
-0100040201020402010004050100040201000402010204050100046e0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401
-05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac
-0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e
-050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501
-0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001
-040a05010001047e050104ac0001040105010001040a05010001040900630410050104ac
-0001040105010001040a050100010409006205000410050104ac0001040105010001040a
-0501000104090001045f05010410050104ac0001040105010001040a0501000104090001
-045f05010410050104ac0001040105010001040a0501000104090001045f050104100501
-04ac0001040105010001040a0501000104090001045f05010410050104ac000104010501
-0001040a0501000104090001045f05010410050104ac0001040105010001040a05010001
-04090001045f05010410050104ac0001040105010001040a0501000104090001045f0501
-0410050104ac0001040105010001040a0501000104090001042101000417010004230501
-0410050104ac0001040105010001040a0501000104090001042101000417010004230501
-0410050104ac0001040105010001040a0501000104090001042101000406010204030102
-0403010104000100042305010410050104ac0001040105010001040a0501000104090001
-042101000405010004020100040101000402010004010100040101010423050104100501
-04ac0001040105010001040a050100010409000104210100040501000402010004050100
-0401010004020100042305010410050104ac0001040105010001040a0501000104090001
-042101000405010004020100040201030401010004020100042305010410050104ac0001
-040105010001040a05010001040900010421010004050100040201000401010004020100
-0401010004020100042305010410050104ac0001040105010001040a0501000104090001
-042101000405010004020100040101000402010004010100040101010423050104100501
-04ac0001040105010001040a050100010409000104210104040201020403010304020101
-04000100042305010410050104ac0001040105010001040a0501000104090001045f0501
-0410050104ac0001040105010001040a0501000104090001045f05010410050104ac0001
-040105010001040a0501000104090001045f05010410050104ac0001040105010001040a
-0501000104090001045f05010410050104ac0001040105010001040a0501000104090001
-045f05010410050104ac0001040105010001040a0501000104090001045f050104100501
-04ac0001040105010001040a0501000104090001045f05010410050104ac000104010501
-0001040a0501000104090001045f05010410050104ac0001040105010001040a05010001
-04090001045f05010410050104ac0001040105010001040a0501000104090001045f0501
-0410050104ac0001040105010001040a050100010409000105610410050104ac00010401
-05010001040a050100010409000005620410050104ac0001040105010001040a05010001
-047e050104ac0001040105010001040a05010001047e050104ac0001040105010001040a
-05010001047e050104ac0001040105010001040a05010001047e050104ac000104010501
-0001040a05010001047e050104ac0001040105010001040a05010001047e050104ac0001
-040105010001040a05010001047e050104ac0001040105010001040a05010001047e0501
-04ac0001040105010001040a05010001047e050104ac0001040105010001040a05010001
-047e050104ac0001040105010001040a05010001040900630410050104ac000104010501
-0001040a050100010409006205000410050104ac0001040105010001040a050100010409
-0001045f05010410050104ac0001040105010001040a0501000104090001045f05010410
-050104ac0001040105010001040a0501000104090001045f05010410050104ac00010401
-05010001040a0501000104090001045f05010410050104ac0001040105010001040a0501
-000104090001045f05010410050104ac0001040105010001040a0501000104090001045f
-05010410050104ac0001040105010001040a0501000104090001045f05010410050104ac
-0001040105010001040a0501000104090001041e010204030102043605010410050104ac
-0001040105010001040a0501000104090001041d01000402010004040100043605010410
-050104ac0001040105010001040a0501000104090001041d010004020100040401000403
-0102040301020402010004000101042105010410050104ac0001040105010001040a0501
-000104090001041d01000408010004020100040201000401010004020100040101010401
-0100042005010410050104ac0001040105010001040a0501000104090001041d01000408
-010004020100040201000405010004010100042405010410050104ac0001040105010001
-040a0501000104090001041d010004080100040201040402010304010100042405010410
-050104ac0001040105010001040a0501000104090001041d010004020100040401000402
-0100040501000402010004010100042405010410050104ac0001040105010001040a0501
-000104090001041d01000402010004040100040201000402010004010100040201000401
-0100042405010410050104ac0001040105010001040a0501000104090001041e01020405
-0100040301020403010304010100042405010410050104ac0001040105010001040a0501
-000104090001045f05010410050104ac0001040105010001040a0501000104090001045f
-05010410050104ac0001040105010001040a0501000104090001045f05010410050104ac
-0001040105010001040a0501000104090001045f05010410050104ac0001040105010001
-040a0501000104090001045f05010410050104ac0001040105010001040a050100010409
-0001045f05010410050104ac0001040105010001040a0501000104090001045f05010410
-050104ac0001040105010001040a0501000104090001045f05010410050104ac00010401
-05010001040a0501000104090001045f05010410050104ac0001040105010001040a0501
-000104090001045f05010410050104ac0001040105010001040a05010001040900010561
-0410050104ac0001040105010001040a050100010409000005620410050104ac00010401
-05010001040a05010001047e050104ac0001040105010001050c0001047e050104ac0001
-040105010000050d0001047e050104ac000104010501060e0001047e050104ac00010401
-05010010047e050104ac0001040105010600000c05000001047e050104ac000104010501
-060000010408050106000001047e050104ac000104010501060100010407050106000001
-047e050104ac000104010501060100010406050106010001047e050104ac000104010501
-060200010405050106010001047e050104ac000104010501060200010404050106020001
-040900630410050104ac0001040105010603000104030501060200010409006205000410
-050104ac00010401050106030001040205010603000104090001045f05010410050104ac
-00010401050106040001040105010603000104090001045f05010410050104ac00010401
-050106040001040005010604000104090001045f05010410050104ac0001040105010605
-000005020604000104090001045f05010410050104ac0001040105010605000005010605
-000104090001045f05010410050100ae04010501060605010605000104090001045f0501
-0410050000af04010501060605000606000104090001045f050104c30501001004090001
-041e0102040301020436050104c30500001104090001041d010004020100040401000436
-0501040e05b804180001041d010004020100040401000403010204030102040301020421
-0501040e05b7000004180001041d01000408010004020100040201000401010004020100
-040101000402010004200501040e0501060d00000600009406000001060c000104180001
-041d010004080100040201000402010004010100040501000402010004200501040e0501
-060b0001050006000093050006000003060a000104180001041d01000408010004020100
-04020100040201020402010404200501040e050106090002050106000001049005010600
-00050608000104180001041d010004020100040401000402010004020100040501000401
-010004240501040e05010607000304000501060000010490050106000001040100030606
-000104180001041d01000402010004040100040201000402010004010100040201000401
-01000402010004200501040e050106050003040205010600000104900501060000010403
-00030604000104180001041e01020405010004030102040301020403010204210501040e
-05010603000304040501060000010490050106000001040500030602000104180001045f
-0501040e0501060100030406050106000001049005010600000104070003060000010418
-0001045f0501040e05050408050106000001049005010600000104080503000104180001
-045f0501040e050106010503040605010600000104900501060000010407050306000001
-04180001045f0501040e0501060305030404050106000001049005010600000104050503
-0602000104180001045f0501040e05010605050304020501060000010490050106000001
-040305030604000104180001045f0501040e050106070503040005010600000104900501
-06000001040105030606000104180001045f0501040e0501060905040600000104900501
-0600000105030608000104180001045f0501040e0501060b050206000001059206000001
-0501060a000104180001045f0501040e0501060d0500060000000593060000000500060c
-000104180001045f0501040e050100b6041800010561040e050000b704180000056204ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04bb
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 85 200 356
-%%EOF
diff --git a/lib/appmon/doc/src/main_win.gif b/lib/appmon/doc/src/main_win.gif
deleted file mode 100644
index 36d742e91e..0000000000
--- a/lib/appmon/doc/src/main_win.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/doc/src/main_win.ps b/lib/appmon/doc/src/main_win.ps
deleted file mode 100644
index abb12d733b..0000000000
--- a/lib/appmon/doc/src/main_win.ps
+++ /dev/null
@@ -1,691 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./main_win.tmp.eps)
-%%CreationDate: (Tue Jun 12 17:57:00 2001)
-%%BoundingBox: 0 26 377 164
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 26 377 164
-userdict begin
-%%BeginData:
-DisplayImage
-0 26
-377.000000 138.000000
-12
-520 191
-1
-0
-0
-16
-ffffff
-000000
-708090
-b03060
-d9d9d9
-808080
-00ff00
-666666
-999999
-ececc5
-000000
-000000
-000000
-000000
-000000
-000000
-03ff03ff03ff03ff03ff0305040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400031b040c03e4040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000307040c03050400030a0400030a040103030405030104050301
-040103040401030304030303040103020401030b0403031e0401032c0401030004010300
-040103000401031104010305040403020401030404010305040103000401030904000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003080400030204000302
-04000302040003050400030a040003090403030204010302040103000401030204010300
-04010304040103020401030104010302040203010401030a040103010401034c04010303
-040103000401031104010303040103040400030804010308040103080400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003070400030204000302
-040003020400030504000303040203030400030904000301040003020401030204010300
-040103020401030004020302040203010401030304010301040203010401030104010305
-040103030401030004010302040103010403030104010300040303020401030004010301
-040303010401030104010301040103050403030104010300040103060401030004010300
-040103000401030004010300040103020403030104010300040503020400030604000300
-040103010401030004010300040103000403030004010309040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030804000302040003020400030204000305
-040003020404030204000308040103010401030104010302040103000401030204010300
-040203020402030104010303040103010401030004000300040103010401030504010303
-040103000401030204010300040103010401030004060302040103000401030004010301
-040103000401030104010301040103040401030104010300040203000401030404010300
-040203000401030004010300040203000401030004010301040103000404030004010302
-040003020401030004000300040003000401030004010300040203000406030004010308
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000307
-040403020400030204000305040003010406030104000308040103010401030104050301
-040503010403030004030301040103030401030104010300040003000401030904010303
-040103010401030004010301040103010401030004020302040103000401030104010300
-040103010401030104010300040103000401030504010301040103000401030104010304
-040103010401030004010300040103000401030104010300040103010401030004020302
-040103020400030104000301040003010400030004010300040103010401030004020301
-040103000401030904000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003080400030604000302040003050400030104060301040003080405030104010305
-040103050401030004000300040003000401030104010303040103010401030104020309
-040103030401030104010300040103010405030004010303040103000401030104010300
-040503010401030004010300040103050401030104010300040103010401030404010301
-040103000401030004010300040103010401030004050300040103030401030204000300
-040003020400030104000300040103000401030104010300040103020401030004010308
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000307
-040003060400030204000305040003010406030104000307040103030401030004010305
-040103050401030004020300040103010401030304010301040103010402030904010303
-040103020402030204010304040103040402030204010300040103050401030004010300
-040103050401030104010300040103010401030404010301040103000401030004010300
-040103010401030004010304040103030401030204000300040003010401030004000301
-040103000401030104010300040103020401030004010309040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030804000306040003020400030504000302
-040403020400030704010303040103000401030504010305040103010400030104010302
-040103010401030204010302040103010401030604010301040103030402030204010301
-040103000401030404020302040103000401030104010302040103010401030604010301
-040103000401030104010304040103000402030004010300040103000402030004010300
-040103010401030004010303040103000400030004000301040103000401030204010300
-040103000402030004010302040103000401030804000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030704080302040003050400030304020303
-040003070401030304010300040103050401030504010301040003010401030304030303
-040103020401030104010307040303050400030404030301040103050400030304010301
-040303030401030104010307040303010401030104010305040103000401030004010300
-040103000401030004010302040303010401030404010302040003080401030104010300
-040103000401030204010300040103090400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000300040003080400030a040003050400030a040003be0404032004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003000400030004000300040003070400030a
-040003050400030a040003e5040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003080400030a04000305040c03e404000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000300040003000400030004000307040c03f8040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003ff03ff03ff03ff032802ff02ff02ff02ff
-020f00ff00ff00ff00ff000e0500000104ff04ff04030501000104ff04ff040305010001
-04ff04ff04030501000104ff04ff04030501000104ff04ff040305010001040401040404
-01000403010204130100040c01000406010004200102040b010004060100041f01000402
-0100040c010004ff043601000402010004090102040c0501000104040100040f01000413
-0100040c01000427010004020100040a01000427010104010100040c010004ff04360100
-04020100040b0100040c0501000104040100040601020405010004030102040b01000400
-010004030102040201040402010204030102040201000400010104030102040a01000402
-01000401010004000101040201040402010204030102040201000400010104030102040a
-010104010100040201020403010104000100040201020403010204ff0429010004020100
-040201020405010004020100040001010405050100010404010004080100040501000402
-010004020100040a01000400010004020100040201000403010004060100040201000402
-010004010101040101000401010004020100040901000402010004010101040101000403
-010004060100040201000402010004010101040101000401010004020100040901000400
-010004000100040101000402010004010100040101010401010004020100040101000402
-010004ff0428010004020100040101000402010004040100040201010401010004040501
-00010404010304050100040501000402010004020100040a010004000100040201000407
-0100040601000402010004020100040101000402010004010100040d0100040201000401
-01000402010004030100040601000402010004020100040101000402010004010100040d
-010004000100040001000401010004020100040101000402010004010100040201000401
-010004ff042c010404010100040201000404010004020100040201000404050100010404
-010004080100040501000402010404090100040201000401010004070100040601000402
-010004020100040101000402010004020102040a01000402010004010100040201000403
-0100040601000402010004020100040101000402010004020102040a0100040101010401
-0100040201000401010004020100040101040402010204ff042901000402010004010104
-04040100040201000402010004040501000104040100040801000405010004020100040d
-010404010100040701000406010004020100040201000401010004020100040501000409
-010004020100040101000402010004030100040601000402010004020100040101000402
-010004050100040901000401010104010100040201000401010004020100040101000409
-010004ff0428010004020100040101000408010004020100040201000404050100010404
-010004080100040501000402010004020100040901000402010004010100040201000403
-010004060100040201000402010004010100040201000401010004020100040901000402
-010004010101040101000403010004060100040201000402010004010100040201000401
-010004020100040901000402010004010100040201000401010004010101040101000402
-0100040101000402010004ff042801000402010004010100040201000404010004020101
-0401010004040501000104040100040801000405010004030102040a0100040201000402
-0102040501010404010004030102040201000402010004020102040b0102040201000400
-0101040501010404010004030102040201000402010004020102040a0100040201000402
-01020403010104000100040201020403010204ff04290100040201000402010204050100
-04020100040001010405050100010468010004ff048f01000408050100010468010004ff
-048f01000408050100010468010004ff048f010004080501000104ff04ff040305010001
-04ff04ff04030501000104ff04ff04030501000105ff05ff0505000005ff05ff050604ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04cf01ff01ff
-010704ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff
-04ff044c01150400010104010100041a017204ff045d0100081201010400010104000101
-041a017204ff045d01000812010404010100041a017204ff045d01000812010104000101
-04010100041a017204ff045d0100081201010400010104010100041a017204ff045d0114
-04050100041a011909010100090101000901010009010111090101050904010209010104
-09010105090101000901011704ff045d0100081201000421011909010103090101000901
-0111090101030901010409000108090101080901011704ff045d01000812010004210116
-090101000901010009010100090101000901010009010102090301010901010009050102
-090001060900010009010101090101000901010009010100090301000901011704ff045d
-010008120100042101150901010009020100090101000901010009020100090101000901
-010109010100090401000901010209000102090101000900010009000100090101000901
-010009020100090601000901011704ff045d010008120100042101150901010109010100
-090101000901010009010101090101000901010109010100090201020901010209000101
-090001010900010109000100090101000901010109010100090201010901010009010117
-04ff045d0114042101150901010109010100090101000901010009010101090101000905
-010009010103090101020900010009000102090001010900010009010100090101010901
-010009010102090101000901011704ff045d010008120100042101150901010109010100
-090101000901010009010101090101000901010409010103090101020900010009000101
-090101000900010109010100090101010901010009010102090101000901011704ff045d
-010008120100042101150901010009020100090101000901010009020100090101000901
-010109010100090101030901010009000100090001010901010009010102090101000901
-01000902010009010102090101000901011704ff045d0100081201000421011609010100
-090101000901010009010100090101000901010209030101090101040901010209000108
-09010101090101000901010009010102090101000901011704ff045d0100081201000421
-013d0904012f04ff045d01140421017204ff045d0100081201000421017204ff045d0100
-081201000421017204ff045d0100081201000421017204ff045d01000812010004210172
-04ff045d01140421017204ff045d01000812010004ff04f201000812010004ff04f20100
-0812010004ff04f201000812010004ff04f2011404ff04f201000812010004ff04f20100
-0812010004ff04f201000812010004ff04f201000812010004ff04f201140444010004ff
-04ac0100081201000444010004ff04ac0100081201000444010004ff04ac010008120100
-0444010004ff04ac0100081201000444010004ff04ac01140444010004ff04ac01000812
-01000444010004ff04ac0100081201000444010004ff04ac0100081201000444010004ff
-04ac0100081201000444010004ff04ac01140444010004ff04ac01000812010004440100
-04ff04ac0100081201000444010004ff04ac0100081201000444010004ff04ac01000812
-01000444010004ff04ac01140444010004ff04ac0100081201000444010004ff04ac0100
-081201000444010004ff04ac0100081201000444010004ff04ac01000812010004440100
-04ff04ac0114044401a004ff040c01000812010004440100044e0100044e010004ff040c
-01000812010004440100044e0100044e010004ff040c01000812010004440100044e0100
-044e010004ff040c01000812010004440100044e0100044e010004ff040c011404440100
-044e0100044e010004ff040c01000812010004440100044e0100044e010004ff040c0100
-0812010004440100044e0100044e010004ff040c01000812010004440100044e0100044e
-010004ff040c01000812010004440100044e0100044e010004ff040c011404440100044e
-0100044e010004ff040c01000812010004440100044e0100044e010004ff040c01000812
-010004440100044e0100044e010004ff040c01000812010004440100044e0100044e0100
-04ff040c01000812010004440100044e0100044e010004ff040c011404440100044e0100
-044e010004ff040c01000812010004440100044e0100044e010004ff040c010008120100
-04440100044e0100044e010004ff040c01000812010004440100044e0100044e010004ff
-040c01000812010004210045040900450409004504ea0114042000450701040700450701
-04070045070104e901000812010004200001044307010407000104430701040700010443
-070104e901000812010004200001044307010407000104430701040700010443070104e9
-01000812010004200001044307010407000104430701040700010443070104e901000812
-010004200001044307010407000104430701040700010443070104e9011404200001040f
-0101041e01010410070104070001042a010104160701040700010443070104e901000612
-0101041f0001040f0101041e01010410070104070001042a010104160701040700010443
-070104e90100061201010403010204180001040f01010401010104010103040101010400
-010304000101040201030401010104100701040700010416010304020103040201030401
-01010416070104070001040d010004000102040001020401010104020101040101030401
-0101040001010401010104000101040f070104e901000612010104020101040001010417
-0001040f0101040001010401010104010101040001070400010104000101040101010400
-010104100701040700010415010104010101040001010401010104000101040101010400
-01010416070104070001040d010104010101040101010400010104020101040001010401
-010104000102040001010400010204000101040e070104e9010006120101040201010400
-010104170001040f01030402010104010101040001020401010104010101040001010401
-010104000101041007010407000104150102040701010400010204030101041607010407
-0001040d0101040101010401010104010101040001010405010104000101040101010400
-010104010101040e070104e901170401010204180001040f010304020105040001010402
-010104010101040001050400010104100701040700010417010204020104040201020401
-01010416070104070001040d010104010101040101010401010104000101040201040400
-0101040101010400010104010101040e070104e901010403010204010101040201030400
-01020402010004190001040f010104000101040101010404010104020101040101010400
-010104040101041007010407000104180102040001010401010104030102040001010416
-070104070001040d01010401010104010101040201020402010104010101040001010401
-01010400010104010101040e070104e90101040201010400010104000102040001010400
-010104210001040f01010401010104000101040101010400010104020101040101010400
-010104010101040001010410070104070001041501010401010104000101040101010400
-010104010101040001010416070104070001040d01010401010104010101040201020402
-01010401010104000102040001010400010204000101040e070104e90101040201010400
-010104000102040001010400010104210001040f01010402010104000103040101010402
-010104010101040101030401010104100701040700010416010304020102040001010400
-0103040101010416070104070001040d0101040101010401010104030101040301020400
-0103040001010401010104000101040f070104e901030401010204010102040101030421
-000104430701040700010443070104070001041b0100040a0101040401010412070104ea
-01020402010004030100040301000423000104430701040700010443070104070001041a
-0101040a0101040401010412070104ff041f000104430701040700010443070104070001
-04190101040b0101040401010412070104ff041f00010443070104070001044307010407
-00010443070104ff041f0001044307010407000104430701040700010443070104ff041f
-0000074604070000074604070000074604ff04200746040807460408074604ff04ff04ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff042c01ff
-01ff010704ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff
-04ff04ff0447
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 26 377 164
-%%EOF
diff --git a/lib/appmon/doc/src/note.gif b/lib/appmon/doc/src/note.gif
deleted file mode 100644
index 6fffe30419..0000000000
--- a/lib/appmon/doc/src/note.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/doc/src/notes.xml b/lib/appmon/doc/src/notes.xml
deleted file mode 100644
index ac17c555f7..0000000000
--- a/lib/appmon/doc/src/notes.xml
+++ /dev/null
@@ -1,300 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Appmon Release Notes</title>
- <prepared></prepared>
- <docno>nil</docno>
- <date>nil</date>
- <rev>nil</rev>
- <file>notes.xml</file>
- </header>
- <p>This document describes the changes made to the Appmon application.</p>
-
-<section><title>Appmon 2.1.14.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Misc build updates</p>
- <p>
- Own Id: OTP-10784</p>
- </item>
- <item>
- <p>
- The backend module appmon_info.erl is moved from appmon
- application to runtime_tools. This allows appmon to be
- run from a remote erlang node towards a target node which
- does not have appmon (and its dependencies) installed, as
- long as runtime_tools is installed there.</p>
- <p>
- Own Id: OTP-10786</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.14.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The GS applications is now deprecated and will be
- removed in the R16 release. The following GS-based
- applications have been superseded by the Observer
- application and will removed in R16: Appmon, Pman,
- Tv.</p>
- <p>
- *** POTENTIAL INCOMPATIBILITY ***</p>
- <p>
- Own Id: OTP-9907</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.14</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Eliminate use of deprecated regexp module</p>
- <p>
- Own Id: OTP-9810</p>
- </item>
- <item>
- <p>
- Miscellaneous documentation build updates</p>
- <p>
- Own Id: OTP-9813</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.13</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- An obsolete compiler directive for native code generation
- was removed from a source file.</p>
- <p>
- Own Id: OTP-8839</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.12</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Warnings due to new autoimported BIFs removed</p>
- <p>
- Own Id: OTP-8674 Aux Id: OTP-8579 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.11</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The documentation is now possible to build in an open
- source environment after a number of bugs are fixed and
- some features are added in the documentation build
- process. </p>
- <p>- The arity calculation is updated.</p>
- <p>- The module prefix used in the function names for
- bif's are removed in the generated links so the links
- will look like
- "http://www.erlang.org/doc/man/erlang.html#append_element-2"
- instead of
- "http://www.erlang.org/doc/man/erlang.html#erlang:append_element-2".</p>
- <p>- Enhanced the menu positioning in the html
- documentation when a new page is loaded.</p>
- <p>- A number of corrections in the generation of man
- pages (thanks to Sergei Golovan)</p>
- <p>- The legal notice is taken from the xml book file so
- OTP's build process can be used for non OTP
- applications.</p>
- <p>
- Own Id: OTP-8343</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Appmon 2.1.10.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The documentation is now built with open source tools
- (xsltproc and fop) that exists on most platforms. One
- visible change is that the frames are removed.</p>
- <p>
- Own Id: OTP-8201</p>
- </item>
- </list>
- </section>
-
-</section>
-
- <section>
- <title>Appmon 2.1.10.1</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>
- Updated the application with new tags for automatic updates
- of copyright notices.
- </p>
- <p>Own Id: OTP-7851</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Appmon 2.1.9</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>Fixed dialyzer warning in <c><![CDATA[appmon_info]]></c>.</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Appmon 2.1.8</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>Removed some dead code from the <c><![CDATA[appmon_info]]></c> and
- <c><![CDATA[process_info]]></c> modules. Also rewritten large parts
- of <c><![CDATA[process_info]]></c> to make it easier to read and more
- efficient.</p>
- <p>Own Id: OTP-6534</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Appmon 2.1.7</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>Appmon now handles a process name containing the
- character '@' correctly. (Thanks to Mikael Magnusson).</p>
- <p>Own Id: OTP-6308</p>
- </item>
- <item>
- <p>The "Send" button in the application window was broken,
- it always failed (silently).</p>
- <p>Own Id: OTP-6333</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Appmon 2.1.6</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Internal change only (using a private digraph instead of
- a public one).</p>
- <p>Own Id: OTP-5983</p>
- </item>
- <item>
- <p>Notification windows are now centered over the parent
- window (if possible).</p>
- <p>Own Id: OTP-6010 Aux Id: OTP-5987</p>
- </item>
- <item>
- <p>Removed some dead code from <c><![CDATA[appmon_info]]></c>,
- discovered by Dialyzer.</p>
- <p>Own Id: OTP-6040</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Appmon 2.1.5</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Eliminated 5 discrepancies found by Dialyzer in the
- Appmon application.</p>
- <p>Own Id: OTP-5633</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Appmon 2.1.4</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>The graphic applications now search for HTML
- documentation in the correct place.</p>
- <p>Own Id: OTP-5381</p>
- </item>
- </list>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/appmon/doc/src/part.xml b/lib/appmon/doc/src/part.xml
deleted file mode 100644
index c9766d39ca..0000000000
--- a/lib/appmon/doc/src/part.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2000</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Appmon User's Guide</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p>The Application Monitor, <em>Appmon</em>, is a graphical utility used
- to supervise applications executing either locally or on remote nodes.
- The process tree of an application can furthermore be monitored.</p>
- </description>
- <xi:include href="appmon_chapter.xml"/>
-</part>
-
diff --git a/lib/appmon/doc/src/part_notes.xml b/lib/appmon/doc/src/part_notes.xml
deleted file mode 100644
index 8b1b8fe39e..0000000000
--- a/lib/appmon/doc/src/part_notes.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Appmon Release Notes</title>
- <prepared>Ingela Anderton Andin</prepared>
- <docno></docno>
- <date>2004-09-07</date>
- <rev></rev>
- <file>part_notes.sgml</file>
- </header>
- <description>
- <p>The Application Monitor, <em>Appmon</em>, is a graphical utility
- used to supervise applications executing either locally or on
- remote nodes. The process tree of an application can furthermore
- be monitored.</p>
- </description>
- <include file="notes"></include>
-</part>
-
diff --git a/lib/appmon/doc/src/pinfo_win.gif b/lib/appmon/doc/src/pinfo_win.gif
deleted file mode 100644
index fda0900436..0000000000
--- a/lib/appmon/doc/src/pinfo_win.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/doc/src/pinfo_win.ps b/lib/appmon/doc/src/pinfo_win.ps
deleted file mode 100644
index d47d7d47a9..0000000000
--- a/lib/appmon/doc/src/pinfo_win.ps
+++ /dev/null
@@ -1,1353 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./pinfo_win.tmp.eps)
-%%CreationDate: (Tue Jun 12 18:01:56 2001)
-%%BoundingBox: 0 73 377 347
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 73 377 347
-userdict begin
-%%BeginData:
-DisplayImage
-0 73
-377.000000 274.000000
-12
-580 421
-1
-0
-0
-8
-ffffff
-000000
-708090
-b03060
-d9d9d9
-c3c3c3
-828282
-000000
-03ff03ff03ff03ff03ff035e040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400031a040c03c50400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000308040c03050400030a0400030a0401030304050301
-0405030104010304040103030403030304010302040103090405032d040103090402031e
-040103010401031704000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000307040003020400030204000302040003050400030a0400030904030302
-040103020401030004010302040103000401030404010302040103010401030204020301
-04010309040103020401032c04010308040103200401031a040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000308040003020400030204000302
-040003050400030304020303040003090400030104000302040103020401030004010302
-040103000402030204020301040103030401030104020301040103010401030504010302
-040303000401030004030302040303020403030204030302040303060401030004010300
-040103010403030104030301040103000402030004020300040203020403030104030300
-0401030104030301040103000401030a0400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070400030204000302040003020400030504000302
-040403020400030804010301040103010401030204010300040103020401030004020302
-040203010401030304010301040103000400030004010301040103050401030204080301
-040103000401030104010300040103010401030004010301040103000401030104010305
-040103000402030004010301040103010401030104010300040603010401030104010300
-040103010401030104010301040103000401030104010300040203000401030804000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030804040302
-040003020400030504000301040603010400030804010301040103010405030104050301
-040303000403030104010303040103010401030004000300040103090405030004020301
-040103010401030004010304040103010401030004020303040203080401030004010301
-040103010401030104010301040103000402030104010301040103010401030404010301
-040103010401030004010301040103000401030104010309040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000307040003060400030204000305
-040003010406030104000308040503010401030504010305040103000400030004000300
-040103010401030304010301040103010402030904010304040103020401030104010300
-040103040405030204020303040203060401030004010301040103010401030104010301
-040103000401030204010301040103010401030104040301040103010401030004010301
-040103000401030104010308040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000308040003060400030204000305040003010406030104000307
-040103030401030004010305040103050401030004020300040103010401030304010301
-040103010402030904010304040103020401030104010300040103040401030704020303
-040203050401030004010301040103010401030104010301040103000401030204010301
-040103010401030004010301040103010401030104010300040103010401030004010301
-040103090400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003070400030604000302040003050400030204040302040003070401030304010300
-040103050401030504010301040003010401030204010301040103020401030204010301
-040103050401030404010302040103010401030004010301040103000401030104010300
-040103010401030004010301040103050401030004010301040103010401030104010301
-040103000401030204010301040103010401030004010301040103010401030004020300
-040103010401030004010301040103080400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003080408030204000305040003030402030304000307
-040103030401030004010305040103050401030104000301040103030403030304010302
-040103010401030504010304040103030403030204030302040303020403030204030306
-040103000401030104010301040103020403030104010302040103010401030104010301
-040203000401030104010300040103010403030104010301040103090400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003070400030a04000305
-0400030a040003c504000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003080400030a040003050400030a040003c6040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000300040003000400030004000300040003070400030a04000305040c03c5
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000308
-040c03d90400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003ff03ff03ff03ff039f02ff02ff02ff02ff028700ff00ff00ff00ff008606000001
-04ff04ff043f0601000104ff04ff043f0601000104ff04ff043f0601000104ff04ff043f
-0601000104ff04ff043f0601000104040104040401000403010204ff04ff042806010001
-04040100040f010004ff04ff0428060100010404010004060102040501000403010204ff
-04ff042106010001040401000408010004050100040201000402010004ff04ff04200601
-0001040401030405010004050100040201000402010004ff04ff04200601000104040100
-04080100040501000402010404ff04ff0420060100010404010004080100040501000402
-010004ff04ff042406010001040401000408010004050100040201000402010004ff04ff
-0420060100010404010004080100040501000403010204ff04ff04210601000104ff04ff
-043f0601000104ff04ff043f0601000104ff04ff043f0601000104ff04ff043f06010001
-04ff04ff043f0601000104ff04ff043f0601000106ff06ff0641000006ff06ff064204ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff0484061204ff04ff04300611
-0000040106ff06ff062c040106010506060005060001040106ff06ff062b000004010601
-0505000006000506000104010601040a0101045f0101047801010404010104ff04370001
-0401060105050000060105050001040106010409010004600100047c01000405010004ff
-043600010401060105040001060105050001040106010409010004060100040c01000404
-010004060100040a01020418010204030102040b0100042701020405010004020100040f
-0100040c01000404010004180104040301000405010004ff043600010401060105040001
-04000601050400010401060104090100041a010004140100041a010004050100040b0100
-04290100040901000423010004180100040701000405010004ff04360001040106010503
-000104010601050400010401060104090100040401020402010004000101040301020402
-0104040201020403010204050100040a0102040301020405010004050100040b01000403
-01000400010104020100040001010403010204030102040c010004030102040201000400
-0101040a0102040201000400010104030102040201040408010004000101040901000407
-01000405010004ff04360001040106010503000104020601050300010401060104090100
-040601000402010104010100040401000404010004060100040201000402010004040100
-040901000402010004010100040201000404010004050100040b01000403010104010100
-040101010401010004010100040201000401010004020100040b01000405010004020101
-04010100040b010004020101040101000404010004040100040a01010401010004080103
-040401000405010004ff0436000104010601050200010403060105030001040106010407
-010104070100040201000402010004040100040401000406010004060100040401000409
-010004090100040401000405010004090101040401000402010004010100040501000402
-010004010100040f0100040501000402010004020100040b010004020100040201000404
-010004040100040a010004020100040c0100040401010404010104ff0434000104010601
-050200010404060105020001040106010409010004060100040201000402010004040100
-0404010004060100040301030404010004090100040601030404010004050100040b0100
-040301000402010004010100040501000402010004010100040f01000405010004020100
-04020100040b010004020100040201000404010004040100040a010004020100040c0100
-040301000405010004ff0436000104010601050100010405060105020001040106010409
-010004060100040201000402010004040100040401000406010004020100040201000404
-01000409010004050100040201000404010004050100040b010004030100040201000401
-0100040501000402010004010100040f0100040501000402010004020100040b01000402
-0100040201000404010004040100040a0100040201000408010004020100040301000405
-010004ff0436000104010601050100010406060105010001040106010409010004060100
-040201000402010004040100040401000406010004020100040201000404010004090100
-040201000401010004020100040401000405010004040101040401000403010104010100
-0401010004050100040201000401010004020100040b0100040501000402010104010100
-040301010405010004020100040201000404010004040100040a01010401010004030101
-040201000402010004030100040501000405010104ff042e000104010601050000010407
-060105010001040106010409010004060100040201000402010004040100040501010404
-01000403010304040100040a010204030103040401000405010004040101040401000403
-010004000101040201000406010204030102040c01000405010004020100040001010404
-010104050100040201000402010004040100040501010408010004000101040401010403
-010204040100040501000405010104ff042e000104010601050000010408060105000001
-0401060104090100043301050420010004040100040301000419010504190100041d0105
-0401010004080100040b0100040501000406010004ff042e0001040106010001060b0500
-000104010601040a0101045601010406010104010100043701010426010004060101040a
-0101040401010405010104ff042f0001040106010000060d000104010601047001000460
-010004ff0454000104010601050e000104010601040a01010463010104ff04b500010401
-0601050e000104010601040901000467010004ff04b4000104010601050e000104010601
-04090100040c0100040c01000429010004040100040601000412010004ff04b400010401
-0601050e00010401060104090100040c0100040c0100042f0100041a010004ff04b40001
-04010601050e000104010601040901000404010204020104040201020402010404010100
-040201000402010204090100040201000402010204030102040201040402010204020100
-0400010104030101040001000403010004ff04b4000104010601050e0001040106010409
-010004030100040201000403010004030100040201000403010004030100040201000401
-010004020100040801000402010004010100040201000404010004040100040601000402
-01010401010004010100040101010403010004ff04b4000104010601050e000104010601
-0407010104040100040701000407010004030100040301000402010004010100040c0100
-040001000400010004050100040401000404010004060100040201000402010004010100
-040201000404010104ff04b2000104010601050e00010401060104090100040401020404
-010004040103040301000403010004020100040201020409010004000100040001000402
-0103040401000404010004060100040201000402010004010100040201000403010004ff
-04b4000104010601050e0001040106010409010004070100040301000403010004020100
-040301000403010004020100040501000408010004000100040001000401010004020100
-040401000404010004060100040201000402010004010100040201000403010004ff04b4
-000104010601050e00010401060104090100040301000402010004030100040301000402
-010004030100040301000401010104010100040201000403010104020100040001000400
-010004010100040201000404010004040100040601000402010004020100040101000401
-0101040301000405010104ff04ac000104010601050e0001040106010409010004040102
-040501010402010304040101040201010400010004020102040401010403010004000100
-040301030404010004050101040401000402010004020100040201010400010004030100
-0405010104ff04ac000104010601050e0001040106010409010004300100043001000403
-01000406010004ff04ac000104010601050e000104010601040a0101042c0101042d0100
-04020100040101010405010104ff04ad000104010601050e000104010601046a010204ff
-04ba000104010601050e000104010601040a01010486010104ff0492000104010601050e
-00010401060104090100048a010004ff0491000104010601050e00010401060104090100
-04660102041901010404010004ff0491000104010601050e000104010601040901000468
-010004180100040101000403010004ff0491000104010601050e00010401060104090100
-040301010400010004030102040301020403010204030102040301010400010004020102
-040a010104000100040101000402010004020102040201000402010004020102040c0100
-040301020402010004000101040a0100040101000403010004ff0491000104010601050e
-000104010601040901000403010004000100040001000401010004020100040101000402
-010004010100040201000401010004020100040101000401010104010100040201000408
-010004010101040101000402010004010100040201000401010004020100040101000402
-0100040b01000402010004020100040101010401010004090100040101000403010004ff
-0491000104010601050e0001040106010407010104040100040001000400010004010100
-040201000401010004050100040901000401010004020100040101000402010004080100
-040201000401010004020100040101000402010004010100040201000401010004020100
-040b01000402010004020100040101000402010004090100040101000404010104ff048f
-000104010601050e00010401060104090100040301000400010004000100040101040402
-010204030102040301030401010004020100040101040408010004020100040101000402
-010004010104040101000402010004010104040b01000402010404010100040201000409
-0100040101000403010004ff0491000104010601050e0001040106010409010004030100
-040001000400010004010100040901000405010004010100040201000401010004020100
-04010100040c010004020100040101000402010004010100040501000402010004010100
-040f010004020100040501000402010004090100040101000403010004ff049100010401
-0601050e0001040106010409010004030100040001000400010004010100040201000401
-010004020100040101000402010004010100040201000401010004010101040101000402
-010004080100040101010401010004010101040101000402010004010100040101010401
-010004020100040b01000402010004020100040101000402010004030101040301000401
-0100040301000405010104ff0489000104010601050e0001040106010409010004030100
-040001000400010004020102040301020403010204030103040201010400010004020102
-040a010104000100040201010400010004020102040301010400010004020102040c0100
-0403010204020100040201000403010104040101040401000405010104ff048900010401
-0601050e00010401060104090100042a01000407010504050100041c010504190100040b
-01000406010004ff0489000104010601050e000104010601040a01010424010004020100
-04130100043a0101040a01010405010104ff048a000104010601050e0001040106010432
-01020414010004ff04dc000104010601050e000104010601040a0101044e010104ff04ca
-000104010601050e0001040106010409010004430103040101030404010004ff04c90001
-04010601050e0001040106010409010004430100040701000404010004ff04c900010401
-0601050e0001040106010409010004430100040701000404010004ff04c9000104010601
-050e00010401060104090100040301010400010004030102040301020403010204030102
-04030101040001000402010204030102040a0100040701000404010004ff04c900010401
-0601050e0001040106010409010004030100040001000400010004010100040201000401
-010004020100040101000402010004010100040201000401010004010101040101000402
-0100040101000402010004090100040701000404010004ff04c9000104010601050e0001
-040106010407010104040100040001000400010004010100040201000401010004050100
-040901000401010004020100040101000402010004010100040d01000407010004050101
-04ff04c70001040106010010040106010409010004030100040001000400010004010104
-04020102040301020403010304010100040201000401010404020102040a010004070100
-0404010004ff04c9000104010601000d0600000104010601040901000403010004000100
-040001000401010004090100040501000401010004020100040101000402010004010100
-0409010004090100040701000404010004ff04c90001040106010001040a060100010401
-060104090100040301000400010004000100040101000402010004010100040201000401
-010004020100040101000402010004010100040101010401010004020100040101000402
-0100040301010403010004070100040401000405010104ff04c10001040106010001040a
-060100010401060104090100040301000400010004000100040201020403010204030102
-040301030402010104000100040201020403010204040101040301000407010004040100
-0405010104ff04c10001040106010001040a060100010401060104090100042a01000412
-01000403010304010103040401000406010004ff04c10001040106010001040a06010001
-04010601040a0101042401000402010004100101041101010405010104ff04c200010401
-06010001040a06010001040106010432010204ff04f20001040106010001040a06010001
-04010601040a01010478010104ff04a00001040106010001040a06010001040106010409
-0100042e01030405010004310100040601030404010004ff049f0001040106010001040a
-060100010401060104090100040401020405010004090100041401000407010004040101
-040b01000405010104030102040b010104020100040801000404010004ff049f00010401
-06010001040a060100010401060104090100040601000410010004140100040601000404
-010004010100040901010404010004010100040101000402010004090100040101000402
-0100040701000404010004ff049f0001040106010001040a060100010401060104090100
-04060100040301020402010004000101040201000401010004030102040a010004050100
-040501000401010004080100040001000404010004010100040501000409010004010100
-04030100040601000404010004ff049f0001040106010001040a06010001040106010409
-010004060100040501000402010104010100040101000400010004030100040201000409
-0100040401000406010004010100040a0100040401000401010004050100040901000401
-010004040100040501000404010004ff049f0001040106010001040a0601000104010601
-04070101040701000405010004020100040201000401010104040100040d010004030100
-0407010004010100040a0100040401000401010004030101040a01000401010004050100
-040401000405010104ff049d0001040106010001040a0601000104010601040901000406
-01000405010004020100040201000401010104050102040a010004040100040601000401
-0100040a0100040401000401010004050100040901000401010004040100040501000404
-010004ff049f0001040106010001040a0601000104010601040901000406010004050100
-040201000402010004010100040001000407010004090100040501000405010004010100
-040a01000404010004010100040501000409010004010100040301000406010004040100
-04ff049f0001040106010001040a06010001040106010409010004060100040501000402
-010004020100040101000401010004020100040201000403010104030100040601000404
-010004010100040301010404010004040100040101000401010004020100040301010403
-0100040101000402010004070100040401000405010104ff04970001040106010001040a
-060100010401060104090100040601000405010004020100040201000401010004020100
-040201020404010104030100040701000404010104040101040201040403010104030102
-04040101040401010402010004080100040401000405010104ff04970001040106010001
-040a06010001040106010409010004290100040301030405010004310100040601030404
-01000406010004ff04970001040106010001040a0601000104010601040a010104250101
-045001010405010104ff04980001040106010001040a060100010401060104ff04ff0428
-0001040106010001040a0601000104010601040a01010458010104ff0419010104a40001
-040106010001040a06010001040106010409010004510103040301000406010004040100
-04450100040a01030475010004310100040601030404010004a30001040106010001040a
-0601000104010601040901000407010004040100040b010004060100042d010004060100
-040601000403010204270100041b0100040a01000477010004040101040b010004050101
-04040100040c010104020100040801000404010004a30001040106010001040a06010001
-040106010409010004070100041101000435010004060100040501000403010004000100
-0400010004260100041a0100040b01000476010004040100040101000409010104040100
-0401010004020101040b01000401010004020100040701000404010004a3000104010601
-0001040a0601000104010601040901000404010104000100040201020403010204020104
-040201020403010204020100040001010403010204020100040001010402010004020100
-040901000406010004040100040401000400010004040102040201000400010104030102
-0403010204030102040201040402010204020100040001010403010204030100040c0100
-040401010400010004020100040201000402010204020100040201000401010004000101
-040901010400010004020100040201000402010204020100040001010402010004000101
-040a010204020100040201000401010004000101040a0100040501000401010004080100
-0400010004040100040101000401010004000100040b0100040101000403010004060100
-0404010004a30001040106010001040a0601000104010601040901000403010004010101
-040401000402010004020100040301000406010004020100040201000401010104010100
-0401010004020100040101010401010004010100040201000409010004060100040a0100
-040001000403010004020100040101010401010004010100040201000401010004020100
-040101000402010004030100040301000402010004010101040101000401010004020100
-041001000404010004000100040001000401010004020100040101000402010004010100
-040201000401010104010100040801000400010004000100040101000402010004010100
-040201000401010104010100040101010401010004080100040201000401010004020100
-0401010104010100040801000406010004010100040a0100040401000401010004030100
-040b01000401010004040100040501000404010004a30001040106010001040a06010001
-040106010407010104040100040201000404010004020100040701000406010004020100
-040201000401010004020100040501000401010004060100040101000409010004040101
-040c01020406010004010100040201000401010004050100040201000401010004070100
-040301000402010004010100040501000414010004040100040001000400010004020100
-040101000401010004050100040201000401010004020100040801000400010004000100
-040201000401010004050100040101000402010004010100040201000408010004050100
-040201000401010004020100040701000407010004010100040a01000404010004010100
-04030100040b01000401010004050100040401000405010104a10001040106010001040a
-060100010401060104090100040301000402010004040100040201000407010004060100
-040201000402010004010100040201000402010304010100040601000401010004090100
-04060100040c010004000100040201030401010004020100040101000405010404020102
-040401000403010004020100040101000406010204110100040401000400010004000100
-040201000401010004020102040201000402010004010100040201000408010004000100
-040001000402010004010100040201030401010004020100040101000402010004090102
-04020100040201000401010004020100040801000406010004010100040a010004040100
-0401010004030100040b01000401010004040100040501000404010004a3000104010601
-0001040a0601000104010601040901000403010004020100040401000402010004070100
-040601000402010004020100040101000402010004010100040201000401010004070100
-040001000409010004060100040c01000400010004010100040201000401010004020100
-040101000405010004090100040301000403010004020100040101000409010004100100
-040401000400010004000100040301000400010004050100040101000402010004010100
-040201000408010004000100040001000403010004000100040101000402010004010100
-040201000401010004020100040c01000401010004020100040101000402010004090100
-0405010004010100040a0100040401000401010004030100040b01000401010004030100
-040601000404010004a30001040106010001040a06010001040106010409010004030100
-040101010404010004020100040201000403010004060100040201000402010004010100
-0402010004010100040201000401010004070101040401010403010004060100040a0100
-040001000400010004010100040201000401010004020100040101000402010004010100
-040201000401010004020100040301000403010004020100040101000405010004020100
-040a01010403010004040100040001000400010004030101040201000402010004010100
-040101010401010104010100040301010402010004000100040001000403010104020100
-040201000401010104010100040101010401010004080100040201000401010004010101
-040101010401010004030101040401000404010004010100040301010404010004040100
-040101000403010004050101040301000401010004020100040701000404010004050101
-049b0001040106010001040a060100010401060104090100040401010400010004040100
-040301020405010104040100040301020402010004020100040201030401010004080100
-040401010403010004060100040b01020403010304010100040201000402010204030102
-0403010204050101040201020402010004060102040b0101040301000404010004000100
-040001000404010004030102040301010400010004010100040001010404010104020100
-0400010004000100040401000403010304010100040001010402010004000101040a0102
-040301010400010004010100040001010404010104050100040401010404010104020104
-0403010104020104040301010404010104020100040801000404010004050101049b0001
-040106010001040a06010001040106010409010004450100040501000403010304030100
-040c0100044c010004030103040b01000410010004080100040c01000409010004050100
-04040105040f0100040801000406010004310100040601030404010004060100049b0001
-040106010001040a0601000104010601040a0101044001000400010004040101040d0101
-0456010104110100040001000411010004060101040a010004000100040a010004050100
-041a0100040601010449010104050101049c0001040106010001040a0601000104010601
-044e0100048301000412010004140100040b010004050100041a010004f9000104010601
-0001040a0601000104010601046501010474010104ff04490001040106010001040a0601
-000104010601046401000406010004040100045a0100040b010004ff044b000104010601
-0001040a060100010401060104640100040601000403010204050100040c010004040100
-04060100040a0102041801020403010204050100040b010004220100040c010004040100
-040d01000404010004fe0001040106010001040a06010001040106010464010004050100
-0403010004000100040001000418010004140100041a01000405010004040100040c0100
-043601000413010004fe0001040106010001040a06010001040106010464010004040100
-040401000400010004040102040201000400010104030102040201040402010204030102
-04050100040a010204030102040501000405010004030100040d01000404010104000100
-040201020402010004000101040a01020402010004000101040301020402010404090102
-0402010404fc0001040106010001040a060100010401060104640100040a010004000100
-040601000402010104010100040401000404010004060100040201000402010004040100
-040901000402010004010100040201000404010004050100041201000403010004010101
-04010100040201000401010104010100040b010004020101040101000404010004040100
-040d01000404010004fe0001040106010001040a060100010401060104620101040c0102
-040501000402010004020100040401000404010004060100040601000404010004090100
-040901000404010004050100041001010404010004020100040101000402010004010100
-04020100040b010004020100040201000404010004040100040d01000404010004fe0001
-040106010001040a060100010401060104640100040c0100040001000404010004020100
-040201000404010004040100040601000403010304040100040901000406010304040100
-04050100041201000403010004020100040101040401010004020100040b010004020100
-040201000404010004040100040d01000404010004fe0001040106010001040a06010001
-0401060104640100040c0100040001000404010004020100040201000404010004040100
-040601000402010004020100040401000409010004050100040201000404010004050100
-041201000403010004020100040101000405010004020100040b01000402010004020100
-0404010004040100040d01000404010004fe0001040106010001040a0601000104010601
-04640100040a010004000100040001000404010004020100040201000404010004040100
-040601000402010004020100040401000409010004020100040101000402010004040100
-04050100040b010104040100040301000401010104010100040201000401010004020100
-040301010405010004020100040201000404010004040100040d01000404010004050101
-04f60001040106010001040a060100010401060104640100040b01020405010004020100
-040201000404010004050101040401000403010304040100040a01020403010304040100
-04050100040b010104040100040401010400010004020102040201000402010004030101
-0405010004020100040201000404010004050101040b0100040501010403010104f60001
-040106010001040a060100010401060104640100040c0100043301050427010004040100
-0407010004120100041d01050412010004f60001040106010001040a0601000104010601
-04650101046b0101040601010401010004020100041001010435010104f7000104010601
-0001040a060100010401060104e1010204ff04430001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104fd010304ff04260001
-040106010001040a060100010401060104fd010004ff04290001040106010001040a0601
-00010401060104fd010004ff04290001040106010001040a060100010401060104fd0100
-0405010104000100040201020402010004000101040a0102040301020402010004000101
-040201000402010004020102040201000400010104e10001040106010001040a06010001
-0401060104fd010004040100040101010401010004020100040101010401010004080100
-040201000401010004020100040101010401010004010100040201000401010004020100
-040101010401010004e00001040106010001040a060100010401060104fd010004040100
-040201000401010004020100040101000402010004080100040501000402010004010100
-040501000402010004010100040201000401010004e40001040106010001040a06010001
-0401060104fd010004040100040201000401010404010100040201000409010204020104
-040101000406010004000100040201040401010004e40001040106010001040a06010001
-0401060104fd01000404010004020100040101000405010004020100040c010004010100
-040501000406010004000100040201000405010004e40001040106010001040a06010001
-0401060104fd010004040100040101010401010004020100040101000402010004080100
-040201000401010004020100040101000407010004030100040201000401010004070101
-04da0001040106010001040a060100010401060104fd0100040501010400010004020102
-040201000402010004090102040301020402010004070100040401020402010004070101
-04da0001040106010001040a060100010401060104fd010304050100040e0105042e0100
-04da0001040106010001040a060100010401060104ff04030100040201000441010104db
-0001040106010001040a060100010401060104ff0404010204ff04200001040106010001
-040a060100010401060104ff04ff04280001040106010001040a060100010401060104ff
-040701000431010004ec0001040106010001040a060100010401060104ff040601000404
-0101040b01000405010104030102040b01010402010004eb0001040106010001040a0601
-00010401060104ff04050100040401000401010004090101040401000401010004010100
-0402010004090100040101000402010004ea0001040106010001040a0601000104010601
-04ff04040100040501000401010004080100040001000404010004010100040501000409
-0100040101000403010004e90001040106010001040a060100010401060104ff04030100
-0406010004010100040a0100040401000401010004050100040901000401010004040100
-04e80001040106010001040a060100010401060104ff040201000407010004010100040a
-0100040401000401010004030101040a0100040101000405010004e70001040106010001
-040a060100010401060104ff040301000406010004010100040a01000404010004010100
-0405010004090100040101000404010004e80001040106010001040a0601000104010601
-04ff040401000405010004010100040a0100040401000401010004050100040901000401
-01000403010004e90001040106010001040a060100010401060104ff0405010004040100
-040101000403010104040100040401000401010004010100040201000403010104030100
-04010100040201000406010104e10001040106010001040a060100010401060104ff0406
-010004040101040401010402010404030101040301020404010104040101040201000407
-010104e10001040106010001040a060100010401060104ff040701000431010004090100
-04e10001040106010001040a060100010401060104ff0443010104e20001040106010001
-040a060100010401060104ff04ff04280001040106010001040a060100010401060104ff
-04ff04280001040106010001040a060100010401060104ff040701000431010004ec0001
-040106010001040a060100010401060104ff0406010004040101040b0100040501010403
-0102040b01010402010004eb0001040106010001040a060100010401060104ff04050100
-040401000401010004090101040401000401010004010100040201000409010004010100
-0402010004ea0001040106010001040a060100010401060104ff04040100040501000401
-0100040801000400010004040100040101000405010004090100040101000403010004e9
-0001040106010001040a060100010401060104ff040301000406010004010100040a0100
-04040100040101000405010004090100040101000404010004e80001040106010001040a
-060100010401060104ff040201000407010004010100040a010004040100040101000403
-0101040a0100040101000405010004e70001040106010001040a060100010401060104ff
-040301000406010004010100040a01000404010004010100040501000409010004010100
-0404010004e80001040106010001040a060100010401060104ff04040100040501000401
-0100040a010004040100040101000405010004090100040101000403010004e900010401
-06010001040a060100010401060104ff0405010004040100040101000403010104040100
-040401000401010004010100040201000403010104030100040101000402010004060101
-04e10001040106010001040a060100010401060104ff0406010004040101040401010402
-010404030101040301020404010104040101040201000407010104e10001040106010001
-040a060100010401060104ff04070100043101000409010004e10001040106010001040a
-060100010401060104ff0443010104e20001040106010001040a060100010401060104ff
-04ff04280001040106010001040a060100010401060104ff040601010463010104b90001
-040106010001040a060100010401060104ff040501000467010004b80001040106010001
-040a060100010401060104ff0405010004040102041801020443010004b8000104010601
-0001040a060100010401060104ff0405010004060100041a01000443010004b800010401
-06010001040a060100010401060104ff0405010004060100040301020403010204030102
-040501000409010104000100040201000402010004020102040301020402010004000101
-04020100040201000402010204020100040001010404010004b80001040106010001040a
-060100010401060104ff0405010004060100040201000402010004010100040201000401
-010004020100040401000409010004000100040001000401010004020100040101000402
-010004010100040201000401010104010100040101000402010004010100040201000401
-0101040101000403010004b80001040106010001040a060100010401060104ff04030101
-040701000402010004020100040101000409010004040100040901000400010004000100
-040201000401010004010100040501000402010004010100040501000402010004010100
-04020100040101000408010104b60001040106010001040a060100010401060104ff0405
-010004060100040201000402010004010100040601030404010004090100040001000400
-010004020100040101000402010204020104040101000406010004000100040201040401
-01000407010004b80001040106010001040a060100010401060104ff0405010004060100
-040201000402010004010100040501000402010004040100040901000400010004000100
-040301000400010004050100040101000405010004060100040001000402010004050100
-0407010004b80001040106010001040a060100010401060104ff04050100040601000402
-010004020100040101000402010004010100040201000404010004040101040201000400
-010004000100040301010402010004020100040101000402010004010100040701000403
-01000402010004010100040701000405010104b00001040106010001040a060100010401
-060104ff0405010004060100040301020403010204030103040401000404010104020100
-040001000400010004040100040301020403010204020100040701000404010204020100
-040701000405010104b00001040106010001040a060100010401060104ff040501000429
-0100040c0100042e01000406010004b00001040106010001040a060100010401060104ff
-0406010104250101040a010004000100042d01010405010104b10001040106010001040a
-060100010401060104ff043c010004ea0001040106010001040a060100010401060104ff
-04ff04280001040106010001040a060100010401060104ff04ff04280001040106010001
-040a060100010401060104ff04ff04280001040106010001040a060100010401060104ff
-04ff04280001040106010001040a060100010401060104ff040301010400010004020100
-040201000402010204030102040201000400010104020100040201000402010204020100
-0400010104ef0001040106010001040a060100010401060104ff04030100040001000400
-010004010100040201000401010004020100040101000402010004010101040101000401
-0100040201000401010004020100040101010401010004ee0001040106010001040a0601
-00010401060104ff04030100040001000400010004020100040101000401010004050100
-0402010004010100040501000402010004010100040201000401010004f2000104010601
-0001040a060100010401060104ff04030100040001000400010004020100040101000402
-010204020104040101000406010004000100040201040401010004f20001040106010001
-040a060100010401060104ff040301000400010004000100040301000400010004050100
-04010100040501000406010004000100040201000405010004f20001040106010001040a
-060100010401060104ff0403010004000100040001000403010104020100040201000401
-01000402010004010100040701000403010004020100040101000407010104e800010401
-06010001040a060100010401060104ff0403010004000100040001000404010004030102
-04030102040201000407010004040102040201000407010104e80001040106010001040a
-060100010401060104ff040d0100042f010004e80001040106010001040a060100010401
-060104ff040a010004000100042e010104e90001040106010001040a0601000104010601
-04ff040b010004ff041b0001040106010001040a060100010401060104ff04ff04280001
-040106010001040a060100010401060104ff040401030401010304ff0419000104010601
-0001040a060100010401060104ff040401000407010004ff04190001040106010001040a
-060100010401060104ff040401000407010004ff04190001040106010001040a06010001
-0401060104ff040401000407010004ff04190001040106010001040a0601000104010601
-04ff040401000407010004ff04190001040106010001040a060100010401060104ff0404
-01000407010004ff04190001040106010001040a060100010401060104ff040401000407
-010004ff04190001040106010001040a060100010401060104ff040401000407010004ff
-04190001040106010001040a060100010401060104ff04040100040701000404010104ff
-04120001040106010001040a060100010401060104ff04040100040701000404010104ff
-04120001040106010001040a060100010401060104ff04040103040101030405010004ff
-04120001040106010001040a060100010401060104ff0412010104ff0413000104010601
-0001040a060100010401060104ff04ff04280001040106010001040a0601000104010601
-04ff0418010104040101040b010104f80001040106010001040a060100010401060104ff
-0404010304010103040201030404010004050100040301030404010004f7000104010601
-0001040a060100010401060104ff04040100040701000405010004040100040501000406
-01000404010004f70001040106010001040a060100010401060104ff0404010004070100
-040501000404010004050100040601000404010004f70001040106010001040a06010001
-0401060104ff0404010004070100040501000404010004050100040601000404010004f7
-0001040106010001040a060100010401060104ff04040100040701000405010004040100
-04050100040601000404010004f70001040106010001040a060100010401060104ff0404
-010004070100040501000405010104040101040401000405010104f50001040106010001
-040a060100010401060104ff040401000407010004050100040401000405010004060100
-0404010004f70001040106010001040a060100010401060104ff04040100040701000405
-01000404010004050100040601000404010004f70001040106010001040a060100010401
-060104ff0404010004070100040501000404010004050100040601000404010004050101
-04ef0001040106010001040a060100010401060104ff0404010004070100040501000404
-01000405010004060100040401000405010104ef0001040106010001040a060100010401
-060104ff0404010304010103040201030404010004050100040301030404010004060100
-04ef0001040106010001040a060100010401060104ff0418010104040101040b01010405
-010104f00001040106010001040a060100010401060104ff04ff04280001040106010001
-040a0601000104010601040a0101046a010104ff04ae0001040106010001040a06010001
-0401060104090100046e010004ff04ad0001040106010001040a06010001040106010409
-0100040501000430010004040100040d0101040901020412010004ff04ad000104010601
-0001040a0601000104010601040901000405010004360100040c0100040d010004120100
-04ff04ad0001040106010001040a06010001040106010409010004030104040101000400
-0101040301020402010004000101040a010204020100040201000402010204020104040a
-0100040401020405010004030102040301020404010004ff04ad0001040106010001040a
-060100010401060104090100040501000403010104010100040101000402010004010101
-04010100040801000402010004010100040201000404010004040100040a010404010100
-0402010004040100040201000402010004010100040201000403010004ff04ad00010401
-06010001040a060100010401060104070101040601000403010004090100040101000402
-0100040801000402010004020100040001000405010004040100040c0100040701000404
-01000402010004050100040201000404010104ff04ab0001040106010001040a06010001
-040106010409010004050100040301000406010304010100040201000408010404030100
-0406010004040100040c0100040401030404010004030102040201040403010004ff04ad
-0001040106010001040a0601000104010601040901000405010004030100040501000402
-010004010100040201000408010004060100040001000405010004040100040c01000403
-0100040201000404010004060100040101000407010004ff04ad0001040106010001040a
-060100010401060104090100040501000403010004050100040201000401010104010100
-040801000402010004010100040201000404010004040100040501010404010004030100
-040201000404010004020100040201000401010004020100040301000405010104ff04a5
-0001040106010001040a0601000104010601040901000406010104010100040601030401
-010004000101040a01020402010004020100040401000405010104030101040401000404
-0103040401000403010204030102040401000405010104ff04a50001040106010001040a
-060100010401060104090100041801000404010504200100042701000406010004ff04a5
-0001040106010001040a0601000104010601040a01010416010004290101042601010405
-010104ff04a60001040106010001040a06010001040106010423010004ff04ff04030001
-040106010001040a0601000104010601040a010104be010104ff045a0001040106010001
-040a06010001040106010409010004c2010004ff04590001040106010001040a06010001
-0401060104090100042d0100041701000402010204410100041701000402010204120100
-04ff04590001040106010001040a060100010401060104090100042d0100041701000404
-01000441010004170100040401000412010004ff04590001040106010001040a06010001
-040106010409010004040102040201000400010104020100040001010403010204020100
-040001010409010004000101040301020402010004000101040301010400010004040100
-040301020402010004000101040a01020402010004000101040201000400010104030102
-040201000400010104090100040001010403010204020100040001010403010104000100
-040401000403010204020100040001010404010004ff04590001040106010001040a0601
-000104010601040901000403010004020100040101010401010004010101040101000401
-010004020100040101010401010004080101040101000401010004020100040101010401
-010004010100040101010404010004020100040201000401010104010100040801000402
-010004010101040101000401010104010100040101000402010004010101040101000408
-010104010100040101000402010004010101040101000401010004010101040401000402
-01000402010004010101040101000403010004ff04590001040106010001040a06010001
-040106010407010104040100040201000401010004050100040501000402010004010100
-040c01000402010004050100040101000402010004010100040201000404010004020100
-0402010004010100040c0100040201000401010004050100040501000402010004010100
-040c01000402010004050100040101000402010004010100040201000404010004020100
-04020100040101000408010104ff04570001040106010001040a06010001040106010409
-0100040301040401010004050100040501000402010004010100040c0100040201000402
-010304010100040201000401010004020100040401000402010404010100040c01040401
-010004050100040501000402010004010100040c01000402010004020103040101000402
-010004010100040201000404010004020104040101000407010004ff0459000104010601
-0001040a0601000104010601040901000403010004050100040501000405010004020100
-04010100040c010004020100040101000402010004010100040201000401010004020100
-040401000402010004050100040c01000405010004050100040501000402010004010100
-040c01000402010004010100040201000401010004020100040101000402010004040100
-04020100040501000407010004ff04590001040106010001040a06010001040106010409
-010004030100040201000401010004050100040501000402010004010100040c01000402
-010004010100040201000401010004020100040101000401010104040100040201000402
-010004010100040701010402010004020100040101000405010004050100040201000401
-0100040c0100040201000401010004020100040101000402010004010100040101010404
-0100040201000402010004010100040701000405010104ff04510001040106010001040a
-0601000104010601040901000404010204020100040501000406010204020100040c0100
-040201000402010304010100040201000402010104000100040401000403010204020100
-040701010403010204020100040501000406010204020100040c01000402010004020103
-040101000402010004020101040001000404010004030102040201000407010004050101
-04ff04510001040106010001040a06010001040106010409010004250105043501000424
-0105043401000406010004ff04510001040106010001040a0601000104010601040a0101
-045d0101045e01010405010104ff04520001040106010001040a060100010401060104ff
-04ff04280001040106010001040a0601000104010601040a0101046a010104ff04ae0001
-040106010001040a060100010401060104090100046e010004ff04ad0001040106010001
-040a060100010401060104090100041401000413010004040100043501020404010004ff
-04ad0001040106010001040a060100010401060104090100042f01000437010004040100
-04ff04ad0001040106010001040a06010001040106010409010004030100040001010402
-010004000101040301020403010204020100040001010403010204020104040101000402
-010004080100040001010403010204020100040001010402010104000100040301020405
-01000404010004ff04ad0001040106010001040a06010001040106010409010004030101
-040101000401010104010100040401000402010004020100040101010401010004040100
-040401000403010004020100040801010401010004010100040201000401010104010100
-0401010004000100040001000401010004020100040401000404010004ff04ad00010401
-06010001040a060100010401060104070101040401000402010004010100040801000402
-010004020100040101000408010004040100040401000401010004080100040201000401
-0100040201000401010004050100040001000400010004050100040401000405010104ff
-04ab0001040106010001040a060100010401060104090100040301000402010004010100
-040801000402010004020100040101000408010004040100040401000401010004080100
-040201000401010004020100040101000405010004000100040001000402010304040100
-0404010004ff04ad0001040106010001040a060100010401060104090100040301000402
-010004010100040801000402010004020100040101000408010004040100040501000400
-010004080100040201000401010004020100040101000405010004000100040001000401
-010004020100040401000404010004ff04ad0001040106010001040a0601000104010601
-040901000403010104010100040101000408010004020100040201000401010004080100
-040401000405010104040101040201000402010004010100040201000401010004050100
-0400010004000100040101000402010004040100040401000405010104ff04a500010401
-06010001040a060100010401060104090100040301000400010104020100040801000403
-010204020100040801000405010104040100040401010402010004020100040201020402
-01000405010004000100040001000402010304040100040401000405010104ff04a50001
-040106010001040a060100010401060104090100040301000432010004050100042e0100
-0406010004ff04a50001040106010001040a0601000104010601040a010104010100042f
-01000400010004040101042d01010405010104ff04a60001040106010001040a06010001
-04010601040e01000430010004ff04e60001040106010001040a0601000104010601040a
-0101049b010104ff047d0001040106010001040a06010001040106010409010004620100
-043101000408010004ff047c0001040106010001040a060100010401060104090100042e
-0102041401000419010004040101040b01000405010104040101040b0101040201000407
-010004ff047c0001040106010001040a0601000104010601040901000430010004140100
-041801000404010004010100040901010404010004010100040201000401010004090100
-04010100040201000406010004ff047c0001040106010001040a06010001040106010409
-010004040101040001000401010004000101040301020402010004020100040101000400
-0101040c010004030102040301020403010104000100040201020402010004000101040a
-010004050100040101000408010004000100040401000401010004020100040101000409
-010004010100040301000405010004ff047c0001040106010001040a0601000104010601
-040901000403010004010101040101010401010004010100040201000401010004020100
-0401010104010100040b0100040201000402010004010100040201000401010004010101
-04010100040201000401010104010100040801000406010004010100040a010004040100
-0401010004020100040101000409010004010100040401000404010004ff047c00010401
-06010001040a060100010401060104070101040401000402010004010100040501000402
-010004010100040201000401010004020100040b01000402010004020100040501000401
-010004020100040101000402010004010100040b01000407010004010100040a01000404
-01000401010004020100040101000409010004010100040501000404010104ff047a0001
-040106010001040a06010001040106010409010004030100040201000401010004050100
-0402010004010100040201000401010004020100040b0100040201040402010304010100
-040201000401010404010100040c01000406010004010100040a01000404010004010100
-04020100040101000409010004010100040401000404010004ff047c0001040106010001
-040a06010001040106010409010004030100040201000401010004050100040201000401
-0100040201000401010004020100040b0100040201000405010004020100040101000402
-01000401010004050100040d01000405010004010100040a010004040100040101000402
-0100040101000409010004010100040301000405010004ff047c0001040106010001040a
-060100010401060104090100040301000401010104010100040501000402010004010100
-040101010401010104010100040b01000402010004020100040101000402010004010100
-040101010401010004020100040101000407010104040100040401000401010004030101
-040401000404010004010100040201000401010004030101040301000401010004020100
-040601000405010104ff04740001040106010001040a0601000104010601040901000404
-010104000100040101000406010204030101040001000401010004000101040c01000403
-010204030103040201010400010004020102040201000407010104050100040401010404
-0101040201040403010104040101040401010404010104020100040701000405010104ff
-04740001040106010001040a060100010401060104090100040701000416010004040105
-042e01000406010004310100040801000406010004ff04740001040106010001040a0601
-000104010601040a010104010100040201000416010004370101044201010405010104ff
-04750001040106010001040a0601000104010601040f01020417010004ff04fc00010401
-06010001040a0601000104010601040a0101045c010104ff04bc0001040106010001040a
-0601000104010601040901000460010004ff04bb0001040106010001040a060100010401
-06010409010004030100042b01000418010204030102040301020404010004ff04bb0001
-040106010001040a06010001040106010409010004030100044401000402010004010100
-0402010004010100040201000403010004ff04bb0001040106010001040a060100010401
-060104090100040301000400010104030102040301020402010004000101040a01020403
-01020402010404020102040d010004050100040501000403010004ff04bb000104010601
-0001040a0601000104010601040901000403010104010100040101000402010004010100
-040201000401010104010100040801000402010004040100040601000401010004020100
-040c010004050100040501000403010004ff04bb0001040106010001040a060100010401
-060104070101040401000402010004010100040201000405010004010100040201000408
-010004080100040501000402010004020100040b010004040101040401010405010104ff
-04b90001040106010001040a060100010401060104090100040301000402010004010104
-04020103040101000402010004090102040501000404010004030104040a010004070100
-040501000403010004ff04bb0001040106010001040a0601000104010601040901000403
-0100040201000401010004050100040201000401010004020100040c0100040401000403
-010004040100040d010004080100040501000403010004ff04bb0001040106010001040a
-060100010401060104090100040301000402010004010100040201000401010004020100
-040101010401010004080100040201000404010004020100040501000402010004030101
-0402010004050100040201000401010004020100040301000405010104ff04b300010401
-06010001040a060100010401060104090100040301000402010004020102040301030401
-010004000101040a01020405010004020104040201020404010104020104040201020403
-0102040401000405010104ff04b30001040106010001040a060100010401060104090100
-041801000404010504200100041901000406010004ff04b30001040106010001040a0601
-000104010601040a01010416010004290101041801010405010104ff04b4000104010601
-0001040a06010001040106010423010004ff04ff04030001040106010001040a06010001
-04010601040a0101045c010104ff04bc0001040106010001040a06010001040106010409
-01000460010004ff04bb0001040106010001040a060100010401060104090100040c0100
-041101000416010004190100040401020404010004ff04bb0001040106010001040a0601
-00010401060104090100040c0100041101000430010104030100040201000403010004ff
-04bb0001040106010001040a060100010401060104090100040401020402010404020102
-040301020402010004010100040a01020403010204020104040201020409010004000100
-040701000403010004ff04bb0001040106010001040a0601000104010601040901000403
-01000402010004030100040301000402010004010100040201000401010004000100040a
-01000402010004040100040601000401010004020100040a0100040701000403010004ff
-04bb0001040106010001040a060100010401060104070101040401000407010004070100
-0401010004050101040b010004080100040501000402010004020100040a010004060100
-0405010104ff04b90001040106010001040a060100010401060104090100040401020404
-0100040401030401010004050101040c0102040501000404010004030104040a01000405
-01000405010004ff04bb0001040106010001040a06010001040106010409010004070100
-040301000403010004020100040101000405010004000100040e01000404010004030100
-04040100040e0100040401000406010004ff04bb0001040106010001040a060100010401
-060104090100040301000402010004030100040301000402010004010100040201000401
-010004010100040901000402010004040100040201000405010004020100040301010404
-010004030100040701000405010104ff04b30001040106010001040a0601000104010601
-040901000404010204050101040201030402010204020100040201000409010204050100
-0402010404020102040401010402010404010104040301000405010104ff04b300010401
-06010001040a0601000104010601040901000425010504200100041201000406010004ff
-04b30001040106010001040a0601000104010601040a0101044801010411010104050101
-04ff04b40001040106010001040a060100010401060104ff04ff04280001040106010001
-040a0601000104010601040a0101045c010104ff04bc0001040106010001040a06010001
-04010601040901000460010004ff04bb0001040106010001040a06010001040106010409
-0100041501000411010004060100041f0102040401010404010004ff04bb000104010601
-0001040a0601000104010601040901000415010004110100042601000402010004020100
-040101000403010004ff04bb0001040106010001040a0601000104010601040901000403
-010004000101040301020403010104000100040101000402010004020102040201040402
-010204030102040201000400010104030102040d010004020100040101000403010004ff
-04bb0001040106010001040a060100010401060104090100040301010401010004010100
-040201000401010004010101040101000402010004010100040201000403010004060100
-040201000402010004010101040101000401010004020100040c01000402010004010100
-0403010004ff04bb0001040106010001040a060100010401060104070101040401000405
-010004020100040101000402010004010100040201000401010004070100040601000402
-010004020100040101000402010004010100040e010104030100040101000404010104ff
-04b90001040106010001040a060100010401060104090100040301000405010404010100
-040201000401010004020100040101000407010004060100040201000402010004010100
-0402010004020102040d010004020100040101000403010004ff04bb0001040106010001
-040a06010001040106010409010004030100040501000405010004020100040101000402
-01000401010004070100040601000402010004020100040101000402010004050100040c
-010004020100040101000403010004ff04bb0001040106010001040a0601000104010601
-040901000403010004050100040201000401010004010101040101000401010104010100
-040201000403010004060100040201000402010004010100040201000401010004020100
-0403010104020100040201000402010004010100040301000405010104ff04b300010401
-06010001040a060100010401060104090100040301000406010204030101040001000402
-010104000100040201020405010104040100040301020402010004020100040201020404
-01010403010204040101040401000405010104ff04b30001040106010001040a06010001
-0401060104090100044c0100041201000406010004ff04b30001040106010001040a0601
-000104010601040a010104480101041101010405010104ff04b40001040106010001040a
-060100010401060104ff04ff04280001040106010001040a0601000104010601040a0101
-04890101049401010404010104f10001040106010001040a060100010401060104090100
-048a010004980100040501000403010304e80001040106010001040a0601000104010601
-040901000418010004300102040301020412010004060100041901000406010104090102
-040301020436010104030100041901020402010404010104040201020402010404030100
-040501000406010004e80001040106010001040a06010001040106010409010004180100
-0432010004050100041201000421010004050100040d0100040501000435010004050100
-041801000402010004010100040501000405010004020100040101000407010004050100
-0406010004e80001040106010001040a0601000104010601040901000404010104000100
-040201020402010004000101040201000400010104030102040301010400010004020102
-040a01020403010204050100040501000403010204030102040201040402010204030102
-0402010004000101040b0100040501000403010004020100040401000405010004030102
-040201000402010004020102040301020402010004000101040a01020404010004030104
-040201020402010004000101040901000405010004050100040901000401010004070100
-040501000406010004e80001040106010001040a06010001040106010409010004030100
-040101010401010004020100040101010401010004010101040101000401010004020100
-040101000401010104010100040201000408010004020100040101000402010004040100
-040501000402010004020100040101000402010004030100040601000402010004020100
-0401010104010100040a0100040301040401010004020100040401000405010004020100
-040201000401010004020100040101000402010004010100040201000401010104010100
-040801000402010004010104040301000403010004020100040101010401010004080100
-0405010304020103040601000401010304040100040501000406010004e8000104010601
-0001040a0601000104010601040701010404010004020100040501000401010004050100
-040201000405010004010100040201000401010004020100040801000405010004020100
-040401000405010004020100040201000401010004070100040601000402010004020100
-040101000402010004080101040601000403010004020100040401000405010004020100
-040501000400010004000100040101000402010004010100040201000401010004020100
-040c01000403010004050100040301000402010004010100040c01030406010004050100
-040301010406010004040101040401010404010004e80001040106010001040a06010001
-040106010409010004030100040201000402010304010100040501000402010004020103
-040101000402010004010104040801000405010004020100040401000405010004020104
-04010100040701000406010004020100040201000401010004020100040a010004050100
-040301000402010004040100040501000403010204020100040001000400010004010104
-0401010404010100040201000409010304030100040501000403010404010100040c0100
-040201000405010004050100040501000405010004030100040501000406010004e80001
-040106010001040a06010001040106010409010004030100040201000401010004020100
-0401010004050100040201000401010004020100040101000402010004010100040c0100
-040501000402010004040100040501000402010004050100040701000406010004020100
-040201000401010004020100040a01000405010004030100040201000404010004050100
-040601000401010004000100040001000401010004050100040501000402010004080100
-0402010004030100040501000403010004050100040c0100040201000401010004020100
-040101000402010004050100040101000402010004030100040501000406010004e80001
-040106010001040a06010001040106010409010004030100040101010401010004020100
-040101000405010104010100040101000402010004010100040101010401010004020100
-040801000402010004010100040201000404010004050100040201000402010004010100
-040201000403010004060100040201000402010004010100040201000403010104040100
-040501000403010004010101040401000405010004020100040201000401010004000100
-040001000401010004020100040101000402010004010101040101000408010004020100
-040301000405010004030100040201000401010004070101040201000402010004010100
-040201000401010004020100040101000402010004010100040201000403010004050100
-0406010004e80001040106010001040a0601000104010601040901000404010104000100
-0402010304010100040501000400010104030103040201010400010004020102040a0102
-040301020405010004050100040301020403010204050101040401000403010204020100
-040201000403010104040100040501000404010104000100040401000405010004030102
-040301000400010004030102040301020402010004000101040a01030403010004060101
-040201020402010004070101040301020403010204030102040301020403010204040100
-040501000406010004e80001040106010001040a06010001040106010409010004070100
-0421010004070105044a010004040100043b010004040105042701000427010004050100
-0403010304e80001040106010001040a0601000104010601040a01010401010004020100
-041d01000402010004560101040601010439010004300101042601010404010104f10001
-040106010001040a0601000104010601040f0102041f0102049c010004ff045400010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001040a060100010401
-060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401
-06010001040a060100010401060104ff04ff04280001040106010001060c000104010601
-04ff04ff04280001040106010000060d00010401060104ff04ff0428000104010601050e
-00010401060104ff04ff042800010401060100100401060104ff04ff0428000104010601
-0500000c060000010401060104ff04ff0428000104010601050000010408060105000001
-0401060104ff04ff04280001040106010501000104070601050000010401060104ff04ff
-04280001040106010501000104060601050100010401060104ff04ff0428000104010601
-0502000104050601050100010401060104ff04ff04280001040106010502000104040601
-050200010401060104ff04ff042800010401060105030001040306010502000104010601
-04ff04ff04280001040106010503000104020601050300010401060104ff04ff04280001
-040106010504000104010601050300010401060104ff04ff042800010401060105040001
-04000601050400010401060104ff04ff0428000104010601050500000602050400010401
-060104ff04ff0428000104010601050500000601050500010401060100ff00ff002a0401
-060105060601050500010401060000ff00ff002b04010601050606000506000104ff04ff
-04300601001004ff04ff04300600001104ff04ff04ff04ff04ff04ff04ff04ff04ff04ff
-04ff04ff04ff0498010204ff04ff044001000401010004ff04ff043f0100040201000402
-010204020100040001010403010204ff04ff042a01000402010004010100040201000401
-010104010100040101000402010004ff04ff042901000402010004010100040201000401
-010004020100040101000402010004ff04ff042901000402010004010100040201000401
-0100040201000401010404ff04ff04290100040201000401010004020100040101000402
-01000401010004ff04ff042d010004010100040201000402010004010100040201000401
-01000402010004ff04ff042901020404010204020100040201000402010204ff04ff04ff
-04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04c1
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 73 377 347
-%%EOF
diff --git a/lib/appmon/doc/src/ref_man.xml b/lib/appmon/doc/src/ref_man.xml
deleted file mode 100644
index b54df2ee9b..0000000000
--- a/lib/appmon/doc/src/ref_man.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>1996</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Appmon Reference Manual</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p>The Application Monitor, <em>Appmon</em>, is a graphical utility used
- to supervise applications executing either locally or on remote nodes.
- The process tree of an application can furthermore be monitored.</p>
- </description>
- <xi:include href="appmon.xml"/>
-</application>
-
diff --git a/lib/appmon/doc/src/warning.gif b/lib/appmon/doc/src/warning.gif
deleted file mode 100644
index 96af52360e..0000000000
--- a/lib/appmon/doc/src/warning.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/ebin/.gitignore b/lib/appmon/ebin/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/appmon/ebin/.gitignore
+++ /dev/null
diff --git a/lib/appmon/info b/lib/appmon/info
deleted file mode 100644
index c33a50d106..0000000000
--- a/lib/appmon/info
+++ /dev/null
@@ -1,5 +0,0 @@
-group: tools
-short: A utility used to supervise Applications executing on several
-short: Erlang nodes
-
-
diff --git a/lib/appmon/priv/Makefile b/lib/appmon/priv/Makefile
deleted file mode 100644
index 356fe9b842..0000000000
--- a/lib/appmon/priv/Makefile
+++ /dev/null
@@ -1,65 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-include ../vsn.mk
-VSN = $(APPMON_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/appmon-$(VSN)
-
-#
-# Macros
-#
-HELP_FILES = \
- appmon_help.txt
-
-TOOLBAR_FILES = \
- appmon.tool \
- appmon.gif \
- start_info.html \
- main_frame.html \
- info_frames.html \
- blank.html
-
-#
-# Rules
-#
-
-debug opt:
-
-docs:
-
-clean:
-
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/priv"
- $(INSTALL_DATA) $(HELP_FILES) $(TOOLBAR_FILES) "$(RELSYSDIR)/priv"
-
-release_docs_spec:
-
-FORCE:
diff --git a/lib/appmon/priv/appmon.gif b/lib/appmon/priv/appmon.gif
deleted file mode 100644
index 583fcb8311..0000000000
--- a/lib/appmon/priv/appmon.gif
+++ /dev/null
Binary files differ
diff --git a/lib/appmon/priv/appmon.tool b/lib/appmon/priv/appmon.tool
deleted file mode 100644
index 93a469c6a4..0000000000
--- a/lib/appmon/priv/appmon.tool
+++ /dev/null
@@ -1,24 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-{version,"1.2"}.
-[{config_func,{appmon_web,configData,[]}},
-{tool,"Appmon"},
- {start,{appmon,start,[]}},
- {icon,"appmon.gif"},
- {message,"Application Monitor"},
- {html,"../doc/html/index.html"}].
diff --git a/lib/appmon/priv/appmon_help.txt b/lib/appmon/priv/appmon_help.txt
deleted file mode 100644
index f1685be4d8..0000000000
--- a/lib/appmon/priv/appmon_help.txt
+++ /dev/null
@@ -1,154 +0,0 @@
-
-
-
- Help for the application monitor system
- ---------------------------------------
-
-
-
-
-
- The monitor system has two types of windows, the node window
- which opens when appmon:start() is evaluated, and the
- application window which opens when an application in the node
- window is clicked on.
-
- All nodes that are known to appmon is shown in the node
- window, normally this is all Erlang nodes visible with the
- nodes() command.
-
-
-The Node window
----------------
-
- The node window monitors nodes. At the top there is a menubar
- and below that, each known node is shown separated with a thin
- line from the others. A node is represented by its name as
- root of its application tree. The node name pictures the
- application controller on that node. The name itself is a menu
- where operations on the node can be performed (rebooting it
- for instance). To the far left is a load meter (like those on
- a tape deck) which measures the current load at the
- node. Below the node name (the application controller) is a
- tree with applications, clicking on these applications starts
- the application monitor.
-
-
- The top window menubar
- ----------------------
-
- File:Quit - Stop the monitor.
-
- Options:
- Load: time - Load is calculated (roughly) as processor time.
- Load: queue - Load is calculated as the length of the ready
- queue.
- Load: prog - A progressive scale is used for load values.
- Load: linear - A linear scale is used for load values.
-
- Help - Prints this message.
-
-
- The application controller menu
- -------------------------------
- Reboot - Reboot the node
- Restart - Restart the node
- Stop - Stop the node
-
-
- The load meter
- --------------
-
- Load can be measured as processor time / elapsed time or as
- the length of the runtime queue, depending on the setting in
- the Options menu.
-
-
-The Application window
-----------------------
-
- The application window monitors an application. It will
- automaticly update the window every other second or so if
- there are any changes in the process tree. At the top there is
- a menubar followed by a toolbar and then the application
- tree. Application trees come in two flavours: supervision
- view, where a strict supervision tree is shown, and process
- view, where all linked processes in the application is shown.
-
-
- The application window menubar
- ------------------------------
-
- File:Quit - Quit the application window.
-
- Options:Refresh - Update process information and refresh
- screen.
-
- Options:Sup. view
- - Show strict supervision tree only.
-
- Options:Proc. view
- - Show all linked processes.
-
- Help - Prints this message.
-
-
- The application window toolbar
- ------------------------------
-
- The application toolbar controls the actions of the mouse
- pointer. Clicking on a process in the application window have
- different meaning depending on which tool is selected. The
- procedure is to first press a button (T for trace for example)
- and then click on the process that should be traced.
-
- Info - Process information is printed in the shell. This mode
- is default and automaticly returned to after a mouse click.
-
- Send - Send a message to the clicked process. A window will
- pop up where the message can be written (and you can also
- change the destination pid). Double clicking on this button
- pops up a window where pid and message can be filled in.
-
- Trace - Toggle trace on/off on the process. Note that not all
- processes respond to the sys:trace call.
-
- Kill - Send a non-trappable exit signal to the process.
-
-
-Technical Detail
-----------------
-
- Files and distribution
- ----------------------
-
- Appmon is a distributed program but all graphics is handled on
- one node (the one it is started on) so GS need only to be
- loaded on that single node. All real monitoring is done in a
- single module (appmon_info) being run on each node which acts
- as an information centre. The various windows (node and
- application) then subscribe for information.
-
- In summary: only the appmon_info module must be accessible by
- the clients, the rest of the appmon files are only needed at
- the server.
-
- Trouble shooting
- ----------------
-
- Q. Why doesn't all my nodes show up in the node window?
-
- A 1. Are the nodes visible with the nodes() command in the
- shell? If not you must do net:ping(NodeName) to add nodes to
- the Erlang distribution.
-
- A 2. Is the appmin_info module loadable at the missing
- node(s)?
-
- Q. Why doesn't the application window show my application
- supervision structure?
-
- A. Does your application have a real application master? It is
- absolutely necessary that your top process behaves as a
- supervisor should (a program is not supervised just because it
- is started with application:start).
diff --git a/lib/appmon/priv/blank.html b/lib/appmon/priv/blank.html
deleted file mode 100644
index 44e86908a0..0000000000
--- a/lib/appmon/priv/blank.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<HTML>
-<HEAD></HEAD>
-<BODY BGCOLOR="#FFFFFF">
-&nbsp;
-</BODY>
-</HTML> \ No newline at end of file
diff --git a/lib/appmon/priv/info_frames.html b/lib/appmon/priv/info_frames.html
deleted file mode 100644
index 9320364883..0000000000
--- a/lib/appmon/priv/info_frames.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>WebAppmon </TITLE>
-</HEAD>
-<FRAMESET ROWS="85%,15%" BORDER="0">
-<FRAME NAME="main" SRC="./start_info.html">
-<FRAME NAME="proc_data" SRC="./blank.html">
-</FRAMESET>
-</HTML> \ No newline at end of file
diff --git a/lib/appmon/priv/main_frame.html b/lib/appmon/priv/main_frame.html
deleted file mode 100644
index 57e540a2c1..0000000000
--- a/lib/appmon/priv/main_frame.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>WebAppmon </TITLE>
-</HEAD>
-<FRAMESET COLS="15%,85%" >
- <FRAME NAME="left" SRC="../../erl/appmon_web/node_info">
- <FRAME NAME="base_frames" SRC="./info_frames.html">
-</FRAMESET>
-</HTML> \ No newline at end of file
diff --git a/lib/appmon/priv/start_info.html b/lib/appmon/priv/start_info.html
deleted file mode 100644
index 580319beb1..0000000000
--- a/lib/appmon/priv/start_info.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<HTML>
-<HEAD>
-</HEAD>
-<BODY BGCOLOR="#FFFFFF">
-<TABLE WIDTH=100% HEIGHT=100%>
-<TR VALIGN="middle">
-<TD ALIGN="center">
-
-<TABLE WIDTH="60%">
-<TR>
-<TD ALIGN="center">
-<FONT SIZE=6>Welcome to the Web based User Interface to Appmon
-</FONT></TD>
-</TR>
-
-<TR>
-<TD><BR><BR><BR><BR>
-</TD>
-</TR>
-
-<TR>
-<TD ALIGN="center">&nbsp;
-</TD>
-</TR>
-</TABLE>
-
-</TD>
-</TR>
-</TABLE>
-</BODY>
-</HTML> \ No newline at end of file
diff --git a/lib/appmon/src/Makefile b/lib/appmon/src/Makefile
deleted file mode 100644
index c1620bc37a..0000000000
--- a/lib/appmon/src/Makefile
+++ /dev/null
@@ -1,103 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2013. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../vsn.mk
-VSN=$(APPMON_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/appmon-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-
-MODULES= \
- appmon \
- appmon_a \
- appmon_dg \
- appmon_place \
- appmon_txt \
- appmon_lb \
- process_info \
- appmon_web
-
-# appmon_info \ Moved to runtime tools where it belongs
-
-
-HRL_FILES= appmon_dg.hrl
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES= $(MODULES:%=../ebin/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET)
-
-APP_FILE= appmon.app
-APPUP_FILE= appmon.appup
-
-APP_SRC= $(APP_FILE).src
-APPUP_SRC= $(APPUP_FILE).src
-
-APP_TARGET= ../ebin/$(APP_FILE)
-APPUP_TARGET= ../ebin/$(APPUP_FILE)
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS += +warn_obsolete_guard
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt: $(TARGET_FILES)
-
-clean:
- rm -f $(TARGET_FILES)
- rm -f core
-
-docs:
-
-# ----------------------------------------------------
-# Special Build Targets
-# ----------------------------------------------------
-
-$(APP_TARGET): $(APP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/src"
- $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) "$(RELSYSDIR)/src"
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
-
-release_docs_spec:
-
diff --git a/lib/appmon/src/appmon.app.src b/lib/appmon/src/appmon.app.src
deleted file mode 100644
index aa6a08772e..0000000000
--- a/lib/appmon/src/appmon.app.src
+++ /dev/null
@@ -1,24 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-{application, appmon,
- [{description, "DEVTOOLS CXC 138 16"},
- {vsn, "%VSN%"},
- {modules, [appmon, appmon_a, appmon_dg, %% appmon_info, moved to runtime tools
- appmon_lb, appmon_place, appmon_txt,process_info,appmon_web]},
- {registered,[appmon, appmon_info, appmon_txt,webappmon_server,proc_info]},
- {applications, [kernel, stdlib]}]}.
diff --git a/lib/appmon/src/appmon.appup.src b/lib/appmon/src/appmon.appup.src
deleted file mode 100644
index 0d918b6081..0000000000
--- a/lib/appmon/src/appmon.appup.src
+++ /dev/null
@@ -1,18 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-{"%VSN%",[],[]}.
diff --git a/lib/appmon/src/appmon.erl b/lib/appmon/src/appmon.erl
deleted file mode 100644
index ba98a24400..0000000000
--- a/lib/appmon/src/appmon.erl
+++ /dev/null
@@ -1,1081 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(appmon).
--behaviour(gen_server).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,1}}]).
-
-%%%---------------------------------------------------------------------
-%%% Appmon main module.
-%%% Creates the main window and receives load and application
-%%% information from all connected nodes.
-%%%---------------------------------------------------------------------
-
-%% External exports
--export([start/0, stop/0]).
-
-%% gen_server callbacks
--export([init/1, handle_cast/2, handle_info/2, terminate/2]).
--export([handle_call/3, code_change/3]). % not used
-
-%% Canvas button data
--record(canvasbutton, {text, ul, ll, rect, x, y, w, h}).
-
-%% Options - all the fields are GS radio buttons
--record(options, {single, many, time, queue, prog, linear}).
-
-%% Main window data
--record(win, {name, % atom() Monitored node
- window, % gsobj()
- wwindow, % int() Window width
- hwindow, % int() Window height
- options, % #options{}
- canvas, % gsobj()
- wcanvas, % int() Canvas width
- hcanvas, % int() Canvas height
- l1, l2, % gsobj() Canvas lines
- leds, % [gsobj()] Load meter
- nodelabel, % {gsobj(),gsobj()}
- appobjs=[], % [gsobj()] Buttons etc.
- nodemenu}). % gsobj() Node menu
-
-%% Node data
--record(mnode, {name, % atom() Node name
- status, % alive | dead
- pid, % pid()
- apps, % [{Pid,App,Descr}]
- load}). % {Old, New}
-
-%% Internal state data
--record(state, {gs, % pid()
- wins=[], % [#win()] GUIs
- window_mode, % single | many
- load_mode1, % time | queue
- load_mode2, % prog | linear
- lbpid, % pid()
- mnodes=[]}). % [#mnode{}]
-
-%%%---------------------------------------------------------------------
-%%% External exports
-%%%---------------------------------------------------------------------
-
-start() ->
- gen_server:start({local, appmon}, ?MODULE, [], []).
-
-stop() ->
- gen_server:cast(appmon, stop).
-
-
-%%%---------------------------------------------------------------------
-%%% gen_server callbacks
-%%%---------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Func: init/1
-%% Returns: {ok, State} |
-%% {ok, State, Timeout} |
-%% ignore |
-%% {stop, Reason}
-%%----------------------------------------------------------------------
-init([]) ->
- process_flag(trap_exit, true),
-
- %% Subscribe to {nodeup,Node} and {nodedown,Node} messages
- net_kernel:monitor_nodes(true),
-
- LbPid = appmon_lb:start(self ()),
-
- %% Check which remote nodes have appmon code available (OTP-4887)
- NodesOk = lists:filter(fun(Node) -> check_node(Node) end, nodes()),
- Nodes = [node()|NodesOk],
-
- %% Start monitoring the existing nodes
- MNodes = mk_mnodes(Nodes, LbPid),
-
- %% Draw the main window
- GS = gs:start([{kernel,true}]),
- GUI = draw_win(GS, node()),
-
- %% Update the Nodes menu with all known nodes
- lists:foreach(fun(Node) ->
- display_addnode(GUI, Node)
- end,
- Nodes),
-
- %% Mark the default options as selected in the Options menu
- display_setopt(GUI, single),
- display_setopt(GUI, time),
- display_setopt(GUI, prog),
-
- {ok, #state{gs=GS, wins=[GUI],
- window_mode=single, load_mode1=time, load_mode2=prog,
- lbpid=LbPid, mnodes=MNodes}}.
-
-check_node(Node) ->
- case rpc:call(Node, code, which, [appmon]) of
- File when is_list(File) ->
- true;
- _ -> % non_existing (| cover_compiled)
- false
- end.
-
-%%----------------------------------------------------------------------
-%% Func: handle_call/3
-%% Returns: {reply, Reply, State} |
-%% {reply, Reply, State, Timeout} |
-%% {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, Reply, State} | (terminate/2 is called)
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-handle_call(norequest, _From, State) ->
- {reply, null, State}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_cast/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-handle_cast(stop, State) ->
- {stop, normal, State}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_info/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-%% Load information from a node
-handle_info({delivery, _Serv, load, Node, Load}, State) ->
-
- %% Update node information
- MNode = get_mnode(Node, State#state.mnodes),
- MNode1 = MNode#mnode{load=Load},
- MNodes = replace_mnode(Node, MNode1, State#state.mnodes),
-
- %% If Node is currently displayed, update graphics
- case get_win(Node, State#state.wins) of
- {ok, GUI} ->
- display_load(GUI, Load);
- false ->
- ignore
- end,
-
- {noreply, State#state{mnodes=MNodes}};
-
-%% Application information from a node
-handle_info({delivery, _Serv, app_ctrl, Node, Apps}, State) ->
-
- %% Update node information
- MNode = get_mnode(Node, State#state.mnodes),
- MNode1 = MNode#mnode{apps=Apps},
- MNodes = replace_mnode(Node, MNode1, State#state.mnodes),
-
- %% If Node is currently displayed, update graphics
- Wins = case get_win(Node, State#state.wins) of
- {ok, GUI} ->
- draw_clear(GUI),
- GUI1 = draw_apps(GUI, Apps),
- replace_win(Node, GUI1, State#state.wins);
- false ->
- State#state.wins
- end,
-
- appmon_lb:add_apps (State#state.lbpid, Apps, Node),
- {noreply, State#state{wins=Wins, mnodes=MNodes}};
-
-handle_info({nodeup, Node}, State) ->
-
- %% First, make sure appmon code is available at remode node,
- %% or the node should be ignored (OTP-3591)
- case check_node(Node) of
- true ->
-
- %% If this is a previously unknown node, update window's
- %% 'Nodes' menu
- case get_mnode(Node, State#state.mnodes) of
- false ->
- display_addnode(State#state.wins, Node);
- _OldMnode ->
- ignore
- end,
-
- %% Update node information (=> state is automatically
- %% changed to 'alive')
- MNode = mk_mnode(Node, State#state.lbpid),
- MNodes = replace_mnode(Node, MNode, State#state.mnodes),
-
- %% If Node is currently displayed, update graphics
- case get_win(Node, State#state.wins) of
- {ok, GUI} ->
- display_nodeup(GUI, Node);
- false ->
- ignore
- end,
-
- appmon_lb:update_status(State#state.lbpid, Node, alive),
- {noreply, State#state{mnodes=MNodes}};
-
- false ->
- {noreply, State}
- end;
-
-handle_info({nodedown, Node}, State) ->
-
- %% If this is a previously unknown node, ignore the message.
- %% (The situation occurs when failing to connect to another node).
- %% Otherwise, update the node information.
- case get_mnode(Node, State#state.mnodes) of
- false ->
- {noreply, State};
- MNode ->
- MNode1 = MNode#mnode{status=dead},
- MNodes = replace_mnode(Node, MNode1, State#state.mnodes),
-
- %% If Node is currently displayed, update graphics
- Wins = case get_win(Node, State#state.wins) of
- {ok, GUI} ->
- display_nodedown(GUI),
- GUI1 = draw_clear(GUI),
- replace_win(Node, GUI1, State#state.wins);
- false ->
- State#state.wins
- end,
-
- appmon_lb:remove_node(State#state.lbpid, Node),
- {noreply, State#state{wins=Wins, mnodes=MNodes}}
- end;
-
-%% Application 'button' events
-handle_info({gs, _Obj, buttonpress, Data, _Arg}, State) ->
- {canvasbutton, CBtn, _App} = Data,
- press(CBtn),
- {noreply, State};
-handle_info({gs, _Obj, buttonrelease, Data, [_,X,Y|_]}, State) ->
- {canvasbutton, CBtn, {application, App, Node}} = Data,
- release(CBtn),
-
- %% Check that mouse button was released over the button!
- L = CBtn#canvasbutton.x, R = L + CBtn#canvasbutton.w,
- T = CBtn#canvasbutton.y, B = T + CBtn#canvasbutton.h,
- if
- X>L, X<R, Y>T, Y<B ->
- MNode = get_mnode(Node, State#state.mnodes),
- {value, {Pid, _App, _Descr}} =
- lists:keysearch(App, 2, MNode#mnode.apps),
- appmon_a:start(Node, App, Pid);
- true ->
- ignore
- end,
- {noreply, State};
-
-handle_info({gs, _Button, click, Data, _Arg}, State) ->
- ThisNode = node(),
- case Data of
-
- %% File menu item
- listbox ->
- appmon_lb:open_win(State#state.lbpid,
- parse_nodes(State#state.mnodes)),
- {noreply, State};
- {close, WinObj} ->
- {ok, GUI} = get_win2(WinObj, State#state.wins),
- gs:destroy(WinObj),
-
- %% Terminate if this was the only open window
- case remove_win(GUI#win.name, State#state.wins) of
- [] ->
- {stop, normal, State};
- Wins ->
- {noreply, State#state{wins=Wins}}
- end;
- exit ->
- {stop, normal, State};
-
- %% Actions menu item
- {action, Action, WinObj} ->
- {ok, GUI} = get_win2(WinObj, State#state.wins),
- Node = GUI#win.name,
-
- if
- Node==ThisNode ->
- case Action of
- ping ->
- %% Ignore - makes no sense to ping yourself
- ignore;
- _ -> % reboot | restart | stop
- apply(init, Action, [])
- end;
-
- Node/=ThisNode ->
- case Action of
- ping ->
- net_adm:ping(Node);
- _ -> % reboot | restart | stop
- rpc:cast(Node, init, Action, [])
- end
- end,
- {noreply, State};
-
- %% Options menu item
- {window_mode, Mode} ->
-
- %% Update windows so they all show the same options
- lists:foreach(fun(GUI) ->
- display_setopt(GUI, Mode)
- end,
- State#state.wins),
- {noreply, State#state{window_mode=Mode}};
-
- {option, Tag, Option} ->
-
- %% Update windows so they all show the same options
- lists:foreach(fun(GUI) ->
- display_setopt(GUI, Tag)
- end,
- State#state.wins),
-
- %% Update all appmon_info processes about which kind of
- %% load data is desired
- lists:foreach(fun(MNode) ->
- appmon_info:load(MNode#mnode.pid,
- MNode#mnode.name,
- true,
- Option)
- end,
- State#state.mnodes),
-
- if
- Tag==time; Tag==queue ->
- {noreply, State#state{load_mode1=Tag}};
- Tag==prog; Tag==linear ->
- {noreply, State#state{load_mode2=Tag}}
- end;
-
- %% Nodes menu item
- {node, Node, WinObj} ->
-
- %% Check first if this window is already displayed
- case get_win(Node, State#state.wins) of
- {ok, GUI} ->
-
- %% Node is already displayed, raise its window
- gs:config(GUI#win.window, raise),
-
- {noreply, State};
-
- %% Node is not displayed
- false ->
-
- %% Redraw existing window or create a new window
- %% depending on window mode
- case State#state.window_mode of
-
- single ->
- {ok, GUI} =
- get_win2(WinObj, State#state.wins),
-
- %% Clear window and correct the node name
- draw_clear(GUI),
- GUI1 = draw_nodename(GUI, Node),
-
- %% Update window with the correct node name
- %% and the applications running at the node
- MNode = get_mnode(Node, State#state.mnodes),
- GUI2 = case MNode#mnode.status of
- dead ->
- display_nodedown(GUI1),
- GUI1;
- alive ->
- display_nodeup(GUI1, Node),
- draw_apps(GUI1,
- MNode#mnode.apps)
- end,
- Wins = replace_win(GUI#win.name, GUI2,
- State#state.wins),
-
- {noreply, State#state{wins=Wins}};
-
- many ->
- GUI = draw_win(State#state.gs, Node),
-
- %% Update Nodes menu with all known nodes -
- %% use MNodes to get them in the right order
- lists:foreach(fun(MNode) ->
- Name =
- MNode#mnode.name,
- display_addnode(GUI,
- Name)
- end,
- State#state.mnodes),
-
- %% Mark selected options in the Options menu
- display_setopt(GUI, many),
- display_setopt(GUI, State#state.load_mode1),
- display_setopt(GUI, State#state.load_mode2),
-
- %% Add the applications running at the node
- MNode = get_mnode(Node, State#state.mnodes),
-
- GUI1 = case MNode#mnode.status of
- dead ->
- display_nodedown(GUI),
- GUI;
- alive ->
- display_nodeup(GUI, Node),
- draw_apps(GUI,
- MNode#mnode.apps)
- end,
- Wins = [GUI1|State#state.wins],
-
- {noreply, State#state{wins=Wins}}
- end
- end;
-
- %% Help menu = Help button
- help ->
- HelpFile = filename:join([code:lib_dir(appmon),
- "doc", "html", "part_frame.html"]),
- case State#state.wins of
- [Win] ->
- tool_utils:open_help(Win#win.window, HelpFile);
- _ ->
- tool_utils:open_help(State#state.gs, HelpFile)
- end,
- {noreply, State};
-
- _Other ->
- {noreply, State}
- end;
-handle_info({gs, WinObj, configure, _, [WWindow, HWindow|_]}, State) ->
- {ok, GUI} = get_win2(WinObj, State#state.wins),
- GUI1 = draw_resize(GUI, WWindow, HWindow),
- display_scrollbar(GUI1),
- Wins = replace_win(GUI#win.name, GUI1, State#state.wins),
- {noreply, State#state{wins=Wins}};
-handle_info({gs, WinObj, destroy, _, _}, State) -> % OTP-1179
- {ok, GUI} = get_win2(WinObj, State#state.wins),
-
- %% Terminate if this was the only open window
- case remove_win(GUI#win.name, State#state.wins) of
- [] ->
- {stop, normal, State};
- Wins ->
- {noreply, State#state{wins=Wins}}
- end;
-
-handle_info(stop, State) ->
- {stop, normal, State};
-handle_info({'EXIT', Pid, Reason}, State) ->
- case Reason of
- shutdown ->
- %% Appmon is being asked to shut down, eg during reboot
- {stop, Reason, State};
- _ ->
- case State#state.gs of
-
- %% GS exited, kill appmon
- {0, Pid} ->
- {stop, normal, State};
-
- _ ->
- {noreply, State}
- end
- end;
-handle_info(_Info, State) ->
- {noreply, State}.
-
-%%----------------------------------------------------------------------
-%% Func: terminate/2
-%% Purpose: Shutdown the server
-%% Returns: any (ignored by gen_server)
-%%----------------------------------------------------------------------
-terminate(_Reason, State) ->
- bcast(State#state.mnodes, {kill}),
- appmon_lb:stop(State#state.lbpid),
- ok.
-
-%%----------------------------------------------------------------------
-%% Func: code_change/3
-%% Purpose: Convert process state when code is changed
-%% Returns: {ok, NewState}
-%%----------------------------------------------------------------------
-code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
-
-
-%%%---------------------------------------------------------------------
-%%% Internal functions
-%%%---------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% MNode manipulating functions
-%%----------------------------------------------------------------------
-
-%% mk_mnodes(Nodes, LbPid) -> MNodes
-%% Nodes -> [atom()]
-%% LbPid -> pid()
-%% MNodes -> [#mnode{}]
-mk_mnodes([Node|Nodes], LbPid) ->
- [mk_mnode(Node, LbPid) | mk_mnodes(Nodes, LbPid)];
-mk_mnodes([], _LbPid) ->
- [].
-
-mk_mnode(Node, LbPid) ->
-
- %% Create an appmon process at the node
- {ok, Pid} = appmon_info:start_link(Node, self(), []),
-
- appmon_lb:add_node(LbPid, Node),
- appmon_info:load(Pid, Node, true, [{timeout,1000}]),
- appmon_info:app_ctrl(Pid, Node, true, []),
-
- #mnode{name=Node, status=alive, pid=Pid}.
-
-%% get_mnode(Node, MNodes) -> MNode | false
-%% Node -> atom()
-%% MNodes -> [#mnode{}]
-%% MNode -> #mnode{}
-get_mnode(Node, MNodes) ->
- case lists:keysearch(Node, #mnode.name, MNodes) of
- {value, MNode} ->
- MNode;
- false ->
- false
- end.
-
-%% replace_mnode(Node, MNode, MNodes1) -> Mnodes2
-%% Node -> atom()
-%% MNode -> #mnode{}
-%% MNodes1 -> MNodes2 -> [#mnode{}]
-%% Replaces, or adds if previously not included, the mnode with name
-%% Node in MNodes1 with MNode.
-replace_mnode(Node, MNode, [#mnode{name=Node} | MNodes]) ->
- [MNode | MNodes];
-replace_mnode(Node, MNode, [MNode2 | MNodes]) ->
- [MNode2 | replace_mnode(Node, MNode, MNodes)];
-replace_mnode(_Node, MNode, []) ->
- [MNode].
-
-
-%%----------------------------------------------------------------------
-%% GUI list manipulating functions
-%%----------------------------------------------------------------------
-
-%% get_win(Node, Wins) -> Win
-%% Node -> atom()
-%% Wins -> [#win{}]
-%% Win -> #win{}
-get_win(Node, Wins) ->
- case lists:keysearch(Node, #win.name, Wins) of
- {value, Win} ->
- {ok, Win};
- false ->
- false
- end.
-
-%% get_win2(WinObj, Wins) -> Win
-%% Window -> gsobj()
-%% Wins -> [#win{}]
-%% Win -> #win{}
-get_win2(WinObj, Wins) ->
- case lists:keysearch(WinObj, #win.window, Wins) of
- {value, Win} ->
- {ok, Win};
- false ->
- false
- end.
-
-%% replace_win(Node, Win, Wins) -> Wins2
-%% Node -> atom()
-%% Win -> #win{}
-%% Wins -> Wins2 -> [#win{}]
-replace_win(Node, Win, Wins) ->
- lists:keyreplace(Node, #win.name, Wins, Win).
-
-%% remove_win(Node, Wins) -> Wins2
-%% Node -> atom()
-%% Wins -> Wins2 -> [#win{}]
-remove_win(Node, Wins) ->
- lists:keydelete(Node, #win.name, Wins).
-
-
-
-
-%%----------------------------------------------------------------------
-%% GUI manipulating functions
-%%----------------------------------------------------------------------
--define(PAD, 10). % Pad between objects
--define(PAD2, 4*?PAD). % Pad betw. node lbl and app
-
--define(hMENUBAR, 25). % Note: Hardwired in Tcl/Tk
-
--define(xNODELBL, 60). % Node label
--define(yNODELBL, 35).
--define(hNODELBL, 20).
-
--define(xMETER, 5). % Meter
--define(yMETER, ?yNODELBL).
--define(wMETER, 20).
--define(hMETER, ?hNODELBL + ?PAD + ?PAD2 + ?hBTN).
--define(LEDCOUNT, 16).
-
--define(xBTN, ?xNODELBL). % Application buttons
--define(yBTN, ?yNODELBL + ?hNODELBL + ?PAD + ?PAD2).
--define(wBTN, 70). % min width
--define(hBTN, 20).
-
--define(wCANVAS, 470 + ?wMETER + 3*?PAD). % Canvas
--define(hCANVAS, ?yNODELBL + ?hNODELBL + ?PAD + ?PAD2 + ?hBTN + 2*?PAD).
-
--define(wWIN, ?wCANVAS). % Window
--define(hWIN, ?hMENUBAR + ?hCANVAS).
-
-%%--Main window---------------------------------------------------------
-
-draw_win(GS, Node) ->
-
- %% Main window
- NodeStr = atom_to_list(Node),
- Win = gs:create(window, GS, [{title,
- "APPMON: Overview on " ++ NodeStr},
- {width, ?wWIN}, {height, ?hWIN},
- {configure, true}]),
- Canvas = gs:create(canvas, Win, [{x, 0}, {y, ?hMENUBAR},
- {width, ?wCANVAS},
- {height, ?hCANVAS}]),
- L1 = gs:create(line, Canvas, [{coords,
- [{0,?yNODELBL-?PAD},
- {?wCANVAS,?yNODELBL-?PAD}]}]),
- L2 = gs:create(line, Canvas, [{coords,
- [{0,?hCANVAS-?PAD},
- {?wCANVAS,?hCANVAS-?PAD}]}]),
-
- %% Standard buttons
- MenuBar = gs:create(menubar, Win, [{height, ?hMENUBAR}]),
-
- FileMenuBtn = gs:create(menubutton, MenuBar,
- [{label, {text,"File"}}]),
- FileMenu = gs:create(menu, FileMenuBtn, []),
- gs:create(menuitem, FileMenu, [{label, {text,"Show List Box..."}},
- {data, listbox}]),
- gs:create(menuitem, FileMenu, [{label, {text, "Close"}},
- {data, {close, Win}}]),
- gs:create(menuitem, FileMenu, [{itemtype, separator}]),
- gs:create(menuitem, FileMenu, [{label, {text, "Exit"}},
- {data, exit}]),
-
- ActionMenuBtn = gs:create(menubutton, MenuBar,
- [{label,{text,"Actions"}}]),
- ActionMenu = gs:create(menu, ActionMenuBtn, []),
- gs:create(menuitem, ActionMenu, [{label, {text,"Reboot"}},
- {data, {action, reboot, Win}}]),
- gs:create(menuitem, ActionMenu, [{label, {text,"Restart"}},
- {data, {action, restart, Win}}]),
- gs:create(menuitem, ActionMenu, [{label, {text,"Stop"}},
- {data, {action, stop, Win}}]),
- gs:create(menuitem, ActionMenu, [{label, {text,"Ping"}},
- {data, {action, ping, Win}}]),
-
- OptMenuBtn = gs:create(menubutton, MenuBar,
- [{label, {text,"Options"}}]),
- OptMenu = gs:create(menu, OptMenuBtn, []),
- G0 = now(), % Group identity unique per window!
- SMI = gs:create(menuitem, OptMenu, [{label, {text,"One window"}},
- {itemtype, radio}, {group, G0},
- {data, {window_mode, single}}]),
- MMI = gs:create(menuitem, OptMenu, [{label, {text,"Many windows"}},
- {itemtype, radio}, {group, G0},
- {data, {window_mode, many}}]),
- gs:create(menuitem, OptMenu, [{itemtype, separator}]),
- G1 = now(),
- TMI = gs:create(menuitem, OptMenu, [{label, {text,"Load: time"}},
- {itemtype, radio}, {group, G1},
- {data,
- {option, time,
- [{load_method,time}]}}]),
- QMI = gs:create(menuitem, OptMenu, [{label, {text,"Load: queue"}},
- {itemtype, radio}, {group, G1},
- {data,
- {option, queue,
- [{load_method,queue}]}}]),
- G2 = now(),
- PMI = gs:create(menuitem, OptMenu,
- [{label, {text,"Load: progressive"}},
- {itemtype, radio}, {group, G2},
- {data, {option, prog, [{load_scale,prog}]}}]),
- LMI = gs:create(menuitem, OptMenu, [{label, {text,"Load: linear"}},
- {itemtype, radio}, {group, G2},
- {data,
- {option, linear,
- [{load_scale,linear}]}}]),
-
- NodeMenuBtn = gs:create(menubutton, MenuBar,
- [{label, {text,"Nodes"}}]),
- NodeMenu = gs:create(menu, NodeMenuBtn, []),
-
- HelpMenuBtn = gs:create(menubutton, MenuBar,
- [{label, {text,"Help"}}, {side, right}]),
- HelpMenu = gs:create(menu, HelpMenuBtn, []),
- gs:create(menuitem, HelpMenu, [{label, {text,"Help"}},
- {data, help}]),
-
- %% Meter
- HLed = trunc((?hMETER)/(?LEDCOUNT)),
- Leds = draw_leds(?LEDCOUNT, Canvas, ?yMETER, HLed, []),
- leds_down(Leds, ?LEDCOUNT, 0),
- gs:create(text, Canvas, [{coords,
- [{?xMETER, ?yMETER+HLed*?LEDCOUNT}]},
- {anchor, nw},
- {font, {screen,8}},
- {text, "Load"}]),
- gs:create(text, Canvas, [{coords, [{?xMETER+?wMETER, ?yMETER}]},
- {anchor, nw},
- {font, {screen,8}},
- {text, "Hi"}]),
- gs:create(text, Canvas, [{coords, [{?xMETER+?wMETER,
- ?yMETER+HLed*?LEDCOUNT}]},
- {anchor, w},
- {font, {screen,8}},
- {text, "Lo"}]),
-
- %% Node label
- WNodeLbl = 8*length(NodeStr)+10,
- NLRect = gs:create(rectangle, Canvas,
- [{coords, [{?xNODELBL,?yNODELBL},
- {?xNODELBL+WNodeLbl,
- ?yNODELBL+?hNODELBL}]},
- {fill, black}]),
- Xc = ?xNODELBL + round(WNodeLbl/2),
- Yc = ?yNODELBL + round(?hNODELBL/2),
- NLText = gs:create(text, Canvas, [{text, NodeStr},
- {fg, {250,235,215}},
- {coords, [{Xc,Yc}]},
- {anchor, c}]),
- NodeLbl = {NLRect, NLText},
-
- gs:config(Win, {map, true}),
- #win{name=Node,
- window=Win, wwindow=?wWIN, hwindow=?hCANVAS,
- options=#options{single=SMI, many=MMI,
- time=TMI, queue=QMI, prog=PMI, linear=LMI},
- canvas=Canvas, wcanvas=?wCANVAS, hcanvas=?hCANVAS,
- l1=L1, l2=L2, leds=Leds, nodelabel=NodeLbl, nodemenu=NodeMenu}.
-
-draw_leds(N, Canvas, Y, HLed, Leds) when N>0 ->
- Led = gs:create(rectangle, Canvas,
- [{coords,
- [{?xMETER,Y}, {?xMETER+?wMETER,Y+HLed}]}]),
- draw_leds(N-1, Canvas, Y+HLed, HLed, [Led | Leds]);
-draw_leds(0, _Canvas, _Y, _HLed, Leds) ->
- Leds.
-
-%%--Draw functions------------------------------------------------------
-%% Functions that modify the GUI and its data (win{})
-
-%% Display the node name in the window title
-%% (The name in the node label is changed by display_nodeup|nodedown)
-%% Used when a changing the node to display
-draw_nodename(GUI, Node) ->
- NodeStr = atom_to_list(Node),
- gs:config(GUI#win.window,
- {title, "APPMON: Overview on " ++ NodeStr}),
- GUI#win{name=Node}.
-
-%% Resize the canvas (when the window has been resized)
-draw_resize(GUI, W, H) ->
- Hc = H - ?hMENUBAR,
- gs:config(GUI#win.canvas, [{width, W}, {height, Hc}]),
- Yline1 = ?yNODELBL-?PAD,
- Yline2 = ?hCANVAS-?PAD,
- gs:config(GUI#win.l1, [{coords, [{0,Yline1},{W,Yline1}]}]),
- gs:config(GUI#win.l2, [{coords, [{0,Yline2},{W,Yline2}]}]),
- GUI#win{wwindow=W, hwindow=Hc}.
-
-%% Clear the GUI from applications and connecting lines
-draw_clear(GUI) ->
- draw_clear2(GUI#win.appobjs),
- gs:config(GUI#win.canvas, [{hscroll, false}]),
- GUI#win{appobjs=[]}.
-draw_clear2([CBtn | AppObjs]) when is_record(CBtn, canvasbutton) ->
- gs:destroy(CBtn#canvasbutton.text),
- gs:destroy(CBtn#canvasbutton.ul),
- gs:destroy(CBtn#canvasbutton.ll),
- gs:destroy(CBtn#canvasbutton.rect),
- draw_clear2(AppObjs);
-draw_clear2([GSObj | AppObjs]) ->
- gs:destroy(GSObj),
- draw_clear2(AppObjs);
-draw_clear2([]) ->
- ignore.
-
-%% Display the applications, which are a list of tuples: {Pid,App,Descr}
-%% Display them in the reversed order to get them chronologically
-%% from left to right.
-draw_apps(GUI, Apps) ->
- {AppObjs, WCanvas} = draw_apps(GUI, lists:reverse(Apps), ?xNODELBL,
- undefined, 0, []),
- NewGUI = GUI#win{wcanvas=WCanvas, appobjs=AppObjs},
- display_scrollbar(NewGUI),
- NewGUI.
-
-draw_apps(GUI, [App | Apps], X, Lx0, N, GSObjs) ->
-
- %% Some necessary data
- {_Pid, AppName, _Descr} = App,
- Text = atom_to_list(AppName),
- Width = erlang:max(8*length(Text)+10, ?wBTN),
-
- %% Connect the application to the node label with a line
- %% Lx0 = leftmost X coordinate (above previous application button)
- %% Lx = X coordinate, Ly1, Ly2 = top and bottom Y coordinates
- Lx = X + trunc(Width/2),
- Line = case N of
- %% First (leftmost application) - draw a vertical line
- %% between the node label and application button
- 0 ->
- Ly1 = ?yNODELBL + ?hNODELBL +?PAD,
- Ly2 = Ly1 + ?PAD2,
- gs:create(line, GUI#win.canvas,
- [{coords, [{Lx, Ly1}, {Lx, Ly2}]}]);
- %% Nth application, N>1 - draw a horizontal line from
- %% line connecting to the previous application button,
- %% to above this application button, then vertically down
- %% to the application button
- _ ->
- Ly1 = ?yNODELBL + ?hNODELBL + ?PAD + ?PAD2/2,
- Ly2 = Ly1 + ?PAD2/2,
- gs:create(line, GUI#win.canvas,
- [{coords, [{Lx0, Ly1}, {Lx, Ly1},
- {Lx, Ly2}]}])
- end,
-
- %% The application is represented using a 'canvasbutton'
- Data = {application, AppName, GUI#win.name},
- AppBtn = canvasbutton(GUI#win.canvas, Text, X, ?yBTN, Width, ?hBTN,
- Data),
-
- draw_apps(GUI, Apps, X+Width+?PAD, Lx, N+1, [AppBtn, Line|GSObjs]);
-draw_apps(_GUI, [], X, _N, _Lx0, GSObjs) ->
- {GSObjs, X}.
-
-%%--Display functions---------------------------------------------------
-%% Functions that modify the GUI but not its data
-
-%% Add a new node to the Nodes menu
-%% Used when a new node has connected
-display_addnode([GUI|GUIs], Node) ->
- display_addnode(GUI, Node),
- display_addnode(GUIs, Node);
-display_addnode([], _Node) ->
- ignore;
-display_addnode(GUI, Node) ->
- Txt = "Show " ++ atom_to_list(Node),
- gs:create(menuitem, GUI#win.nodemenu,
- [{label, {text,Txt}},
- {data, {node, Node, GUI#win.window}}]).
-
-%% Show that a node has come back up
-display_nodeup(GUI, Node) ->
- {Rect, Text} = GUI#win.nodelabel,
-
- %% Check coordinates for the rectangle and compute the new width
- [{L, T}, {_R, B}] = gs:read(Rect, coords),
- NodeStr = atom_to_list(Node),
- W = 8*length(NodeStr)+10,
-
- gs:config(Rect, [{coords, [{L, T}, {L+W, B}]}, {fill, black}]),
- gs:config(Text, [{text, NodeStr}, {fg, {250,235,215}},
- {coords,
- [{L+round(W/2), T+round((?hNODELBL)/2)}]}]).
-
-%% Show that a node has gone down
-display_nodedown(GUI) ->
- {Rect, Text} = GUI#win.nodelabel,
-
- [{L, T}, {_R, B}] = gs:read(Rect, coords),
- gs:config(Rect, [{coords, [{L, T}, {L+114, B}]}, {fill, gray}]),
- gs:config(Text, [{text, "No connection"}, {fg, black},
- {coords, [{L+57, T+round((?hNODELBL)/2)}]}]).
-
-%% Add/remove scrollbars as necessary
-display_scrollbar(GUI) ->
-
- WWindow = GUI#win.wwindow,
- HWindow = GUI#win.hwindow,
- WCanvas = GUI#win.wcanvas,
- HCanvas = GUI#win.hcanvas,
- if
- WCanvas>WWindow ->
- gs:config(GUI#win.canvas,
- [{hscroll, bottom},
- {scrollregion,{0,0,WCanvas,HCanvas}}]);
- true ->
- gs:config(GUI#win.canvas, [{hscroll, false}])
- end,
- if
- HCanvas>HWindow ->
- gs:config(GUI#win.canvas,
- [{vscroll, left},
- {scrollregion,{0,0,WCanvas,HCanvas}}]);
-
- true ->
- gs:config(GUI#win.canvas, [{vscroll, false}])
- end.
-
-%% Select option radio buttons
-display_setopt(GUI, Option) ->
- gs:config(radiobutton(GUI, Option), {select,true}).
-
-radiobutton(GUI, single) -> (GUI#win.options)#options.single;
-radiobutton(GUI, many) -> (GUI#win.options)#options.many;
-radiobutton(GUI, time) -> (GUI#win.options)#options.time;
-radiobutton(GUI, queue) -> (GUI#win.options)#options.queue;
-radiobutton(GUI, prog) -> (GUI#win.options)#options.prog;
-radiobutton(GUI, linear) -> (GUI#win.options)#options.linear.
-
-%% Display load
-%% Used when load information is received from the displayed node
--define(highloadfg, {255,99,71}).
--define(midloadfg, yellow).
--define(lowloadfg, green).
--define(highloadbg, {140,157,178}).
--define(midloadbg, ?highloadbg).
--define(lowloadbg, ?highloadbg).
-
-display_load(GUI, {Old, New}) ->
- if
- Old == New ->
- true;
- Old > New ->
- leds_down(GUI#win.leds, Old, New);
- true ->
- leds_up(GUI#win.leds, Old, New)
- end.
-
-leds_down(_Leds, Old, New) when Old == New ->
- done;
-leds_down(Leds, Old, New) when Old > New ->
- reset_led(Leds, Old),
- leds_down(Leds, Old-1, New).
-leds_up(_Leds, Old, New) when Old == New ->
- done;
-leds_up(Leds, Old, New) when Old < New ->
- set_led(Leds, Old),
- leds_up(Leds, Old+1, New).
-
-led_on_col(N) when N > 13 -> ?highloadfg;
-led_on_col(N) when N > 9 -> ?midloadfg;
-led_on_col(_) -> ?lowloadfg.
-
-led_off_col(N) when N > 13 -> ?highloadbg;
-led_off_col(N) when N > 9 -> ?midloadbg;
-led_off_col(_) -> ?lowloadbg.
-
-reset_led(_Leds, 0) -> ok;
-reset_led(Leds, N) ->
- gs:config(lists:nth(N, Leds), [{fill, led_off_col(N)}]).
-
-set_led(_Leds, 0) -> ok;
-set_led(Leds, N) ->
- gs:config(lists:nth(N, Leds), [{fill, led_on_col(N)}]).
-
-%%----------------------------------------------------------------------
-%% Utilities
-%%----------------------------------------------------------------------
-
-bcast(MNodes, Msg) ->
- lists:foreach(fun(MNode) ->
- case MNode#mnode.status of
- alive ->
- MNode#mnode.pid ! Msg;
- dead ->
- ignore
- end
- end,
- MNodes).
-
-%% parse_nodes(MNodes) -> NodeApps
-%% MNodes -> [#mnode{}]
-%% NodeApps -> [{Node, Status, Apps}]
-%% Node -> atom()
-%% Status -> alive | dead
-%% Apps -> [{Pid, App}]
-%% Pid -> pid()
-%% App -> atom()
-parse_nodes(MNodes) ->
- parse_nodes(MNodes, []).
-parse_nodes([MNode|MNodes], NodeApps) ->
- Apps = parse_apps(MNode#mnode.apps, []),
- parse_nodes(MNodes,
- [{MNode#mnode.name,MNode#mnode.status,Apps}|NodeApps]);
-parse_nodes([], NodeApps) ->
- NodeApps.
-
-parse_apps([{Pid, App, _Descr}|Rest], Apps) ->
- parse_apps(Rest, [{Pid, App}|Apps]);
-parse_apps([], Apps) ->
- Apps.
-
-%%----------------------------------------------------------------------
-%% Canvas buttons
-%%----------------------------------------------------------------------
-
-canvasbutton(Canvas, Text, X, Y, W, H, Data) ->
-
- %% Draw a rectangle (for event catching)
- Rect = gs:create(rectangle, Canvas, [{coords, [{X,Y}, {X+W,Y+H}]},
- {fill, gs:read(Canvas, bg)},
- {buttonpress, true},
- {buttonrelease, true}]),
-
- %% Make the rectangle area look like a 3D button by using lines
- Ul = gs:create(line, Canvas, [{coords, [{X,Y+H},{X,Y},{X+W,Y}]},
- {fg, white}, {width, 2}]),
- Ll = gs:create(line, Canvas, [{coords, [{X,Y+H},{X+W,Y+H},{X+W,Y}]},
- {fg, {87,87,87}}, {width, 2}]),
-
- %% Write the text in the middle
- Xc = X + round(W/2),
- Yc = Y + round(H/2),
- T = gs:create(text, Canvas, [{text, Text}, {coords, [{Xc,Yc}]},
- {anchor, c},
- {buttonpress, true},
- {buttonrelease, true}]),
-
- %% Create the canvasbutton object
- CBtn = #canvasbutton{text=T, ul=Ul, ll=Ll, rect=Rect,
- x=X, y=Y, w=W, h=H},
-
- %% Configure the data
- gs:config(T, {data, {canvasbutton, CBtn, Data}}),
- gs:config(Rect, {data, {canvasbutton, CBtn, Data}}),
-
- CBtn.
-
-press(Canvasbutton) ->
- gs:config(Canvasbutton#canvasbutton.ul, {fg, {87,87,87}}),
- gs:config(Canvasbutton#canvasbutton.ll, {fg, white}).
-
-release(Canvasbutton) ->
- gs:config(Canvasbutton#canvasbutton.ul, {fg, white}),
- gs:config(Canvasbutton#canvasbutton.ll, {fg, {87,87,87}}).
diff --git a/lib/appmon/src/appmon_a.erl b/lib/appmon/src/appmon_a.erl
deleted file mode 100644
index 6838a7a275..0000000000
--- a/lib/appmon/src/appmon_a.erl
+++ /dev/null
@@ -1,1122 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(appmon_a).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,1}}]).
-
-%%----------------------------------------------------------------------
-%%
-%% Monitors an application, i.e its supervision tree.
-%%
-%%----------------------------------------------------------------------
-%%
-%%
-%% INTRODUCTION
-%% ------------
-%%
-%% This file contains a description of the files involved
-%% and the communication between the appmon_a display
-%% manager and the appmon_a2 information gatherer. Further
-%% information on the placement algorithm can be found in
-%% the place.erl file.
-%%
-%%
-%% FILES
-%% -----
-%%
-%% The supervision tree graphical software consists of
-%% the following files:
-%%
-%% appmon_a Gen server driving the process display window.
-%% Responsible for assigning gs identifiers to all
-%% processes and process link
-%% appmon_a2 The process information gathering routines.
-%% Works by following the process links from application
-%% master once every second
-%% dg The process database is implemented as a shared
-%% digraph (see manual pages for digraph) and this is
-%% the routines handling this digraph. Since the digraph
-%% is shared appmon_a2 will put some info into it that the
-%% appmon_a later will modify. The structures used are
-%% described in dg.hrl
-%% place Places a tree, decides the x and y coordinates (not
-%% necessarily corresponding to window coordinates) of
-%% processes (or vertices to be specific). Note that
-%% special routines are used to transform the possibly
-%% cyclic digraph into a strict tree before trying to
-%% place it.
-%%
-%%
-%%
-%% IMPLEMENTATION DETAIL
-%% ---------------------
-%%
-%% The appmon_a module will follow links between processes,
-%% starting with the application master. A unique
-%% reference is used to prevent infinite recursion. Note
-%% that this process and link gathering is done in the
-%% live digraph so that already known processes are
-%% updated with the reference and new ones are added to
-%% the digraph. After all processes and links have been
-%% added or updated a search is made for those processes
-%% and links that have an old reference. These are those
-%% processes and links that are not present in the
-%% application any more. Those are extracted from the
-%% digraph and then deleted and the extracts are then
-%% used (by appmon_a) to delete the appropriate gs
-%% objects. The responsibilities of appmon_a is thus 1) add
-%% all new processes and links to the digraph and 2) make
-%% a list of all those objects from the digraph that have
-%% been deleted.
-%%
-%% When appmon_a2 has gathered all necessary information it
-%% notifies the appmon_a display manager. Note that this is
-%% implemented as a call (as opposed to a cast) to
-%% prevent appmon_a2 from changing the digraph while appmon_a
-%% uses it. appmon_a places all processes using the place
-%% module. place will place the processes in the x y
-%% planes, hopefully in a nice way, re-forming the
-%% digraph during the process into a strict tree using
-%% some simple heuristics, some links that makes the
-%% graph cyclic will be considered secondary and later
-%% coloured red. Note that the process links are not
-%% placed since their coordinates are those of the
-%% processes that they are links between. The place
-%% module is only concerned at a fairly high level of
-%% abstraction. Currently its x coordinates are used as
-%% real coordinates while the y coordinates must be
-%% scaled to correct values, thus the x plane is
-%% continous and the y plane is disctrete.
-%%
-%% Having placed processes the new ones are drawn on the
-%% display along with all new process links, then all
-%% processes and process links are moved to their
-%% possibly new positions. The place module is not
-%% sensitive to changes in position and therefore has no
-%% concept of which nodes will have to be moved. hence
-%% all nodes are moved (but most of them probably to the
-%% same position as before)
-%%
-%%
-%%
-%%
-%%----------------------------------------------------------------------
-
-
-
--export([start/2, start/3, stop/0]).
-
-
--record(astate, {app, name, client, digraph}).
-
--import(lists, [foreach/2]).
-
-%% gen server stuff
--behaviour(gen_server).
--export([init/1, handle_cast/2, handle_info/2, terminate/2]).
--export([handle_call/3, code_change/3]).
-
-
--define(APPSPACE, 10). % The space between apps
--define(NODEAREA_H, 90). % The height of a node
--define(BUTTAREA_H, 80). % The button area height
--define(APPBUTT_H, 20). % Height of appl button
--define(EDITORW, 260).
-
--define(MAXWIDTH, 800).
--define(MINWIDTH, 382).
--define(MAXHEIGHT, 450).
--define(MINHEIGHT, 325).
-
--define(SUPVIEWTXT, "Sup. view").
--define(PROCVIEWTXT, "Proc. view").
--define(CLOSETXT, "Close").
--define(REFRESHTXT, "Refresh").
--define(SAVEOPTSTXT, "Save options").
--define(HELPTXT, "Help").
-
--define(CHARWIDTH, 7). %Should use GS primitives
-
--define( darkkhaki, {189, 183, 107}).
--define( palegoldenrod, {238, 232, 170}).
--define( peachpuff4, {139, 119, 101}).
--define( red, red).
--define( darkgrey, {169, 169, 169}).
--define( lightgrey, {211, 211, 211}).
--define( royalblue, {65, 105, 225}).
--define( aquamarine4, {69, 139, 116}).
--define( palegreen4, {84, 139, 84}).
--define( darkseagreen, {105, 139, 105}).
--define( f_line_col, {150, 150, 255}).
-
-
--include("appmon_dg.hrl").
-
-
-%%------------------------------------------------------------
-%%------------------------------------------------------------
-
-
-start(NodeName, AppName) ->
- gen_server:start_link(?MODULE, {NodeName, AppName, AppName}, []).
-
-start(NodeName, AppName, AppId) ->
- gen_server:start_link(?MODULE, {NodeName, AppName, AppId}, []).
-
-
-stop() ->
- ok.
-
-
-
-%%------------------------------------------------------------
-%% Public interface
-
-
-%%------------------------------------------------------------
-%% Administration
-
-%% AppName is the name of the application, usually an atom like sasl
-%% or kernel, AppId is the application pid or the application name,
-%% either goes.
-init({NodeName, AppName, AppId}) ->
- process_flag(trap_exit, true),
- {ok, Client} = appmon_info:start_link(NodeName, self(), []),
- init_ref(),
- init_foreign_places(),
- DG = digraph:new([cyclic, private]),
- State = #astate{app=AppId, name=AppName, client=Client, digraph=DG},
- refresh(State),
- setup_base_win(NodeName, AppName),
- {ok, State}.
-
-terminate(_Reason, _State) ->
- ok.
-
-code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
-
-handle_call(norequest, _From, State) ->
- {reply, null, State}.
-
-%%------------------------------------------------------------
-%% handle casts
-
-handle_cast({ping, _Node, _From}, State) ->
- {noreply, State};
-handle_cast(_Other, State) ->
- {noreply, State}.
-
-
-
-%%------------------------------------------------------------
-%% handle info
-
-handle_info({gs, _, click, _, [?CLOSETXT|_]}, State) ->
- {stop, normal, State};
-handle_info({gs, _, destroy, _, _}, State) ->
- {stop, normal, State};
-handle_info({gs, _, click, _, [?REFRESHTXT|_]}, State) ->
- refresh(State),
- {noreply, State};
-handle_info({gs, _, click, _, [?HELPTXT|_]}, State) ->
- HelpFile = filename:join([code:lib_dir(appmon),
- "doc", "html", "part_frame.html"]),
- tool_utils:open_help(win(), HelpFile),
- {noreply, State};
-handle_info({gs, Id, click, {mode, Mode}, _}, State) ->
- %%io:format("handle_info: Setting mode: ~p~n", [Mode]),
- set_mode(Id, Mode),
- {noreply, State};
-handle_info({gs, _, click, _, [?SUPVIEWTXT|_]}, State) ->
- refresh(State, [{info_type, sup}]),
- {noreply, State};
-handle_info({gs, _, click, _, [?PROCVIEWTXT|_]}, State) ->
- refresh(State, [{info_type, link}]),
- {noreply, State};
-handle_info({gs, Id, buttonpress, _,[1, X, Y|_]}, State) ->
- %%io:format("Id clicked: ~p~n", [gs:read(Id, {find, {X, Y}})]),
- catch find_pid(State, Id, X, Y),
- set_default_mode(),
- {noreply, State};
-handle_info({gs, Win, configure, _Data, [W, H|_]}, State) ->
- case win() of Win -> user_driven_resize(W, H);
- _-> ok
- end,
- {noreply, State};
-
-handle_info({delivery, _S, pinfo, _N, Res}, State) ->
- appmon_txt:print(Res),
- {noreply, State};
-handle_info({delivery, S, app, N, Res}, State) ->
- {delivery, _Serv, app, _Name, {Root, Vs, Ls, SecLs}} =
- flush({delivery, S, app, N, Res}),
- update2(Vs, Root, Ls, SecLs, State),
- {noreply, State};
-
-handle_info({kill}, State) ->
- {stop, normal, State};
-handle_info({state}, State) ->
- {noreply, State};
-handle_info({'EXIT', _Pid, _Reason}, State) ->
- {noreply, State};
-handle_info(_Other, State) ->
- {noreply, State}.
-
-
-%% Refresh sets new options for the request and forces an update of
-%% the screen ant status.
-refresh(State) ->
- refresh(State, []).
-refresh(State, Opts) ->
- appmon_info:app(State#astate.client,
- State#astate.name, true, Opts).
-
-
-
-%% find_pid finds the pid of the clicked object. The scenario is that
-%% the user clicks on an item in his window, that ObjId is searched
-%% for among all nodes (vertices) and if found action is taken
-%% depending on the current mode (see handle_info)
-find_pid(State, Id, X, Y) ->
- %% Try to manage both versions of GS, remove first case later.
- ObjList = case gs:read(Id, {find, {X, Y}}) of
- {error, _} ->
- gs:read(Id, {hit, {X, Y}}); % Try new format
- Num when is_integer(Num) -> [Num];
- _Other -> []
- end,
- DG = State#astate.digraph,
- All = appmon_dg:get(all, DG),
- find_pid2(ObjList, All, DG, State).
-
-find_pid2([Id | Ids], All, DG, State) ->
- case search_for_pid(All, DG, Id) of
- {ok, _KeyStr, Pid} ->
- handle_proc_press(mode(), Pid, State);
- _ -> find_pid2(Ids, All, DG, State)
- end;
-find_pid2([], _All, _DG, _State) -> ok.
-
-search_for_pid([V|Vs], DG, ObjId) ->
- VD = appmon_dg:get(data, DG, V),
- if ObjId==VD#vdata.txt_obj ->
- {ok, V, VD#vdata.type};
- true -> search_for_pid(Vs, DG, ObjId)
- end;
-search_for_pid([], _DG, _ObjId) -> false.
-
-
-%%
-%% called when a process has been clicked on.
-%%
-handle_proc_press(info, Pid, State) ->
- appmon_info:pinfo(State#astate.client, Pid, true,
- [{timeout, at_most_once}]);
-handle_proc_press(send, Pid, _State) ->
- {P, RawStr} = two_entries(winroot(), 250, 70,
- "Send", "To: ", "Msg: ",
- pid_to_list(Pid), "", bg()),
- Str = case lists:last(RawStr) of
- 46 -> RawStr;
- _ -> RawStr++"."
- end,
- case erl_scan:string(Str) of
- {ok, Tokens, _} ->
- case erl_parse:parse_term(Tokens) of
- {ok, Term} ->
- case catch list_to_pid(P) of
- To when is_pid(To) -> To ! Term;
- _ -> error
- end;
- _Error -> error
- end;
- _Error -> error
- end;
-handle_proc_press(trace, Pid, _State) ->
- case trace_state(Pid) of
- true ->
- io:format("Removing trace on ~p~n", [Pid]),
- sys:trace(Pid, false),
- set_trace_state(Pid, false);
- _Other ->
- io:format("Putting trace on ~p~n", [Pid]),
- sys:trace(Pid, true, 1000),
- set_trace_state(Pid, true)
- end;
-handle_proc_press(kill, Pid, _State) ->
- exit(Pid, kill).
-
-
-trace_state(Pid) -> get({trace_state, Pid}).
-set_trace_state(Pid, State) -> put({trace_state, Pid}, State).
-
-set_default_mode() ->
- {Id, Mode} = get(default_mode),
- case mode() of
- Mode -> true;
- _Other -> set_mode(Id, Mode)
- end.
-set_default_mode(Id, Mode) ->
- put(default_mode, {Id, Mode}),
- select(Id), %Dirty workaround
- set_default_mode().
-
-set_mode(Id, Mode) ->
- %%io:format("mode=~p~n", [Mode]),
- set_mode(Mode),
- deselect(),
- select(Id).
-
-set_mode(Mode) -> put(mode, Mode).
-mode() -> get(mode).
-
-flush({delivery, S, A, N, R}) ->
- receive
- {delivery, S, A, N, R2} ->
- flush({delivery, S, A, N, R2})
- after 0 ->
- {delivery, S, A, N, R}
- end.
-
-
-%%------------------------------------------------------------
-%% Real stuff
-%%
-update2(Vs, Root, Ls, SecLs, State) ->
- DG = State#astate.digraph,
- Ref = mk_ref(),
- Added = add_procs(Vs, DG, Ref),
- AddedLs = add_links(Ls, DG, Ref, primary),
- AddedLs2 = add_links(SecLs, DG, Ref, secondary),
- DelLs = del_links(appmon_dg:eget(all, DG), DG, Ref),
- Dels = del_procs(appmon_dg:get(all, DG), DG, Ref),
-
- LastX = appmon_place:place(DG, Root),
- Width = lists:max(LastX),
- Height = length(LastX),
-
- %% Delete things from screen
- del(Dels), del(DelLs),
-
- %% Add vertices to screen
- foreach(fun(V) -> draw_node(DG, V) end, Added),
-
- %% Add edges to screen
- foreach(fun(E) -> draw_edge(DG, E) end, AddedLs),
- foreach(fun(E) -> draw_edge(DG, E) end, AddedLs2),
-
- %% Move vertices on screen
- foreach(fun(V) -> move_vertex(DG, V) end, appmon_dg:get(all, DG)),
-
- tree_driven_resize(Width, Height),
-
- gs:config(win(), {map, true}), %Make win visible
- ok.
-
-%% Make an integer reference, could have used make_ref BIF but didn't
-mk_ref() -> put(reference, get(reference)+1).
-init_ref() -> put(reference, 0).
-
-
-%% Add processes (vertices) to digraph, use the string repr of pid as
-%% key in digraph.
-add_procs([{Pid, Str}|Vs], DG, Ref) ->
- case appmon_dg:add(DG, Str, mk_vdata(Str, Pid, Ref), Ref) of
- known -> add_procs(Vs, DG, Ref);
- updated -> add_procs(Vs, DG, Ref);
- _ ->
- case lists:member(32, Str) of
- true ->
- appmon_dg:set(x, DG, Str, foreign), % UNHOLY!
- add_procs(Vs, DG, Ref); % Don't add foreign
- _ -> [Str | add_procs(Vs, DG, Ref)]
- end
- end;
-add_procs([], _DG, _Ref) -> [].
-
-
-%% Add links to digraph. NOTE that foreign links get a special weight
-%% and that no link is added if it goes to a process not in the set of
-%% vertices.
-%%
-%% OTP-1970: Check that linked-to processes really exist.
-%%
-add_links([{V1, V2}|Ls], DG, Ref, Weight) ->
- L = case lists:member(32, V2) of
- true -> {V1, V2, foreign};
- _ -> {V1, V2, Weight}
- end,
- case appmon_dg:get(data, DG, V2) of
- false -> add_links(Ls, DG, Ref, Weight);
- VD ->
- if VD#vdata.ref == Ref -> % OTP-1970
- case appmon_dg:eadd(DG, L, mk_edata(L, Ref), Ref) of
- known -> add_links(Ls, DG, Ref, Weight);
- updated -> add_links(Ls, DG, Ref, Weight);
- _Other -> [L | add_links(Ls, DG, Ref, Weight)]
- end;
- true ->
- add_links(Ls, DG, Ref, Weight)
- end
- end;
-add_links([], _DG, _Ref, _Weight) -> [].
-
-%% Make an edge data structure
-mk_edata(_L, Ref) ->
- #edata{ref=Ref}.
-
-%% Make a vertex data structure, note that pid can be either a pid or
-%% a port, we're not picky here.
-mk_vdata(P, Pid, Ref) ->
- #vdata{ref=Ref, type=Pid, txt=P, width=width(P)}.
-width(Txt) -> ?CHARWIDTH*length(Txt)+10. % Should use GS stuff instead
-
-
-%% Delete those processes that have the wrong reference from the
-%% digraph. Returns a list of deleted procs and their data (to be able
-%% to erase things on screen).
-del_procs([V|Vs], DG, Ref) ->
- VD = appmon_dg:get(data, DG, V),
- if VD#vdata.ref /= Ref -> appmon_dg:del(DG, V),
- [{V, VD} | del_procs(Vs, DG, Ref)];
- true -> del_procs(Vs, DG, Ref)
- end;
-del_procs([], _DG, _Ref) -> [].
-
-
-%% Deletes links that have the wrong reference from the digraph, note
-%% that the weight of the edge is not considered here. Returns a list
-%% of deleted links and their data (to be able to erase things on
-%% screen).
-del_links([L | Ls], DG, Ref) ->
- ED = appmon_dg:eget(data, DG, L),
- if ED#edata.ref /= Ref -> appmon_dg:edel(DG, L),
- [{L, ED} | del_links(Ls, DG, Ref)];
- true -> del_links(Ls, DG, Ref)
- end;
-del_links([], _DG, _Ref) -> [].
-
-%% Del deletes the GS objects of the list of should-be-deleted
-%% items. Returns nothing particular.
-del(L) ->
- lists:foreach(fun({{V1, V2, Weight}, D}) when is_record(D, edata) ->
- if Weight== foreign ->
- dealloc_foreign({V1, V2, Weight});
- true -> ok end,
- destroy(D#edata.line);
- ({_I, D}) when is_record(D, vdata) ->
- destroy(D#vdata.sym_obj),
- destroy(D#vdata.txt_obj)
- end, L).
-
-
-move_vertex(DG, V) ->
- VData = appmon_dg:get(data, DG, V),
-%% io:format("Vertex ~p data: x:~p, oldx:~p, y:~p, oldy:~p offs:~p~n",
-%% [V, VData#vdata.x, VData#vdata.origx,
-%% VData#vdata.y, VData#vdata.origy, offsetx()]),
- if VData#vdata.x == foreign -> ok;
- true ->
- X = VData#vdata.x,
- Y = scaley(VData#vdata.y),
- OldX = VData#vdata.origx,
- OldY = scaley(VData#vdata.origy),
- if X==OldX, Y==OldY -> true;
- true ->
- %%io:format("Moving vertex: ~p~n", [V]),
-
- W = VData#vdata.width,
- {BoxC, TxtC} = calc_box_coords(X, Y, W),
-
- %% move the symbol and text
- gs:config(VData#vdata.sym_obj, [{coords, BoxC}]),
- gs:config(VData#vdata.txt_obj, [{coords, TxtC}]),
- foreach(fun(E) -> move_edge(DG, E) end,
- appmon_dg:get(edges, DG, V))
- end
- end.
-
-
-move_edge(DG, E) ->
- {{V1, V2, Weight}, V1, V2, ED} = appmon_dg:eget(edge, DG, E),
- VD1 = appmon_dg:get(data, DG, V1),
- VD2 = appmon_dg:get(data, DG, V2),
- Line = ED#edata.line,
- move_line(DG, VD1, VD2, Line, Weight).
-move_line(DG, VD1, VD2, Line, Weight) when is_list(Line) ->
- move_line(DG, VD1, VD2, hd(Line), Weight);
-move_line(_DG, VD1, VD2, Line, Weight) ->
- Coords = calc_coords(VD1, VD2, Weight),
- gs:config(Line, [{coords, Coords} | line_opts(Weight)]).
-
-%% Draw the vertex on the canvas
-draw_node(DG, V) ->
- %%io:format("Drawing~n",[]),
- Data = appmon_dg:get(data, DG, V),
-
- X = Data#vdata.x,
- Y = scaley(Data#vdata.y),
-
- {Sym, Txt} = draw(rectangle, sup_col(), Data#vdata.txt, X, Y,
- Data#vdata.width),
-
- appmon_dg:av(DG, V, Data#vdata{sym_obj=Sym, txt_obj=Txt}),
- true.
-
-%% Draws a symbol (rectangle for instance) on the canvas.
-draw(Symbol, Col, Txt, X, Y, W) ->
- {BoxC, TxtC} = calc_box_coords(X, Y, W),
- Box = gs:create(Symbol, canvas(), [{coords, BoxC}, {fill, Col}]),
-
- TxtObj = gs:create(text, canvas(), [{coords, TxtC},
- {anchor, c},
- %%{buttonpress, true},
- {text, Txt}]),
- {Box, TxtObj}.
-
-%% Returns {BoxCoords, TextCoords}
-calc_box_coords(X, Y, W) ->
- {[{X, Y-radius()}, {X+W, Y+radius()}], [{X+trunc(W/2), Y}]}.
-
-
-%% Draw a line on the canvas
-draw_edge(DG, E) ->
- {V1, V2, Weight} = E,
- Line = draw_line(DG, V1, V2, Weight),
-%% io:format("Line: ~p~n", [Line]),
- appmon_dg:eset(line, DG, E, Line).
-
-
-%% From is parent, To is child. If To is not a record then we are
-%% dealing with a link to a process on another node. Find a suitable
-%% place at the left margin and write the process name there and draw
-%% a line to it.
-%%
-draw_line(DG, From, To, foreign) ->
- VD1 = appmon_dg:get(data, DG, From),
- Y = find_foreign_place(VD1#vdata.y+0.5, foreign_places()),
- add_foreign_place({From, To, foreign}, Y),
-%% io:format("New Y: ~p~n", [Y]),
- appmon_dg:set(x, DG, To, 0),
- appmon_dg:set(y, DG, To, Y),
- VD2 = appmon_dg:get(data, DG, To),
- Coords = calc_coords(VD1, VD2, foreign),
-%% io:format("Node coords: ~p~n", [Coords]),
- L = gs:create(line, canvas(), [{coords, Coords} | line_opts(foreign)]),
- T = gs:create(text, canvas(), [{coords, [{0, 5+scaley(Y)}]},
- {anchor, nw}, {fg, f_line_col()},
-%% {font, {screen, 10}},
- {text, To}]),
- [L, T];
-
-draw_line(DG, From, To, Weight) ->
- VD1 = appmon_dg:get(data, DG, From),
- VD2 = appmon_dg:get(data, DG, To),
- Coords = calc_coords(VD1, VD2, Weight),
- gs:create(line, canvas(), [{coords, Coords} | line_opts(Weight)]).
-
-%%----------------------------------------------------------------------
-%%
-%% Line coordinate calculation
-%%
-%% Calculate coordinates for edges (links, lines). Primaries have a
-%% nice knee and secondaries are oriented differently. If weight is
-%% foreign then we will calculate a nice line to the left margin.
-%%
-calc_coords(From, To, foreign) ->
- Y = scaley(To#vdata.y),
- X1 = From#vdata.x+trunc(From#vdata.width/2),
- Y1 = scaley(From#vdata.y)+radius(),
- [{0, Y}, {X1-40, Y}, {X1, Y1}];
-calc_coords(From, To, primary) ->
- X1 = From#vdata.x+trunc(From#vdata.width/2),
- Y1 = scaley(From#vdata.y)+radius(),
-
- X2 = To#vdata.x+trunc(To#vdata.width/2),
- Y2 = scaley(To#vdata.y)-radius(),
-
- Y3 = trunc((Y1+Y2)/2),
- [{X1, Y1}, {X1, Y3}, {X2, Y3}, {X2, Y2}];
-
-calc_coords(V1, V2, _Weight) ->
- Y1 = scaley(V1#vdata.y),
- X1 = V1#vdata.x,
- X1w = X1+V1#vdata.width,
- Y2 = scaley(V2#vdata.y),
- X2 = V2#vdata.x,
- X2w = X2+V2#vdata.width,
-
- if Y1 == Y2 -> calc_u(X1, X1w, Y1, X2, X2w);
- X1w < X2 -> calc_s(X1w, Y1, X2, Y2);
- X2w < X1 -> calc_s(X1, Y1, X2w, Y2);
- true ->
- D1 = abs(X1-X2), D2 = abs(X1w-X2w),
- if D1 > D2 -> calc_rbrack(X1w, Y1, X2w, Y2);
- true -> calc_lbrack(X1, Y1, X2, Y2)
- end
- end.
-
-%% Calculates line coordinates that will go from bottom of one node to
-%% bottom of another on the same level. The line will form a nice "U".
-calc_u(X1, X1w, Y, X2, X2w) ->
- X3 = trunc((X1+X1w)/2),
- X4 = trunc((X2+X2w)/2),
- Y2 = Y+radius(),
- Y3 = Y2+20,
- [{X3, Y2}, {X3, Y3}, {X4, Y3}, {X4, Y2}].
-
-%% Calculates line coordinates that will go from right (or left) side
-%% to right (or left) side, thus forming a "[" or a "]" (bracket).
-calc_rbrack(X1, Y1, X2, Y2) ->
- X3 = 20 + if X1 > X2 -> X1;
- true -> X2
- end,
- [{X1, Y1}, {X3, Y1}, {X3, Y2}, {X2, Y2}].
-calc_lbrack(X1, Y1, X2, Y2) ->
- X3 = -20 + if X1 < X2 -> X1;
- true -> X2
- end,
- [{X1, Y1}, {X3, Y1}, {X3, Y2}, {X2, Y2}].
-
-%% Calculates line coordinates that will form a nice "S"
-calc_s(X1, Y1, X2, Y2) ->
- X3 = trunc((X1+X2)/2),
- [{X1, Y1}, {X3, Y1}, {X3, Y2}, {X2, Y2}].
-
-
-%% Options for lines (edges, links)
-line_opts(foreign) -> [{width, 2}, {smooth, true}, {fg, f_line_col()}];
-line_opts(primary) -> [{width, 2}, {smooth, false}, {fg, line_col()}];
-line_opts(_) -> [{width, 2}, {smooth, true}, {fg, sec_line_col()}].
-
-
-
-%%----------------------------------------------------------------------
-%%
-%% Handling of links to foreign processes
-%%
-%%----------------------------------------------------------------------
-dealloc_foreign(L) ->
-%% io:format("deallocing foreign: ~p~n", [L]),
- put(foreign_places, lists:keydelete(L, 1, foreign_places())).
-add_foreign_place(V, Y) ->
-%% io:format("Adding foreign: ~p~n", [V]),
- put(foreign_places, [{V, Y} | foreign_places()]).
-foreign_places() ->
- get(foreign_places).
-init_foreign_places() ->
- put(foreign_places, []).
-
-%% Find a good place for the foreign node
-find_foreign_place(StartY, L) ->
- case lists:keysearch(StartY, 2, L) of
- {value, _} -> find_foreign_place(StartY + 1, L);
- _ -> StartY
- end.
-
-
-%%------------------------------------------------------------
-%%
-%% Graphical stuff
-%%
-
-setup_base_win(NodeName, AppName) ->
- set_winroot(gs:start([{kernel,true}])),
-
- W = ?MINWIDTH, H = ?MINHEIGHT,
-
- Name = "APPMON: " ++ atom_to_list(AppName) ++ " on " ++
- atom_to_list(NodeName),
-
- set_win(gs:create(window, winroot(), [{title, Name}, %%{bg, red},
- {x, 250}, {y, 100},
- {width, W}, {bg, win_col()},
- {height, H+?BUTTAREA_H}])),
- %% standard buttons
- mk_std_butts(win(), W),
- set_canvas(gs:create(canvas, win(),[{x,0}, {y,?BUTTAREA_H},
- {width, W}, {height, H},
- {bg, bg()},
- {buttonpress, true}])),
-
- set_old_win_size(width, gs:read(win(), width)),
- set_old_win_size(height, gs:read(win(), height)),
-
-%% gs:config(win(), {map, true}), %Make win visible
- ok.
-
-
-nice_line_coords(W, H) ->
- [{0,H-10}, {W,H-10}].
-
-%%------------------------------
-%% Button stuff
-
-mk_butt_area(Win, W) ->
- H = ?BUTTAREA_H,
- F = gs:create(frame, Win,[{x,0}, {y,0}, %%{bg, frame_col()},
- {width,W}, {height,H}]),
- C = gs:create(canvas,F,[{x,0}, {y,0}, {width, W}, {height, H-9},
- {bg, bg()}]),
- L = gs:create(line,C,[{coords,nice_line_coords(W, H)}]),
-
- MB = gs:create(menubar, Win, []),
-
- FMB = gs:create(menubutton, MB, [{label, {text, "File"}}]),
- FM = gs:create(menu, FMB, []),
- gs:create(menuitem, FM, [{label, {text, ?CLOSETXT}}]),
-
- OMB = gs:create(menubutton, MB, [{label, {text, "Options"}}]),
- OM = gs:create(menu, OMB, []),
- gs:create(menuitem, OM, [{label, {text, ?REFRESHTXT}}]),
- Group = now(),
- gs:create(menuitem, OM, [{itemtype, separator}]),
- gs:create(menuitem, OM, [{label, {text, ?SUPVIEWTXT}}, {itemtype, radio},
- {group, Group}]),
- gs:create(menuitem, OM, [{label, {text, ?PROCVIEWTXT}}, {select, true},
- {group, Group}, {itemtype, radio}]),
-
- HMB = gs:create(menubutton, MB, [{label, {text, "Help"}}, {side, right}]),
- HM = gs:create(menu, HMB, []),
- gs:create(menuitem, HM, [{label, {text, ?HELPTXT}}]),
-
- {F, C, L}.
-
-mk_std_butts(Win, W) ->
- {F, C, L} = mk_butt_area(Win, W),
- set_bframe(F), set_bcanvas(C), set_bline(L),
-
- IButt = mk_mode_butt({text, "Info"}, {mode, info}, 10),
- mk_mode_butt({text, "Send"}, {mode, send}, 90),
- mk_mode_butt({text, "Trace"}, {mode, trace}, 170),
- mk_mode_butt({text, "Kill"}, {mode, kill}, 250),
-
- set_default_mode(IButt, info),
-
- true.
-
-select(Id) ->
- gs:config(Id, {bg, sel_col()}),
- set_selected(Id).
-
-deselect() ->
- gs:config(selected(), {bg, de_sel_col()}).
-
-mk_mode_butt(Label, Data, X) ->
- gs:create(button, bframe(), [{label, Label}, {x, X}, {y, 35},
- {data, Data}, {width, 70}, {height, 25}]).
-
-%%------------------------------------------------------------
-%% Graphical utilities
-
-mk_frame(P, X, Y, W, H, BG) ->
- gs:create(frame, P, [{x, X}, {y, Y}, {width, W}, {height, H}, {bg, BG}]).
-
-mk_butt(P, X, Y, W, H, Txt) ->
- gs:create(button, P, [{x, X}, {y, Y}, {height, H}, {width, W},
- {label, {text, Txt}}]).
-
-mk_butt(P, X, Y, Txt) ->
- mk_butt(P, X, Y, 70, 20, Txt).
-
-mk_label(P, X, Y, W, H, Txt, BG) ->
- gs:create(label, P, [{x, X}, {y, Y}, {height, H}, {width, W},
- {label, {text, Txt}}, {bg, BG}]).
-
-mk_entry(P, X, Y, W, H, Txt, BG) ->
- gs:create(entry, P, [{x, X}, {y, Y}, {height, H}, {width, W}, {text, Txt},
- {bg, BG}, {keypress, true}]).
-
-
-two_entries(Root, W, H, Name, LTxt1, LTxt2, StartTxt1, StartTxt2, BG) ->
- Win = gs:create(window, Root, [{title, Name}, %%{bg, red},
- %%{x, X}, {y, Y},
- {width, W}, {bg, BG},
- {height, H}]),
- F = mk_frame(Win, 0, 0, W, H, BG),
-
- mk_label(F, 10, 10, 30, 20, LTxt1, BG),
- mk_label(F, 10, 40, 30, 20, LTxt2, BG),
-
- E1 = mk_entry(F, 40, 10, 120, 20, StartTxt1, BG),
- E2 = mk_entry(F, 40, 40, 120, 20, StartTxt2, BG),
-
- Ok = mk_butt(F, 170, 10, "Ok"),
- Cn = mk_butt(F, 170, 40, "Cancel"),
- gs:config(Win, {map, true}),
-
- Ret = case catch two_entries_loop(E1, E2, Ok, Cn) of
- {P2, Msg} -> {P2, Msg};
- _Other ->
- false
- end,
- gs:destroy(Win),
- Ret.
-
-
-two_entries_loop(E1, E2, Ok, Cn) ->
- receive
- {gs, Ok, click, _, _} ->
- {gs:read(E1, text),
- gs:read(E2, text)};
- {gs, E1, keypress, _, ['Return'|_]} ->
- {gs:read(E1, text),
- gs:read(E2, text)};
- {gs, E2, keypress, _, ['Return'|_]} ->
- {gs:read(E1, text),
- gs:read(E2, text)};
- {gs, _, keypress, _, _} ->
- two_entries_loop(E1, E2, Ok, Cn);
- {gs, Cn, click, _, _} ->
- true
- end.
-
-%%--------------------------------------------------------------------
-%%
-%% Resizing routines.
-%%
-%% Resizing deals with a number of different interdependent
-%% sizes. Top size is the window size. From window size all other
-%% sizes are calculated, we call this the "leader" size. The
-%% canvas is usually the same size as the window, except for the
-%% row of buttons at the top of the windoww. The canvas is also
-%% displaced when the tree is smaller than the minimum window
-%% size.
-%%
-%%
-%% Window size - the size of the outer window. Note that
-%% provisions must be made for the button area at the top of the
-%% window, this is called WinAdj. this is the only item taht
-%% changes when the user manually resizes the window.
-%%
-%% Canvas size - The size of the canvas, should be equal to
-%% window size less the button area. Must be adjusted when the
-%% window has been manually resized. The canvas also has a
-%% scrollregion which must be maintained. Note that we could have
-%% used the canvas size as "leading" size, but this did not work
-%% since the canvas doesn't fill the complete window when the
-%% tree is smaller than the window.
-%%
-%% Tree size - The size of the tree. This may change whenever a
-%% new tree is delivered from the info routine.
-%%
-%% Dim - All these size adjustments are done in some dimension
-%% (width or height).
-%%
-%% Max, Min - The outmost window may not become larger than Max
-%% size or smaller than Min size when resized by the tree
-%% size. The user resizing is not restricted to these sizes.
-%%
-%% Scrollbars:
-%%
-%% Scrollbars are used whenever necessary, whenever the tree size
-%% is bigger than canvas size (in any dimension).
-%%
-%% Invariants:
-%%
-%% The three sizes are not varied at the same time. When the
-%% window is resized because of a new tree, then window and
-%% canvas must be updated. When the user has resized, then only
-%% the canvas must be changed (to fit in the window)
-%%
-%% Tree driven resize
-%%
-%% This occurs when the tree has been updated. The window may
-%% grow and shrink to fit the tree, but may not be smaller than
-%% Min and not bigger than Max (scrollbars will be used instead)
-%%
-
-tree_driven_resize(TWidth, THeight) ->
- gs:config(win(), {configure, false}),
- Width = TWidth+20,
- Height = scaley(THeight+1),
- put({width, tree}, Width),
- put({height, tree}, Height),
- adjust_win(width, Width),
- adjust_win(height, Height),
- fit_tree_to_win(width, Width),
- fit_tree_to_win(height, Height),
- check_scroll_region(Width, Height, gs:read(canvas(), scrollregion)),
- gs:config(win(), {configure, true}),
- ok.
-
-
-%% Will adjust the window size to the tree size (given the max and min
-%% restrictions.
-adjust_win(Dim, TreeSize) ->
- case get({Dim, user_resize}) of
- true -> ok;
- _ ->
- WinSize = gs:read(win(), Dim),%%get_dim(Dim, win()),
- case get_wanted_winsize(Dim, TreeSize) + winadj(Dim) of
- WinSize -> ok;
- NewSize ->
- %%set(Dim, win(), NewSize+winadj(Dim))
- set_old_win_size(Dim, NewSize),
- gs:config(win(), {Dim, NewSize})
- end
- end.
-
-get_wanted_winsize(Dim, Size) ->
- Max = maxsize(Dim), Min = minsize(Dim),
- if Size > Max -> Max;
- Size < Min -> Min;
- true -> Size
- end.
-
-set_old_win_size(Dim, Size) -> put({Dim, winsize}, Size).
-old_win_size(Dim) -> get({Dim, winsize}).
-
-
-%%--------------------------------------------------------------------
-%%
-%% user_driven_resize
-%%
-%% This is when the user drags the window to some size. This is
-%% basically the same as a tree resize, only this time the window
-%% itself must not be fiddled with. When the window has been
-%% resized this way then normal tree driven resize is not allow
-%% to alter the size in that dimension. User overrides.
-%%
-user_driven_resize(W, H) ->
- gs:config(win(), {configure, false}),
- check_user_resize(width, W),
- check_user_resize(height, H),
- check_scroll_region(get({width, tree}), get({height, tree}),
- gs:read(canvas(), scrollregion)),
- gs:config(win(), {configure, true}).
-
-check_user_resize(Dim, Size) ->
- case old_win_size(Dim) of
- Size -> false;
- _ ->
- put({Dim, user_resize}, true),
- set_old_win_size(Dim, Size),
- fit_tree_to_win(Dim, get({Dim, tree}))
- end.
-
-
-
-%%--------------------------------------------------------------------
-%%
-%% General resizing routines
-%%
-%% fit_tree_to_win - Will fit the canvas into a pre-sized window in
-%% one dimension.
-%%
-fit_tree_to_win(Dim, TreeSize) ->
- Size = gs:read(win(), Dim) - winadj(Dim),
- set_canvas_offset(Dim, Size, TreeSize),
- set_button_width(Dim, Size),
- if TreeSize > Size ->
- gs:config(canvas(), {trans_dim2vh(Dim), trans_dim2enable(Dim)});
- TreeSize < Size ->
- gs:config(canvas(), {trans_dim2vh(Dim), false});
- true ->
- gs:config(canvas(), {trans_dim2vh(Dim), false})
- end.
-
-
-%%------------------------------
-%% Set the canvas width and displacement in x.
-set_canvas_offset(height, Size, _) ->
- gs:config(canvas(), {height, Size});
-set_canvas_offset(width, Size, Size) ->
- gs:config(canvas(), [{x, 0}, {width, Size}]);
-set_canvas_offset(width, Size, TreeSize) when Size<TreeSize ->
- gs:config(canvas(), [{x, 0}, {width, Size}]);
-set_canvas_offset(width, Size, TreeSize) when Size>TreeSize->
- Val = trunc((Size-TreeSize)/2),
- gs:config(canvas(), [{x, Val}, {width, Size-Val}]).
-
-%%------------------------------
-%% Set the button area width
-set_button_width(height,_) -> ok;
-set_button_width(width, W) ->
- gs:config(bcanvas(), [{width, W}]),
- gs:config(bframe(), [{width, W}]),
- gs:config(bline(), [{coords, nice_line_coords(W, ?BUTTAREA_H)}]).
-
-
-%%------------------------------
-%% Update the scrollregion size if needed.
-check_scroll_region(W, H, {_, _, W, H}) -> ok;
-check_scroll_region(W, H, {_, _, _, _}) ->
- gs:config(canvas(), {scrollregion, {0, 0, W, H}}).
-
-
-%% Window sizing primitives
-winadj(width) -> 0;
-winadj(height) -> ?BUTTAREA_H.
-maxsize(width) -> ?MAXWIDTH;
-maxsize(height) -> ?MAXHEIGHT.
-minsize(width) -> ?MINWIDTH;
-minsize(height) -> ?MINHEIGHT.
-
-
-
-trans_dim2vh(width) -> hscroll;
-trans_dim2vh(height) -> vscroll.
-trans_dim2enable(width) -> bottom;
-trans_dim2enable(height) -> right.
-
-
-
-
-
-%%------------------------------------------------------------
-%% Global Window info
-
-winroot() -> get(winroot).
-win() -> get(win).
-canvas() -> get(canvas).
-bframe() -> get(bframe).
-bcanvas() -> get(bcanvas).
-bline() -> get(bline).
-set_winroot(X) -> put(winroot, X).
-set_win(X) -> put(win, X).
-set_canvas(X) -> put(canvas, X).
-set_bframe(X) -> put(bframe, X).
-set_bcanvas(X) -> put(bcanvas, X).
-set_bline(X) -> put(bline, X).
-
-sup_col() -> ?darkkhaki.
-%%work_col() -> ?orange.
-bg() -> ?palegoldenrod.
-line_col() -> ?peachpuff4. %% saddlebrown.darkgoldenrod
-f_line_col() -> ?royalblue. %% saddlebrown.darkgoldenrod
-sec_line_col() -> ?red.
-win_col() -> bg(). %%darkolivegreen.
-
-sel_col() -> ?darkgrey.
-de_sel_col() -> ?lightgrey.
-set_selected(Id)-> put(selected, Id).
-selected() -> get(selected).
-
-scaley(Y) -> 55*Y.
-radius() -> 10.
-
-destroy(undefined) -> true;
-destroy(L) when is_list(L) -> lists:foreach(fun(X) -> destroy(X) end , L);
-destroy(Win) -> gs:destroy(Win).
-
diff --git a/lib/appmon/src/appmon_dg.erl b/lib/appmon/src/appmon_dg.erl
deleted file mode 100644
index f53defa946..0000000000
--- a/lib/appmon/src/appmon_dg.erl
+++ /dev/null
@@ -1,205 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%------------------------------------------------------------
-%%
-%% Digraph handling for process view GUI. Feeble attempt at data
-%% separation. Provides functional interface to the data structures
-%% vdata and edata, v for vertex and e for edge.
-%%
-%%------------------------------------------------------------
--module(appmon_dg).
-
--include("appmon_dg.hrl").
-
-%% Exports for vertices
--export([get/3, get/2, set/4, av/3, add/4, del/2, visited/3]).
-
-%% Exports for edges
--export([eget/2, eget/3, eset/4, eadd/4, edel/2, ae/3]).
-
-%% Exports for convenience
--export([print_dg/1]).
-
-
-%%------------------------------------------------------------
-
-
-eget(all, DG) ->
- digraph:edges(DG).
-
-eget(data, DG, E) ->
- case digraph:edge(DG, E) of
- {_, _V1, _V2, Data} -> Data;
- _Other -> false
- end;
-eget(edge, DG, {V1, V2}) ->
- case digraph:edge(DG, {V1, V2}) of
- {E, W1, W2, ED} -> {E, W1, W2, ED};
- Other ->
- case digraph:edge(DG, {V2, V1}) of
- {E, W1, W2, ED} -> {E, W1, W2, ED};
- Other -> false
- end
- end;
-
-%% Weight in edge name
-eget(edge, DG, {V1, V2, Weight}) ->
- case digraph:edge(DG, {V1, V2, Weight}) of
- {E, W1, W2, ED} -> {E, W1, W2, ED};
- _Other -> false
- end;
-eget(in, DG, V) ->
- efilter(digraph:in_edges(DG, V)).
-
-efilter(Es) ->
- lists:filter(fun({_V1, _V2, primary}) -> true;
- (_E) -> false end,
- Es).
-
-eset(ref, DG, E, Ref) ->
- {E2, _V1, _V2, D} = eget(edge, DG, E),
- update_e(DG, E2, D#edata{ref=Ref});
-eset(line, DG, E, Line) ->
- {E2, _V1, _V2, D} = eget(edge, DG, E),
- update_e(DG, E2, D#edata{line=Line}).
-
-edel(DG, E) ->
- digraph:del_edge(DG, E).
-
-eadd(DG, E, D, Ref) ->
- case eget(edge, DG, E) of
- {_, _, _, ED} when is_record(ED, edata), ED#edata.ref == Ref ->
- known;
- {_, _, _, ED} when is_record(ED, edata), ED#edata.ref /= Ref ->
- update_e(DG, E, ED#edata{ref=Ref}),
- updated;
- _Other ->
- ae(DG, E, D)
- end.
-
-ae(DG, {V1, V2, Weight}, D) ->
- digraph:add_edge(DG, {V1, V2, Weight}, V1, V2, D).
-
-update_e(DG, {V1, V2, Weight}, D) ->
- digraph:del_edge(DG, {V1, V2, Weight}),
- digraph:add_edge(DG, {V1, V2, Weight}, V1, V2, D).
-
-%% Filter destination vertex from a list of edges
-vfilter(Vs) ->
- lists:map(fun({_V1, V2, _Weight}) -> V2;
- ({_V1, V2}) -> V2
- end, Vs).
-
-get(all, DG) ->
- digraph:vertices(DG).
-
-get(data, DG, {V1, V2}) ->
- case digraph:edge(DG, {V1, V2}) of
- {_,_,_,Data} -> Data;
- _Other -> false
- end;
-get(data, DG, V) ->
- case digraph:vertex(DG, V) of
- {_,Data} -> Data;
- _Other -> false
- end;
-
-%% Return all children of vertex V (those which V has edges to)
-get(out, DG, V) ->
- vfilter(efilter(digraph:out_edges(DG, V)));
-get(in, DG, V) ->
- digraph:in_neighbours(DG, V);
-get(edges, DG, V) ->
- digraph:edges(DG, V);
-get(w, DG, V) ->
- Data = get(data, DG, V),
- Data#vdata.width;
-get(x, DG, V) ->
- Data = get(data, DG, V),
- Data#vdata.x.
-
-set(type, DG, V, Type) ->
- D = get(data, DG, V),
- av(DG, V, D#vdata{type=Type});
-
-set(ref, DG, V, Ref) ->
- D = get(data, DG, V),
- av(DG, V, D#vdata{ref=Ref});
-
-set(y, DG, V, Y) ->
- D = get(data, DG, V),
- av(DG, V, D#vdata{y=Y});
-
-set(data, DG, V, D) when is_record(D, vdata)->
- av(DG, V, D);
-
-set(x, DG, V, X) ->
- D = get(data, DG, V),
- if D#vdata.x /= X ->
- av(DG, V, D#vdata{x=X});
- true -> true
- end.
-
-visited(DG, {V1, V2}, Ref) -> % for edge
- D = eget(data, DG, {V1, V2}),
- if is_record(D, edata), D#edata.ref == Ref -> true;
- true -> false
- end;
-visited(DG, V, Ref) ->
- D = get(data, DG, V),
- if is_record(D, vdata), D#vdata.ref == Ref -> true;
- true -> false
- end.
-
-add(DG, V, D, Ref) ->
- case get(data, DG, V) of
- D2 when is_record(D2, vdata), D2#vdata.ref==Ref ->
- io:format("Ooops in ~p:add vertex~n", [?MODULE]),
- known;
- D2 when is_record(D2, vdata) ->
- %%io:format("~p touch vertex ~p~n", [self(), V]),
- set(ref, DG, V, Ref),
- set(type, DG, V, D#vdata.type),
- save_coords(DG, V),
- updated;
- _Other ->
- av(DG, V, D), added
- end.
-
-save_coords(DG, V) ->
- D = get(data, DG, V),
- D2 = D#vdata{origx=D#vdata.x, origy=D#vdata.y},
- av(DG, V, D2).
-
-del(DG, V) ->
- digraph:del_vertex(DG, V).
-
-
-av(DG, V, D) ->
- digraph:add_vertex(DG, V, D).
-
-print_dg(DG) ->
- io:format("Vertices:~n", []),
- lists:foreach(fun(V) -> io:format(" ~p ~p~n",
- [V, get(data, DG, V)]) end,
- get(all, DG)),
- io:format("Edges:~n", []),
- lists:foreach(fun(V) -> io:format(" ~p ~p~n",
- [V, eget(edge, DG, V)]) end,
- eget(all, DG)),
- true.
diff --git a/lib/appmon/src/appmon_dg.hrl b/lib/appmon/src/appmon_dg.hrl
deleted file mode 100644
index c3485cf1fd..0000000000
--- a/lib/appmon/src/appmon_dg.hrl
+++ /dev/null
@@ -1,45 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-
-
-
-%%
-%% The dg package record definitions
-%%
-%% This is the declarations of the datastructures used for the
-%% application monitoring software. All fields are reserved for the
-%% implementation except those stated otherwise
-%%
-
--record(vdata, {ref, %
- type, %
- x, %
- origx=-1, %
- y, %
- origy=-1, %
- txt="", % Set by user
- width=0, % Set by user
- sym_obj=undefined, %
- txt_obj}). %
-
-
-
--record(edata, {ref, %
- line, %
- weight}). %
-
diff --git a/lib/appmon/src/appmon_lb.erl b/lib/appmon/src/appmon_lb.erl
deleted file mode 100644
index 3ab6ce58e6..0000000000
--- a/lib/appmon/src/appmon_lb.erl
+++ /dev/null
@@ -1,696 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-
-%%% Due to the fact that the application buttons in the appmon window
-%%% gets too small to read when the number of applications increases,
-%%% this listbox window has been created.
-%%% Because of the limitations of GS a listbox was chosen to keep
-%%% the nodes and applications. When it's possible to scroll a frame I
-%%% think one should put in scrollbars in the appmon main window.
-%%% The listbox solution is too slow with lots of applications.
-%%%
-%%% In the listbox the nodes are shown with their applications beneith.
-%%% By double clicking on an application name, or a single click and
-%%% then pressing the load button, its application window is started.
-
--module(appmon_lb).
--compile([{nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,listbox,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
--export ([
- start/1,
- stop/1,
- add_node/2,
- remove_node/2,
- add_apps/3,
- remove_app/3,
- open_win/2,
- update_status/3
- ]).
-
--export ([init/1]).
-
--define (LB_W, 200). % List box width
--define (LB_H, 400). % List box height
--define (BUTT_W, 100).
--define (WIN_W, ?LB_W + ?BUTT_W + 25). % Window width
--define (WIN_H, ?LB_H + 20). % Window height
-
-
-%%% #node{}
-%%%
-%%% The record 'node' contains the name of the node, its status and
-%%% the applications running on that node.
-%%%
-%%% node == atom ()
-%%% status == alive || dead
-%%% apps == [#app{}]
-%%%
-
--record (node, {node, %% Name of the node
- status = alive,
- apps = []}).
-
-%%% #app{}
-%%%
-%%% The record 'app' contains the name of the application and its pid
-%%%
-%%% app == atom ()
-%%% pid == pid ()
-%%%
-
--record (app, {app,
- pid}).
-
-
-%%% #win{}
-%%%
-%%% The record 'win' contains the pid of the listbox window,
-%%% its x and y position, its width and height.
-%%%
-%%% pid == win_closed || pid ()
-%%% x == integer ()
-%%% y == integer ()
-%%% width == integer ()
-%%% height == integer ()
-%%%
-
--record (win, {pid = win_closed,
- x = 50,
- y = 50,
- width = ?WIN_W,
- height = ?WIN_H}).
-
-
-
-%%% Every function in the interface is called with the pid
-%%% of this recieve loop, called 'LbPid'.
-%%%
-
-
-%%% start /1
-%%%
-%%% start returns the pid of the spawned receive loop or
-%%% it will call exit/2 after a timeout.
-%%%
-%%% Pre:
-%%% CallingPid == pid ()
-%%%
-%%% Def:
-%%% pid () || exit/2
-%%%
-
-start (CallingPid) ->
- PidInit = spawn (?MODULE, init, [CallingPid]),
-
- %% Wait for a initialization completion message from
- %% the spawned process before returning its Pid.
-
- receive
- {initialization_complete, PidInit} ->
- PidInit
-
- %% (Conditional) Failure to start within the time limit
- %% will result in termination (Timeout may be infinite).
-
- after
- 60000 ->
- exit (PidInit, kill),
- exit ({startup_timeout, ?MODULE})
- end.
-
-
-
-%%% stop /1
-%%%
-%%% stop exits the receive loop
-%%%
-%%% Post:
-%%% exiting the receive loop
-%%%
-
-stop (LbPid) ->
- call (LbPid, stop).
-
-
-
-%%% add_node /2
-%%%
-%%% add_node adds the given node to the DB list.
-%%%
-%%% Pre:
-%%% Node == atom ()
-%%%
-%%% Post:
-%%% Node is added to the DB list
-%%%
-
-add_node (LbPid, Node) ->
- call (LbPid, {add_node, Node}).
-
-
-
-%%% remove_node /2
-%%%
-%%% remove_node removes the given node from the DB list.
-%%%
-%%% Pre:
-%%% Node == atom ()
-%%%
-%%% Post:
-%%% Node is removed from the DB list
-%%%
-
-remove_node (LbPid, Node) ->
- call (LbPid, {remove_node, Node}).
-
-
-
-%%% add_apps /3
-%%%
-%%% add_apps add the given applications to the given
-%%% node in the DB list.
-%%%
-%%% Pre:
-%%% Apps == [App]
-%%% App == {Name, Pid}
-%%% Name == atom ()
-%%% Pid == pid ()
-%%% Node == atom ()
-%%%
-%%% Post:
-%%% Node#node{apps = Apps}
-%%%
-
-add_apps (LbPid, Apps, Node) ->
- call (LbPid, {add_apps, Apps, Node}).
-
-
-
-%%% remove_app /3
-%%%
-%%% remove_app remove the given application from the
-%%% given node in the DB list.
-%%%
-%%% Pre:
-%%% App == atom ()
-%%% Node == atom ()
-%%%
-%%% Def:
-%%% Node#node{apps = OldApps - App}
-%%%
-
-remove_app (LbPid, App, Node) ->
- call (LbPid, {remove_app, App, Node}).
-
-
-
-%%% open_win /3
-%%%
-%%% open_win opens the listbox window with the given nodes
-%%% and their applications.
-%%%
-%%% Pre:
-%%% Nodes_apps == [{Node, Status, Apps}]
-%%% Node == atom ()
-%%% Status == alive || dead
-%%% Apps == [App]
-%%% App == {AppName, AppPid}
-%%% AppName == atom ()
-%%% AppPid == pid ()
-%%%
-%%% Post:
-%%% Window with listbox
-%%%
-
-open_win (LbPid, Nodes_apps) ->
- call (LbPid, {open_win, Nodes_apps}).
-
-
-
-%%% update_status /3
-%%%
-%%% update_status changes the status for the given node.
-%%%
-%%% Pre:
-%%% Node == atom ()
-%%% Status == alive || dead
-%%%
-%%% Def:
-%%% Node#node{status = Status}
-%%%
-
-update_status (LbPid, Node, Status) ->
- call (LbPid, {update_status, Node, Status}).
-
-
-
-%%% call /2
-%%%
-%%% call sends the given action to the listbox receive loop.
-%%%
-%%% Pre:
-%%% Action == atom () || tuple ()
-%%%
-
-call (LbPid, Action) ->
- LbPid ! Action.
-
-
-
-%%% init /1
-%%%
-
-init (CallingPid) ->
- CallingPid ! {initialization_complete, self ()},
- loop (#win{}, []).
-
-
-
-%%% loop /2
-%%%
-%%% loop is the recive loop for the listbox window process.
-%%%
-%%% Pre:
-%%% Win == #win{}
-%%% Data == [#node{}]
-%%%
-
-loop (Win, Data) ->
- receive
- {add_node, Node} ->
- NewData = add_node_1 (Node, Data),
- update (NewData, Win#win.pid),
- loop (Win, NewData);
-
- {remove_node, Node} ->
- NewData = dead_node (Node, Data),
- update (NewData, Win#win.pid),
- loop (Win, NewData);
-
- {add_apps, Apps, Node} ->
- NewData = add_apps_1 (Apps, Node, Data),
- update (NewData, Win#win.pid),
- loop (Win, NewData);
-
- {remove_app, App, Node} ->
- NewData = remove_app_1 (App, Node, Data),
- update (NewData, Win#win.pid),
- loop (Win, NewData);
-
- {open_win, Nodes_apps} ->
- NewData = parse_data ([], Nodes_apps),
- NewWin = Win#win{pid = init_win ({Win#win.x, Win#win.y})},
- update (NewData, NewWin#win.pid),
- loop (NewWin, NewData);
-
- {update_status, Node, Status} ->
- NewData = update_status_1 (Node, Status, Data),
- update (NewData, Win#win.pid),
- loop (Win, NewData);
-
- stop ->
- true;
-
-
- {gs, _Id, destroy, _D, _Arg} ->
- bye;
-
- {gs, _Id, configure, _D, [W, H | _]} ->
- NewWin = configure (Win#win.pid, W, H),
- loop (NewWin, Data);
-
- {gs, lb, doubleclick, _, _Txt} ->
- load_app (gs:read (lb, selection), Data),
- loop (Win, Data);
-
- {gs, lb, click, _, _Txt} ->
- loop (Win, Data);
-
- {gs, close, click, _D, _Arg} ->
- case Win#win.pid of
- win_closed ->
- true;
-
- _opened ->
- gs:destroy (Win#win.pid)
- end,
- loop (#win{}, Data);
-
- {gs, load, click, _D, _Txt} ->
- load_app (gs:read (lb, selection), Data),
- loop (Win, Data);
-
- {gs, clear, click, _D, _Txt} ->
- gs:config (lb, {selection, clear}),
- loop (Win, Data);
-
-
- _ ->
- loop (Win, Data)
- end.
-
-
-
-%%% init_win /1
-%%%
-
-init_win ({X, Y}) ->
- GS = gs:start (),
-
- Win = gs:window (win, GS, [{x, X},
- {y, Y},
- {width, ?WIN_W},
- {height, ?WIN_H},
- {title,"Appmon: nodes and applications"},
- {configure, true}]),
-
- gs:listbox (lb, Win, [{x, 5},
- {y, 10},
- {width, ?LB_W},
- {height, ?LB_H},
- {vscroll, right},
- {hscroll, bottom},
- {selectmode, single},
- {click, true},
- {doubleclick, true}]),
-
- gs:button (load, Win, [{x, ?WIN_W - ?BUTT_W - 10},
- {y, ?WIN_H - 120},
- {width, ?BUTT_W},
- {label, {text, "Load"}}]),
-
- gs:button (clear, Win, [{x, ?WIN_W - ?BUTT_W - 10},
- {y, ?WIN_H - 80},
- {width, ?BUTT_W},
- {label, {text, "Clear"}}]),
-
- gs:button (close, Win, [{x, ?WIN_W - ?BUTT_W - 10},
- {y, ?WIN_H - 40},
- {width, ?BUTT_W},
- {label, {text, "Close"}}]),
-
- gs:config (Win, {map, true}),
- Win.
-
-
-
-%%% add_node_1 /2
-%%%
-%%% add_node adds the given node in the given window
-%%% with its appications in a listbox.
-%%%
-
-add_node_1 (Node, []) ->
- [new_node (Node)];
-
-add_node_1 (Node, [H | T]) ->
- T1 = lists:keysort (#node.node, [new_node (Node) | T]),
- [H | T1].
-
-
-
-%%% dead_node /2
-%%%
-%%% dead_node returns a list with the given node's
-%%% status changed to dead.
-%%%
-
-dead_node (Node, Data) ->
- case lists:keysearch (Node, #node.node, Data) of
- {value, Node_rec} ->
- L = Node_rec#node.apps,
- lists:keyreplace (Node, #node.node,
- Data, new_node (Node, dead, L));
-
- _false ->
- Data
- end.
-
-
-
-
-
-%%% add_apps_1 /3
-%%%
-%%% add_apps_1 returns a list with the given application
-%%% into the old list inserted.
-%%%
-
-add_apps_1 (Apps, Node, Data) ->
- case lists:keysearch (Node, #node.node, Data) of
- {value, _Node_rec} ->
- NewApps = parse_apps (Apps, []),
- lists:keyreplace (Node, #node.node,
- Data, new_node (Node, NewApps));
-
- _false ->
- Data
- end.
-
-
-
-%%% remove_app_1 /3
-%%%
-%%% remove_app_1 returns a list with the given application
-%%% removed from the old list.
-%%%
-
-remove_app_1 (App, Node, Data) ->
-
- case lists:keysearch (Node, #node.node, Data) of
- {value, Node_rec} ->
- L = Node_rec#node.apps,
- L2 = lists:keydelete (App, #app.app, L),
- lists:keyreplace(Node, #node.node, Data, new_node(Node,L2));
-
- _false ->
- Data
- end.
-
-
-
-%%% configure /3
-%%%
-%%% configure returns a win record after the window has been
-%%% configured.
-%%%
-
-configure (WPid, W, H) ->
- X = gs:read (WPid, x),
- Y = gs:read (WPid, y),
-
- gs:config (lb, [{width, W - ?BUTT_W - 25}, {height, H - 20}]),
- gs:config (load, [{x, W - ?BUTT_W - 10}, {y, H - 120}]),
- gs:config (clear, [{x, W - ?BUTT_W - 10}, {y, H - 80}]),
- gs:config (close, [{x, W - ?BUTT_W - 10}, {y, H - 40}]),
-
- #win{pid = WPid, x = X, y = Y, width = W, height = H}.
-
-
-
-
-
-%%% load_app /2
-%%%
-%%% load_app opens the application window by calling
-%%% the appmon_a module.
-%%%
-
-load_app ([], _Data) -> %% no application chosen
- ok;
-
-load_app ([Index], Data) ->
- App = gs:read (lb, {get, Index}),
-
- case string:substr (App, 1, 3) of
- " " ->
- AppName = list_to_atom (string:substr (App, 4)),
-
- case get_node (AppName, Index, Data) of
- no_node ->
- ok;
-
- NodeName ->
- appmon_a:start (NodeName, AppName)
- end;
-
- _ ->
- ok
- end.
-
-
-
-%%% update_status_1 /3
-%%%
-%%% update_status_1 returns a list with the given
-%%% node's status updated.
-%%%
-
-update_status_1 (Node, Status, Data) ->
- case lists:keysearch (Node, #node.node, Data) of
- {value, Node_rec} ->
- lists:keyreplace (Node,
- #node.node,
- Data,
- new_node(Node,Status,Node_rec#node.apps));
-
- _not_found ->
- Data
- end.
-
-
-
-%%% update /2
-%%%
-%%% update updates the listbox with new data.
-%%%
-
-update (_Data, win_closed) ->
- true;
-
-update (Data, _Win) ->
- gs:config (lb, clear),
- lb_print (Data).
-
-
-
-%%% lb_print /1
-%%%
-%%% lb_print prints the list into the listbox.
-%%%
-
-lb_print ([]) ->
- ok;
-
-lb_print ([#node{node = Node, status = Status, apps = Apps} | T]) ->
- Str = io_lib:format ("~p (~p)", [Node, Status]),
- gs:config (lb, {add, Str}),
-
- case Status of
- alive ->
- lb_print_apps (Apps);
-
- _dead ->
- gs:config (lb, {add, ""}),
- ok
- end,
-
- lb_print (T).
-
-
-
-%%% lb_print_apps /1
-%%%
-%%% lb_print_apps prints the applications into the listbox.
-%%%
-
-lb_print_apps ([]) ->
- ok;
-
-lb_print_apps ([#app{app = App} | T]) ->
- Str = io_lib:format (" ~p", [App]),
- gs:config (lb, {add, Str}),
- lb_print_apps (T).
-
-
-
-%%% new_node /1, 2, 3
-%%%
-%%% new_node returna a new node record constructed
-%%% with the given data
-%%%
-
-new_node (Node) ->
- #node{node = Node}.
-
-new_node (Node, Apps) ->
- #node{node = Node, apps = Apps}.
-
-new_node (Node, Status, Apps) ->
- #node{node = Node, status = Status, apps = Apps}.
-
-
-
-%%% new_app /2
-%%%
-%%% new_app returns a new application record
-%%% constructed with the given data.
-%%%
-
-new_app (App, Pid) ->
- #app{app = App, pid = Pid}.
-
-
-
-%%% parse_apps /2
-%%%
-%%% parse_apps returns a list of application records.
-%%%
-
-parse_apps ([], [H | T]) ->
- [H | lists:keysort (#app.app, T)];
-
-parse_apps ([App | T], L) ->
- Pid = element (1, App),
- Name = element (2, App),
- parse_apps (T, [new_app (Name, Pid) | L]).
-
-
-
-%%% get_node /3
-%%%
-%%% get_node returns the node from the given list
-%%% or else no_node if it doesn't exists.
-%%%
-
-get_node (_App, _Index, []) ->
- no_node;
-
-get_node (App, Index, [Node | T]) ->
- Length = length (Node#node.apps) + 1,
-
- case Length < Index of
- true ->
- get_node (App, Index - Length, T);
-
- false ->
- Node#node.node
- end.
-
-
-
-%%% parse_data /2
-%%%
-%%% parse_data returns a list with node records.
-%%%
-
-parse_data (Data, []) ->
- Data;
-
-parse_data (Data, [{Node, Status, Apps} | T]) ->
- Apps_1 = parse_apps (Apps, []),
- parse_data ([new_node (Node, Status, Apps_1) | Data], T).
-
-
-
diff --git a/lib/appmon/src/appmon_place.erl b/lib/appmon/src/appmon_place.erl
deleted file mode 100644
index fe1e909d7c..0000000000
--- a/lib/appmon/src/appmon_place.erl
+++ /dev/null
@@ -1,192 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2010. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%------------------------------------------------------------
-%%
-%% Places a Digraph in a tree-like manner. The vertices in the digraph
-%% is updated with x and y positions. The operation is not atomic. The
-%% digraph may be cyclic but edges must then have been labeled primary
-%% or secondary and the set of primary links must make up a non-cyclic
-%% graph (a tree).
-%%
-%%
-%% IMPLEMENTATION DETAIL
-%% ---------------------
-%%
-%% The placement algorithm is straightforward, place the
-%% nodes in the vertical plane (y-plane) and then place
-%% nodes in the horisontal plane (x-plane).
-%%
-%% First all nodes are placed in the y (vertical) plane
-%% by a standard traversing of the tree. We then place
-%% the tree in the x (horisontal) plane. Each node is
-%% placed in the middle of its children as far to the
-%% left as possible, preferably at the left margin. Two
-%% things can make a node not be placed at the left
-%% margin and that is the case when a previous node has
-%% been placed at the same vertical level as the node we
-%% are trying to place (thus forcing a placement further
-%% to the right), and the second case is when the middle
-%% of the subtree of the node is not at the left margin
-%% (which it only is when the subtree is empty). The
-%% algorithm obviously depends on keeping track of the
-%% rightmost positions at all depths, and this
-%% information is also usefull when calculating the width
-%% of the tree.
-%%
-%%
-%%
-%%------------------------------------------------------------
-
-
-
--module(appmon_place).
-
--export([place/2]).
-
--include("appmon_dg.hrl").
-
-
--import(lists, [foreach/2, foldl/3]).
-
-
-place(DG, Root) ->
- case appmon_dg:get(data, DG, Root) of
- false -> [0];
- _Other ->
- placey(DG, Root, 1),
- placex(DG, Root, [])
- end.
-
-
-%%------------------------------------------------------------
-%%
-%%
-%% Placing a graph in y plane
-%% --------------------------
-%%
-%% Place nodes in the graph in the y plane rather stupidly
-%%
-
-placey(DG, V, Y) ->
- appmon_dg:set(y, DG, V, Y),
- Y1 = Y+1,
- foreach(fun(C) -> placey(DG, C, Y1) end, appmon_dg:get(out, DG, V)).
-
-
-
-
-%%------------------------------------------------------------
-%%
-%%
-%% Place a tree in the x plane
-%% ---------------------------
-%%
-%% Place nodes in the tree in the x plane. The goal of the x
-%% placement is to place all nodes as far to the left as possible
-%% while maintaining a nice tree shape.
-%%
-%% To place a node we must first place its children, the
-%% intention is to place the current node in the middle and above
-%% its children. The calc_mid function will place the node in the
-%% middle of its children. If the node should be placed further
-%% to the right than the middle of its children, then its
-%% children are moved DeltaX positions to be balanced under the
-%% node. Thus at the end the node and its children form a nice
-%% looking tree.
-%%
-%% The function also maintains the 'rightmost x on each level'
-%% list LastX by putting its own position on top of the list
-%%
-%%
-
-placex(DG, V, LastX) ->
- Ch = appmon_dg:get(out, DG, V),
- ChLX = foldl(fun(C, Accu) -> placex(DG, C, Accu) end,
- tll(LastX),
- Ch),
-
- Width = appmon_dg:get(w, DG, V),
- MyX = calc_mid(DG, Width, Ch),
- DeltaX = calc_delta(MyX, hdd(LastX)+spacex()),
-
- appmon_dg:set(x, DG, V, MyX),
- move(DG, V, [MyX+Width | ChLX], DeltaX).
-
-
-%%------------------------------------------------------------
-%%
-%%
-%% Move a subtree DeltaX positions to the right
-%% --------------------------------------------
-%%
-%% Used when moving children to balance under an already placed
-%% parent. Note that the correct LastX depends on the ordering of
-%% the children which must be the same as when the children were
-%% first placed. It must be ensured that hdd(NewLastX) is the
-%% same as hdd(NewLastX)+DeltaX. If the order of children is
-%% preserved then so is hdd(LastX). Another solution would be to
-%% set hdd(LastX) from the parent
-%%
-%% Note the two base clauses, one for the no-children case and
-%% one optimisation clause (unneccessary perhaps) for DeltaX==0
-%%
-
-move(_DG, _L, LastX, 0) -> LastX;
-move(DG, V, LastX, DeltaX) -> move2(DG, V, LastX, DeltaX).
-
-move2(DG, V, LastX, DeltaX) ->
- NewX = appmon_dg:get(x, DG, V)+DeltaX,
- appmon_dg:set(x, DG, V, NewX),
- ChLX = foldl(fun(C, LX) -> move2(DG, C, LX, DeltaX) end,
- tll(LastX),
- appmon_dg:get(out, DG, V)),
- [erlang:max(NewX+appmon_dg:get(w, DG, V), hdd(LastX)) | ChLX].
-
-
-%%------------------------------------------------------------
-%%
-%%
-%% Calculate the middle position of the children
-%% ---------------------------------------------
-%%
-%% Calculates the mid x position for a list of children. This
-%% position is later compared to the position dictated by LastX
-%% in calc_delta.
-
-calc_mid(_DG, _Width, []) -> 0;
-calc_mid(DG, Width, ChList) ->
- LeftMostX = appmon_dg:get(x, DG, hd(ChList)),
- Z2 = lists:last(ChList),
- RightMostX = appmon_dg:get(x, DG, Z2)+appmon_dg:get(w, DG, Z2),
- trunc((LeftMostX+RightMostX)/2)-trunc(Width/2).
-
-calc_delta(Mid, Right) ->
- if Right>Mid -> Right-Mid;
- true -> 0
- end.
-
-
-
-%% Special head and tail
-%% Handles empty list in a non-standard way
-tll([]) -> [];
-tll([_|T]) -> T.
-hdd([]) -> 0;
-hdd([H|_]) -> H.
-
-spacex() -> 20. % Should be macro??
diff --git a/lib/appmon/src/appmon_txt.erl b/lib/appmon/src/appmon_txt.erl
deleted file mode 100644
index 056265af90..0000000000
--- a/lib/appmon/src/appmon_txt.erl
+++ /dev/null
@@ -1,307 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%------------------------------------------------------------
-%%
-%% Simple text viewer
-%%
-%%------------------------------------------------------------
-
--module(appmon_txt).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,1}}]).
--export([start/0, start/1, print/1, fprint/1]).
-
-%% gen_server stuff
--export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- terminate/2]).
-
--define(LOADTXT, "Load file").
--define(SAVETXT, "Save file").
--define(SAVEASTXT, "Save as").
--define(CLOSETXT, "Close").
--define(HELPTXT, "Help").
-
-%%------------------------------------------------------------
-%%
-%% start/0 starts an open text viewer that can be filled with
-%% whatever.
-%%
-%%------------------------------------------------------------
-start() ->
- start([]).
-
-%%------------------------------------------------------------
-%%
-%% start(ListOfOptions) starts an open text viewer with options
-%%
-%% Options can be
-%% {file, FileName} - insert contents of file
-%% locked - the text cannot be edited
-%% {text, Text} - insert text at startup
-%%
-%%------------------------------------------------------------
-start(Opts) ->
- gen_server:start_link({local, ?MODULE}, ?MODULE, Opts, []).
-
-%% Start a text viewer if necessary
-print(Txt) ->
- catch start(),
- gen_server:call(?MODULE, {add_txt, Txt}),
- ok.
-
-fprint(File) ->
- catch start(),
- gen_server:call(?MODULE, {add_file, File}),
- ok.
-
-
-%%------------------------------------------------------------
-%% gen server admin
-
-init(Opts) ->
- process_flag(trap_exit, true),
- setup_base_win(),
- default_status(),
- setup_opts(Opts),
- {ok, []}.
-
-terminate(_Reason, _State) ->
- ok.
-
-%%------------------------------------------------------------
-%% gen server stuff
-handle_call({add_txt, Txt}, _From, State) ->
- do_insert_text(Txt),
- scroll_to_last_line(),
- {reply, ok, State};
-handle_call({add_file, FileName}, _From, State) ->
- do_load_file(FileName),
- {reply, ok, State};
-handle_call(_Request, _From, State) ->
- {reply, ok, State}.
-handle_cast(_Request, State) ->
- {noreply, State}.
-handle_info({gs, _, click, _, [?CLOSETXT|_]}, State) ->
- {stop, normal, State};
-handle_info({gs, _, click, _, [?LOADTXT|_]}, State) ->
- ui_load(),
- {noreply, State};
-handle_info({gs, _, configure, _, [W, H | _]}, State) ->
- resize(W, H),
- {noreply, State};
-
-handle_info({gs, _, destroy, _, _}, State) ->
- {stop, normal, State};
-handle_info(Request, State) ->
- io:format("~p got info: ~p~n", [self(), Request]),
- print_status("Not implemented"),
- {noreply, State}.
-
-
-%%------------------------------------------------------------
-%% Handle options
-
-setup_opts([Opt|Opts]) ->
- setup_opt(Opt),
- setup_opts(Opts);
-setup_opts([]) -> ok.
-
-setup_opt(Opt) ->
- case Opt of
- {file, FileName} ->
- do_load_file(FileName);
- locked ->
- do_lock();
- {text, Text} ->
- do_insert_text(Text);
- _Other ->
- ok
- end.
-
-do_load_file(FileName) ->
- case catch i_load_file(FileName) of
- ok ->
- default_status();
- _Other ->
- print_status(lists:append(["File not found: ", FileName]))
- end.
-
-i_load_file(FileName) ->
- {ok, Bin} = file:read_file(FileName),
- L = binary_to_list(Bin),
- i_do_clear(),
- do_insert_text(L),
- ok.
-
-ui_load() ->
- Title = "Load file",
- Files = get_file_list(),
- case catch ui_list_dialog(Title, "File: ", Files) of
- {ok, FileName} ->
- do_load_file(FileName);
- _Other ->
- print_status("Load cancelled")
- end.
-
-get_file_list() ->
- case file:list_dir(".") of
- {ok, FileList} -> lists:sort(FileList);
- _Other -> []
- end.
-
-do_insert_text(Text) ->
- gs:config(editor(), {insert, {'end', Text}}),
- ok.
-
-%% Scrolls editor to show the last rows
-scroll_to_last_line() ->
- H = gs:read(editor(), size),
- R = gs:read(editor(), height),
- TopRow = H-R/15,
- if TopRow > 0 -> gs:config(editor(), {vscrollpos, TopRow});
- true -> gs:config(editor(), {vscrollpos, 0})
- end,
- ok.
-
-do_lock() ->
- gs:config(editor(), {enable, false}).
-
-i_do_clear() ->
- gs:config(editor(), clear).
-
-%%------------------------------------------------------------
-%% Graphical stuff
-
-label_h() -> 20.
-menu_h() -> 29.
-
-setup_base_win() ->
- H = 400, W=580,
- LabelHeight=label_h(), MenuHeight=menu_h(),
-
- F = gs:start([{kernel,true}]),
- set_winroot(F),
-
- Win = gs:create(window, F, [{width, W}, {height, H},
- {title,"APPMON: Process Information"}]),
-
- E = gs:create(editor, Win, [{x, 0}, {y, MenuHeight},
- {width, W},
- {height, H-MenuHeight-LabelHeight-1},
- {vscroll, right}]),
- set_editor(E),
-
- L = gs:create(label, Win, [{x, 0}, {y, H-LabelHeight},
- {height,LabelHeight }, {width, W},
- {align, w}]),
- set_status(L),
- print_status("Loading"),
-
- gs:config(Win, {map, true}),
-
- MB = gs:create(menubar, Win, []),
-
- FMB = gs:create(menubutton, MB, [{label, {text, "File"}}]),
- FM = gs:create(menu, FMB, []),
- gs:create(menuitem, FM, [{label, {text, ?CLOSETXT}}]),
-
- gs:config(Win, {configure, true}),
- ok.
-
-resize(W, H) ->
- gs:config(editor(), [{width, W}, {height, H-label_h()-menu_h()}]),
- gs:config(status(), [{y, H-label_h()}, {width, W}]),
- ok.
-
-%%------------------------------------------------------------
-%% ui_list_dialog(
-%%
-%% Traditional dialog with a list box and a selection field that
-%% is updated from the list box.
-%%
-%% Returns {ok, String} if successful and something else if not
-%%
-%% Title - the name of the window
-%% LeadText - the lead text on the selection field
-%% List - a list of items that will be displayed in the list box
-%%
-%%------------------------------------------------------------
-
-ui_list_dialog(Title, LeadText, TxtList) ->
- W = 200, H = 300,
-
- Win = gs:create(window, winroot(), [{title, Title},
- {width, W},{height, H}]),
- Ok = gs:create(button, Win, [{x, 10}, {y,10},
- {width, 50}, {height, 20},
- {label, {text, "Ok"}}]),
- Cn = gs:create(button, Win, [{x, 70}, {y,10},
- {width, 50}, {height, 20},
- {label, {text, "Cancel"}}]),
-
- gs:create(label, Win, [{x, 10}, {y, 50},
- {width, 60}, {height, 20},
- {label, {text, LeadText}}]),
- Box = gs:create(entry, Win, [{x, 10}, {y, 70},
- {width, 160}, {height, 20},
- {keypress, true}]),
- List = gs:create(listbox, Win, [{x, 10}, {y, 100}, {width, 180},
- {height, 190},
- {items, TxtList}, {vscroll, right},
- {hscroll, false}, {click, true},
- {doubleclick, true},
- {keypress, true}]),
- gs:config(Win, {map, true}),
-
- RetVal = ui_load_loop(Box, List, Ok, Cn),
-
- gs:destroy(Win),
-
- RetVal.
-
-ui_load_loop(Box, List, Ok, Cn) ->
- receive
- {gs, Box, keypress, _, ['Return'|_]} ->
- {ok, gs:read(Box, text)};
- {gs, Box, keypress, _, _} ->
- ui_load_loop(Box, List, Ok, Cn);
- {gs, Ok, click, _, _} ->
- {ok, gs:read(Box, text)};
- {gs, List, doubleclick, _, [_Idx, Txt|_]} ->
- {ok, Txt};
- {gs, List, click, _, [_Idx, Txt|_]} ->
- gs:config(Box, {text, Txt}),
- ui_load_loop(Box, List, Ok, Cn);
- _Other ->
- something_else
- end.
-
-%% The status row at the bottom of the window
-set_status(Id) -> put(status_row, Id).
-status() -> get(status_row).
-print_status(Msg) -> gs:config(get(status_row), {label, {text, Msg}}).
-default_status() -> print_status("Done").
-
-set_editor(X) -> put(editor, X).
-editor() -> get(editor).
-
-winroot() -> get(winroot).
-set_winroot(X) -> put(winroot, X).
diff --git a/lib/appmon/src/appmon_web.erl b/lib/appmon/src/appmon_web.erl
deleted file mode 100644
index 048f7fa165..0000000000
--- a/lib/appmon/src/appmon_web.erl
+++ /dev/null
@@ -1,1031 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%%---------------------------------------------------------------------
-%%% File : webappmon.erl
-%%% Author : Martin G. <[email protected]>
-%%% Purpose : Frontend to the webbased version of appmon.
-%%% Created : 24 Apr 2001 by Martin G. <[email protected]>
-%%%---------------------------------------------------------------------
-
--module(appmon_web).
-
-%% The functions that the user can call to interact with the genserver
--export([init/1,handle_call/3,handle_cast/2,handle_info/2]).
--export([terminate/2,code_change/3]).
-
--export([node_info/2,application_info/2,application_env/2]).
--export([proc_info/2,trace/2]).
--export([start/0,stop/0,start_link/0]).
-
-%% Export the function that returns the configuration data needed by
-%% webtool
--export([configData/0]).
-
--behaviour(gen_server).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Start the genserver %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-start_link()->
- gen_server:start_link({local,webappmon_server},appmon_web,[],[]).
-start()->
- gen_server:start({local,webappmon_server},appmon_web,[],[]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Stop the genserver %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-stop()->
- gen_server:call(webappmon_server,stop,1000).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Get the page that shows the nodes and the apps on the sel node %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-node_info(Env,Input)->
- gen_server:call(webappmon_server,{node_data,Env,Input}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Get the application process tree %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-application_info(Env,Input)->
- gen_server:call(webappmon_server,{app_data,Env,Input}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Get the page that shows the data about the process %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-proc_info(Env,Input)->
- gen_server:call(webappmon_server,{proc_data,Env,Input}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Get the spec on the app %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-application_env(Env,Input)->
- gen_server:call(webappmon_server,{app_env,Env,Input}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Toggle the trace flag for the selected process %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-trace(Env,Input)->
- gen_server:call(webappmon_server,{trace,Env,Input}).
-
-configData()->
- {appmon,[{web_data,{"WebAppmon","/appmon/main_frame.html"}},
- {alias,{"/appmon",code:priv_dir(appmon)}},
- {alias,{erl_alias,"/erl",[appmon_web]}},
- {start,{child,{backend,{process_info,start_link,[]},
- permanent,100,worker,[process_info]}}},
- {start,{child,{{local,webappmon_server},
- {appmon_web,start_link,[]},
- permanent,100,worker,[appmon_web]}}}
- ]}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% Callback functions for the genserver %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-init(_Arg)->
- {ok,[]}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Create the different pages %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-handle_call({node_data,_Env,Input},_From,State)->
- {reply,app_and_node_sel_page(Input),State};
-
-handle_call({app_data,_Env,Input},_From,State)->
- {reply,process_tree_page(Input),State};
-
-handle_call({proc_data,_Env,Input},_From,State)->
- {reply,process_specifickation_page(Input),State};
-
-handle_call({app_env,_Env,Input},_From,State)->
- {reply,application_specifickation_page(Input),State};
-
-handle_call({trace,_Env,Input},_From,State)->
- {reply,toggle_trace(Input),State}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Shutdown the genserver %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-terminate(_,_State)->
- ok.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Callback function currently not used ... %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-handle_cast(_,State)->
- {noreply,State}.
-
-handle_info(_,State)->
- {noreply,State}.
-
-code_change(_OldVsn,State,_Extra)->
- {ok,State}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% Private functions to create the part of the sides that is common %%
-%% to all sides %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the Header for the page If we now the mimetype use that type%%
-%% otherwise use text %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-header() ->
- header("text/html").
-header(MimeType) ->
- "Content-type: " ++ MimeType ++ "\r\n\r\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the Htmlheader sett the title of the side to nothing if %%
-%% we dont know the name of the side %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-html_header()->
- html_header("").
-
-html_header(Part) ->
- "<HTML BGCOLOR=\"#FFFFFF\">\n" ++
- "<HEAD>\n" ++
- "<TITLE>Appmon " ++ Part ++ "</TITLE>\n" ++
- "</HEAD>\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Close the Html tag and if neccessay add some clean upp %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-html_end()->
- "</HTML>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% The functions that creates the whole pages by collecting %%
-%% the necessary data %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Returns the page where the user see's which nodes and apps that %%
-%% are availible for monitoring %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-app_and_node_sel_page(Input)->
- [header(),
- html_header(),
- node_body(httpd:parse_query(Input)),
- html_end()].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Returns the process tree for the application whose name is %%
-%% the first value in the Inputs key/value list %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_tree_page(Input)->
- [header(),
- html_header(),
- application_javascript(httpd:parse_query(Input)),
- application_body(httpd:parse_query(Input)),
- html_end()].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Send trace on or off to the process thats pid is the third arg of %%
-%% the inputs key/val list. Then it returns the process tree for the %%
-%% the application that is the first key/val pair of input %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-toggle_trace(Input)->
- send_trace(httpd:parse_query(Input)),
- [header(),
- html_header(),
- application_javascript(httpd:parse_query(Input)),
- application_body(httpd:parse_query(Input)),
- html_end()].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Creates the page that shows all information about the process that %%
-%% that is the first arg of th input key/val pairs %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_specifickation_page(Input)->
- [header(),
- html_header(),
- process_body(httpd:parse_query(Input)),
- html_end()].
-
-application_specifickation_page(Input)->
- [header(),
- html_header(),
- application_env_body(httpd:parse_query(Input)),
- html_end()].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The Private functions that do the job %%
-%% To build the the page that shows the applications %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Build the body of the side that shows the node name and %%
-%% the application list %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-node_body([{"node",Node}|_Rest])->
- case process_info:is_node(Node) of
- {true,Controlled_node,Name} ->
- "<BODY BGCOLOR=\"#FFFFFF\">" ++
- node_selections_javascripts() ++
- node_selection(Controlled_node) ++
- node_title() ++
- application_tree(Controlled_node,Name) ++
- "</BODY>";
-
- {false,Server_node,Name} ->
- "<BODY BGCOLOR=\"#FFFFFF\">" ++
- node_selections_javascripts() ++
- node_selection(Server_node) ++
- node_title() ++
- application_tree(Server_node,Name) ++
- "</BODY>"
- end;
-
-node_body(_Whatever)->
- node_body([{atom_to_list(node),atom_to_list(node())}]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Returns the javascript that sets a new node to monitor %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-node_selections_javascripts()->
- "<SCRIPT>
- function node_selected()
- {
- parent.frames.base_frames.location=\"../../appmon/start_info.html\"
- window.location =\"./node_info?node=\" + " ++
- "document.node_selection.nodes[document.node_selection.nodes.selectedIndex].value;
- }
- </SCRIPT>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Insert the html code that shows the combobox where the user can %%
-%% select another node to monitor %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-node_selection(Node)->
- " <FORM ACTION=\"./node_info\" NAME=node_selection>\n
- <TABLE WIDTH=\"100%\" BORDER=\"0\">\n
- <TR><TD ALIGN=\"center\">\n
- <SELECT NAME=nodes onChange=\"node_selected()\">\n" ++
- print_nodes(order_nodes(Node,process_info:get_nodes())) ++
- "</SELECT>\n
- </TD></TR>\n
- </TABLE>\n
- </FORM>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Add the node we are working with in the beginning of the list and %%
-%% remove it from other places so its always the first in the listbox %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-order_nodes(Node,Node_list)->
- [Node|lists:delete(Node,Node_list)].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Take the list of nodes and make it to a list of options to the %%
-%% the combobox %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-print_nodes([])->
- [];
-print_nodes([Node|Rest])->
- "<OPTION value=\"" ++
- atom_to_list(Node) ++
- "\">" ++
- atom_to_list(Node) ++
- "\n" ++
- print_nodes(Rest).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the header of the node info page i.e. the name of the node %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-node_title()->
- " <TABLE WIDTH=\"100%\" BORDER=\"0\">
- <TR><TD ALIGN=\"center\"><FONT SIZE=5>Applications</FONT></TD></TR>
- </TABLE>\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Build the body of the side that shows the node i.e the application %%
-%% list %%
-%% Node and Node_name are the same just different types %%
-%% Node are the atom Node_name the string of the node name %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-application_tree(Node,Node_name)->
- Fun=fun(Name)->
- Name_str =atom_to_list(Name),
- "<LI><A HREF=\"./application_info?name=" ++ Name_str ++
- "&mode=all&node=" ++ Node_name ++
- "\" TARGET=main><B>" ++ Name_str ++
- "</B></A>" ++ print_space(15-length(Name_str),[]) ++
- "<A HREF=\"./application_env?name=" ++ Name_str ++
- "&node=" ++ Node_name ++
- "\" TARGET=\"main\"><FONT SIZE=2>spec</FONT></A></LI>\n"
- end,
- "<UL>" ++
- lists:map(Fun, (process_info:get_applications(Node))) ++
- "</UL>" ++
- "<FORM Name=reload>" ++
- "<INPUT TYPE=\"button\" onClick=\"node_selected()\"
- VALUE=\"Reload\">\n" ++
- "</FORM>" ++
- "<!--<A HREF=\"../../appmon/application_help.html\" TARGET=main>Help</A>-->".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Print spaces between the application name and the spec link %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-print_space(N,Space)when N >0 ->
- print_space(N-1,"&nbsp;" ++ Space);
-print_space(_N,Space)->
- Space.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The Private functions that do the job %%
-%% To build the the page that shows process in an application %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%Generates the javascript that govern the look of the page that %%
-%%the processes of an application %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%Args is the list whit input args should be App Mode, Node
-application_javascript(Args)when length(Args)>=3 ->
- Vars=
- "<SCRIPT>
- var proc;
- var app=\"" ++ element(2,lists:nth(1,Args)) ++ "\";
- var node=\"" ++ element(2,lists:nth(3,Args)) ++ "\";",
- CommonFuncs=
- " function reload_bottom_frame()
- {parent.proc_data.location.href=\"/appmon/blank.html\";}
-
- function show_process_info()
- {
- if(proc.indexOf(\"#Port\")== -1)
- {
- if(proc.charAt(0)==\'<\')
- window.location=\"./proc_info?name=\" + proc + \"&node=\" + node
- else
- {
- start=proc.indexOf(\"<\");
- endpoint=proc.lastIndexOf(\">\");
- window.location=\"./proc_info?name=\" + proc.slice(start,endpoint+1) + \"&node=\" + node ;
- }
- }
- }
-
- function trace()
- {
- if(proc.charAt(0)==\'<\')
- window.location=\"./trace?name=\" + app + \"&mode=\" + get_mode() + \"&node=\" + node + \"&proc=\" + proc;
- else
- {
- start=proc.indexOf(\"<\");
- endpoint=proc.lastIndexOf(\">\");
- window.location=\"./trace?name=\" + app + \"&mode=\" + get_mode() + \"&node=\" + node + \"&proc=\" +
- proc.slice(start,endpoint+1) ;
- }
-
- }
-
- function reload_page()\n
- {
- window.location=\"./application_info?name=\" + app + \"&mode=\" + get_mode() + \"&node=\" + node ;
- }
- function get_mode()
- {
- for (i= 0; i < document.reload_form.mode.length; i++)
- {
- if (document.reload_form.mode[i].checked)
- return(document.reload_form.mode[i].value);
- }
- return(\"all\");
- }",
- Vars++CommonFuncs++"</SCRIPT>";
-application_javascript(_)->
- "<SCRIPT></SCRIPT>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the body i.e the process tree for the applications whose %%
-%% name is the second arg in the first tuple %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%args is the list [{_,Appname},{_,Mode},{_Node}]
-application_body(Args) when is_list(Args),length(Args) >= 3 ->
- App=element(2,lists:nth(1,Args)),
- Mode=element(2,lists:nth(2,Args)),
- Node=element(2,lists:nth(3,Args)),
- "<BODY BGCOLOR=\"FFFFFF\" onLoad=reload_bottom_frame() >"
- ++ mode_selection(Mode) ++
- selected_app_header(App,Node) ++ process_tree(App,Mode,Node)++
- "</BODY>";
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% If the pattern above ain't match then something is wrong %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-application_body(_Whatever)->
- "Please use the links to the left".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the part of the process tree page side where the user can %%
-%% select the mode the view the tree in. %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-mode_selection(Mode)->
- "<FORM NAME=\"reload_form\">\n" ++
- "<TABLE>" ++
- "<TR>\n" ++
- "<!--<TD><INPUT TYPE=\"button\" NAME=\"refresh_but\" VALUE=\"Reload\" onClick=\"reload_page()\">
- &nbsp;&nbsp;&nbsp;&nbsp;</TD>\n-->" ++
- print_radio_buttons([{"all","All processes"},{"sup_child","Supervised processes"},
- {"sup","Only supervisors"}],Mode) ++
- "</TR>\n </TABLE>\n" ++
- "</FORM>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Print the radiobuttons. if the mode is the one the current %%
-%% radiobutton represent set the one checked %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-print_radio_buttons([],_)->
- [];
-print_radio_buttons([{Mode,Name}|Rest],Mode)->
- "<TD><INPUT TYPE=\"radio\" NAME=\"mode\" CHECKED=\"true\" VALUE=\""++
- Mode ++"\" onClick=\"reload_page()\">&nbsp;&nbsp;" ++Name ++
- "</TD>\n" ++ print_radio_buttons(Rest,Mode);
-print_radio_buttons([{Mode1,Name}|Rest],Mode)->
- "<TD><INPUT TYPE=\"radio\" NAME=\"mode\" VALUE=\""++ Mode1 ++
- "\" onClick=\"reload_page()\">&nbsp;&nbsp;" ++ Name ++
- "</TD>\n" ++
- print_radio_buttons(Rest,Mode).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The part that shows the name of the application that the process %%
-%% tree represent %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-selected_app_header(App,Node)->
- {Year,Mon,Day}=date(),
- "<TABLE>
- <TR>
- <TD>Node:</TD>
- <TD>" ++Node ++"</TD>
- </TR>
- <TR>
- <TD>Application:</TD>
- <TD>" ++App ++"</TD>
- </TR>
- <TR>
- <TD>Date:</TD>
- <TD>" ++ integer_to_list(Day) ++ "/" ++
- integer_to_list(Mon) ++"&nbsp;-&nbsp;"++
- integer_to_list(Year) ++
- "</TD>
- </TR>
- </TABLE>
- <TABLE WIDTH=100%>
- <TR>
- <TD>
- <HR WIDTH=\"80%\">
- <!--<FONT SIZE=4>Process tree</FONT>
- <HR ALIGN=\"center\" WIDTH=\"80%\">-->
- </TD>
- </TR>
- </TABLE>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%get the process tree from process_info and build the nested %%
-%% unordered list that represent the applications process tree %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_tree(App,Mode,Node)->
- case process_info:get_processes(list_to_atom(App),
- list_to_atom(Mode),
- list_to_atom(Node)) of
- unknown->
- "Unknown application please update application tree";
- {Tree,Traced_dict} ->
- "<UL>" ++
- htmlify_tree(Tree,Traced_dict,1,Node,Mode,App) ++
- "</UL>"
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Build each node in the tree and then build its children %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-htmlify_tree({Pid,Childs,Childs2},Proc_tab,N,Node,Mode,App)->
- case ets:lookup(Proc_tab,Pid) of
- [] when N<3->
- print_pid(Pid,Node,Mode,App,notrace)++
- htmlify_prim_child(Childs,Proc_tab,N+1,Node,Mode,App) ++
- htmlify_sec_child(Childs2);
- [_Traced]->
- print_pid(Pid,Node,Mode,App,"<FONT SIZE=2 COLOR=\"firebrick\">Stop Trace</FONT>")++
- htmlify_prim_child(Childs,Proc_tab,N+1,Node,Mode,App) ++
- htmlify_sec_child(Childs2);
- []->
- print_pid(Pid,Node,Mode,App,"<FONT SIZE=2>Start Trace</FONT>")++
- htmlify_prim_child(Childs,Proc_tab,N+1,Node,Mode,App) ++
- htmlify_sec_child(Childs2)
- end.
-
-print_pid(Pid,Node,_Mode,_App,notrace)->
- "<LI><A TARGET=\"proc_data\" STYLE=\"text-decoration:none; color:blue\" HREF=\"./proc_info?name=" ++ urlify_pid(Pid) ++
- "&node="++ Node ++" \" >"++ htmlify_pid(Pid,[]) ++
- "</A>";
-
-print_pid([$P,$o,$r,$t|Rest],_Node,_Mode,_App,_TrMode)->
- "<LI>" ++ htmlify_pid([$P,$o,$r,$t|Rest],[]);
-
-print_pid(Pid,Node,Mode,App,TrMode)->
- "<LI><A TARGET=\"proc_data\" STYLE=\"text-decoration:none; color:blue\" HREF=\"./proc_info?name=" ++
- urlify_pid(Pid) ++ "&node="++ Node ++" \" >"++
- htmlify_pid(Pid,[]) ++ "</A>"++
- "&nbsp;&nbsp;&nbsp
- <A HREF=\"./trace?app="++App++"&mode="++Mode++
- "&node="++Node++"&proc="++urlify_pid(Pid)++"\">
- "++TrMode++"</A>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Change the '<' sign and the '>' sign to the html representation %%
-%% of the sign %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-htmlify_pid([60|Pid],New)->
- htmlify_pid(Pid,";tl&"++New);
-htmlify_pid([139|Pid],New)->
- htmlify_pid(Pid,";tl&"++New);
-
-htmlify_pid([62|Pid],New)->
- htmlify_pid(Pid,";tg&"++New);
-htmlify_pid([155|Pid],New)->
- htmlify_pid(Pid,";tg&"++New);
-htmlify_pid([Chr|Pid],New)->
- htmlify_pid(Pid,[Chr|New]);
-htmlify_pid([],New)->
- lists:reverse(New).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Change the < and > sign to the representation of the signs in %%
-%% the HTTP protocol %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-urlify_pid(Pid) ->
- case re:run(Pid,"[<](.*)[>]",[{capture,all_but_first,list}]) of
- {match,[PidStr]}->
- "%3C"++PidStr++"%3E";
- _->
- Pid
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Change the < and > sign from the representation of the signs in %%
-%% the HTTP protocol %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-unurlify_pid(Pid)->
- unurlify_pid(Pid,[]).
-
-unurlify_pid([$%,$3,$C|Rest],New)->
- unurlify_pid(Rest,[60|New]);
-
-unurlify_pid([$%,$3,$E|Rest],New)->
- unurlify_pid(Rest,[62|New]);
-unurlify_pid([Chr|Rest],New)->
- unurlify_pid(Rest,[Chr|New]);
-
-unurlify_pid([],New)->
- lists:reverse(New).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Make html of the list of primary childs %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-htmlify_prim_child([],_Proc_tab,_N,_Node,_Mode,_App)->
- [];
-
-htmlify_prim_child(Childs,Proc_tab,N,Node,Mode,App)->
- Fun=fun(Child)->
- htmlify_tree(Child,Proc_tab,N,Node,Mode,App)
- end,
- "<UL>\n" ++ lists:map(Fun,Childs) ++ "</UL>\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Make html of hte list whit sedondary childs, they has no childs %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-htmlify_sec_child([])->
- [];
-
-htmlify_sec_child(Sec_child_list)->
- Htmlify_child=fun(Pid1)->
- "<LI><FONT COLOR=\"#FF2222\">" ++ Pid1 ++
- "</FONT></LI>\n"
- end,
- "<UL>" ++ lists:map(Htmlify_child,Sec_child_list) ++ "</UL>\n".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The Private functions that do the job %%
-%% To build the the page that shows process data %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The function that creates the collects the various part of %%
-%% the side that shows information about a specific process, %%
-%% Pid_name should be the list representation of a pid %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_body(Args) when length(Args)==2->
- Pid=element(2,lists:nth(1,Args)),
- Node=element(2,lists:nth(2,Args)),
- "<BODY BGCOLOR=\"#FFFFFF\">" ++
- process_information_table(Pid,Node) ++ "</BODY>";
-
-process_body(_)->
- "<BODY BGCOLOR=\"#FFFFFF\">Please dont call this side manually</BODY>".
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the table that shows the name of the pid to show extended %%
-%% info about %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Get the table that shows the extended info about a process %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-process_information_table(Pid_name,Node)->
- PidID=unurlify_pid(Pid_name),
- case catch list_to_pid(PidID) of
- Pid when is_pid(Pid) ->
- get_process_table(Pid,Node);
- _Other ->
- io_lib:format("Not a process id ~s",[PidID])
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Create the table that shoows the extended info about processes %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_process_table(Pid,Node_name) when is_list(Node_name)->
- Node=list_to_atom(Node_name),
- get_process_table(Pid,Node);
-
-get_process_table(Pid,Node) when is_atom(Node)->
- case lists:member(Node,[node()|nodes()]) of
- true->
- Proc_data=process_info:get_process_data(Pid,Node),
- "<TABLE BORDER=1 >
- <TR BGCOLOR=\"#8899AA\"><TD COLSPAN=6 ALIGN=\"center\" >
- <FONT size=4> Process" ++
- htmlify_pid(pid_to_list(Pid),[]) ++ "</FONT>
- </TD></TR>" ++
- start_process_proc_data(Proc_data) ++
- "</TABLE><BR><BR>";
- _ ->
- "Please try again the Node dont exists"
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The process information is quite messy tidi it up by creating a %%
-%% table that looks like key val %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-start_process_proc_data(Proc_data)->
- %%Pic out the special cases the links and the process dict
- {Special,Usual}=split_proc_data(Proc_data),
- Usual2=append_empty(Usual),
- UsualProcData=process_proc_data(Usual2,0),
- SpecProcData=process_proc_data(Special),
- UsualProcData++SpecProcData.
-
-append_empty(List) when length(List) rem 2 == 0 ->
- List;
-append_empty(List)->
- append_empty(lists:append(List,[empty])).
-
-split_proc_data(Proc_data)->
- Spec=lists:map(fun(Key)->
- case lists:keysearch(Key,1,Proc_data) of
- {value,Data}->
- Data;
- _ ->
- not_included
- end
- end,[links,dictionary,messages]),
- Spec2=clear(Spec,[]),
- Usual=lists:filter(fun({Key,_Val})->
- case Key of
- messages ->
- false;
- links ->
- false;
- dictionary ->
- false;
- _ ->
- true
- end
- end,Proc_data),
- {Spec2,Usual}.
-
-clear([],New)->
- New;
-clear([not_included|Spec],New)->
- clear(Spec,New);
-clear([Other|Spec],New)->
- clear(Spec,[Other|New]).
-
-process_proc_data(Data,3)->
- "</TR>"++process_proc_data(Data,0);
-process_proc_data([],_N)->
- [];
-process_proc_data(Data,0)->
- "<TR>"++process_proc_data(Data,1);
-
-process_proc_data([empty|Data],N)->
- "<TD>&nbsp;</TD><TD>&nbsp;</TD> "++process_proc_data(Data,N+1);
-
-process_proc_data([{current_function,MFA}|Rest],N)->
- "<TD NOWRAP=true><FONT SIZE=3><B>Current function:</B></TD><TD><FONT SIZE=3>"++
- io_lib:format("~p",[MFA]) ++"</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{error_handler,Mod}|Rest],N)->
- "<TD NOWRAP=\"true\"><B><FONT SIZE=3>Error handler:</B></TD><TD><FONT SIZE=3>"
- ++ atom_to_list(Mod) ++ "</TD>\n" ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{group_leader,Grp}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Group leader:</B></TD><TD><FONT SIZE=3>" ++
- htmlify_pid(pid_to_list(Grp),[]) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{heap_size,Size}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Heap size:</B></TD><TD><FONT SIZE=3>"
- ++ integer_to_list(Size) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{initial_call,MFA}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Initial call:</B></TD><TD><FONT SIZE=3>"++
- io_lib:format("~p",[MFA]) ++"</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{message_queue_len,Size}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Message queue length:</B></TD><TD><FONT SIZE=3>" ++
- integer_to_list(Size) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{priority,Level}|Rest],N)->
- "<TD><FONT SIZE=3><B>Process priority:</B></TD><TD><FONT SIZE=3>" ++
- atom_to_list(Level) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{reductions,Number}|Rest],N)->
- "<TD ><FONT SIZE=3><B>Number of executed reductions:</B></TD>
- <TD><FONT SIZE=3>" ++ integer_to_list(Number) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{registered_name,Name}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Process Name:</B></TD><TD><FONT SIZE=3>"
- ++ atom_to_list(Name) ++ "</TD>\n" ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{stack_size,Size}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Stack size:</B></TD><TD><FONT SIZE=3>"
- ++ integer_to_list(Size) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{status,Status}|Rest],N)->
- "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Process status:</B></TD><TD><FONT SIZE=3>"
- ++ atom_to_list(Status) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{trap_exit,Boolean}|Rest],N)->
- "<TD NOWRAP=\"true\" ><FONT SIZE=3><B>Trap Exit:</B></TD><TD><FONT SIZE=3>"
- ++ atom_to_list(Boolean) ++ "</TD>\n " ++
- process_proc_data(Rest,N+1);
-
-process_proc_data([{Key,Val}|Rest],N)->
- "<TD NOWRAP=\"true\" ><FONT SIZE=3><B>" ++ io_lib:write(Key) ++
- "</B></TD><TD><FONT SIZE=3>" ++ io_lib:write(Val) ++
- "</TD>\n " ++
- process_proc_data(Rest,N).
-
-process_proc_data([])->
- [];
-process_proc_data([{links,List_of_pids}|Rest])->
- "<TR><TD NOWRAP=\"true\"><FONT SIZE=3><B>Links:</B></TD><TD COLSPAN=5><FONT SIZE=3>"++ print_links(List_of_pids) ++"</TD></TR>\n " ++
- process_proc_data(Rest);
-
-process_proc_data([{messages,Queue}|Rest])->
- "<TR><TD NOWRAP=\"true\"><FONT SIZE=3><B>Message Queue:</B></TD><TD COLSPAN=5><FONT SIZE=3>" ++ io_lib:write(Queue) ++ "</TD></TR>\n " ++
- process_proc_data(Rest);
-
-process_proc_data([{dictionary,Dict}|Rest])->
- "<TR><TD NOWRAP=\"true\"><FONT SIZE=3><B>Process dictionary:</B></TD><TD COLSPAN=5><FONT SIZE=3>&nbsp;</TD></TR>\n " ++
- get_dictionary_data(Dict) ++
- process_proc_data(Rest).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% In the process info there are the links to other processes print %%
-%% this pid %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-print_links(Pids)->
- print_links(Pids,[]).
-
-print_links([],Links)->
- htmlify_pid(Links,[]);
-
-print_links([Pid],Links) when is_pid(Pid) ->
- print_links([],Links ++ pid_to_list(Pid));
-
-print_links([Pid],Links) when is_port(Pid) ->
- print_links([],Links ++ erlang:port_to_list(Pid));
-
-print_links([Pid|Rest],Links) when is_pid(Pid) ->
- print_links(Rest,Links ++ pid_to_list(Pid) ++ ", ");
-
-print_links([Pid|Rest],Links) when is_port(Pid) ->
- print_links(Rest,Links ++ erlang:port_to_list(Pid) ++ ", ").
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Fix the data in the process dictionary %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_dictionary_data([])->
- [];
-
-get_dictionary_data([{Key,Val}|Dict])->
- FormatedVal=add_space(htmlify_pid(lists:flatten(fix_type(Val)),[])),
- "<TR><TD><FONT SIZE=3>" ++
- htmlify_pid(lists:flatten(fix_type(Key)),[]) ++
- "</TD><TD COLSPAN=5><FONT SIZE=3>" ++
- FormatedVal++ "</TD></TR>\n" ++
- get_dictionary_data(Dict).
-
-add_space(List)->
- add_space(List,0,[]).
-add_space([],_Len,New) ->
- lists:reverse(New);
-add_space([Char|Rest],Len,New)when Len<50 ->
- add_space(Rest,Len+1,[Char|New]);
-
-add_space([$\,|Rest],_Len,New) ->
- add_space(Rest,0,[$\ ,$,|New]);
-
-add_space([Char|Rest],Len,New) ->
- add_space(Rest,Len+1,[Char|New]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Interpret the type of the data and make it to a list %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-fix_type(Val) when is_atom(Val) ->
- atom_to_list(Val);
-fix_type(Val) when is_float(Val) ->
- float_to_list(Val);
-fix_type(Val) when is_integer(Val) ->
- integer_to_list(Val);
-fix_type(Val) when is_list(Val) ->
- case io_lib:printable_list(Val) of
- true->
- case Val of
- []->
- io_lib:write(Val);
- _->
- Val
- end;
- _->
- io_lib:write(Val)
- end;
-fix_type(Val) when is_pid(Val) ->
- pid_to_list(Val);
-fix_type(Val) when is_port(Val) ->
- erlang:port_to_list(Val);
-fix_type(Val) when is_tuple(Val) ->
- io_lib:write(Val);
-fix_type(_Val) ->
- [].
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% The Private functions that send the trace signal to the process %%
-%% thats the 4 member of the Arg list %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-send_trace(Args)when length(Args)>=4->
- {_,Proc}=lists:nth(4,Args),
- Pid2=unurlify_pid(Proc),
- process_info:send_trace(Pid2);
-
-send_trace(_Args)->
- arg_error.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Private functions that prints the application environment %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-application_env_body(Args)when length(Args)>=2 ->
- App=element(2,lists:nth(1,Args)),
- Node=element(2,lists:nth(2,Args)),
- "<SCRIPT>
- function reload_bottom_frame()
- {parent.proc_data.location.href=\"/appmon/blank.html\";}
- </SCRIPT>
- <BODY BGCOLOR=\"#FFFFFF\" onLoad=reload_bottom_frame()>"
- ++ application_env_table(App,Node) ++ "</BODY>";
-
-application_env_body(_)->
- "<BODY BGCOLOR=\"#FFFFFF\">Please dont call this side manually</BODY>".
-
-application_env_table(App,Node)->
- case process_info:get_application_keys(list_to_atom(App),
- list_to_atom(Node)) of
- {ok,List}->
- "<TABLE BORDER=1>" ++ application_env_head(App,Node) ++
- print_key_list(List,[]) ++ "</TABLE>";
- _ ->
- "Please try again,something went wrong"
- end.
-
-application_env_head(App,Node)->
- "<TR BGCOLOR=\"#8899AA\"><TD ALIGN=\"center\" COLSPAN=3>
- <FONT SIZE=6>" ++ App ++ "@" ++ Node ++ "</FONT>\n
- </TD></TR>
- <TR><TD COLSPAN=3>&nbsp</TD></TR>
- <TR BGCOLOR=\"#8899AA\">
- <TD><B>Key</B></TD><TD><B>Val/Sec. key</B></TD><TD><B>Sec. Val</B></TD>
- </TR>".
-
-print_key_list([],Result)->
- Result;
-
-print_key_list([{application,Name}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("Application name :",Name));
-
-print_key_list([{description,Desc}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("Description :",Desc));
-
-print_key_list([{vsn,Ver}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("Version :",Ver));
-
-print_key_list([{id,Id}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("ID:",fix_type(Id)));
-
-print_key_list([{modules,Mods}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("Modules:","&nbsp;") ++
- print_secondary_list(Mods,[]));
-
-print_key_list([{maxP,Max}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Max nr of processes",fix_type(Max)));
-
-print_key_list([{maxT,Max}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Max running sec:",fix_type(Max)));
-
-print_key_list([{registered,Names}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Registered names:","&nbsp;") ++
- print_secondary_list(Names,[]));
-
-print_key_list([{applications,Apps}|Rest],Result)->
- print_key_list(Rest,Result ++ print_key("Depends on:","&nbsp") ++
- print_secondary_list(Apps,[]));
-
-print_key_list([{included_applications,Inc_apps}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Included applications:",
- fix_type(Inc_apps)));
-
-print_key_list([{env,Env}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Environment:",fix_type(Env)));
-
-print_key_list([{mod,Mod}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Application callback mod:",
- fix_type(Mod)));
-
-print_key_list([{start_phases,Phase_arg}|Rest],Result)->
- print_key_list(Rest,Result ++
- print_key("Application callback mod:",
- fix_type(Phase_arg)));
-
-print_key_list([_|Rest],Result)->
- print_key_list(Rest,Result).
-
-print_key(Label,Val)->
- "<TR>
- <TD><B>" ++ Label ++ "</B></TD><TD>" ++ Val ++
- "</TD><TD>&nbsp;</TD>
- </TR>".
-
-print_key2(Label,Val)->
- "<TR>
- <TD>&nbsp;</TD><TD>" ++ Label ++ "</TD><TD>" ++ Val ++ "</TD>
- </TR>".
-
-print_secondary_list([],Result)->
- Result;
-print_secondary_list([{Mod,Ver}|Rest],Result) ->
- print_secondary_list(Rest,Result ++
- print_key2(fix_type(Mod),fix_type(Ver)));
-
-print_secondary_list([Mod|Rest],Result) ->
- print_secondary_list(Rest,Result ++
- print_key2(fix_type(Mod),"&nbsp;")).
diff --git a/lib/appmon/src/process_info.erl b/lib/appmon/src/process_info.erl
deleted file mode 100644
index e5d44ae50e..0000000000
--- a/lib/appmon/src/process_info.erl
+++ /dev/null
@@ -1,662 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(process_info).
--behavior(gen_server).
-
--export([start/0, start_link/0, stop/0]).
--export([is_node/1, get_nodes/0,
- get_applications/1, get_application_keys/2,
- get_processes/3, get_process_data/2,
- send_trace/1]).
-
-%% gen_server callbacks
--export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- terminate/2, code_change/3]).
-
--record(data, {que=undef,
- procs=undef,
- links=undef,
- links2=undef}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% Functions to retrieve information about which application %%
-%% at the node %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-start() ->
- gen_server:start({local, proc_info}, process_info, [], []).
-
-start_link() ->
- gen_server:start_link({local, proc_info}, process_info, [], []).
-
-stop() ->
- gen_server:call(proc_info, stop, 1000).
-
-%% is_node(NodeS) -> {bool(), Node, NodeS2}
-%% NodeS = NodeS2 = string()
-%% Node = node()
-is_node(NodeS) ->
- Node = list_to_atom(NodeS),
- case lists:member(Node, [node()|nodes()]) of
- true->
- {true, Node, NodeS};
- false ->
- {false, node(), atom_to_list(node())}
- end.
-
-%% get_nodes() -> [node()]
-get_nodes() ->
- [node()|nodes()].
-
-%% get_applications(Node) -> [App]
-%% Node = node()
-%% App = atom()
-%% Returns the list of all applications with a supervision tree (that
-%% is, not library applications such as stdlib) at Node.
-get_applications(Node) ->
- Info = rpc:call(Node, application, info, []),
- {value, {running, Apps}} = lists:keysearch(running, 1, Info),
- [App || {App, Pid} <- Apps, is_pid(Pid)].
-
-%% get_application_keys(App, Node) -> {ok, Keys} | {error, Reason}
-%% Node = node()
-%% App = atom()
-%% Keys = [{Key, Val}]
-%% Key = atom()
-%% Val = term()
-%% Reason = badapp | badrpc
-get_application_keys(App, Node) ->
- case rpc:call(Node, application, get_all_key, [App]) of
- {ok, Keys} ->
- {ok, Keys};
- undefined ->
- {error, badapp};
- {badrpc, _} ->
- {error, badrpc}
- end.
-
-%% get_processes(App, Mode, Node) -> {Tree, Dict} | unknown
-%% App = atom()
-%% Mode = sup | sup_child | all
-%% Node = node()
-get_processes(App, Mode, Node) ->
- gen_server:call(proc_info, {get_processes, App, Mode, Node}).
-
-%% get_process_data(Pid, Node) -> ProcData
-%% Pid = pid()
-%% Node = node()
-%% ProcData -- see erlang:process_info/1
-get_process_data(Pid, Node) ->
- case rpc:call(Node, erlang, process_info, [Pid]) of
- {badrpc, _} ->
- [{error,"Please try again"}];
- Res ->
- Res
- end.
-
-%% send_trace(PidL) -> void()
-send_trace(PidL) ->
- gen_server:call(proc_info, {send_trace, PidL}).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% gen_server callbacks %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-init([]) ->
- {ok, ets:new(procs, [])}.
-
-handle_call({get_processes, App, Mode, Node}, _From, State) ->
- case do_get_processes(App, Mode, Node) of
- unknown ->
- {reply, unknown, State};
- Tree ->
- {reply, {Tree, State}, State}
- end;
-handle_call({send_trace, PidL}, _From, State) ->
- do_send_trace(PidL, State),
- {reply, ok, State};
-handle_call(stop, _From, State) ->
- {stop, normal, ok, State}.
-
-handle_cast(_, State) ->
- {noreply, State}.
-
-handle_info(_, State) ->
- {noreply, State}.
-
-terminate(_Reason, _State) ->
- ok.
-
-code_change(_, State, _) ->
- {ok, State}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%
-%% Internal functions %%
-%% %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% do_get_processes(App, Mode, Node) -> Tree | unknown
-%% App = atom()
-%% Mode = all | sup | sup_childs
-%% Node = node()
-%% Tree = term()
-do_get_processes(App, Mode, Node) ->
- case rpc:call(Node, application_controller, get_master, [App]) of
- Pid when is_pid(Pid) ->
- start_collecting_data(Pid, Mode, Node);
- undefined ->
- unknown
- end.
-
-%% Initiate the database, get the processes and the links.
-%% Then build lists and return them.
-start_collecting_data(Pid, Mode, Node) ->
- Db = get_database(),
- {Db2, Tree} = build_graph({master,Pid}, Db, Pid, Mode, Node),
- delete_database(Db2),
- Tree.
-
-get_database() ->
- P = ets:new(procs,[]),
- L = ets:new(link,[bag]),
- L2 = ets:new(link2,[bag]),
- Q = queue:new(),
- ets:insert(P, {whereis(application_controller), crap}),
- ets:insert(P, {whereis(gs), crap}),
- #data{que=Q, procs=P, links=L, links2=L2}.
-
-delete_database(Db) ->
- ets:delete(Db#data.procs),
- ets:delete(Db#data.links),
- ets:delete(Db#data.links2).
-
-%% The thought is
-%% 1. Get the processes that links to Pid.
-%% Pid is the application master the first time.
-%% 2. Add the processes to the database and clear the list of children
-%% from processes which for some resason not should be there.
-%% 3. Queue the children, so we later can se if they have any links.
-%% 4. Add links to the childrens.
-%% 5. When the whole tree is retreived remove the unnecessary processes
-%% depending on the mode.
-%% 6. Take all links that point to the same pid and sort out
-%% the primary and secondary relations.
-%% If more than one process links to the same process, the relation
-%% between a supervisor and a process is primary. The rest is
-%% secondary, there is no different in real world just in logic
-%% between a secondary and a primary relation.
-%% When all processes in the application is collected,
-%% fix secondary links and return the tree.
-build_graph(finish, Db, Grp, Mode, Node) ->
- Db = fix_links(Db, Grp, Node),
- delete_unwanted(Db, Mode, Grp),
- Tree = start_tree(Db, Node),
- {Db, Tree};
-build_graph(Pid, Db, Grp, Mode, Node) ->
- Children = get_children(Pid, Mode, Node),
- Children2 = add_and_remove(Children, Pid, Db, Grp, Node),
- Q2 = queue_children(Db#data.que, Children2),
- add_children(Pid, Db, Children2, 1),
- case queue:out(Q2) of
- {empty, _}->
- build_graph(finish, Db, Grp, Mode, Node);
- {{value,NPid}, Q3}->
- Db2 = Db#data{que=Q3},
- build_graph(NPid,Db2,Grp,Mode,Node)
- end.
-
-%% Collect the processes which the current process has a link to
-%% Pid is now the application_master and the application master's
-%% child is the application supervisor but in reality there are two
-%% application master processes.
-%% Fix this by reordering the processes a little.
-get_children({master,Pid}, _Mode, Node) when is_pid(Pid) ->
- %% Get the master pid
- MPid = case application_master:get_child(Pid) of
- {Pid1, _App} -> Pid1;
- Pid1 -> Pid1
- end,
- %% Get the second appplication master process and order them
- %% correctly
- case rpc:call(Node, erlang, process_info, [MPid,links]) of
- {links, [H|T]} -> [H,MPid|T];
- {links, []} -> MPid
- end;
-get_children({Pid, _Name}, _Mode, Node) when is_pid(Pid),
- Node==node(Pid) ->
- {links,Links} = rpc:call(Node, erlang, process_info, [Pid,links]),
- Links;
-get_children(Pid, _Mode, Node) when is_pid(Pid), Node==node(Pid) ->
- {links,Links} = rpc:call(Node, erlang, process_info, [Pid,links]),
- Links;
-get_children(Pid, _Mode, Node) when is_pid(Pid), Node/=node(Pid) ->
- [];
-get_children(Port, _Mode, _Node) when is_port(Port) ->
- [].
-
-%% Add the links to the database.
-%% The first case -- when it is the application master process -- there
-%% is only one real child even though there are more links.
-add_children({master,Pid}, Db, [Child|_Rest], N) ->
- add_child(Pid, Db, Child, N);
-add_children(_Pid, _Db, [], _N) ->
- ok;
-add_children(Pid, Db, [Child|Rest], N) ->
- add_child(Pid, Db, Child, N),
- add_children(Pid, Db, Rest, N+1).
-
-add_child(Pid, Db, Child, N) ->
- case ets:match_object(Db#data.links, {Pid,Child,'_'}) of
- [] ->
- ets:insert(Db#data.links, {Pid,Child,N});
- _ ->
- ok
- end.
-
-%% Add the list of processes to the queue.
-queue_children(Queue, []) ->
- Queue;
-queue_children(Queue, [H|T]) ->
- Q = queue:in(H, Queue),
- queue_children(Q, T).
-
-%% The processess that we already has added to the database are
-%% not children to the current process, so we don't need to add them a
-%% second time.
-remove_used_children([], _Db, New_list) ->
- lists:reverse(New_list);
-remove_used_children([Child|Rest], Db, New) ->
- case ets:lookup(Db#data.procs, Child) of
- [] ->
- remove_used_children(Rest, Db, [Child|New]);
- _ ->
- remove_used_children(Rest, Db, New)
- end.
-
-%% Take the list of links and separate it into a list with ports and a
-%% list with pids.
-separate_ports([], Pids, Ports) ->
- {Pids, Ports};
-separate_ports([Child|Rest], Pids, Ports) ->
- if
- is_port(Child) ->
- separate_ports(Rest, Pids, [Child|Ports]);
- is_pid(Child) ->
- separate_ports(Rest, [Child|Pids], Ports)
- end.
-
-%% Add the current pid to the ets table with processes and clear
-%% the list of children from processes that should not be there.
-%% In the first case, no children are used so it's not necessary.
-add_and_remove(Children, {master,Pid}, Db, _Grp, Node)
- when is_pid(Pid), Node==node(Pid) ->
- ets:insert(Db#data.procs, {Pid, {master,master}, controller}),
- {_Pids,Ports} = separate_ports(Children, [], []),
- Ports++Children;
-%% This clause is removable when using only link as retrieving mode .
-add_and_remove(Children, {Pid,_Name}, Db, Grp, Node)
- when is_pid(Pid), Node==node(Pid) ->
- ets:insert(Db#data.procs, {Pid,
- rpc:call(Node,erlang,process_info,
- [Pid,registered_name])}),
- {Pids, Ports} = separate_ports(Children, [], []),
- Children1 = remove_used_children(Pids, Db, []),
- Children2 = remove_others_children(Children1, Grp, Node),
- Ports++Children2;
-add_and_remove(Children, Pid, Db, Grp, Node) when is_pid(Pid),
- Node==node(Pid) ->
- ets:insert(Db#data.procs, {Pid,
- rpc:call(Node,erlang,process_info,
- [Pid,registered_name])}),
- {Pids, Ports} = separate_ports(Children, [], []),
- Children1 = remove_used_children(Pids, Db, []),
- Children2 =remove_others_children(Children1, Grp, Node),
- Ports++Children2;
-add_and_remove(_Children, Pid, _Db, _Grp, Node) when is_pid(Pid),
- Node/=node(Pid) ->
- [];
-%% Take care of the ports, don't add them to the table with processes.
-add_and_remove(_Children, Pid, _Db, _Grp, _Node) when is_port(Pid) ->
- [].
-
-%% Control that the application's group leader is the group leader of
-%% Pid
-group_leader_check({Pid,_Name}, Grp, Node) ->
- group_leader_check(Pid, Grp, Node);
-group_leader_check(Pid, Grp, Node) ->
- case rpc:call(Node, erlang, process_info, [Pid,group_leader]) of
- {_Item, Grp} -> yes;
- _ -> no
- end.
-
-%% Take the list of children and remove the ones with anoother group
-%% leader.
-remove_others_children(Children, Grp, Node) ->
- lists:filter(fun(Child) ->
- case group_leader_check(Child, Grp, Node) of
- yes -> true;
- no -> false
- end
- end,
- Children).
-
-%% Mark the processes in the procs table as either supervisor or worker.
-fix_links(Db, Leader, Node) ->
- {Sup,_Work} = mark_supervisors_workers(Db, Leader, Node),
- ets:match_delete(Db#data.procs, {'_',crap}),
- [_Pid|Procs] = ets:tab2list(Db#data.procs),
- N_links = get_n_links(Procs, Db#data.links, []),
- N_links2 = take_sup_links(Sup, Db#data.links, N_links),
- add_shared_links(N_links2, Db#data.links2),
- Db.
-
-%% Add the links that point to the same child to the shared links table
-add_shared_links(N_links, Links2) ->
- Insert_fun = fun(Link) -> ets:insert(Links2, Link) end,
- lists:map(fun(List) -> lists:map(Insert_fun, List) end, N_links).
-
-%% Take the list of links that point to the same children and remove
-%% the ones that are children to supervisors.
-%% The first argument is a list of the supervisors.
-%% N_links contains a list of list of links that points to the same
-%% child.
-take_sup_links([], _Db, N_links) ->
- N_links;
-take_sup_links([H|Supervised], Links_table, N_links) ->
- N_list_fun = fun(Link) ->
- insert_sup_links(Link, H, Links_table)
- end,
- N_links2 = lists:map(fun(Link_list) ->
- lists:filter(N_list_fun,Link_list)
- end,
- N_links),
- take_sup_links(Supervised, Links_table, N_links2).
-
-%% Insert the supervised links in the primary links list.
-%% This function should be used as a fun to the filter function in
-%% take_sup_links/3.
-insert_sup_links({From,To,N}, Sup, Links_table) ->
- case From of
- Sup ->
- ets:insert(Links_table, {From,To,N}),
- false;
- _ ->
- true
- end.
-
-%% Get the links which points to the same children.
-get_n_links([], _Links, N_link) ->
- N_link;
-get_n_links([{Pid,_,_}|Procs], Links, N_link) ->
- case ets:match_object(Links, {'_',Pid,'_'}) of
- L when length(L)>1 ->
- ets:match_delete(Links, {'_',Pid,'_'}),
- get_n_links(Procs, Links, [L|N_link]);
- _L ->
- get_n_links(Procs, Links, N_link)
- end;
-get_n_links([{Pid,_}|Procs], Links, N_link) ->
- case ets:match_object(Links, {'_',Pid,'_'}) of
- L when length(L)>1 ->
- ets:match_delete(Links, {'_',Pid,'_'}),
- get_n_links(Procs, Links, [L|N_link]);
- _L ->
- get_n_links(Procs, Links, N_link)
- end.
-
-%% Mark the processes that are in the supervisor tree as either worker
-%% or supervisor.
-mark_supervisors_workers(Db, Leader, Node) ->
- %% Get the supervisors and workers.
- {Sup_list, Worker_list} = get_by_supervisors1(Leader),
- %% Update the supervisor pids.
- lists:map(fun(Pid) ->
- ets:insert(Db#data.procs,
- {Pid,
- rpc:call(Node, erlang,process_info,
- [Pid,registered_name]),
- supervisor})
- end,
- Sup_list),
- %% Update the worker pids.
- lists:map(fun(Pid) ->
- ets:insert(Db#data.procs,
- {Pid,
- rpc:call(Node, erlang,process_info,
- [Pid,registered_name]),
- worker})
- end,
- Worker_list),
- {lists:reverse(Sup_list), Worker_list}.
-
-%% The second way to retrieve the applications processes is to go by
-%% the supervision tree.
-get_by_supervisors1(Leader) ->
- case application_master:get_child(Leader) of
- {Pid, _Name}->
- get_by_supervisors([{namn,Pid,supervisor,list_of_mods}],
- [], []);
- Pid ->
- get_by_supervisors([{namn,Pid,supervisor,list_of_mods}],
- [], [])
- end.
-
-get_by_supervisors([], Sup, Work) ->
- {Sup, Work};
-get_by_supervisors([{_,Pid,supervisor,_}|Rest], Sup, Work)
- when is_pid(Pid) ->
- Children = supervisor:which_children(Pid),
- Children2 = lists:append(Children, Rest),
- get_by_supervisors(Children2, [Pid|Sup], Work);
-get_by_supervisors([{_,Pid,_,_}|Rest], Sup, Work) when is_pid(Pid) ->
- get_by_supervisors(Rest, Sup, [Pid|Work]);
-get_by_supervisors([_Whatever|Rest], Sup, Work) ->
- get_by_supervisors(Rest, Sup, Work).
-
-%% Use pattern matching to select mode and delete the unneccesary pids
-delete_unwanted(Db, sup_child, App_pid) ->
- delete_not_in_supervisor_tree(Db),
- add_main_link(Db, App_pid),
- Db;
-delete_unwanted(Db, all, _App_pid) ->
- Db;
-delete_unwanted(Db, sup, App_pid) ->
- delete_workers(Db),
- delete_not_in_supervisor_tree(Db),
- add_main_link(Db, App_pid),
- Db.
-
-add_main_link(Db, App_pid) ->
- case application_master:get_child(App_pid) of
- {Pid, _Name} when is_pid(Pid) ->
- ets:insert(Db#data.links, {App_pid,Pid,1});
- Pid when is_pid(Pid) ->
- ets:insert(Db#data.links, {App_pid,Pid,1});
- _ ->
- false
- end.
-
-%% Delete the processes that are in the supervision tree but are
-%% workers, and their links.
-delete_workers(Db) ->
- Pids = ets:match_object(Db#data.procs, {'_','_',worker}),
- Pids2 =
- lists:map(
- fun({Pid,_,_}) ->
- %% Remove the unwanted pids from the process table.
- ets:match_delete(Db#data.procs, {Pid,'_','_'}),
- %% Remove the links to and from the pid.
- ets:match_delete(Db#data.links, {Pid,'_','_'}),
- ets:match_delete(Db#data.links, {'_',Pid,'_'}),
- ets:match_delete(Db#data.links2, {Pid,'_','_'}),
- ets:match_delete(Db#data.links2, {'_',Pid,'_'})
- end,
- Pids),
- Pids2.
-
-%% Delete the processes that are not in the supervision tree.
-delete_not_in_supervisor_tree(Db) ->
- Pids = ets:match_object(Db#data.procs,{'_','_'}),
- Pids2 =
- lists:map(
- fun({Pid,_}) ->
- %% Remove the unwanted from the process table.
- ets:match_delete(Db#data.procs, {Pid,'_'}),
- %% Remove the links to and from the pid.
- ets:match_delete(Db#data.links, {Pid,'_','_'}),
- ets:match_delete(Db#data.links, {'_',Pid,'_'}),
- ets:match_delete(Db#data.links2, {Pid,'_','_'}),
- ets:match_delete(Db#data.links2, {'_',Pid,'_'})
- end,
- Pids),
- Pids2.
-
-%% Start generating the tree.
-start_tree(Db, Node) ->
- case get_master(Db) of
- no -> false;
- Pid ->
- build_node(Pid, Db, Node)
- end.
-
-%% Build a node and then it runs itself on every child to the current
-%% pid.
-build_node(Pid, Db, Node) when is_pid(Pid), Node==node(Pid) ->
- Sort_fun = fun sort_order/2,
- Fix_sec_name_fun = fun(Pid2) -> get_link_name(Pid2, Db) end,
- Build_tree_fun = fun({_,Pid1,_}) -> build_node(Pid1,Db,Node) end,
- Children = ets:match_object(Db#data.links, {Pid,'_','_'}),
- Children1 = lists:sort(Sort_fun, Children),
- Sec_children = ets:match_object(Db#data.links2, {Pid,'_','_'}),
- {get_name(Pid,Db),
- lists:map(Build_tree_fun,Children1),
- lists:map(Fix_sec_name_fun,Sec_children)};
-build_node(Pid, _Db, Node) when is_pid(Pid), Node/=node(Pid) ->
- {"Runs on another node:"++erlang:pid_to_list(Pid), [], []};
-build_node(Pid, _Db, _Node) when is_port(Pid) ->
- {"Port :"++erlang:port_to_list(Pid), [], []}.
-
-%% Select the name of the pid from the database where we previosly
-%% added it.
-get_name(Pid, Db) ->
- case ets:lookup(Db#data.procs, Pid) of
- [{_,{_,master},_}] -> pid_to_list(Pid);
- [{_,{_,Name}}] -> atom_to_list(Name)++" : "++pid_to_list(Pid);
- [{_,{_,Name},_}] -> atom_to_list(Name)++" : "++pid_to_list(Pid);
- _ -> pid_to_list(Pid)
- end.
-
-%% Select the name of the process which we have a link to.
-get_link_name({_,Pid,_}, Db) when is_pid(Pid) ->
- case ets:lookup(Db#data.procs, Pid) of
- [{_,{_,Name}}] -> atom_to_list(Name)++" : "++pid_to_list(Pid);
- [{_,{_,Name},_}] -> atom_to_list(Name)++" : "++pid_to_list(Pid);
- _ -> pid_to_list(Pid)
- end;
-get_link_name({_,Port,_}, _Db) when is_port(Port) ->
- "Port :"++" : ";
-get_link_name(_, _) ->
- "".
-
-%% Sort the links in the order they where added, in ascending order.
-sort_order({_,_,N1}, {_,_,N2}) when N1>N2 -> true;
-sort_order(_N1, _N2) -> false.
-
-%% Select the pid of the application master.
-get_master(Db) ->
- case ets:match_object(Db#data.procs,
- {'_',{master,master},controller}) of
- [{Pid,_,_}|_Rest] -> Pid;
- _ -> no
- end.
-
-%% The main function to handle tracing.
-%% Checks if the process is in the table with traced processes. If so,
-%% it stops the trace, otherwise it starts the trace.
-do_send_trace(PidL, Traced_tab) ->
- Pid = list_to_pid(PidL),
- Key = get_key(Pid),
- case catch ets:lookup(Traced_tab, Key) of
- [] ->
- trace_process(Pid, Key, true, Traced_tab);
- [_Object]->
- trace_process(Pid, Key, false, Traced_tab)
- end,
- filter_procs(Traced_tab, ets:tab2list(Traced_tab)).
-
-get_key(Pid) ->
- Node = node(Pid),
- case rpc:call(Node, erlang, process_info, [Pid,registered_name]) of
- [] -> pid_to_list(Pid);
- {registered_name, Name} ->
- atom_to_list(Name)++" : "++pid_to_list(Pid)
- end.
-
-%% Tries to toggle the trace flag for the process.
-trace_process(Pid, Key, On_or_off, Procs_tab) ->
- case rpc:call(node(Pid), sys, trace, [Pid,On_or_off,1000]) of
- timeout ->
- Node = node(Pid),
- io:fwrite("timeout node= ~w, Pid= ~w mode= ~w ~n",
- [Node, Pid, On_or_off]);
- {badrpc, _} ->
- Node = node(Pid),
- io:fwrite("badrpc node= ~w, Pid= ~w mode= ~w ~n",
- [Node, Pid, On_or_off]);
- Res ->
- Node = node(Pid),
- io:fwrite("anymode ~w node= ~w, Pid= ~w mode= ~w ~n",
- [Res, Node, Pid,On_or_off]),
- case On_or_off of
- true -> ets:insert(Procs_tab, {Key,On_or_off});
- false -> ets:delete(Procs_tab, Key)
- end
- end.
-
-%% Check if the processes in the ets table with traced processes
-%% are alive. If not, remove them.
-filter_procs(Tab, Tab_list) ->
- lists:foreach(fun({Key,_Val}) -> is_alive(Key, Tab) end, Tab_list).
-
-is_alive(Key, Tab) ->
- case get_pid(Key) of
- nopid -> false;
- Pid -> is_alive2(Pid, Key, Tab)
- end.
-
-%% Key is either a pid in list form or Pidname:Pid in list form.
-get_pid(Key) ->
- case catch list_to_pid(string:substr(Key,string:rchr(Key,$<))) of
- Pid when is_pid(Pid) ->
- Pid;
- _ ->
- nopid
- end.
-
-is_alive2(Pid, Key, Tab) ->
- case catch rpc:call(node(Pid), erlang, is_process_alive, [Pid]) of
- true -> true;
- false ->
- catch ets:delete(Tab, Key),
- ok
- end.
diff --git a/lib/appmon/vsn.mk b/lib/appmon/vsn.mk
deleted file mode 100644
index 5585c5e1c2..0000000000
--- a/lib/appmon/vsn.mk
+++ /dev/null
@@ -1 +0,0 @@
-APPMON_VSN = 2.1.14.2
diff --git a/lib/compiler/doc/src/compile.xml b/lib/compiler/doc/src/compile.xml
index 73d75851cf..1459f696a0 100644
--- a/lib/compiler/doc/src/compile.xml
+++ b/lib/compiler/doc/src/compile.xml
@@ -350,12 +350,18 @@ module.beam: module.erl \
parsed code before the code is checked for errors.</p>
</item>
- <tag><c>asm</c></tag>
+ <tag><c>from_asm</c></tag>
<item>
<p>The input file is expected to be assembler code (default
file suffix ".S"). Note that the format of assembler files
- is not documented, and may change between releases - this
- option is primarily for internal debugging use.</p>
+ is not documented, and may change between releases.</p>
+ </item>
+
+ <tag><c>from_core</c></tag>
+ <item>
+ <p>The input file is expected to be core code (default
+ file suffix ".core"). Note that the format of core files
+ is not documented, and may change between releases.</p>
</item>
<tag><c>no_strict_record_tests</c></tag>
diff --git a/lib/compiler/src/beam_block.erl b/lib/compiler/src/beam_block.erl
index cf5244e1ce..402fbe2e2e 100644
--- a/lib/compiler/src/beam_block.erl
+++ b/lib/compiler/src/beam_block.erl
@@ -123,15 +123,24 @@ is_last_bool([], _) -> false.
collect_block(Is) ->
collect_block(Is, []).
+collect_block([{allocate,N,R}|Is0], Acc) ->
+ {Inits,Is} = lists:splitwith(fun ({init,{y,_}}) -> true;
+ (_) -> false
+ end, Is0),
+ collect_block(Is, [{set,[],[],{alloc,R,{nozero,N,0,Inits}}}|Acc]);
collect_block([{allocate_zero,Ns,R},{test_heap,Nh,R}|Is], Acc) ->
- collect_block(Is, [{set,[],[],{alloc,R,{no_opt,Ns,Nh,[]}}}|Acc]);
+ collect_block(Is, [{set,[],[],{alloc,R,{zero,Ns,Nh,[]}}}|Acc]);
collect_block([I|Is]=Is0, Acc) ->
case collect(I) of
error -> {reverse(Acc),Is0};
Instr -> collect_block(Is, [Instr|Acc])
end.
+collect({allocate,N,R}) -> {set,[],[],{alloc,R,{nozero,N,0,[]}}};
collect({allocate_zero,N,R}) -> {set,[],[],{alloc,R,{zero,N,0,[]}}};
+collect({allocate_heap,Ns,Nh,R}) -> {set,[],[],{alloc,R,{nozero,Ns,Nh,[]}}};
+collect({allocate_heap_zero,Ns,Nh,R}) -> {set,[],[],{alloc,R,{zero,Ns,Nh,[]}}};
+collect({init,D}) -> {set,[D],[],init};
collect({test_heap,N,R}) -> {set,[],[],{alloc,R,{nozero,nostack,N,[]}}};
collect({bif,N,F,As,D}) -> {set,[D],As,{bif,N,F}};
collect({gc_bif,N,F,R,As,D}) -> {set,[D],As,{alloc,R,{gc_bif,N,F}}};
@@ -144,6 +153,10 @@ collect({set_tuple_element,S,D,I}) -> {set,[],[S,D],{set_tuple_element,I}};
collect({get_list,S,D1,D2}) -> {set,[D1,D2],[S],get_list};
collect(remove_message) -> {set,[],[],remove_message};
collect({'catch',R,L}) -> {set,[R],[],{'catch',L}};
+collect(fclearerror) -> {set,[],[],fclearerror};
+collect({fcheckerror,{f,0}}) -> {set,[],[],fcheckerror};
+collect({fmove,S,D}) -> {set,[D],[S],fmove};
+collect({fconv,S,D}) -> {set,[D],[S],fconv};
collect(_) -> error.
%% embed_lines([Instruction]) -> [Instruction]
diff --git a/lib/compiler/src/beam_flatten.erl b/lib/compiler/src/beam_flatten.erl
index 25428c0c10..5603a677e8 100644
--- a/lib/compiler/src/beam_flatten.erl
+++ b/lib/compiler/src/beam_flatten.erl
@@ -51,6 +51,7 @@ norm_block([], Acc) -> Acc.
norm({set,[D],As,{bif,N,F}}) -> {bif,N,F,As,D};
norm({set,[D],As,{alloc,R,{gc_bif,N,F}}}) -> {gc_bif,N,F,R,As,D};
+norm({set,[D],[],init}) -> {init,D};
norm({set,[D],[S],move}) -> {move,S,D};
norm({set,[D],[S],fmove}) -> {fmove,S,D};
norm({set,[D],[S],fconv}) -> {fconv,S,D};
diff --git a/lib/compiler/src/beam_jump.erl b/lib/compiler/src/beam_jump.erl
index b29a3565e4..d57fb80ac2 100644
--- a/lib/compiler/src/beam_jump.erl
+++ b/lib/compiler/src/beam_jump.erl
@@ -202,19 +202,19 @@ is_label(_) -> false.
move(Is) ->
move_1(Is, [], []).
-move_1([I|Is], End0, Acc0) ->
+move_1([I|Is], Ends, Acc0) ->
case is_exit_instruction(I) of
false ->
- move_1(Is, End0, [I|Acc0]);
+ move_1(Is, Ends, [I|Acc0]);
true ->
- case extract_seq(Acc0, [I|End0]) of
+ case extract_seq(Acc0, [I]) of
no ->
- move_1(Is, End0, [I|Acc0]);
+ move_1(Is, Ends, [I|Acc0]);
{yes,End,Acc} ->
- move_1(Is, End, Acc)
+ move_1(Is, [End|Ends], Acc)
end
end;
-move_1([], End, Acc) -> reverse(Acc, End).
+move_1([], Ends, Acc) -> reverse(Acc, lists:append(reverse(Ends))).
extract_seq([{line,_}=Line|Is], Acc) ->
extract_seq(Is, [Line|Acc]);
diff --git a/lib/compiler/src/beam_type.erl b/lib/compiler/src/beam_type.erl
index 3ec57a67da..58c0f765ae 100644
--- a/lib/compiler/src/beam_type.erl
+++ b/lib/compiler/src/beam_type.erl
@@ -142,6 +142,12 @@ simplify_float(Is0, Ts0) ->
throw:not_possible -> not_possible
end.
+simplify_float_1([{set,[],[],fclearerror}|Is], Ts, Rs, Acc) ->
+ simplify_float_1(Is, Ts, Rs, clearerror(Acc));
+simplify_float_1([{set,[],[],fcheckerror}|Is], Ts, Rs, Acc) ->
+ simplify_float_1(Is, Ts, Rs, checkerror(Acc));
+simplify_float_1([{set,[{fr,_}],_,_}=I|Is], Ts, Rs, Acc) ->
+ simplify_float_1(Is, Ts, Rs, [I|Acc]);
simplify_float_1([{set,[D0],[A0],{alloc,_,{gc_bif,'-',{f,0}}}}=I|Is]=Is0,
Ts0, Rs0, Acc0) ->
case tdb_find(A0, Ts0) of
diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl
index e9911fefd9..36f3200d11 100644
--- a/lib/compiler/src/beam_utils.erl
+++ b/lib/compiler/src/beam_utils.erl
@@ -759,6 +759,12 @@ live_opt([{allocate,_,Live}=I|Is], _, D, Acc) ->
live_opt(Is, live_call(Live), D, [I|Acc]);
live_opt([{allocate_heap,_,_,Live}=I|Is], _, D, Acc) ->
live_opt(Is, live_call(Live), D, [I|Acc]);
+live_opt([{'%',_}=I|Is], Regs, D, Acc) ->
+ live_opt(Is, Regs, D, [I|Acc]);
+live_opt([{recv_set,_}=I|Is], Regs, D, Acc) ->
+ live_opt(Is, Regs, D, [I|Acc]);
+live_opt([{recv_mark,_}=I|Is], Regs, D, Acc) ->
+ live_opt(Is, Regs, D, [I|Acc]);
live_opt([], _, _, Acc) -> Acc.
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index 47d446273b..38a733751a 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -417,6 +417,10 @@ pass(from_core) ->
pass(from_asm) ->
{".S",[?pass(beam_consult_asm)|asm_passes()]};
pass(asm) ->
+ %% TODO: remove 'asm' in R18
+ io:format("compile:file/2 option 'asm' has been deprecated and will be "
+ "removed in R18.~n"
+ "Use 'from_asm' instead.~n"),
pass(from_asm);
pass(from_beam) ->
{".beam",[?pass(read_beam_file)|binary_passes()]};
@@ -1613,7 +1617,7 @@ compile_beam(File0, _OutFile, Opts) ->
compile_asm(File0, _OutFile, Opts) ->
File = shorten_filename(File0),
- case file(File, [asm|make_erl_options(Opts)]) of
+ case file(File, [from_asm|make_erl_options(Opts)]) of
{ok,_Mod} -> ok;
Other -> Other
end.
diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl
index 6b0ae87172..e2002c8e48 100644
--- a/lib/compiler/src/sys_core_fold.erl
+++ b/lib/compiler/src/sys_core_fold.erl
@@ -1452,14 +1452,14 @@ let_subst_list([], [], _) -> {[],[],[]}.
%%pattern(Pat, Sub) -> pattern(Pat, Sub, Sub).
-pattern(#c_var{name=V0}=Pat, Isub, Osub) ->
+pattern(#c_var{}=Pat, Isub, Osub) ->
case sub_is_val(Pat, Isub) of
true ->
V1 = make_var_name(),
Pat1 = #c_var{name=V1},
{Pat1,sub_set_var(Pat, Pat1, scope_add([V1], Osub))};
false ->
- {Pat,sub_del_var(Pat, scope_add([V0], Osub))}
+ {Pat,sub_del_var(Pat, Osub)}
end;
pattern(#c_literal{}=Pat, _, Osub) -> {Pat,Osub};
pattern(#c_cons{anno=Anno,hd=H0,tl=T0}, Isub, Osub0) ->
@@ -1522,6 +1522,9 @@ is_subst(_) -> false.
%% chains so we never have to search more than once. Use orddict so
%% we know the format.
%%
+%% In addition to the list of substitutions, we also keep track of
+%% all variable currently live (the scope).
+%%
%% sub_subst_scope/1 adds dummy substitutions for all variables
%% in the scope in order to force renaming if variables in the
%% scope occurs as pattern variables.
@@ -1548,8 +1551,17 @@ sub_set_name(V, Val, #sub{v=S,s=Scope,t=Tdb0}=Sub) ->
Tdb = copy_type(V, Val, Tdb1),
Sub#sub{v=orddict:store(V, Val, S),s=gb_sets:add(V, Scope),t=Tdb}.
-sub_del_var(#c_var{name=V}, #sub{v=S,t=Tdb}=Sub) ->
- Sub#sub{v=orddict:erase(V, S),t=kill_types(V, Tdb)}.
+sub_del_var(#c_var{name=V}, #sub{v=S,s=Scope,t=Tdb}=Sub) ->
+ %% Profiling shows that for programs with many record operations,
+ %% sub_del_var/2 is a bottleneck. Since the scope contains all
+ %% variables that are live, we know that V cannot be present in S
+ %% if it is not in the scope.
+ case gb_sets:is_member(V, Scope) of
+ false ->
+ Sub#sub{s=gb_sets:insert(V, Scope)};
+ true ->
+ Sub#sub{v=orddict:erase(V, S),t=kill_types(V, Tdb)}
+ end.
sub_subst_var(#c_var{name=V}, Val, #sub{v=S0}) ->
%% Fold chained substitutions.
@@ -1559,13 +1571,16 @@ sub_subst_scope(#sub{v=S0,s=Scope}=Sub) ->
S = [{-1,#c_var{name=Sv}} || Sv <- gb_sets:to_list(Scope)]++S0,
Sub#sub{v=S}.
-sub_is_val(#c_var{name=V}, #sub{v=S}) ->
- v_is_value(V, S).
+sub_is_val(#c_var{name=V}, #sub{v=S,s=Scope}) ->
+ %% When the bottleneck in sub_del_var/2 was eliminated, this
+ %% became the new bottleneck. Since the scope contains all
+ %% live variables, a variable V can only be the target for
+ %% a substitution if it is in the scope.
+ gb_sets:is_member(V, Scope) andalso v_is_value(V, S).
-v_is_value(Var, Sub) ->
- any(fun ({_,#c_var{name=Val}}) when Val =:= Var -> true;
- (_) -> false
- end, Sub).
+v_is_value(Var, [{_,#c_var{name=Var}}|_]) -> true;
+v_is_value(Var, [_|T]) -> v_is_value(Var, T);
+v_is_value(_, []) -> false.
%% clauses(E, [Clause], TopLevel, Context, Sub) -> [Clause].
%% Trim the clauses by removing all clauses AFTER the first one which
diff --git a/lib/compiler/src/sys_pre_expand.erl b/lib/compiler/src/sys_pre_expand.erl
index 7d918a55ed..48d9c16718 100644
--- a/lib/compiler/src/sys_pre_expand.erl
+++ b/lib/compiler/src/sys_pre_expand.erl
@@ -344,6 +344,8 @@ expr({'receive',Line,Cs0,To0,ToEs0}, St0) ->
{{'receive',Line,Cs,To,ToEs},St3};
expr({'fun',Line,Body}, St) ->
fun_tq(Line, Body, St);
+expr({named_fun,Line,Name,Cs}, St) ->
+ fun_tq(Line, Cs, St, Name);
expr({call,Line,{atom,La,N}=Atom,As0}, St0) ->
{As,St1} = expr_list(As0, St0),
Ar = length(As),
@@ -475,6 +477,11 @@ fun_tq(Lf, {clauses,Cs0}, St0) ->
Index = Uniq = 0,
{{'fun',Lf,{clauses,Cs1},{Index,Uniq,Fname}},St2}.
+fun_tq(Line, Cs0, St0, Name) ->
+ {Cs1,St1} = fun_clauses(Cs0, St0),
+ {Fname,St2} = new_fun_name(St1, Name),
+ {{named_fun,Line,Name,Cs1,{0,0,Fname}},St2}.
+
fun_clauses([{clause,L,H0,G0,B0}|Cs0], St0) ->
{H,St1} = head(H0, St0),
{G,St2} = guard(G0, St1),
@@ -485,9 +492,12 @@ fun_clauses([], St) -> {[],St}.
%% new_fun_name(State) -> {FunName,State}.
-new_fun_name(#expand{func=F,arity=A,fcount=I}=St) ->
+new_fun_name(St) ->
+ new_fun_name(St, 'fun').
+
+new_fun_name(#expand{func=F,arity=A,fcount=I}=St, FName) ->
Name = "-" ++ atom_to_list(F) ++ "/" ++ integer_to_list(A)
- ++ "-fun-" ++ integer_to_list(I) ++ "-",
+ ++ "-" ++ atom_to_list(FName) ++ "-" ++ integer_to_list(I) ++ "-",
{list_to_atom(Name),St#expand{fcount=I+1}}.
%% pattern_bin([Element], State) -> {[Element],[Variable],[UsedVar],State}.
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl
index 33f5015e0b..321cf7af1c 100644
--- a/lib/compiler/src/v3_core.erl
+++ b/lib/compiler/src/v3_core.erl
@@ -92,7 +92,7 @@
-record(icase, {anno=#a{},args,clauses,fc}).
-record(icatch, {anno=#a{},body}).
-record(iclause, {anno=#a{},pats,pguard=[],guard,body}).
--record(ifun, {anno=#a{},id,vars,clauses,fc}).
+-record(ifun, {anno=#a{},id,vars,clauses,fc,name=unnamed}).
-record(iletrec, {anno=#a{},defs,body}).
-record(imatch, {anno=#a{},pat,guard=[],arg,fc}).
-record(iprimop, {anno=#a{},name,args}).
@@ -587,7 +587,11 @@ expr({'fun',L,{function,M,F,A}}, St0) ->
name=#c_literal{val=make_fun},
args=As},Aps,St1};
expr({'fun',L,{clauses,Cs},Id}, St) ->
- fun_tq(Id, Cs, L, St);
+ fun_tq(Id, Cs, L, St, unnamed);
+expr({named_fun,L,'_',Cs,Id}, St) ->
+ fun_tq(Id, Cs, L, St, unnamed);
+expr({named_fun,L,Name,Cs,{Index,Uniq,_Fname}}, St) ->
+ fun_tq({Index,Uniq,Name}, Cs, L, St, {named, Name});
expr({call,L,{remote,_,M,F},As0}, #core{wanted=Wanted}=St0) ->
{[M1,F1|As1],Aps,St1} = safe_list([M,F|As0], St0),
Lanno = lineno_anno(L, St1),
@@ -842,9 +846,9 @@ bitstr({bin_element,_,E0,Size0,[Type,{unit,Unit}|Flags]}, St0) ->
flags=#c_literal{val=Flags}},
Eps ++ Eps2,St2}.
-%% fun_tq(Id, [Clauses], Line, State) -> {Fun,[PreExp],State}.
+%% fun_tq(Id, [Clauses], Line, State, NameInfo) -> {Fun,[PreExp],State}.
-fun_tq({_,_,Name}=Id, Cs0, L, St0) ->
+fun_tq({_,_,Name}=Id, Cs0, L, St0, NameInfo) ->
Arity = clause_arity(hd(Cs0)),
{Cs1,St1} = clauses(Cs0, St0),
{Args,St2} = new_vars(Arity, St1),
@@ -853,7 +857,7 @@ fun_tq({_,_,Name}=Id, Cs0, L, St0) ->
Fc = function_clause(Ps, Anno, {Name,Arity}),
Fun = #ifun{anno=#a{anno=Anno},
id=[{id,Id}], %We KNOW!
- vars=Args,clauses=Cs1,fc=Fc},
+ vars=Args,clauses=Cs1,fc=Fc,name=NameInfo},
{Fun,[],St3}.
%% lc_tq(Line, Exp, [Qualifier], Mc, State) -> {LetRec,[PreExp],State}.
@@ -1711,13 +1715,18 @@ uexpr(#icase{anno=A,args=As0,clauses=Cs0,fc=Fc0}, Ks, St0) ->
Used = union(used_in_any(As1), used_in_any(Cs1)),
New = new_in_all(Cs1),
{#icase{anno=A#a{us=Used,ns=New},args=As1,clauses=Cs1,fc=Fc1},St3};
-uexpr(#ifun{anno=A,id=Id,vars=As,clauses=Cs0,fc=Fc0}, Ks0, St0) ->
+uexpr(#ifun{anno=A0,id=Id,vars=As,clauses=Cs0,fc=Fc0,name=Name}, Ks0, St0) ->
Avs = lit_list_vars(As),
- Ks1 = union(Avs, Ks0),
- {Cs1,St1} = ufun_clauses(Cs0, Ks1, St0),
- {Fc1,St2} = ufun_clause(Fc0, Ks1, St1),
- Used = subtract(intersection(used_in_any(Cs1), Ks0), Avs),
- {#ifun{anno=A#a{us=Used,ns=[]},id=Id,vars=As,clauses=Cs1,fc=Fc1},St2};
+ Ks1 = case Name of
+ unnamed -> Ks0;
+ {named,FName} -> union(subtract([FName], Avs), Ks0)
+ end,
+ Ks2 = union(Avs, Ks1),
+ {Cs1,St1} = ufun_clauses(Cs0, Ks2, St0),
+ {Fc1,St2} = ufun_clause(Fc0, Ks2, St1),
+ Used = subtract(intersection(used_in_any(Cs1), Ks1), Avs),
+ A1 = A0#a{us=Used,ns=[]},
+ {#ifun{anno=A1,id=Id,vars=As,clauses=Cs1,fc=Fc1,name=Name},St2};
uexpr(#iapply{anno=A,op=Op,args=As}, _, St) ->
Used = union(lit_vars(Op), lit_list_vars(As)),
{#iapply{anno=A#a{us=Used},op=Op,args=As},St};
@@ -2012,15 +2021,24 @@ cexpr(#itry{anno=A,args=La,vars=Vs,body=Lb,evars=Evs,handler=Lh}, As, St0) ->
cexpr(#icatch{anno=A,body=Les}, _As, St0) ->
{Ces,_Us1,St1} = cexprs(Les, [], St0), %Never export!
{#c_catch{body=Ces},[],A#a.us,St1};
-cexpr(#ifun{anno=A,id=Id,vars=Args,clauses=Lcs,fc=Lfc}, _As, St0) ->
- {Ccs,St1} = cclauses(Lcs, [], St0), %NEVER export!
- {Cfc,St2} = cclause(Lfc, [], St1),
- Anno = A#a.anno,
- {#c_fun{anno=Id++Anno,vars=Args,
- body=#c_case{anno=Anno,
- arg=set_anno(core_lib:make_values(Args), Anno),
- clauses=Ccs ++ [Cfc]}},
- [],A#a.us,St2};
+cexpr(#ifun{name=unnamed}=Fun, As, St0) ->
+ cfun(Fun, As, St0);
+cexpr(#ifun{anno=#a{us=Us0}=A0,name={named,Name},fc=#iclause{pats=Ps}}=Fun0,
+ As, St0) ->
+ case is_element(Name, Us0) of
+ false ->
+ cfun(Fun0, As, St0);
+ true ->
+ A1 = A0#a{us=del_element(Name, Us0)},
+ Fun1 = Fun0#ifun{anno=A1},
+ {#c_fun{body=Body}=CFun0,[],Us1,St1} = cfun(Fun1, As, St0),
+ RecVar = #c_var{name={Name,length(Ps)}},
+ Let = #c_let{vars=[#c_var{name=Name}],arg=RecVar,body=Body},
+ CFun1 = CFun0#c_fun{body=Let},
+ Letrec = #c_letrec{defs=[{RecVar,CFun1}],
+ body=RecVar},
+ {Letrec,[],Us1,St1}
+ end;
cexpr(#iapply{anno=A,op=Op,args=Args}, _As, St) ->
{#c_apply{anno=A#a.anno,op=Op,args=Args},[],A#a.us,St};
cexpr(#icall{anno=A,module=Mod,name=Name,args=Args}, _As, St) ->
@@ -2047,6 +2065,16 @@ cexpr(Lit, _As, St) ->
%%Vs = lit_vars(Lit),
{set_anno(Lit, Anno#a.anno),[],Vs,St}.
+cfun(#ifun{anno=A,id=Id,vars=Args,clauses=Lcs,fc=Lfc}, _As, St0) ->
+ {Ccs,St1} = cclauses(Lcs, [], St0), %NEVER export!
+ {Cfc,St2} = cclause(Lfc, [], St1),
+ Anno = A#a.anno,
+ {#c_fun{anno=Id++Anno,vars=Args,
+ body=#c_case{anno=Anno,
+ arg=set_anno(core_lib:make_values(Args), Anno),
+ clauses=Ccs ++ [Cfc]}},
+ [],A#a.us,St2}.
+
%% lit_vars(Literal) -> [Var].
lit_vars(Lit) -> lit_vars(Lit, []).
diff --git a/lib/compiler/test/andor_SUITE.erl b/lib/compiler/test/andor_SUITE.erl
index 4ffbe07e32..7bef0aa27c 100644
--- a/lib/compiler/test/andor_SUITE.erl
+++ b/lib/compiler/test/andor_SUITE.erl
@@ -194,6 +194,9 @@ t_andalso(Config) when is_list(Config) ->
?line false = id(false) andalso not id(glurf),
?line false = false andalso not id(glurf),
+ true = begin (X1 = true) andalso X1, X1 end,
+ false = false = begin (X2 = false) andalso X2, X2 end,
+
ok.
t_orelse(Config) when is_list(Config) ->
@@ -224,6 +227,9 @@ t_orelse(Config) when is_list(Config) ->
?line true = id(true) orelse not id(glurf),
?line true = true orelse not id(glurf),
+ true = begin (X1 = true) orelse X1, X1 end,
+ false = begin (X2 = false) orelse X2, X2 end,
+
ok.
t_andalso_1({X,Y}) ->
diff --git a/lib/compiler/test/compilation_SUITE.erl b/lib/compiler/test/compilation_SUITE.erl
index d517029b1b..93b2fb4ea5 100644
--- a/lib/compiler/test/compilation_SUITE.erl
+++ b/lib/compiler/test/compilation_SUITE.erl
@@ -278,6 +278,16 @@ try_it(StartNode, Module, Conf) ->
?line ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]),
?line test_server:timetrap_cancel(LastDog),
+ AsmDog = test_server:timetrap(test_server:minutes(10)),
+ io:format("Compiling (from assembly): ~s\n", [Src]),
+ {ok,_} = compile:file(Src, [to_asm,{outdir,Out},report|OtherOpts]),
+ Asm = filename:join(Out, lists:concat([Module, ".S"])),
+ CompRc3 = compile:file(Asm, [from_asm,{outdir,Out},report|OtherOpts]),
+ io:format("Result: ~p\n",[CompRc3]),
+ {ok,_} = CompRc3,
+ ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]),
+ test_server:timetrap_cancel(AsmDog),
+
case StartNode of
false -> ok;
true -> ?line test_server:stop_node(Node)
diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl
index 66ce6c00ab..4ec75d015e 100644
--- a/lib/compiler/test/compile_SUITE.erl
+++ b/lib/compiler/test/compile_SUITE.erl
@@ -769,8 +769,8 @@ do_core({M,A}, Outdir) ->
error
end.
-%% Compile to Beam assembly language (.S) and the try to
-%% run .S throught the compiler again.
+%% Compile to Beam assembly language (.S) and then try to
+%% run .S through the compiler again.
asm(Config) when is_list(Config) ->
?line Dog = test_server:timetrap(test_server:minutes(20)),
@@ -794,7 +794,7 @@ do_asm(Beam, Outdir) ->
{ok,Fd} = file:open(AsmFile, [write,{encoding,utf8}]),
beam_listing:module(Fd, Asm),
ok = file:close(Fd),
- case compile:file(AsmFile, [from_asm,no_postopt,binary,report]) of
+ case compile:file(AsmFile, [from_asm,binary,report]) of
{ok,M,_} ->
ok = file:delete(AsmFile);
Other ->
diff --git a/lib/compiler/test/fun_SUITE.erl b/lib/compiler/test/fun_SUITE.erl
index 6067ee8e06..e35692efd1 100644
--- a/lib/compiler/test/fun_SUITE.erl
+++ b/lib/compiler/test/fun_SUITE.erl
@@ -21,7 +21,7 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
test1/1,overwritten_fun/1,otp_7202/1,bif_fun/1,
- external/1]).
+ external/1,eep37/1]).
%% Internal export.
-export([call_me/1]).
@@ -32,7 +32,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
test_lib:recompile(?MODULE),
- [test1,overwritten_fun,otp_7202,bif_fun,external].
+ [test1,overwritten_fun,otp_7202,bif_fun,external,eep37].
groups() ->
[].
@@ -197,5 +197,14 @@ external(Config) when is_list(Config) ->
call_me(I) ->
{ok,I}.
+eep37(Config) when is_list(Config) ->
+ F = fun Fact(N) when N > 0 -> N * Fact(N - 1); Fact(0) -> 1 end,
+ Add = fun _(N) -> N + 1 end,
+ UnusedName = fun BlackAdder(N) -> N + 42 end,
+ 720 = F(6),
+ 10 = Add(9),
+ 50 = UnusedName(8),
+ ok.
+
id(I) ->
I.
diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c
index 7567a08894..310a741b0b 100644
--- a/lib/crypto/c_src/crypto.c
+++ b/lib/crypto/c_src/crypto.c
@@ -1824,7 +1824,7 @@ static ERL_NIF_TERM rand_uniform_nif(ErlNifEnv* env, int argc, const ERL_NIF_TER
static ERL_NIF_TERM mod_exp_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Base,Exponent,Modulo,bin_hdr) */
- BIGNUM *bn_base=NULL, *bn_exponent=NULL, *bn_modulo, *bn_result;
+ BIGNUM *bn_base=NULL, *bn_exponent=NULL, *bn_modulo=NULL, *bn_result;
BN_CTX *bn_ctx;
unsigned char* ptr;
unsigned dlen;
@@ -1839,6 +1839,7 @@ static ERL_NIF_TERM mod_exp_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
if (bn_base) BN_free(bn_base);
if (bn_exponent) BN_free(bn_exponent);
+ if (bn_modulo) BN_free(bn_modulo);
return enif_make_badarg(env);
}
bn_result = BN_new();
@@ -2674,7 +2675,7 @@ static ERL_NIF_TERM dh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_T
static ERL_NIF_TERM srp_value_B_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Multiplier, Verifier, Generator, Exponent, Prime) */
BIGNUM *bn_verifier = NULL;
- BIGNUM *bn_exponent, *bn_generator, *bn_prime, *bn_multiplier, *bn_result;
+ BIGNUM *bn_exponent = NULL, *bn_generator = NULL, *bn_prime = NULL, *bn_multiplier = NULL, *bn_result;
BN_CTX *bn_ctx;
unsigned char* ptr;
unsigned dlen;
@@ -2687,9 +2688,9 @@ static ERL_NIF_TERM srp_value_B_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
|| !get_bn_from_bin(env, argv[4], &bn_prime)) {
if (bn_multiplier) BN_free(bn_multiplier);
if (bn_verifier) BN_free(bn_verifier);
- if (bn_verifier) BN_free(bn_generator);
- if (bn_verifier) BN_free(bn_exponent);
- if (bn_verifier) BN_free(bn_prime);
+ if (bn_generator) BN_free(bn_generator);
+ if (bn_exponent) BN_free(bn_exponent);
+ if (bn_prime) BN_free(bn_prime);
return enif_make_badarg(env);
}
@@ -2813,7 +2814,7 @@ static ERL_NIF_TERM srp_host_secret_nif(ErlNifEnv* env, int argc, const ERL_NIF_
<premaster secret> = (A * v^u) ^ b % N
*/
BIGNUM *bn_b = NULL, *bn_verifier = NULL;
- BIGNUM *bn_prime, *bn_A, *bn_u, *bn_base, *bn_result;
+ BIGNUM *bn_prime = NULL, *bn_A = NULL, *bn_u = NULL, *bn_base, *bn_result;
BN_CTX *bn_ctx;
unsigned char* ptr;
unsigned dlen;
diff --git a/lib/debugger/src/Makefile b/lib/debugger/src/Makefile
index 85754da219..90189dd297 100644
--- a/lib/debugger/src/Makefile
+++ b/lib/debugger/src/Makefile
@@ -45,20 +45,6 @@ MODULES= \
dbg_iload \
dbg_iserver \
dbg_istk \
- dbg_ui_break \
- dbg_ui_break_win \
- dbg_ui_edit \
- dbg_ui_edit_win \
- dbg_ui_filedialog_win \
- dbg_ui_interpret \
- dbg_ui_mon \
- dbg_ui_mon_win \
- dbg_ui_settings \
- dbg_ui_trace \
- dbg_ui_trace_win \
- dbg_ui_view \
- dbg_ui_win \
- dbg_ui_winman \
dbg_wx_break \
dbg_wx_break_win \
dbg_wx_code \
diff --git a/lib/debugger/src/dbg_ieval.erl b/lib/debugger/src/dbg_ieval.erl
index f4b6d488a5..14a17fe304 100644
--- a/lib/debugger/src/dbg_ieval.erl
+++ b/lib/debugger/src/dbg_ieval.erl
@@ -204,7 +204,8 @@ meta(Int, Debugged, M, F, As) ->
%% If it's a fun we're evaluating, show a text
%% representation of the fun and its arguments,
%% not dbg_ieval:eval_fun(...)
- {dbg_ieval, eval_fun} ->
+ {dbg_ieval, EvalFun} when EvalFun =:= eval_fun;
+ EvalFun =:= eval_named_fun ->
{Mx, Fx} = lists:last(As),
{Mx, Fx, lists:nth(2, As)};
_ ->
@@ -432,7 +433,8 @@ eval_function(Mod, Name, As, Bs, Called, Ieval0, Lc) ->
do_eval_function(Mod, Fun, As0, Bs0, _, Ieval0) when is_function(Fun);
Mod =:= ?MODULE,
- Fun =:= eval_fun ->
+ Fun =:= eval_fun orelse
+ Fun =:= eval_named_fun ->
#ieval{level=Le,line=Li,top=Top} = Ieval0,
case lambda(Fun, As0) of
{[{clause,Fc,_,_,_}|_]=Cs,Module,Name,As,Bs} ->
@@ -487,13 +489,29 @@ lambda(eval_fun, [Cs,As,Bs,{Mod,Name}=F]) ->
true ->
{error,{badarity,{F,As}}}
end;
+lambda(eval_named_fun, [Cs,As,Bs0,FName,RF,{Mod,Name}=F]) ->
+ %% Fun defined in interpreted code, called from outside
+ if
+ length(element(3,hd(Cs))) =:= length(As) ->
+ db_ref(Mod), %% Adds ref between module and process
+ Bs1 = add_binding(FName, RF, Bs0),
+ {Cs,Mod,Name,As,Bs1};
+ true ->
+ {error,{badarity,{F,As}}}
+ end;
lambda(Fun, As) when is_function(Fun) ->
%% Fun called from within interpreted code...
case erlang:fun_info(Fun, module) of
%% ... and the fun was defined in interpreted code
{module, ?MODULE} ->
- {env, [{Mod,Name},Bs,Cs]} = erlang:fun_info(Fun, env),
+ {Mod,Name,Bs} =
+ case erlang:fun_info(Fun, env) of
+ {env,[{{M,F},Bs0,Cs}]} ->
+ {M,F,Bs0};
+ {env,[{{M,F},Bs0,Cs,FName}]} ->
+ {M,F,add_binding(FName, Fun, Bs0)}
+ end,
{arity, Arity} = erlang:fun_info(Fun, arity),
if
length(As) =:= Arity ->
@@ -694,23 +712,25 @@ expr({'if',Line,Cs}, Bs, Ieval) ->
if_clauses(Cs, Bs, Ieval#ieval{line=Line});
%% Andalso/orelse
-expr({'andalso',Line,E1,E2}, Bs, Ieval) ->
- case expr(E1, Bs, Ieval#ieval{line=Line, top=false}) of
- {value,false,_}=Res ->
- Res;
- {value,true,_} ->
- expr(E2, Bs, Ieval#ieval{line=Line, top=false});
- {value,Val,Bs} ->
- exception(error, {badarg,Val}, Bs, Ieval)
+expr({'andalso',Line,E1,E2}, Bs0, Ieval) ->
+ case expr(E1, Bs0, Ieval#ieval{line=Line, top=false}) of
+ {value,false,_}=Res ->
+ Res;
+ {value,true,Bs} ->
+ {value,Val,_} = expr(E2, Bs, Ieval#ieval{line=Line, top=false}),
+ {value,Val,Bs};
+ {value,Val,Bs} ->
+ exception(error, {badarg,Val}, Bs, Ieval)
end;
-expr({'orelse',Line,E1,E2}, Bs, Ieval) ->
- case expr(E1, Bs, Ieval#ieval{line=Line, top=false}) of
- {value,true,_}=Res ->
- Res;
- {value,false,_} ->
- expr(E2, Bs, Ieval#ieval{line=Line, top=false});
- {value,Val,_} ->
- exception(error, {badarg,Val}, Bs, Ieval)
+expr({'orelse',Line,E1,E2}, Bs0, Ieval) ->
+ case expr(E1, Bs0, Ieval#ieval{line=Line, top=false}) of
+ {value,true,_}=Res ->
+ Res;
+ {value,false,Bs} ->
+ {value,Val,_} = expr(E2, Bs, Ieval#ieval{line=Line, top=false}),
+ {value,Val,Bs};
+ {value,Val,Bs} ->
+ exception(error, {badarg,Val}, Bs, Ieval)
end;
%% Matching expression
@@ -727,50 +747,121 @@ expr({match,Line,Lhs,Rhs0}, Bs0, Ieval0) ->
%% Construct a fun
expr({make_fun,Line,Name,Cs}, Bs, #ieval{module=Module}=Ieval) ->
Arity = length(element(3,hd(Cs))),
- Info = {Module,Name},
+ Info = {{Module,Name},Bs,Cs},
Fun =
case Arity of
- 0 -> fun() -> eval_fun(Cs, [], Bs, Info) end;
- 1 -> fun(A) -> eval_fun(Cs, [A], Bs,Info) end;
- 2 -> fun(A,B) -> eval_fun(Cs, [A,B], Bs,Info) end;
- 3 -> fun(A,B,C) -> eval_fun(Cs, [A,B,C], Bs,Info) end;
- 4 -> fun(A,B,C,D) -> eval_fun(Cs, [A,B,C,D], Bs,Info) end;
- 5 -> fun(A,B,C,D,E) -> eval_fun(Cs, [A,B,C,D,E], Bs,Info) end;
- 6 -> fun(A,B,C,D,E,F) -> eval_fun(Cs, [A,B,C,D,E,F], Bs,Info) end;
+ 0 -> fun() -> eval_fun([], Info) end;
+ 1 -> fun(A) -> eval_fun([A], Info) end;
+ 2 -> fun(A,B) -> eval_fun([A,B], Info) end;
+ 3 -> fun(A,B,C) -> eval_fun([A,B,C], Info) end;
+ 4 -> fun(A,B,C,D) -> eval_fun([A,B,C,D], Info) end;
+ 5 -> fun(A,B,C,D,E) -> eval_fun([A,B,C,D,E], Info) end;
+ 6 -> fun(A,B,C,D,E,F) -> eval_fun([A,B,C,D,E,F], Info) end;
7 -> fun(A,B,C,D,E,F,G) ->
- eval_fun(Cs, [A,B,C,D,E,F,G], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G], Info) end;
8 -> fun(A,B,C,D,E,F,G,H) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H], Info) end;
9 -> fun(A,B,C,D,E,F,G,H,I) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I], Info) end;
10 -> fun(A,B,C,D,E,F,G,H,I,J) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I,J], Info) end;
11 -> fun(A,B,C,D,E,F,G,H,I,J,K) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K], Info) end;
12 -> fun(A,B,C,D,E,F,G,H,I,J,K,L) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L], Info) end;
13 -> fun(A,B,C,D,E,F,G,H,I,J,K,L,M) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M], Info) end;
14 -> fun(A,B,C,D,E,F,G,H,I,J,K,L,M,N) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N], Info) end;
15 -> fun(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O], Info) end;
16 -> fun(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P], Info) end;
17 -> fun(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q], Info) end;
18 -> fun(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R], Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R], Info) end;
19 -> fun(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S],Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S],Info) end;
20 -> fun(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T],Bs,Info) end;
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T],Info) end;
_Other ->
exception(error, {'argument_limit',{'fun',Cs}}, Bs,
Ieval#ieval{line=Line})
end,
{value,Fun,Bs};
+%% Construct a fun
+expr({make_named_fun,Line,Name,FName,Cs}, Bs, #ieval{module=Module}=Ieval) ->
+ Arity = length(element(3,hd(Cs))),
+ Info = {{Module,Name},Bs,Cs,FName},
+ Fun =
+ case Arity of
+ 0 -> fun RF() -> eval_named_fun([], RF, Info) end;
+ 1 -> fun RF(A) -> eval_named_fun([A], RF, Info) end;
+ 2 -> fun RF(A,B) ->
+ eval_named_fun([A,B], RF, Info) end;
+ 3 -> fun RF(A,B,C) ->
+ eval_named_fun([A,B,C], RF, Info) end;
+ 4 -> fun RF(A,B,C,D) ->
+ eval_named_fun([A,B,C,D], RF, Info) end;
+ 5 -> fun RF(A,B,C,D,E) ->
+ eval_named_fun([A,B,C,D,E],
+ RF, Info) end;
+ 6 -> fun RF(A,B,C,D,E,F) ->
+ eval_named_fun([A,B,C,D,E,F],
+ RF, Info) end;
+ 7 -> fun RF(A,B,C,D,E,F,G) ->
+ eval_named_fun([A,B,C,D,E,F,G],
+ RF, Info) end;
+ 8 -> fun RF(A,B,C,D,E,F,G,H) ->
+ eval_named_fun([A,B,C,D,E,F,G,H],
+ RF, Info) end;
+ 9 -> fun RF(A,B,C,D,E,F,G,H,I) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I],
+ RF, Info) end;
+ 10 -> fun RF(A,B,C,D,E,F,G,H,I,J) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J],
+ RF, Info) end;
+ 11 -> fun RF(A,B,C,D,E,F,G,H,I,J,K) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K],
+ RF, Info) end;
+ 12 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L],
+ RF, Info) end;
+ 13 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M],
+ RF, Info) end;
+ 14 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N],
+ RF, Info) end;
+ 15 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O],
+ RF, Info) end;
+ 16 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P],
+ RF, Info) end;
+ 17 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q],
+ RF, Info) end;
+ 18 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,
+ R],
+ RF, Info) end;
+ 19 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,
+ R,S],
+ RF, Info) end;
+ 20 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,
+ R,S,T],
+ RF, Info) end;
+ _Other ->
+ exception(error, {'argument_limit',{named_fun,FName,Cs}}, Bs,
+ Ieval#ieval{line=Line})
+ end,
+ {value,Fun,Bs};
+
%% Construct an external fun.
expr({make_ext_fun,Line,MFA0}, Bs0, Ieval0) ->
{[M,F,A],Bs} = eval_list(MFA0, Bs0, Ieval0),
@@ -960,9 +1051,13 @@ expr(E, _Bs, _Ieval) ->
erlang:error({'NYI',E}).
%% Interpreted fun() called from uninterpreted module, recurse
-eval_fun(Cs, As, Bs, Info) ->
+eval_fun(As, {Info,Bs,Cs}) ->
dbg_debugged:eval(?MODULE, eval_fun, [Cs,As,Bs,Info]).
+%% Interpreted named fun() called from uninterpreted module, recurse
+eval_named_fun(As, RF, {Info,Bs,Cs,FName}) ->
+ dbg_debugged:eval(?MODULE, eval_named_fun, [Cs,As,Bs,FName,RF,Info]).
+
%% eval_lc(Expr,[Qualifier],Bindings,IevalState) ->
%% {value,Value,Bindings}.
%% This is evaluating list comprehensions "straight out of the book".
diff --git a/lib/debugger/src/dbg_iload.erl b/lib/debugger/src/dbg_iload.erl
index 3c95ef8068..9806692afc 100644
--- a/lib/debugger/src/dbg_iload.erl
+++ b/lib/debugger/src/dbg_iload.erl
@@ -369,6 +369,9 @@ expr({'fun',Line,{function,F,A},{_Index,_OldUniq,Name}}, _Lc) ->
As = new_vars(A, Line),
Cs = [{clause,Line,As,[],[{local_call,Line,F,As,true}]}],
{make_fun,Line,Name,Cs};
+expr({named_fun,Line,FName,Cs0,{_,_,Name}}, _Lc) when is_atom(Name) ->
+ Cs = fun_clauses(Cs0),
+ {make_named_fun,Line,Name,FName,Cs};
expr({'fun',Line,{function,{atom,_,M},{atom,_,F},{integer,_,A}}}, _Lc)
when 0 =< A, A =< 255 ->
%% New format in R15 for fun M:F/A (literal values).
diff --git a/lib/debugger/src/dbg_ui_break.erl b/lib/debugger/src/dbg_ui_break.erl
deleted file mode 100644
index 8b9a236ce7..0000000000
--- a/lib/debugger/src/dbg_ui_break.erl
+++ /dev/null
@@ -1,98 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_break).
-
-%% External exports
--export([start/3, start/4, start/5]).
-
-%% Internal exports
--export([init/5]).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(GS, Pos, Type)
-%% start(GS, Pos, Type, Module, Line)
-%% GS = graphics system identifier
-%% Pos = {X, Y}
-%% X = Y = integer()
-%% Type = line | conditional | function
-%% Module = atom()
-%% Line = integer()
-%%--------------------------------------------------------------------
-start(GS, Pos, Type) ->
- start(GS, Pos, Type, "", "").
-start(GS, Pos, Type, Mod) ->
- start(GS, Pos, Type, Mod, "").
-start(GS, Pos, Type, Mod, Line) ->
- spawn_link(?MODULE, init, [GS, Pos, Type, Mod, Line]).
-
-
-%%====================================================================
-%% Internal exports
-%%====================================================================
-
-init(GS, Pos, Type, Mod, Line) ->
- Win = dbg_ui_break_win:create_win(GS, Pos, Type, Mod, Line),
- if
- Type==function, is_atom(Mod) ->
- Win2 = gui_cmd({module, Mod}, Win),
- loop(Win2);
- true ->
- loop(Win)
- end.
-
-loop(Win) ->
- receive
-
- %% From the GUI
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd = dbg_ui_break_win:handle_event(GuiEvent, Win),
- Win2 = gui_cmd(Cmd, Win),
- loop(Win2)
- end.
-
-gui_cmd(ignore, Win) ->
- Win;
-gui_cmd(stopped, _Win) ->
- exit(normal);
-gui_cmd({win, Win2}, _Win) ->
- Win2;
-gui_cmd({module, Mod}, Win) ->
- Funcs = int:functions(Mod),
- dbg_ui_break_win:update_functions(Win, Funcs);
-gui_cmd({break, DataL, Action}, _Win) ->
- Fun =
- fun(Data) ->
- case Data of
- [Mod, Line] ->
- int:break(Mod, Line),
- int:action_at_break(Mod, Line, Action);
- [Mod, Line, CMod, CFunc] ->
- int:break(Mod, Line),
- int:test_at_break(Mod, Line, {CMod, CFunc}),
- int:action_at_break(Mod, Line, Action);
- [Mod, Func, Arity] ->
- int:break_in(Mod, Func, Arity)
- end
- end,
- lists:foreach(Fun, DataL),
- exit(normal).
diff --git a/lib/debugger/src/dbg_ui_break_win.erl b/lib/debugger/src/dbg_ui_break_win.erl
deleted file mode 100644
index 11d810ccab..0000000000
--- a/lib/debugger/src/dbg_ui_break_win.erl
+++ /dev/null
@@ -1,314 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_break_win).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,entry,2}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,listbox,2}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,radiobutton,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-%% External exports
--export([create_win/5,
- update_functions/2,
- handle_event/2]).
-
--record(winInfo, {type, % line | conditional | function
- win, % gsobj()
- packer, % gsobj() | undefined
- entries, % [{atom|integer, GSobj()}]
- trigger, % enable | disable | delete
- ok, % gsobj()
- cancel, % gsobj()
- listbox, % gsobj()
- funcs=[] % [[Name, Arity]]
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% create_win(GS, Pos, Type, Mod, Line) -> #winInfo{}
-%% GS = graphics system identifier
-%% Pos = {X, Y}
-%% X = Y = integer()
-%% Type = line | conditional | function
-%% Mod = atom() | ""
-%% Line = integer() | ""
-%%--------------------------------------------------------------------
-create_win(GS, {X, Y}, function, Mod, _Line) ->
- Pad = 8,
- W = 230,
-
- Font = dbg_ui_win:font(normal),
-
- %% Window
- Win = gs:window(GS, [{title, "Function Break"}, {x, X}, {y, Y},
- {destroy, true}, {configure, true},
- {keypress, true}, {data, window}]),
-
- %% Frame
- Frm = gs:frame(Win, [{x, 0}, {y, 0}, {width, W}, {height, 190},
- {packer_x, [{fixed, 70}, {stretch, 1, W-80},
- {fixed, 10}]},
- {packer_y, [{fixed, 10}, {fixed, 30},
- {stretch, 1, 100}, {fixed, 40}]}]),
-
- %% Create input field (label+entry)
- gs:label(Frm, [{label, {text,"Module:"}}, {font, Font}, {align, e},
- {pack_x, 1}, {pack_y, 2}]),
- Ent = gs:entry(Frm, [{text, Mod},
- {pack_x, 2}, {pack_y, 2},
- {keypress, true}, {setfocus, true},
- {buttonpress, true}]),
- Entries = [{Ent, atom}],
-
- %% Create a listbox containing the functions of the module
- gs:label(Frm, [{label, {text,"Function:"}}, {font, Font}, {align, ne},
- {pack_x, 1}, {pack_y, 3}]),
- Lb = gs:listbox(Frm, [{bw, 2}, {relief, ridge}, {vscroll, right},
- {pack_x, 2}, {pack_y, 3},
- {selectmode, multiple}]),
-
- %% Add OK and Cancel buttons
- {Wbtn, Hbtn} = dbg_ui_win:min_size(["OK","Cancel"], 70, 30),
- Bot = gs:frame(Frm, [{pack_x, {1, 3}}, {pack_y, 4}]),
- OK = gs:button(Bot, [{x, Pad}, {y, Pad},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"OK"}}, {font, Font}]),
- Cancel = gs:button(Bot, [{x, W-Pad-Wbtn}, {y, Pad},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"Cancel"}}, {font, Font}]),
-
- Wfrm = gs:read(Frm, width), Hfrm = gs:read(Frm, height),
- gs:config(Win, [{width, Wfrm}, {height, Hfrm}, {map, true}]),
- #winInfo{type=function, win=Win,
- packer=Frm, entries=Entries, trigger=enable,
- ok=OK, cancel=Cancel, listbox=Lb, funcs=[]};
-create_win(GS, {X, Y}, Type, Mod, Line) ->
- Pad = 8,
- W = 230,
-
- Font = dbg_ui_win:font(normal),
-
- %% Window
- Title = case Type of
- line -> "Line Break";
- conditional -> "Conditional Break"
- end,
- Win = gs:window(GS, [{title, Title}, {x, X}, {y, Y},
- {destroy, true}]),
-
- %% Create input fields (label+entry)
- {Wlbl, Hlbl} = dbg_ui_win:min_size(["C-Function:"], 10, 30),
- Went = W-Wlbl-2*Pad,
- Labels = case Type of
- line ->
- [{atom,"Module:",Mod}, {integer,"Line:",Line}];
- conditional ->
- [{atom,"Module:",Mod}, {integer,"Line:",Line},
- {atom,"C-Module:",""}, {atom,"C-Function:",""}]
- end,
- Fun = fun({DataType, Label, Default}, Yin) ->
- gs:create(label, Win, [{x, Pad}, {y, Yin},
- {width,Wlbl}, {height,Hlbl},
- {label, {text,Label}},
- {font, Font}, {align, e}]),
- Ent = gs:create(entry, Win, [{x, Pad+Wlbl}, {y, Yin},
- {width, Went},
- {height, Hlbl},
- {text, Default},
- {keypress, true}]),
- {{Ent, DataType}, Yin+Hlbl}
- end,
- {Entries, Yacc} = lists:mapfoldl(Fun, Pad, Labels),
- {First, _DataType} = hd(Entries),
- gs:config(First, [{buttonpress, true}, {setfocus, true}]),
-
- %% Add 'trigger action' buttons
- {Wlbl2, Hlbl2} = dbg_ui_win:min_size(["Trigger Action"], 100, 20),
- Wfrm = Wlbl2+8, Hfrm = Hlbl2*4+4,
- Grp = erlang:now(),
- Frm = gs:frame(Win, [{x, W/2-Wfrm/2-2}, {y, Yacc+Pad-2},
- {width, Wfrm}, {height, Hfrm}, {bw, 2}]),
- gs:label(Frm, [{label, {text, "Trigger Action"}}, {font, Font},
- {x, 2}, {y, 0}, {width, Wlbl2}, {height, Hlbl2}]),
- gs:radiobutton(Frm, [{label, {text, "Enable"}}, {font, Font},
- {x, 10}, {y, Hlbl2},
- {width, Wlbl2-10}, {height, Hlbl2},
- {align, w}, {group, Grp},
- {data, {trigger, enable}},
- {select, true}]),
- gs:radiobutton(Frm, [{label, {text, "Disable"}}, {font, Font},
- {x, 10}, {y, Hlbl2*2},
- {width, Wlbl2-10}, {height, Hlbl2},
- {align, w}, {group, Grp},
- {data, {trigger, disable}}]),
- gs:radiobutton(Frm, [{label, {text, "Delete"}}, {font, Font},
- {x, 10}, {y, Hlbl2*3},
- {width, Wlbl2-10}, {height, Hlbl2},
- {align, w}, {group, Grp},
- {data, {trigger, delete}}]),
-
- %% Add OK and Cancel buttons
- {Wbtn, Hbtn} = dbg_ui_win:min_size(["OK","Cancel"], 70, 30),
- Ybtn = Yacc + Pad + Hfrm + Pad,
- OK = gs:button(Win, [{x, Pad}, {y, Ybtn},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"OK"}}, {font, Font}]),
- gs:button(Win, [{x, W-Pad-Wbtn}, {y, Ybtn},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"Cancel"}}, {font, Font}]),
-
- Hwin = Ybtn + Hbtn + Pad,
- gs:config(Win, [{width, W}, {height, Hwin}, {map, true}]),
-
- #winInfo{type=Type, win=Win,
- entries=Entries, trigger=enable, ok=OK}.
-
-%%--------------------------------------------------------------------
-%% update_functions(WinInfo, Funcs) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Funcs = [{Name, Arity}]
-%% Name = atom()
-%% Arity = integer()
-%%--------------------------------------------------------------------
-update_functions(WinInfo, Funcs) ->
- Items = lists:map(fun([N, A]) -> io_lib:format("~p/~p", [N, A]) end,
- Funcs),
- gs:config(WinInfo#winInfo.listbox, [{items, Items},
- {setfocus, true}]),
- WinInfo#winInfo{funcs=Funcs}.
-
-%%--------------------------------------------------------------------
-%% handle_event(GSEvent, WinInfo) -> Command
-%% GSEvent = {gs, Id, Event, Data, Arg}
-%% WinInfo = #winInfo{}
-%% Command = ignore
-%% | stopped
-%% | {win, WinInfo}
-%% | {module, Mod}
-%% | {break, [[Mod, Line]], Action}
-%% | {break, [[Mod, Line, CMod, CFunc]], Action}
-%% | {break, [[Mod, Func, Arity]], Action}
-%%--------------------------------------------------------------------
-handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) ->
- stopped;
-handle_event({gs, _Id, configure, _Data, [W, H|_]}, WinInfo) ->
- gs:config(WinInfo#winInfo.packer, [{width, W-10}, {height, H-10}]),
- gs:config(WinInfo#winInfo.cancel, [{x, W-80}]),
- ignore;
-handle_event({gs, Ent, buttonpress, _,[N,X0,Y0|_]}, WinInfo) when N>1 ->
- %% Right (middle) mouse button click in module entry, display a
- %% menu containing all interpreted modules
- Mods = int:interpreted(),
- X = gs:read(Ent, x) + X0,
- Y = gs:read(Ent, y) + Y0,
- Menu = gs:menu(WinInfo#winInfo.win, [{post_at,{X,Y}}]),
- lists:foreach(fun(Mod) ->
- gs:menuitem(Menu, [{label,{text,Mod}},
- {data,{module,Mod}}])
- end,
- Mods),
- ignore;
-handle_event({gs, LB, keypress, window, [Key|_]}, WinInfo) ->
- %% Used for functional break window, since listboxes for some
- %% reason doesn't generate keypress events
- if
- Key/='Tab', Key/='Return' ->
- ignore;
- true ->
- handle_event({gs, LB, click, listbox, ["OK"]}, WinInfo)
- end;
-handle_event({gs, Ent, keypress, Data, [Key|_]}, WinInfo) ->
- case WinInfo#winInfo.type of
- function when Key/='Tab', Key/='Return' ->
- case gs:read(WinInfo#winInfo.listbox, items) of
- [] -> ignore;
- _Items ->
- gs:config(WinInfo#winInfo.listbox, clear),
- {win, WinInfo#winInfo{funcs=[]}}
- end;
- function -> % 'Return' | 'Tab' pressed in Module entry
- case check_input(WinInfo#winInfo.entries) of
- error -> ignore;
- [Mod] -> {module, Mod}
- end;
- _Type when Key=='Tab'; Key=='Return' ->
- case next_entry(Ent, WinInfo#winInfo.entries) of
- last ->
- gs:config(WinInfo#winInfo.ok, flash),
- handle_event({gs, Ent, click, Data, ["OK"]}, WinInfo);
- Next ->
- gs:config(Next, {setfocus, true}),
- ignore
- end;
- _Type -> ignore
- end;
-handle_event({gs, _Id, click, _Data, ["OK"|_]}, WinInfo) ->
- case check_input(WinInfo#winInfo.entries) of
- error -> ignore;
- Data when WinInfo#winInfo.type/=function ->
- {break, [Data], WinInfo#winInfo.trigger};
- [Mod] -> % Function break window
- case gs:read(WinInfo#winInfo.listbox, selection) of
- [] ->
- {module, Mod};
- IndexL ->
- Funcs = WinInfo#winInfo.funcs,
- Breaks =
- [[Mod|lists:nth(Index+1, Funcs)] || Index <- IndexL],
- {break, Breaks, enable}
- end
- end;
-handle_event({gs, _Id, click, _Data, ["Cancel"|_]}, _WinInfo) ->
- stopped;
-handle_event({gs, _Id, click, {trigger,Trigger}, _Arg}, WinInfo) ->
- {win, WinInfo#winInfo{trigger=Trigger}};
-handle_event({gs, _Id, click, {module, Mod}, _Arg}, WinInfo) ->
- {Ent, _DataType} = hd(WinInfo#winInfo.entries),
- gs:config(Ent, {insert,{0,Mod}}),
- ignore;
-handle_event(_GSEvent, _WinInfo) ->
- ignore.
-
-check_input(Entries) ->
- check_input(Entries, []).
-check_input([{Entry, Type} | Entries], Data) ->
- Str = gs:read(Entry, text),
- case erl_scan:string(Str) of
- {ok, [{Type, _Line, Val}], _EndLine} ->
- check_input(Entries, [Val|Data]);
- _Error -> error
- end;
-check_input([], Data) -> lists:reverse(Data).
-
-next_entry(Entry, [{Entry, _Type}]) ->
- last;
-next_entry(Entry, [{Entry, _Type1}, {Next, _Type2}|_]) ->
- Next;
-next_entry(Entry, [_|Entries]) ->
- next_entry(Entry, Entries).
diff --git a/lib/debugger/src/dbg_ui_edit.erl b/lib/debugger/src/dbg_ui_edit.erl
deleted file mode 100644
index 390e6acdb4..0000000000
--- a/lib/debugger/src/dbg_ui_edit.erl
+++ /dev/null
@@ -1,91 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_edit).
-
-%% External exports
--export([start/5]).
-
-%% Internal exports
--export([init/6]).
-
--record(state, {win, % term() Edit dialog window data
- pid, % pid() Parent
- prompt % atom()
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(GS, Pos, Title, Prompt, {Type, Value})
-%% GS = graphics system identifier
-%% Pos = {X, Y}
-%% X = Y = integer()
-%% Title = string()
-%% Prompt = atom()
-%% Type = term | atom | float | integer | string
-%% Value = term()
-%%--------------------------------------------------------------------
-start(GS, Pos, Title, Prompt, Edit) ->
- case dbg_ui_winman:is_started(Title) of
- true -> ignore;
- false ->
- spawn(?MODULE, init, [self(), GS, Pos, Title, Prompt, Edit])
- end.
-
-
-%%====================================================================
-%% Internal exports
-%%====================================================================
-
-init(Pid, GS, Pos, Title, Prompt, Edit) ->
-
- %% Create edit dialog window
- Win = dbg_ui_edit_win:create_win(GS, Pos, Title, Prompt, Edit),
- Window = dbg_ui_edit_win:get_window(Win),
- dbg_ui_winman:insert(Title, Window),
- State = #state{win=Win, pid=Pid, prompt=Prompt},
-
- loop(State).
-
-loop(State) ->
- receive
-
- %% From the GUI
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd = dbg_ui_edit_win:handle_event(GuiEvent,
- State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, _Data} ->
- loop(State);
- {dbg_ui_winman, destroy} ->
- exit(normal)
- end.
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd(stopped, _State) ->
- exit(normal);
-gui_cmd({edit, Value}, State) ->
- State#state.pid ! {dbg_ui_edit, State#state.prompt, Value},
- exit(normal).
diff --git a/lib/debugger/src/dbg_ui_edit_win.erl b/lib/debugger/src/dbg_ui_edit_win.erl
deleted file mode 100644
index 2e9a685b57..0000000000
--- a/lib/debugger/src/dbg_ui_edit_win.erl
+++ /dev/null
@@ -1,128 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_edit_win).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,entry,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-%% External exports
--export([create_win/5, get_window/1,
- handle_event/2]).
-
--record(winInfo, {window, % gsobj()
- entry, % gsobj()
- button, % gsobj()
- type % atom()
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% create_win(GS, Pos, Title, Prompt, {Type, Value}) -> #winInfo{}
-%% GS = graphics system identifier
-%% Pos = {X, Y}
-%% X = Y = integer()
-%% Title = string()
-%% Prompt = atom()
-%% Type = term | atom | float | integer | string
-%% Value = term()
-%%--------------------------------------------------------------------
-create_win(GS, {X, Y}, Title, Prompt, {Type, Value}) ->
- Pad=8,
-
- Font = dbg_ui_win:font(normal),
-
- %% Window
- Win = gs:window(GS, [{title, Title}, {x, X}, {y, Y},
- {destroy, true}]),
-
- %% Label
- {Wlbl, Hlbl} = dbg_ui_win:min_size([Prompt], 50, 30),
- gs:label(Win, [{x, Pad}, {y, Pad}, {width, Wlbl}, {height, Hlbl},
- {align, e}, {label, {text, Prompt}}, {font, Font}]),
-
-
- %% Entry
- {Went, _Hent} = dbg_ui_win:min_size([Value], 100, 20),
- Ent = gs:entry(Win, [{x, Pad+Wlbl}, {y, Pad},
- {width, Went}, {height, Hlbl},
- {text, Value},
- {keypress, true}]),
-
- %% OK and Cancel buttons
- W = Pad + Wlbl + Went + Pad,
- {Wbtn, Hbtn} = dbg_ui_win:min_size(["Cancel"], 70, 30),
- Ybtn = Pad + Hlbl + Pad,
- Btn = gs:button(Win, [{x, Pad}, {y, Ybtn},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"OK"}}, {font, Font}]),
- gs:button(Win, [{x, W-Pad-Wbtn}, {y, Ybtn},
- {width, Wbtn}, {height, Hbtn},
- {label, {text,"Cancel"}}, {font, Font}]),
-
- H = Ybtn + Hbtn + Pad,
- gs:config(Win, [{width, W}, {height, H}, {map, true}]),
-
- #winInfo{window=Win, entry=Ent, button=Btn, type=Type}.
-
-%%--------------------------------------------------------------------
-%% get_window(WinInfo) -> Window
-%% WinInfo = #winInfo{}
-%% Window = gsobj()
-%%--------------------------------------------------------------------
-get_window(WinInfo) ->
- WinInfo#winInfo.window.
-
-%%--------------------------------------------------------------------
-%% handle_event(GSEvent, WinInfo) -> Command
-%% GSEvent = {gs, Id, Event, Data, Arg}
-%% WinInfo = #winInfo{}
-%% Command = ignore
-%% | stopped
-%% | {edit, Value}
-%%--------------------------------------------------------------------
-handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) ->
- stopped;
-handle_event({gs, Id, keypress, Data, ['Return'|_]}, WinInfo) ->
- gs:config(WinInfo#winInfo.button, flash),
- handle_event({gs, Id, click, Data, ["OK"]}, WinInfo);
-handle_event({gs, _Id, click, _Data, ["OK"|_]}, WinInfo) ->
- Ent = WinInfo#winInfo.entry,
- Str = gs:read(Ent, text),
- Type = WinInfo#winInfo.type,
- case erl_scan:string(Str) of
- {ok, Tokens, _EndLine} when Type==term ->
- case erl_parse:parse_term(Tokens++[{dot, 1}]) of
- {ok, Value} -> {edit, Value};
- _Error -> ignore
- end;
- {ok, [{Type, _Line, Value}], _EndLine} when Type/=term ->
- {edit, Value};
- _ ->
- ignore
- end;
-handle_event({gs, _Id, click, _Data, ["Cancel"|_]}, _WinInfo) ->
- stopped;
-handle_event(_GSEvent, _WinInfo) ->
- ignore.
diff --git a/lib/debugger/src/dbg_ui_filedialog_win.erl b/lib/debugger/src/dbg_ui_filedialog_win.erl
deleted file mode 100644
index 52dc2012f3..0000000000
--- a/lib/debugger/src/dbg_ui_filedialog_win.erl
+++ /dev/null
@@ -1,340 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--module(dbg_ui_filedialog_win).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,listbox,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-%% External exports
--export([create_win/6, create_win/7, get_window/1,
- tag/2,
- handle_event/2]).
-
--record(winInfo, {window, % gsobj()
- extra, % fun()
- cwd, % string()
- pattern % string()
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% create_win(GS, Title, Pos, Mode, Filter, Extra)
-%% create_win(GS, Title, Pos, Mode, Filter, Extra, FileName) -> #winInfo{}
-%% GS = term()
-%% Title = string()
-%% Pos = {X,Y}
-%% Mode = normal | multiselect
-%% Filter = string() File name that may include * symbols.
-%% Extra = fun(File) -> {true, tag} | true | {error, term()}
-%% FileName = string() Suggested file name when saving
-%%--------------------------------------------------------------------
-create_win(GS, Title, {X,Y}, Mode, Filter, Extra) ->
- create_win(GS, Title, {X,Y}, Mode, Filter, Extra, null).
-create_win(GS, Title, {X,Y}, Mode, Filter, Extra, FileName) ->
- Pad = 8,
- Wlb = 480, Hlb = 130,
-
- Font = dbg_ui_win:font(normal),
-
- {Wlbl, Hlbl} = dbg_ui_win:min_size(["Directories"], 80, 20),
- {Wbtn, Hbtn} = dbg_ui_win:min_size(["Filter","Cancel"], 70, 30),
-
- %% Window
- Win = gs:window(GS, [{title,Title}, {x, X}, {y,Y}, {destroy,true}]),
-
- %% 'Filter' label and entry (for selecting directory)
- gs:label(Win, [{label, {text,"Filter"}}, {font, Font}, {align, sw},
- {x, Pad+2}, {y, Pad}, {width,Wlbl}, {height,Hlbl}]),
- gs:entry('Filter', Win, [{x, Pad}, {y, Pad+Hlbl},
- {width, Wlb}, {height, Hbtn},
- {keypress, true}]),
-
- %% Listboxes (showing directories and files)
- Xmid = Pad + Wlb/2,
- Y2 = Pad + Hlbl + Hbtn + Pad,
- gs:label(Win, [{label, {text,"Directories"}},
- {font, Font}, {align, sw},
- {x, Pad+2}, {y, Y2},
- {width, Wlbl}, {height, Hlbl}]),
- gs:label(Win, [{label, {text,"Files"}},
- {font, Font}, {align, sw},
- {x, Xmid+Pad/2+2}, {y, Y2},
- {width, Wlbl}, {height, Hlbl}]),
- gs:listbox('Dirs', Win, [{x, Pad}, {y, Y2+Hlbl},
- {width, Wlb/2-Pad/2}, {height, Hlb},
- {vscroll, right},
- {click, true}, {doubleclick, true}]),
- gs:listbox('Files', Win, [{x, Xmid+Pad/2}, {y, Y2+Hlbl},
- {width, Wlb/2-Pad/2}, {height, Hlb},
- {vscroll, right},
- {click, true}, {doubleclick, true}]),
-
- %% 'Selection' label and entry (for selecting file)
- Y3 = Y2 + Hlbl + Hlb,
- gs:label(Win, [{label, {text,"Selection"}}, {font,Font}, {align,sw},
- {x, Pad+2}, {y, Y3}, {width, Wlbl}, {height, Hlbl}]),
- gs:entry('Selection', Win, [{x, Pad}, {y, Y3+Hlbl},
- {width, Wlb}, {height, Hbtn},
- {keypress, true}]),
-
- %% Buttons
- Y4 = Y3 + Hlbl + Hbtn + Pad,
- Wb = Wlb - Wbtn,
- Opts = [{y, Y4}, {width, Wbtn}, {height, Hbtn}, {font, Font}],
- case Mode of
- normal ->
- gs:button(Win, [{label, {text,"OK"}}, {x, Pad},
- {data, select} | Opts]),
- gs:button(Win, [{label, {text,"Filter"}}, {x, Wlb/2-Wbtn/2},
- {data, filter} | Opts]),
- gs:button(Win, [{label, {text,"Cancel"}}, {x, Pad+Wb},
- {data, done} | Opts]);
- multiselect ->
- gs:button(Win, [{label, {text,"Choose"}}, {x, Pad},
- {data, select} | Opts]),
- gs:button(Win, [{label, {text,"All"}}, {x, Pad+Wb/3},
- {data, multiselect} | Opts]),
- gs:button(Win, [{label, {text,"Filter"}}, {x, Pad+2*Wb/3},
- {data, filter} | Opts]),
- gs:button(Win, [{label, {text,"Done"}}, {x, Pad+Wb},
- {data, done} | Opts])
- end,
-
- %% Insert contents
- {ok, Home} = file:get_cwd(),
- {Cwd, Pattern} = update_win(Filter, Extra, Home),
- if
- is_list(FileName) ->
- gs:config('Selection', {text, filename:join(Cwd,FileName)});
- true -> ignore
- end,
-
- Wwin = Pad + Wlb + Pad,
- Hwin = Y4 + Hbtn + Pad,
- gs:config(Win, [{width, Wwin}, {height, Hwin}, {map, true}]),
-
- #winInfo{window=Win, extra=Extra, cwd=Cwd, pattern=Pattern}.
-
-%%--------------------------------------------------------------------
-%% get_window(WinInfo) -> Window
-%% WinInfo = #winInfo{}
-%% Window = gsobj()
-%%--------------------------------------------------------------------
-get_window(WinInfo) ->
- WinInfo#winInfo.window.
-
-%%--------------------------------------------------------------------
-%% tag(WinInfo, File)
-%% WinInfo = #winInfo{}
-%% File = string()
-%%--------------------------------------------------------------------
-tag(WinInfo, File0) ->
- File = relfile(WinInfo#winInfo.cwd, File0),
- case member(File, gs:read('Files', items)) of
- {true, Index} -> gs:config('Files', {change, {Index, tag(File)}});
- false -> ignore
- end.
-
-tag(Str) -> [$*|Str].
-untag([$*|Str]) -> Str;
-untag([$(|Str]) -> [$)|Rts] = lists:reverse(Str),lists:reverse(Rts);
-untag(Str) -> Str.
-
-member(E, L) -> member(E, L, 0).
-member(E, [E|_], I) -> {true, I};
-member(E, [_|T], I) -> member(E, T, I+1);
-member(_E, [], _I) -> false.
-
-%%--------------------------------------------------------------------
-%% handle_event(GSEvent, WinInfo) -> Command
-%% GSEvent = {gs, Id, Event, Data, Arg}
-%% WinInfo = #winInfo{}
-%% Command = ignore
-%% | {stopped, Dir}
-%% | {win, WinInfo}
-%% | {select, File} | {multiselect, Dir, FileNames}
-%%--------------------------------------------------------------------
-handle_event({gs, _Id, destroy, _Data, _Args}, WinInfo) ->
- {stopped, WinInfo#winInfo.cwd};
-
-handle_event({gs, 'Filter', keypress, _Data, ['Return'|_]}, WinInfo) ->
- handle_event({gs, null, click, filter, null}, WinInfo);
-handle_event({gs, 'Selection', keypress, _Data, ['Return'|_]}, WinInfo) ->
- handle_event({gs, null, click, select, null}, WinInfo);
-
-handle_event({gs, 'Dirs', click, _Data, [0,"..",true|_]}, WinInfo) ->
- Filter = filename:join(filename:dirname(WinInfo#winInfo.cwd),
- WinInfo#winInfo.pattern),
- gs:config('Filter', {text, Filter}),
- ignore;
-handle_event({gs, 'Dirs', click, _Data, [_Index,Str,true|_]}, WinInfo) ->
- Filter = filename:join([WinInfo#winInfo.cwd, Str,
- WinInfo#winInfo.pattern]),
- gs:config('Filter', {text, Filter}),
- ignore;
-handle_event({gs, 'Dirs', doubleclick, _Data, _Arg}, WinInfo) ->
- handle_event({gs, null, click, filter, null}, WinInfo);
-
-handle_event({gs, 'Files', click, _Data, [_Index,Str,true|_]}, WinInfo) ->
- Selection = filename:join(WinInfo#winInfo.cwd, untag(Str)),
- gs:config('Selection', {text, Selection}),
- ignore;
-handle_event({gs, 'Files', doubleclick, _Data, _Arg}, WinInfo) ->
- handle_event({gs, null, click, select, null}, WinInfo);
-
-handle_event({gs, _Id, click, select, _Arg}, _WinInfo) ->
- {select, gs:read('Selection', text)};
-handle_event({gs, _Id, click, multiselect, _Arg}, WinInfo) ->
- Files = [untag(File) || File <- gs:read('Files', items)],
- {multiselect, WinInfo#winInfo.cwd, Files};
-handle_event({gs, _Id, click, filter, _Arg}, WinInfo) ->
- {Cwd, Pattern} = update_win(gs:read('Filter', text),
- WinInfo#winInfo.extra,
- WinInfo#winInfo.cwd),
- {win, WinInfo#winInfo{cwd=Cwd, pattern=Pattern}};
-handle_event({gs, _Id, click, done, _Arg}, WinInfo) ->
- {stopped, WinInfo#winInfo.cwd};
-
-handle_event(_GSEvent, _WinInfo) ->
- ignore.
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-update_win(Filter, ExtraFilter, Prev) ->
- {Res, {Filter2, Cwd, FilePattern}} = check_filter(Filter, Prev),
-
- Dirs = [".." | get_subdirs(Cwd)],
-
- gs:config('Filter', {text, Filter2}),
- gs:config('Dirs', {items, Dirs}),
- gs:config('Selection', {text, Cwd}),
-
- case Res of
- ok ->
- Matching = lists:sort(filelib:wildcard(Filter2, erl_prim_loader)),
- Files = extra_filter(Matching, Cwd, ExtraFilter),
- gs:config('Files', {items, Files});
- error ->
- gs:config('Files', beep)
- end,
-
- {Cwd, FilePattern}.
-
-%% check_filter(Filter, Prev) -> {ok, Res} | {error, Res}
-%% Res = {Filter, Cwd, FilePattern}
-%% Filter = Prev = Cwd = FilePattern = string()
-check_filter(Filter0, Prev) ->
- Filter = case filename:pathtype(Filter0) of
- absolute -> Filter0;
- _Relative -> filename:absname(Filter0, Prev)
- end,
- Comps = filename:split(Filter),
- Last = lists:last(Comps),
- FilePattern = case is_pattern(Last) of
- true -> Last;
- false -> "*"
- end,
- {Cwd, Rest} = max_existing(Comps),
- case Rest of
- [] ->
- %% Filter = existing file or directory
- Res = case filelib:is_dir(Filter, erl_prim_loader) of
- true -> {filename:join(Filter, "*"), Filter, "*"};
- false -> {Filter, filename:dirname(Filter),
- filename:basename(Filter)}
- end,
- {ok, Res};
- [FilePattern] ->
- %% Filter = existing dir and valid pattern
- {ok, {Filter, Cwd, FilePattern}};
- Comps ->
- %% Filter = garbage
- {error, {Prev, Prev, "*"}};
- [Name|_Names] ->
- %% Filter = existing dir ++ pattern or non-existing file/dir
- case is_pattern(Name) of
- true -> {ok, {Filter, Cwd, FilePattern}};
- false -> {error, {Cwd, Cwd, ""}}
- end
- end.
-
-max_existing([Name | Names]) ->
- case filelib:is_file(Name, erl_prim_loader) of
- true -> max_existing(Name, Names);
- false -> {[], [Name | Names]}
- end.
-max_existing(Dir, [Name | Names]) ->
- Dir2 = filename:join(Dir, Name),
- case filelib:is_file(Dir2, erl_prim_loader) of
- true when Names =:= [] -> {Dir2, []};
- true -> max_existing(Dir2, Names);
- false -> {Dir, [Name | Names]}
- end.
-
-is_pattern(Str) ->
- lists:member($*, Str).
-
-extra_filter([File|Files], Dir, Fun) ->
- case Fun(File) of
- true ->
- [relfile(Dir, File) | extra_filter(Files, Dir, Fun)];
- {true,tag} ->
- [[$*|relfile(Dir,File)] | extra_filter(Files, Dir, Fun)];
- {true,disable} ->
- [[$(|relfile(Dir,File)]++[$)] | extra_filter(Files, Dir, Fun)];
- {error, _Reason} -> extra_filter(Files, Dir, Fun)
- end;
-extra_filter([], _Dir, _Fun) -> [].
-
-get_subdirs(Dir) ->
- case erl_prim_loader:list_dir(Dir) of
- {ok, FileNames} ->
- X = [FN || FN <- FileNames,
- filelib:is_dir(filename:join(Dir, FN), erl_prim_loader)],
- lists:sort(X);
- _Error ->
- []
- end.
-
-%% Return the "remainder" of a file name relative a dir name, examples:
-%% relfile("/home/gunilla", "/home/gunilla/m.erl") -> "m.erl"
-%% relfile("/home/gunilla/dir", "/home/gunilla/dir/m.erl") -> "dir/m.erl"
-%% relfile("/home/gunilla", "/home/arne/m.erl") -> "/home/arne/m.erl"
-relfile(Dir, File) ->
- case compare(Dir, File) of
- error -> File;
- RelFile -> RelFile
- end.
-
-compare([_|Dir], [_|File]) ->
- compare(Dir, File);
-compare([], [$/|File]) ->
- File;
-compare(_, _) ->
- error.
diff --git a/lib/debugger/src/dbg_ui_interpret.erl b/lib/debugger/src/dbg_ui_interpret.erl
deleted file mode 100644
index 73392d40cb..0000000000
--- a/lib/debugger/src/dbg_ui_interpret.erl
+++ /dev/null
@@ -1,161 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_interpret).
-
--include_lib("kernel/include/file.hrl").
-
-%% External exports
--export([start/4]).
-
-%% Internal exports
--export([init/6]).
-
--record(state, {gs, % term() Graphics system id
- win, % term() Interpret dialog window data
- monitor, % pid() Monitor pid
- mode % local | global
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(GS, Pos, Dir, Mode)
-%% GS = Graphics system id
-%% Dir = string()
-%% Pos = {X,Y}
-%% Mode = local | global
-%%--------------------------------------------------------------------
-start(GS, Pos, Dir, Mode) ->
- Title = "Interpret Dialog",
- case dbg_ui_winman:is_started(Title) of
- true -> ignore;
- false ->
- spawn(?MODULE, init, [self(), GS, Pos, Title, Dir, Mode])
- end.
-
-%%====================================================================
-%% Internal exports
-%%====================================================================
-
-init(Monitor, GS, Pos, Title, Dir, Mode) ->
- Filter = filename:join(Dir, "*.erl"),
- Extra = fun(File) ->
- case int:interpretable(File) of
- true ->
- ModS = filename:basename(File, ".erl"),
- Mod = list_to_atom(ModS),
- case int:file(Mod) of
- File -> {true, tag};
- _ -> true % {error,not_loaded} | File2
- end;
- _Error -> {true,disable}
- end
- end,
-
- %% Create interpret dialog window
- Win = dbg_ui_filedialog_win:create_win(GS, Title, Pos, multiselect,
- Filter, Extra),
- Window = dbg_ui_filedialog_win:get_window(Win),
- dbg_ui_winman:insert(Title, Window),
-
- State = #state{gs=GS, win=Win, monitor=Monitor, mode=Mode},
- loop(State).
-
-
-%%====================================================================
-%% Main loop and message handling
-%%====================================================================
-
-loop(State) ->
- receive
-
- %% From the GUI
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd = dbg_ui_filedialog_win:handle_event(GuiEvent,
- State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, _Data} ->
- loop(State);
- {dbg_ui_winman, destroy} ->
- exit(normal)
- end.
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd({stopped, Dir}, State) ->
- State#state.monitor ! {dbg_ui_interpret, Dir},
- exit(normal);
-gui_cmd({win, Win}, State) ->
- State#state{win=Win};
-gui_cmd({select, File}, State) ->
- Res = case State#state.mode of
- local -> int:i(File);
- global -> int:ni(File)
- end,
-
- case Res of
- %% Interpretation succeeded, tag the file name
- {module, _Mod} ->
- dbg_ui_filedialog_win:tag(State#state.win, File);
-
- %% Interpretation failed
- error ->
- Error = format_error(int:interpretable(File)),
- Msg = ["Error when interpreting:", File, Error],
- Window = dbg_ui_filedialog_win:get_window(State#state.win),
- tool_utils:notify(Window, Msg)
- end,
- State;
-gui_cmd({multiselect, Dir, FileNames}, State) ->
- interpret_all(State, Dir, FileNames),
- State.
-
-interpret_all(State, Dir, [File0|Files]) ->
- File = filename:join(Dir, File0),
- Res = case State#state.mode of
- local -> int:i(File);
- global -> int:ni(File)
- end,
- case Res of
- {module, _Mod} ->
- dbg_ui_filedialog_win:tag(State#state.win, File),
- interpret_all(State, Dir, Files);
- error ->
- Window = dbg_ui_filedialog_win:get_window(State#state.win),
- Error = format_error(int:interpretable(File)),
- Msg = ["Error when interpreting:", File, Error,
- "OK to continue?"],
- case tool_utils:confirm(Window, Msg) of
- ok -> interpret_all(State, Dir, Files);
- cancel -> true
- end
- end;
-interpret_all(_State, _Dir, []) ->
- true.
-
-format_error({error,no_beam}) -> "No BEAM file";
-format_error({error,no_debug_info}) -> "No debug_info in BEAM file";
-format_error({error,badarg}) -> "File does not exist";
-format_error({error,{app,App}}) ->
- "Cannot interpret "++atom_to_list(App)++" modules".
diff --git a/lib/debugger/src/dbg_ui_mon.erl b/lib/debugger/src/dbg_ui_mon.erl
deleted file mode 100644
index 82fe210968..0000000000
--- a/lib/debugger/src/dbg_ui_mon.erl
+++ /dev/null
@@ -1,738 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_mon).
-
--include_lib("kernel/include/file.hrl").
-
-%% External exports
--export([start/2, stop/0]).
-
--define(TRACEWIN, ['Button Area', 'Evaluator Area', 'Bindings Area']).
--define(BACKTRACE, 100).
-
--record(pinfo, {pid, % pid()
- status % break | exit | idle | running | waiting
- }).
-
--record(state, {mode, % local | global
- starter, % bool() 'true' if int was started by me
-
- gs, % term() Graphics system id
- win, % term() Monitor window data
- focus, % undefined | #pinfo{} Process in focus
- coords, % {X,Y} Mouse pointer position
-
- intdir, % string() Default dir
- pinfos, % [#pinfo{}] Debugged processes
-
- tracewin, % [Area] Areas shown in trace window
- backtrace, % integer() Number of call frames to fetch
-
- attach, % false | {Flags, Function}
-
- sfile, % default | string() Settings file
- changed % boolean() Settings have been changed
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(Mode, SFile) -> {ok, Pid} | {error, Reason}
-%% Mode = local | global
-%% SFile = string() | default Settings file
-%% Pid = pid()
-%% Reason = {already_started,Pid} | term()
-%%--------------------------------------------------------------------
-start(Mode, SFile) ->
- case whereis(?MODULE) of
- undefined ->
- CallingPid = self(),
- Pid = spawn(fun () -> init(CallingPid, Mode, SFile) end),
- receive
- {initialization_complete, Pid} ->
- {ok, Pid};
- Error ->
- Error
- end;
-
- Pid ->
- {error, {already_started,Pid}}
- end.
-
-%%--------------------------------------------------------------------
-%% stop() -> ok
-%%--------------------------------------------------------------------
-stop() ->
- case whereis(?MODULE) of
- undefined ->
- ok;
- Pid ->
- Flag = process_flag(trap_exit, true),
- link(Pid),
- Pid ! stop,
- receive
- {'EXIT', Pid, stop} ->
- process_flag(trap_exit, Flag),
- ok
- end
- end.
-
-
-%%====================================================================
-%% Initialization
-%%====================================================================
-
-init(CallingPid, Mode, SFile) ->
- register(?MODULE, self()),
-
- %% Graphics system
- case catch dbg_ui_mon_win:init() of
- {'EXIT', Reason} ->
- CallingPid ! {error, Reason};
- GS ->
- init2(CallingPid, Mode, SFile, GS)
- end.
-
-init2(CallingPid, Mode, SFile, GS) ->
-
- %% Start Int if necessary and subscribe to information from it
- Bool = case int:start() of
- {ok, _Int} -> true;
- {error, {already_started, _Int}} -> false
- end,
- int:subscribe(),
-
- %% Start other necessary stuff
- dbg_ui_winman:start(), % Debugger window manager
-
- %% Create monitor window
- Title = "Monitor",
- Win = dbg_ui_mon_win:create_win(GS, Title, menus()),
- Window = dbg_ui_mon_win:get_window(Win),
- dbg_ui_winman:insert(Title, Window),
-
- %% Initial process state
- State1 = #state{mode = Mode,
- starter = Bool,
-
- gs = GS,
- win = Win,
- focus = undefined,
- coords = {0,0},
-
- intdir = element(2, file:get_cwd()),
- pinfos = [],
-
- sfile = SFile,
- changed = false
- },
-
- State2 = init_options(?TRACEWIN, % Trace Window
- int:auto_attach(), % Auto Attach
- int:stack_trace(), % Stack Trace
- ?BACKTRACE, % Back Trace Size
- State1),
-
- State3 = init_contents(int:interpreted(), % Modules
- int:all_breaks(), % Breakpoints
- int:snapshot(), % Processes
- State2),
-
- %% Disable/enable functionality according to process in focus (none)
- gui_enable_functions(State3#state.focus),
-
- CallingPid ! {initialization_complete, self()},
-
- if
- SFile =:= default ->
- loop(State3);
- true ->
- loop(load_settings(SFile, State3))
- end.
-
-init_options(TraceWin, AutoAttach, StackTrace, BackTrace, State) ->
- lists:foreach(fun(Area) ->
- dbg_ui_mon_win:select(Area, true)
- end,
- TraceWin),
-
- case AutoAttach of
- false -> ignore;
- {Flags, _Function} ->
- dbg_ui_mon_win:show_option(State#state.win,
- auto_attach, Flags),
- lists:foreach(fun(Flag) ->
- dbg_ui_mon_win:select(map(Flag), true)
- end,
- Flags)
- end,
-
- dbg_ui_mon_win:show_option(State#state.win,
- stack_trace, StackTrace),
- dbg_ui_mon_win:select(map(StackTrace), true),
-
- dbg_ui_mon_win:show_option(State#state.win, back_trace, BackTrace),
-
- State#state{tracewin=TraceWin, backtrace=BackTrace}.
-
-init_contents(Mods, Breaks, Processes, State) ->
- Win2 =
- lists:foldl(fun(Mod, Win) ->
- dbg_ui_mon_win:add_module(Win,'Module',Mod)
- end,
- State#state.win,
- Mods),
-
- Win3 =
- lists:foldl(fun(Break, Win) ->
- dbg_ui_mon_win:add_break(Win,'Break',Break)
- end,
- Win2,
- Breaks),
-
- lists:foldl(fun(PidTuple, State0) ->
- int_cmd({new_process, PidTuple}, State0)
- end,
- State#state{win=Win3},
- Processes).
-
-
-%%====================================================================
-%% Main loop and message handling
-%%====================================================================
-
-loop(State) ->
- receive
-
- stop ->
- gui_cmd(stopped, State);
-
- %% From the GUI
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent) =:= gs ->
- Cmd = dbg_ui_mon_win:handle_event(GuiEvent,State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the interpreter process
- {int, Cmd} ->
- State2 = int_cmd(Cmd, State),
- loop(State2);
-
- %% From the dbg_ui_interpret process
- {dbg_ui_interpret, Dir} ->
- loop(State#state{intdir=Dir});
-
- %% From the dbg_ui_edit process
- {dbg_ui_edit, 'Backtrace:', BackTrace} ->
- dbg_ui_mon_win:show_option(State#state.win,
- back_trace, BackTrace),
- loop(State#state{backtrace=BackTrace});
-
- %% From the dbg_ui_settings process
- {dbg_ui_settings, SFile, Action} ->
- State2 = case Action of
- load -> load_settings(SFile, State);
- save -> save_settings(SFile, State)
- end,
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, Data} ->
- dbg_ui_winman:update_windows_menu(Data),
- loop(State)
- end.
-
-%%--Commands from the GUI---------------------------------------------
-%% Act upon a command from the GUI. In most cases, it is only necessary
-%% to call a relevant int-function. int will then report when the action
-%% has been taken.
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd(stopped, State) ->
- if
- State#state.starter =:= true -> int:stop();
- true -> int:auto_attach(false)
- end,
- exit(stop);
-gui_cmd({coords, Coords}, State) ->
- State#state{coords=Coords};
-
-gui_cmd({shortcut, Key}, State) ->
- case shortcut(Key) of
- {always, Cmd} -> gui_cmd(Cmd, State);
- {if_enabled, Cmd} ->
- case dbg_ui_mon_win:is_enabled(Cmd) of
- true -> gui_cmd(Cmd, State);
- false -> State
- end;
- false -> State
- end;
-
-%% File Menu
-gui_cmd('Load Settings...', State) ->
- Window = dbg_ui_mon_win:get_window(State#state.win),
- dbg_ui_settings:start(Window, State#state.coords,
- load, State#state.sfile),
- State;
-gui_cmd('Save Settings...', State) ->
- Window = dbg_ui_mon_win:get_window(State#state.win),
- dbg_ui_settings:start(Window, State#state.coords,
- save, State#state.sfile),
- State;
-gui_cmd('Exit', State) ->
- gui_cmd(stopped, State);
-
-%% Edit Menu
-gui_cmd('Refresh', State) ->
- int:clear(),
- Win = dbg_ui_mon_win:clear_processes(State#state.win),
- gui_enable_functions(undefined),
- State2 = State#state{win=Win, focus=undefined, pinfos=[]},
- lists:foldl(fun(PidTuple, S) ->
- int_cmd({new_process,PidTuple}, S)
- end,
- State2,
- int:snapshot());
-gui_cmd('Kill All', State) ->
- lists:foreach(fun(PInfo) ->
- case PInfo#pinfo.status of
- exit -> ignore;
- _Status -> exit(PInfo#pinfo.pid, kill)
- end
- end,
- State#state.pinfos),
- State;
-
-%% Module Menu
-gui_cmd('Interpret...', State) ->
- dbg_ui_interpret:start(State#state.gs, State#state.coords,
- State#state.intdir, State#state.mode),
- State;
-gui_cmd('Delete All Modules', State) ->
- lists:foreach(fun(Mod) -> int:nn(Mod) end, int:interpreted()),
- State;
-gui_cmd({module, Mod, What}, State) ->
- case What of
- delete -> int:nn(Mod);
- view -> dbg_ui_view:start(State#state.gs, Mod)
- end,
- State;
-
-%% Process Menu
-gui_cmd('Step', State) ->
- int:step((State#state.focus)#pinfo.pid),
- State;
-gui_cmd('Next', State) ->
- int:next((State#state.focus)#pinfo.pid),
- State;
-gui_cmd('Continue', State) ->
- int:continue((State#state.focus)#pinfo.pid),
- State;
-gui_cmd('Finish ', State) ->
- int:finish((State#state.focus)#pinfo.pid),
- State;
-gui_cmd('Attach', State) ->
- Pid = (State#state.focus)#pinfo.pid,
- case dbg_ui_winman:is_started(dbg_ui_trace:title(Pid)) of
- true -> ignore;
- false -> int:attach(Pid, trace_function(State))
- end,
- State;
-gui_cmd('Kill', State) ->
- exit((State#state.focus)#pinfo.pid, kill),
- State;
-
-%% Break Menu
-gui_cmd('Line Break...', State) ->
- dbg_ui_break:start(State#state.gs, State#state.coords, line),
- State;
-gui_cmd('Conditional Break...', State) ->
- dbg_ui_break:start(State#state.gs, State#state.coords, conditional),
- State;
-gui_cmd('Function Break...', State) ->
- dbg_ui_break:start(State#state.gs, State#state.coords, function),
- State;
-gui_cmd('Enable All', State) ->
- Breaks = int:all_breaks(),
- lists:foreach(fun ({{Mod, Line}, _Options}) ->
- int:enable_break(Mod, Line)
- end,
- Breaks),
- State;
-gui_cmd('Disable All', State) ->
- Breaks = int:all_breaks(),
- lists:foreach(fun ({{Mod, Line}, _Options}) ->
- int:disable_break(Mod, Line)
- end,
- Breaks),
- State;
-gui_cmd('Delete All', State) ->
- int:no_break(),
- State;
-gui_cmd({break, {Mod, Line}, What}, State) ->
- case What of
- delete -> int:delete_break(Mod, Line);
- {status, inactive} -> int:disable_break(Mod, Line);
- {status, active} -> int:enable_break(Mod, Line);
- {trigger, Action} -> int:action_at_break(Mod, Line, Action)
- end,
- State;
-
-%% Options Commands
-gui_cmd({'Trace Window', TraceWin}, State) ->
- State2 = State#state{tracewin=TraceWin},
- case State#state.attach of
- false -> ignore;
- {Flags, {dbg_ui_trace, start, StartFlags}} ->
- case trace_function(State2) of
- {_, _, StartFlags} -> ignore;
- NewFunction -> % {_, _, NewStartFlags}
- int:auto_attach(Flags, NewFunction)
- end;
- _AutoAttach -> ignore
- end,
- State2;
-gui_cmd({'Auto Attach', When}, State) ->
- if
- When =:= [] -> int:auto_attach(false);
- true ->
- Flags = [map(Name) || Name <- When],
- int:auto_attach(Flags, trace_function(State))
- end,
- State;
-gui_cmd({'Stack Trace', [Name]}, State) ->
- int:stack_trace(map(Name)),
- State;
-gui_cmd('Back Trace Size...', State) ->
- dbg_ui_edit:start(State#state.gs, State#state.coords, "Backtrace",
- 'Backtrace:', {integer, State#state.backtrace}),
- State;
-
-%% Help Menu
-gui_cmd('Debugger', State) ->
- HelpFile = filename:join([code:lib_dir(debugger), "doc", "html", "index.html"]),
- Window = dbg_ui_mon_win:get_window(State#state.win),
- tool_utils:open_help(Window, HelpFile),
- State;
-
-gui_cmd({focus, Pid, Win}, State) ->
- {value, PInfo} =
- lists:keysearch(Pid, #pinfo.pid, State#state.pinfos),
- gui_enable_functions(PInfo),
- State#state{win=Win, focus=PInfo};
-gui_cmd(default, State) ->
- case lists:member('Attach', menus(enabled, State#state.focus)) of
- true -> gui_cmd('Attach', State);
- false -> State
- end.
-
-%%--Commands from the interpreter-------------------------------------
-
-int_cmd({interpret, Mod}, State) ->
- Win = dbg_ui_mon_win:add_module(State#state.win, 'Module', Mod),
- State#state{win=Win};
-int_cmd({no_interpret, Mod}, State) ->
- Win = dbg_ui_mon_win:delete_module(State#state.win, Mod),
- State#state{win=Win};
-
-int_cmd({new_process, {Pid, Function, Status, Info}}, State) ->
-
- %% Create record with information about the process
- Name = registered_name(Pid),
- PInfo = #pinfo{pid=Pid, status=Status},
-
- %% Update window
- Win = dbg_ui_mon_win:add_process(State#state.win,
- Pid, Name, Function, Status, Info),
-
- %% Store process information
- PInfos = State#state.pinfos ++ [PInfo],
- State#state{win=Win, pinfos=PInfos};
-int_cmd({new_status, Pid, Status, Info}, State) ->
-
- %% Find stored information about the process
- PInfos = State#state.pinfos,
- {value, PInfo} = lists:keysearch(Pid, #pinfo.pid, PInfos),
-
- %% Update process information
- PInfo2 = PInfo#pinfo{status=Status},
- PInfos2 = lists:keyreplace(Pid, #pinfo.pid, PInfos, PInfo2),
- State2 = State#state{pinfos=PInfos2},
-
- %% Update window
- dbg_ui_mon_win:update_process(State2#state.win, Pid, Status, Info),
- case State2#state.focus of
- #pinfo{pid=Pid} ->
- gui_enable_functions(PInfo2),
- State2#state{focus=PInfo2};
- _ ->
- State2
- end;
-
-int_cmd({new_break, Break}, State) ->
- Win = dbg_ui_mon_win:add_break(State#state.win, 'Break', Break),
- State#state{win=Win};
-int_cmd({delete_break, Point}, State) ->
- Win = dbg_ui_mon_win:delete_break(State#state.win, Point),
- State#state{win=Win};
-int_cmd({break_options, Break}, State) ->
- dbg_ui_mon_win:update_break(State#state.win, Break),
- State;
-int_cmd(no_break, State) ->
- Win = dbg_ui_mon_win:clear_breaks(State#state.win),
- State#state{win=Win};
-int_cmd({no_break, Mod}, State) ->
- Win = dbg_ui_mon_win:clear_breaks(State#state.win, Mod),
- State#state{win=Win};
-
-int_cmd({auto_attach, AutoAttach}, State) ->
- OnFlags = case AutoAttach of
- false -> [];
- {Flags, _Function} -> Flags
- end,
- OffFlags = [init, exit, break] -- OnFlags,
- dbg_ui_mon_win:show_option(State#state.win, auto_attach, OnFlags),
- lists:foreach(fun(Flag) ->
- dbg_ui_mon_win:select(map(Flag), true)
- end,
- OnFlags),
- lists:foreach(fun(Flag) ->
- dbg_ui_mon_win:select(map(Flag), false)
- end,
- OffFlags),
- State#state{attach=AutoAttach};
-int_cmd({stack_trace, Flag}, State) ->
- dbg_ui_mon_win:show_option(State#state.win, stack_trace, Flag),
- dbg_ui_mon_win:select(map(Flag), true),
- State.
-
-
-%%====================================================================
-%% GUI auxiliary functions
-%%====================================================================
-
-menus() ->
- [{'File', [{'Load Settings...', 0},
- {'Save Settings...', 2},
- separator,
- {'Exit', 0}]},
- {'Edit', [{'Refresh', no},
- {'Kill All', no}]},
- {'Module', [{'Interpret...', 0},
- {'Delete All Modules', no},
- separator]},
- {'Process', [{'Step', 0},
- {'Next', 0},
- {'Continue', 0},
- {'Finish ', 0},
- separator,
- {'Attach', 0},
- {'Kill', no}]},
- {'Break', [{'Line Break...', 5},
- {'Conditional Break...', no},
- {'Function Break...', no},
- separator,
- {'Enable All', no},
- {'Disable All', no},
- {'Delete All', 0},
- separator]},
- {'Options', [{'Trace Window', no, cascade,
- [{'Button Area', no, check},
- {'Evaluator Area', no, check},
- {'Bindings Area', no, check},
- {'Trace Area', no, check}]},
- {'Auto Attach', no, cascade,
- [{'First Call', no, check},
- {'On Break', no, check},
- {'On Exit', no, check}]},
- {'Stack Trace', no, cascade,
- [{'Stack On, Tail', no, radio},
- {'Stack On, No Tail', no, radio},
- {'Stack Off', no, radio}]},
- {'Back Trace Size...', no}]},
- {'Help', [{'Debugger', no}]}].
-
-menus(enabled, undefined) ->
- [];
-menus(disabled, undefined) ->
- ['Step','Next','Continue','Finish ','Attach','Kill'];
-menus(enabled, #pinfo{status=exit}) ->
- ['Attach'];
-menus(disabled, #pinfo{status=exit}) ->
- ['Step','Next','Continue','Finish ','Kill'];
-menus(enabled, #pinfo{status=break}) ->
- ['Step','Next','Continue','Finish ','Attach','Kill'];
-menus(disabled, #pinfo{status=break}) ->
- [];
-menus(enabled, _PInfo) ->
- ['Attach','Kill'];
-menus(disabled, _PInfo) ->
- ['Step','Next','Continue','Finish '].
-
-shortcut(l) -> {always, 'Load Settings...'};
-shortcut(v) -> {always, 'Save Settings...'};
-shortcut(e) -> {always, 'Exit'};
-
-shortcut(i) -> {always, 'Interpret...'};
-
-shortcut(s) -> {if_enabled, 'Step'};
-shortcut(n) -> {if_enabled, 'Next'};
-shortcut(c) -> {if_enabled, 'Continue'};
-shortcut(f) -> {if_enabled, 'Finish '};
-shortcut(a) -> {if_enabled, 'Attach'};
-
-shortcut(b) -> {always, 'Line Break...'};
-shortcut(d) -> {always, 'Delete All'};
-
-shortcut(_) -> false.
-
-%% Enable/disable functionality depending on the state of the process
-%% currently in Focus
-gui_enable_functions(PInfo) ->
- Enabled = menus(enabled, PInfo),
- Disabled = menus(disabled, PInfo),
- dbg_ui_mon_win:enable(Enabled, true),
- dbg_ui_mon_win:enable(Disabled, false).
-
-%% Map values used by int to/from GUI names
-map('First Call') -> init; % Auto attach
-map('On Exit') -> exit;
-map('On Break') -> break;
-map(init) -> 'First Call';
-map(exit) -> 'On Exit';
-map(break) -> 'On Break';
-
-map('Stack On, Tail') -> all; % Stack trace
-map('Stack On, No Tail') -> no_tail;
-map('Stack Off') -> false;
-map(all) -> 'Stack On, Tail';
-map(true) -> 'Stack On, Tail';
-map(no_tail) -> 'Stack On, No Tail';
-map(false) -> 'Stack Off'.
-
-
-%%====================================================================
-%% Debugger settings
-%%====================================================================
-
-load_settings(SFile, State) ->
- case file:read_file(SFile) of
- {ok, Binary} ->
- case catch binary_to_term(Binary) of
- {debugger_settings, Settings} ->
- load_settings2(Settings,
- State#state{sfile=SFile,
- changed=false});
- _Error -> State
- end;
- {error, _Reason} -> State
- end.
-
-load_settings2(Settings, State) ->
- {TraceWin, AutoAttach, StackTrace, BackTrace, Files, Breaks} =
- Settings,
-
- TraceWinAll = ['Button Area', 'Evaluator Area', 'Bindings Area',
- 'Trace Area'],
- lists:foreach(fun(Area) -> dbg_ui_mon_win:select(Area, true) end,
- TraceWin),
- lists:foreach(fun(Area) -> dbg_ui_mon_win:select(Area, false) end,
- TraceWinAll--TraceWin),
-
- case AutoAttach of
- false -> int:auto_attach(false);
- {Flags, Function} -> int:auto_attach(Flags, Function)
- end,
-
- int:stack_trace(StackTrace),
-
- dbg_ui_mon_win:show_option(State#state.win, back_trace, BackTrace),
-
- case State#state.mode of
- local -> lists:foreach(fun(File) -> int:i(File) end, Files);
- global -> lists:foreach(fun(File) -> int:ni(File) end, Files)
- end,
- lists:foreach(fun(Break) ->
- {{Mod, Line}, [Status, Action, _, Cond]} =
- Break,
- int:break(Mod, Line),
- if
- Status =:= inactive ->
- int:disable_break(Mod, Line);
- true -> ignore
- end,
- if
- Action/=enable ->
- int:action_at_break(Mod,Line,Action);
- true -> ignore
- end,
- case Cond of
- CFunction when is_tuple(CFunction) ->
- int:test_at_break(Mod,Line,CFunction);
- null -> ignore
- end
- end,
- Breaks),
-
- State#state{tracewin=TraceWin, backtrace=BackTrace}.
-
-save_settings(SFile, State) ->
- Settings = {State#state.tracewin,
- int:auto_attach(),
- int:stack_trace(),
- State#state.backtrace,
- [int:file(Mod) || Mod <- int:interpreted()],
- int:all_breaks()},
- Binary = term_to_binary({debugger_settings, Settings}),
- case file:write_file(SFile, Binary) of
- ok ->
- State#state{sfile=SFile, changed=false};
- {error, _Reason} ->
- State
- end.
-
-
-%%====================================================================
-%% Other internal functions
-%%====================================================================
-
-registered_name(Pid) ->
- %% Yield in order to give Pid more time to register its name
- timer:sleep(200),
-
- Node = node(Pid),
- if
- Node =:= node() ->
- case erlang:process_info(Pid, registered_name) of
- {registered_name, Name} -> Name;
- _ -> undefined
- end;
- true ->
- case rpc:call(Node,erlang,process_info,
- [Pid,registered_name]) of
- {registered_name, Name} -> Name;
- _ -> undefined
- end
- end.
-
-trace_function(State) ->
- {dbg_ui_trace, start, [State#state.tracewin,State#state.backtrace]}.
diff --git a/lib/debugger/src/dbg_ui_mon_win.erl b/lib/debugger/src/dbg_ui_mon_win.erl
deleted file mode 100644
index 8655c7697a..0000000000
--- a/lib/debugger/src/dbg_ui_mon_win.erl
+++ /dev/null
@@ -1,573 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_mon_win).
--compile([{nowarn_deprecated_function,{gs,checkbutton,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,grid,2}},
- {nowarn_deprecated_function,{gs,gridline,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,listbox,2}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menubar,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-%% External exports
--export([init/0]).
--export([create_win/3, get_window/1,
- show_option/3,
- enable/2, is_enabled/1, select/2,
- add_module/3, delete_module/2,
- add_process/6, update_process/4, clear_processes/1,
- add_break/3, update_break/2, delete_break/2,
- clear_breaks/1, clear_breaks/2,
- handle_event/2
- ]).
-
--define(default_rows,50).
-
--record(moduleInfo, {module, menubtn}).
--record(procInfo, {pid, row}).
--record(breakInfo, {point, status, break}).
--record(winInfo, {window, % gsobj()
- grid, % gsobj()
- row, % int() Last row in grid
-
- focus, % int() Selected row in grid
-
- modules=[], % [#moduleInfo{}] Known modules
- processes=[], % [#procInfo{}] Known processes
- breaks=[], % [#breakInfo{}] Known breakpoints
-
- listbox, % gsobj() Listinng known modules
-
- %% Auto attach buttons
- fbutton, % gsobj()
- bbutton, % gsobj()
- ebutton, % gsobj()
- selected=[], % ['First Call'|'On Break'|'On Exit']
-
- slabel, % showing Stack Trace option
- blabel % showing Back Trace Size
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-init() ->
- dbg_ui_win:init().
-
-%%--------------------------------------------------------------------
-%% create_win(GS, Title, Menus) -> #winInfo{}
-%% GS = gsobj()
-%% Title = string()
-%% Menus = [menu()] See dbg_ui_win.erl
-%%--------------------------------------------------------------------
-
--define(PAD, 5).
--define(Wf, 150).
--define(Wg, 770).
--define(W, 800).
--define(H, 390).
-
-create_win(GS, Title, Menus) ->
- Win = gs:window(GS, [{title, Title},
- {width, ?W}, {height, ?H},
- {configure,true}, {destroy,true},
- {keypress,true}, {motion,true}]),
-
- MenuBar = gs:menubar(Win, []),
- dbg_ui_win:create_menus(MenuBar, Menus),
- dbg_ui_winman:windows_menu(MenuBar),
-
- Font = dbg_ui_win:font(normal),
-
- Frame = gs:frame(Win, [{x, ?PAD}, {y, 30},
- {width, ?Wf}, {height, ?H}]),
- Hlb = 200,
- Listbox = gs:listbox(Frame, [{x, 0}, {y, 0},
- {width, ?Wf}, {height, Hlb},
- {data, listbox},
- {doubleclick, true},
- {items, []}]),
- gs:label(Frame, [{x, 0}, {y, Hlb}, {width, ?Wf}, {height, 20},
- {align, w},
- {label, {text, "Auto Attach:"}}, {font, Font}]),
- Fbtn = gs:checkbutton(Frame, [{x, 0}, {y, Hlb+20},
- {width, ?Wf}, {height, 20},
- {label, {text, 'First Call'}},
- {align, w}, {font, Font},
- {data, autoattach}]),
- Bbtn = gs:checkbutton(Frame, [{x, 0}, {y, Hlb+40},
- {width, ?Wf}, {height, 20},
- {label, {text, 'On Break'}},
- {align, w}, {font, Font},
- {data, autoattach}]),
- Ebtn = gs:checkbutton(Frame, [{x, 0}, {y, Hlb+60},
- {width, ?Wf}, {height, 20},
- {label, {text, 'On Exit'}},
- {align, w}, {font, Font},
- {data, autoattach}]),
- SLabel = gs:label(Frame, [{x, 0}, {y, Hlb+80},
- {width, ?Wf}, {height, 40},
- {font, Font}, {align, w}]),
- BLabel = gs:label(Frame, [{x, 0}, {y, Hlb+120},
- {width, ?Wf}, {height, 40},
- {font, Font}, {align, w}]),
-
- Grid = gs:grid(Win, [{x, 2*?PAD+?Wf}, {y, 30},
- {width, ?W-(2*?PAD+?Wf)}, {height, ?H-30},
- {bg, grey}, {fg, black},
- {vscroll, right}, {hscroll, bottom},
- calc_columnwidths(?Wg),
- {rows, {1,?default_rows}}]),
- gs:gridline(Grid, [{row, 1}, {bw, 5}, {fg, blue},
- {font, Font},
- {text, {1,"Pid"}}, {text, {2,"Initial Call"}},
- {text, {3,"Name"}}, {text, {4,"Status"}},
- {text, {5,"Information"}}]),
-
- gs:config(Win, {map, true}),
- #winInfo{window=Win, grid=Grid, row=1, focus=0,
- listbox=Listbox,
- fbutton=Fbtn, bbutton=Bbtn, ebutton=Ebtn,
- slabel=SLabel, blabel=BLabel}.
-
-%%--------------------------------------------------------------------
-%% get_window(WinInfo) -> Window
-%% WinInfo = #winInfo{}
-%% Window = gsobj()
-%%--------------------------------------------------------------------
-get_window(WinInfo) ->
- WinInfo#winInfo.window.
-
-%%--------------------------------------------------------------------
-%% show_option(WinInfo, Option, Value) -> void()
-%% WinInfo = #winInfo{}
-%% Option = auto_attach | stack_trace | back_trace
-%% Value = [Flag] % Option==auto_attach
-%% Flag = init | break | exit
-%% | true | all | no_tail | false % Option==stack_trace
-%% | int() % Option==back_trace
-%%--------------------------------------------------------------------
-show_option(WinInfo, Option, Value) ->
- case Option of
-
- auto_attach ->
- lists:foreach(fun (Button) ->
- gs:config(Button, {select, false})
- end,
- option_buttons(WinInfo, [init, break, exit])),
- lists:foreach(fun (Button) ->
- gs:config(Button, {select, true})
- end,
- option_buttons(WinInfo, Value));
-
- stack_trace ->
- Text = case Value of
- all -> "Stack Trace:\n On (with tail)";
- true -> "Stack Trace:\n On (with tail)";
- no_tail -> "Stack Trace:\n On (no tail)";
- false -> "Stack Trace:\n Off"
- end,
- gs:config(WinInfo#winInfo.slabel, {label, {text, Text}});
-
- back_trace ->
- Text = "Back Trace Size:\n " ++ integer_to_list(Value),
- gs:config(WinInfo#winInfo.blabel, {label, {text, Text}})
- end.
-
-option_buttons(WinInfo, [init|Flags]) ->
- [WinInfo#winInfo.fbutton|option_buttons(WinInfo, Flags)];
-option_buttons(WinInfo, [break|Flags]) ->
- [WinInfo#winInfo.bbutton|option_buttons(WinInfo, Flags)];
-option_buttons(WinInfo, [exit|Flags]) ->
- [WinInfo#winInfo.ebutton|option_buttons(WinInfo, Flags)];
-option_buttons(_WinInfo, []) ->
- [].
-
-%%--------------------------------------------------------------------
-%% enable([MenuItem], Bool)
-%% is_enabled(MenuItem) -> Bool
-%% MenuItem = atom()
-%% Bool = boolean()
-%%--------------------------------------------------------------------
-enable(MenuItems, Bool) ->
- lists:foreach(fun(MenuItem) ->
- gs:config(MenuItem, {enable, Bool})
- end,
- MenuItems).
-
-is_enabled(MenuItem) ->
- gs:read(MenuItem, enable).
-
-%%--------------------------------------------------------------------
-%% select(MenuItem, Bool)
-%% MenuItem = atom()
-%% Bool = boolean()
-%%--------------------------------------------------------------------
-select(MenuItem, Bool) ->
- dbg_ui_win:select(MenuItem, Bool).
-
-%%--------------------------------------------------------------------
-%% add_module(WinInfo, Name, Mod) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Name = atom()
-%% Mod = atom()
-%%--------------------------------------------------------------------
-add_module(WinInfo, Menu, Mod) ->
- Modules = WinInfo#winInfo.modules,
- case lists:keymember(Mod, #moduleInfo.module, Modules) of
- false ->
- %% Create a menu for the module
- Font = dbg_ui_win:font(normal),
- MenuBtn = gs:menuitem(Menu, [{label, {text,Mod}},
- {font, Font},
- {itemtype, cascade}]),
- SubMenu = gs:menu(MenuBtn, []),
- gs:menuitem(SubMenu, [{label, {text,"View"}},
- {font, Font},
- {data, {module,Mod,view}}]),
- gs:menuitem(SubMenu, [{label, {text,"Delete"}},
- {font, Font},
- {data, {module,Mod,delete}}]),
-
- %% Add the module to the listbox
- gs:config(WinInfo#winInfo.listbox, {add, Mod}),
-
- ModInfo = #moduleInfo{module=Mod, menubtn=MenuBtn},
- WinInfo#winInfo{modules=[ModInfo | Modules]};
- true -> WinInfo
- end.
-
-%%--------------------------------------------------------------------
-%% delete_module(WinInfo, Mod) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Mod = atom()
-%%--------------------------------------------------------------------
-delete_module(WinInfo, Mod) ->
- {value, ModInfo} = lists:keysearch(Mod, #moduleInfo.module,
- WinInfo#winInfo.modules),
- gs:destroy(ModInfo#moduleInfo.menubtn),
- delete_module(WinInfo#winInfo.listbox, atom_to_list(Mod), 0),
- WinInfo#winInfo{modules=lists:keydelete(Mod, #moduleInfo.module,
- WinInfo#winInfo.modules)}.
-
-delete_module(Listbox, ModS, Index) ->
- case gs:read(Listbox, {get, Index}) of
- ModS ->
- gs:config(Listbox, {del, Index});
- _OtherModS ->
- delete_module(Listbox, ModS, Index+1)
- end.
-
-%%--------------------------------------------------------------------
-%% add_process(WinInfo, Pid, Name, Function, Status, Info) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Pid = pid()
-%% Name = undefined | atom()
-%% Function = {Mod, Func, Args}
-%% Status = idle | running | break | exit
-%% Info = {} | term()
-%%--------------------------------------------------------------------
-add_process(WinInfo, Pid, Name, {Mod,Func,Args}, Status, Info) ->
- Grid = WinInfo#winInfo.grid,
- Row = (WinInfo#winInfo.row)+1,
- GridLine = case gs:read(Grid, {obj_at_row, Row}) of
- undefined ->
- if Row>?default_rows ->
- gs:config(Grid,[{rows,{1,Row}}]);
- true -> ok
- end,
- gs:gridline(Grid,[{row,Row}, {bw,5}, {fg,black},
- {font,dbg_ui_win:font(normal)},
- {click, true},
- {doubleclick, true}]);
- GSObj ->
- GSObj
- end,
- Name2 = case Name of undefined -> ""; _ -> Name end,
- FuncS = io_lib:format("~w:~w/~w", [Mod, Func, length(Args)]),
- Info2 = case Info of {} -> ""; _ -> Info end,
- Options = [{text, {1,Pid}}, {text, {2,FuncS}}, {text, {3,Name2}},
- {text, {4,Status}}, {text, {5,Info2}},
- {data, {gridline, Pid}}],
- gs:config(GridLine, Options),
-
- ProcInfo = #procInfo{pid=Pid, row=Row},
- WinInfo#winInfo{processes=[ProcInfo|WinInfo#winInfo.processes],
- row=Row}.
-
-%%--------------------------------------------------------------------
-%% update_process(WinInfo, Pid, Status, Info)
-%% WinInfo = #winInfo{}
-%% Pid = pid()
-%% Status = idle | running | break | exit
-%% Info = {} | term()
-%%--------------------------------------------------------------------
-update_process(WinInfo, Pid, Status, Info) ->
- {value, ProcInfo} = lists:keysearch(Pid, #procInfo.pid,
- WinInfo#winInfo.processes),
-
- Grid = WinInfo#winInfo.grid,
- GridLine = gs:read(Grid, {obj_at_row, ProcInfo#procInfo.row}),
-
- Info2 = case Info of {} -> ""; _ -> Info end,
- gs:config(GridLine, [{text, {4,Status}}, {text, {5,Info2}}]).
-
-%%--------------------------------------------------------------------
-%% clear_processes(WinInfo) -> WinInfo
-%% WinInfo = #winInfo{}
-%%--------------------------------------------------------------------
-clear_processes(WinInfo) ->
- Grid = WinInfo#winInfo.grid,
- Max = WinInfo#winInfo.row,
- clear_processes(Grid, 2, Max),
- gs:config(Grid,[{rows,{1,?default_rows}}]),
- WinInfo#winInfo{row=1, focus=0, processes=[]}.
-
-clear_processes(Grid, Row, Max) when Row=<Max ->
- GridLine = gs:read(Grid, {obj_at_row, Row}),
- case gs:read(GridLine,{text,4}) of
- "exit" ->
- Pid = list_to_pid(gs:read(GridLine,{text,1})),
- dbg_ui_winman:clear_process(dbg_ui_trace:title(Pid));
- _ ->
- ok
- end,
-
- Options = [{fg, black},
- {{text,1}, ""}, {{text,2},""}, {{text,3},""},
- {{text,4}, ""}, {{text,5},""},
- {data, []}],
- gs:config(GridLine, Options),
- clear_processes(Grid, Row+1, Max);
-clear_processes(_Grid, Row, Max) when Row>Max ->
- done.
-
-%%--------------------------------------------------------------------
-%% add_break(WinInfo, Name, {Point, Options}) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Name = atom()
-%% Point = {Mod, Line}
-%% Options = [Status, Action, Mods, Cond]
-%% Status = active | inactive
-%% Action = enable | disable | delete
-%% Mods = null (not used)
-%% Cond = null | {Mod, Func}
-%%--------------------------------------------------------------------
-add_break(WinInfo, Menu, {Point, Options}) ->
- Break = dbg_ui_win:add_break(Menu, Point),
- dbg_ui_win:update_break(Break, Options),
- BreakInfo = #breakInfo{point=Point, break=Break},
- WinInfo#winInfo{breaks=[BreakInfo|WinInfo#winInfo.breaks]}.
-
-%%--------------------------------------------------------------------
-%% update_break(WinInfo, {Point, Options})
-%% WinInfo = #winInfo{}
-%% Point = {Mod, Line}
-%% Options = [Status, Action, Mods, Cond]
-%% Status = active | inactive
-%% Action = enable | disable | delete
-%% Mods = null (not used)
-%% Cond = null | {Mod, Func}
-%%--------------------------------------------------------------------
-update_break(WinInfo, {Point, Options}) ->
- {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point,
- WinInfo#winInfo.breaks),
- dbg_ui_win:update_break(BreakInfo#breakInfo.break, Options).
-
-%%--------------------------------------------------------------------
-%% delete_break(WinInfo, Point) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Point = {Mod, Line}
-%%--------------------------------------------------------------------
-delete_break(WinInfo, Point) ->
- {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point,
- WinInfo#winInfo.breaks),
- dbg_ui_win:delete_break(BreakInfo#breakInfo.break),
- WinInfo#winInfo{breaks=lists:keydelete(Point, #breakInfo.point,
- WinInfo#winInfo.breaks)}.
-
-%%--------------------------------------------------------------------
-%% clear_breaks(WinInfo) -> WinInfo
-%% clear_breaks(WinInfo, Mod) -> WinInfo
-%% WinInfo = #winInfo{}
-%%--------------------------------------------------------------------
-clear_breaks(WinInfo) ->
- lists:foreach(fun(BreakInfo) ->
- dbg_ui_win:delete_break(BreakInfo#breakInfo.break)
- end,
- WinInfo#winInfo.breaks),
- WinInfo#winInfo{breaks=[]}.
-clear_breaks(WinInfo, Mod) ->
- Fun =
- fun(BreakInfo) ->
- case BreakInfo#breakInfo.point of
- {Mod, _Line} ->
- dbg_ui_win:delete_break(BreakInfo#breakInfo.break),
- false;
- _ -> true
- end
- end,
- Breaks = lists:filter(Fun, WinInfo#winInfo.breaks),
- WinInfo#winInfo{breaks=Breaks}.
-
-%%--------------------------------------------------------------------
-%% handle_event(GSEvent, WinInfo) -> Command
-%% GSEvent = {gs, Id, Event, Data, Arg}
-%% WinInfo = #winInfo{}
-%% Command = ignore
-%% | stopped
-%% | {coords, {X,Y}}
-%%
-%% | {shortcut, Key}
-%% | MenuItem | {Menu, [MenuItem]}
-%% MenuItem = Menu = atom()
-%% | {break, Point, What}
-%% What = delete | {status, Status} | {trigger, Trigger}
-%% | {module, Mod, What}
-%% What = view | delete
-%%
-%% | {focus, Pid, WinInfo}
-%% | default
-%%--------------------------------------------------------------------
-%% Window events
-handle_event({gs, _Id, configure, _Data, [W, H |_]}, WinInfo) ->
- configure(WinInfo, {W, H}),
- ignore;
-handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) ->
- stopped;
-handle_event({gs, _Id, motion, _Data, [X,Y]}, WinInfo) ->
- {LastX, LastY} = dbg_ui_win:motion(X, Y),
- Win = WinInfo#winInfo.window,
- {coords, {gs:read(Win, x)+LastX-5, gs:read(Win, y)+LastY-5}};
-
-%% Menus and keyboard shortcuts
-handle_event({gs, _Id, keypress, _Data, [Key,_,_,1]}, _WinInfo) when
- Key/='Up', Key/='Down', Key/=p, Key/=n ->
- {shortcut, Key};
-handle_event({gs, _Id, click, {dbg_ui_winman, Win}, _Arg}, _WinInfo) ->
- dbg_ui_winman:raise(Win),
- ignore;
-handle_event({gs, _Id, click, {menuitem, Name}, _Arg}, _WinInfo) ->
- Name;
-handle_event({gs, _Id, click, {menu, Menu}, _Arg}, _WinInfo) ->
- Names = dbg_ui_win:selected(Menu),
- {Menu, Names};
-handle_event({gs, _Id, click, {break, Point, What}, _Arg}, _WinInfo) ->
- {break, Point, What};
-handle_event({gs, _Id, click, {module, Mod, What}, _Arg}, _WinInfo) ->
- {module, Mod, What};
-
-%% Listbox
-handle_event({gs, _Id, doubleclick, listbox, [_Index, ModS|_]}, _WI) ->
- {module, list_to_atom(ModS), view};
-
-%% Auto attach buttons
-handle_event({gs, _Id, click, autoattach, _Arg}, WinInfo) ->
- Names = lists:foldl(fun (Button, NamesAcc) ->
- case gs:read(Button, select) of
- true ->
- {text, Name} =
- gs:read(Button, label),
- [list_to_atom(Name)|NamesAcc];
- false ->
- NamesAcc
- end
- end,
- [],
- [WinInfo#winInfo.ebutton,
- WinInfo#winInfo.bbutton,
- WinInfo#winInfo.fbutton]),
- {'Auto Attach', Names};
-
-%% Process grid
-handle_event({gs, _Id, keypress, _Data, [Key|_]}, WinInfo) when
- Key =:= 'Up'; Key =:= 'Down' ->
- Dir = if Key =:= 'Up' -> up; Key =:= 'Down' -> down end,
- Row = move(WinInfo, Dir),
- if Row>1 ->
- WinInfo2 = highlight(WinInfo, Row),
- #procInfo{pid=Pid} =
- lists:keyfind(Row, #procInfo.row, WinInfo#winInfo.processes),
- {focus, Pid, WinInfo2};
- true ->
- ignore
- end;
-handle_event({gs, _Id, click, {gridline, Pid}, [_Col,Row|_]}, WinInfo) ->
- WinInfo2 = highlight(WinInfo, Row),
- {focus, Pid, WinInfo2};
-handle_event({gs, _Id, doubleclick, _Data, _Arg}, _WinInfo) ->
- default;
-
-handle_event(_GSEvent, _WinInfo) ->
- ignore.
-
-move(WinInfo, Dir) ->
- Row = WinInfo#winInfo.focus,
- Last = WinInfo#winInfo.row,
- if
- Dir =:= up, Row > 1 -> Row-1;
- Dir =:= down, Row < Last -> Row+1;
- true -> Row
- end.
-
-highlight(WinInfo, Row) ->
- Grid = WinInfo#winInfo.grid,
- case WinInfo#winInfo.focus of
- 0 -> ignore;
- Focus ->
- GridLine1 = gs:read(Grid, {obj_at_row, Focus}),
- gs:config(GridLine1, {fg, black})
- end,
- GridLine2 = gs:read(Grid, {obj_at_row, Row}),
- gs:config(GridLine2, {fg, white}),
- WinInfo#winInfo{focus=Row}.
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-configure(WinInfo, {W, H}) ->
- Grid = WinInfo#winInfo.grid,
- NewW = W - (2*?PAD+?Wf),
- Dx = NewW - gs:read(Grid, width),
- Dy = H-42 - gs:read(Grid, height),
- if
- (Dx+Dy) =/= 0 ->
- gs:config(Grid, [{width, NewW}, {height, H-30}]),
- Cols = calc_columnwidths(NewW),
- gs:config(Grid, Cols);
- true ->
- ok
- end.
-
-calc_columnwidths(Width) ->
- W = if
- Width =< ?Wg -> ?Wg;
- true -> Width
- end,
- First = [round(X) || X <- [0.13*W, 0.27*W, 0.18*W, 0.18*W]],
- Last = W - lists:sum(First) - 30,
- {columnwidths, First++[Last]}.
diff --git a/lib/debugger/src/dbg_ui_settings.erl b/lib/debugger/src/dbg_ui_settings.erl
deleted file mode 100644
index fcfd67966f..0000000000
--- a/lib/debugger/src/dbg_ui_settings.erl
+++ /dev/null
@@ -1,162 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_settings).
-
--include_lib("kernel/include/file.hrl").
-
-%% External exports
--export([start/4]).
-
-%% Internal exports
--export([init/6]).
-
-%% OTP-6011 What's denoted gs="Graphics system id" is now in fact
-%% the object id of the monitor window.
--record(state, {gs, % term() Graphics system id
- win, % term() Settings dialog window data
- monitor, % pid() Monitor pid
- action % load | save
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(GS, Pos, Action, SFile)
-%% GS = Graphics system id
-%% Pos = {X,Y}
-%% Action = load | save
-%% SFile = default | string()
-%%--------------------------------------------------------------------
-start(GS, Pos, Action, SFile) ->
- Title = case Action of
- load -> "Load Settings Dialog";
- save -> "Save Settings Dialog"
- end,
- case dbg_ui_winman:is_started(Title) of
- true -> ignore;
- false ->
- spawn(?MODULE, init, [self(), GS, Pos, Title, Action, SFile])
- end.
-
-%%====================================================================
-%% Internal exports
-%%====================================================================
-
-init(Monitor, GS, Pos, Title, Action, SFile) ->
- {SDir, SFileName} =
- if
- %% If settings are saved for the first time, and to
- %% the default directory HOME/erlang.tools/debugger,
- %% make sure the directory exists, or create it if
- %% desired and possible
- SFile==default -> {default_settings_dir(GS), "NoName.state"};
- true -> {filename:dirname(SFile), filename:basename(SFile)}
- end,
-
- Filter = filename:join(SDir, "*.state"),
- Extra = fun(_File) -> true end,
-
- %% Create window
- Win = case Action of
- load ->
- dbg_ui_filedialog_win:create_win(GS, Title, Pos, normal,
- Filter, Extra);
- save ->
- dbg_ui_filedialog_win:create_win(GS, Title, Pos, normal,
- Filter, Extra, SFileName)
- end,
- Window = dbg_ui_filedialog_win:get_window(Win),
- dbg_ui_winman:insert(Title, Window),
-
- State = #state{gs=GS, win=Win, monitor=Monitor, action=Action},
- loop(State).
-
-
-%%====================================================================
-%% Main loop and message handling
-%%====================================================================
-
-loop(State) ->
- receive
-
- %% From the GUI
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd = dbg_ui_filedialog_win:handle_event(GuiEvent,
- State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, _Data} ->
- loop(State);
- {dbg_ui_winman, destroy} ->
- exit(normal)
- end.
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd({stopped, _Dir}, _State) ->
- exit(normal);
-gui_cmd({win, Win}, State) ->
- State#state{win=Win};
-gui_cmd({select, File}, State) ->
- State#state.monitor ! {dbg_ui_settings, File, State#state.action},
- exit(normal).
-
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-default_settings_dir(GS) ->
- {ok, [[Home]]} = init:get_argument(home),
- DefDir = filename:join([Home, ".erlang_tools", "debugger"]),
-
- case filelib:is_dir(DefDir) of
- true -> DefDir;
- false ->
- {ok, CWD} = file:get_cwd(),
-
- Msg = ["Default directory", DefDir, "does not exist.",
- "Click OK to create it or",
- "Cancel to use other directory."],
- case tool_utils:confirm(GS, Msg) of
- ok ->
- ToolsDir = filename:dirname(DefDir),
- case filelib:is_dir(ToolsDir) of
- true ->
- case file:make_dir(DefDir) of
- ok -> DefDir;
- _Error -> CWD
- end;
- false ->
- case file:make_dir(ToolsDir) of
- ok ->
- case file:make_dir(DefDir) of
- ok -> DefDir;
- _Error -> CWD
- end;
- _Error -> CWD
- end
- end;
- cancel -> CWD
- end
- end.
diff --git a/lib/debugger/src/dbg_ui_trace.erl b/lib/debugger/src/dbg_ui_trace.erl
deleted file mode 100644
index 3e1fb2dcae..0000000000
--- a/lib/debugger/src/dbg_ui_trace.erl
+++ /dev/null
@@ -1,814 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_trace).
-
-%% External exports
--export([start/1, start/3]).
--export([title/1]).
-
--define(TRACEWIN, ['Button Area', 'Evaluator Area', 'Bindings Area']).
--define(BACKTRACE, 100).
-
--record(state, {gs, % term() Graphics system id
- win, % term() Attach process window data
- coords, % {X,Y} Mouse point position
-
- pid, % pid() Debugged process
- meta, % pid() Meta process
- status, % {Status,Mod,Line} | {exit,Where,Reason}
- % Status = init | idle | break
- % | wait_break | wait_running
- % | running
- % Where={Mod,Line} | null
-
- cm, % atom() | undefined Current module
- cm_obsolete=false, % boolean() Curr mod needs reloading
-
- stack, % {Cur,Max}
-
- trace, % boolean()
- stack_trace, % all | no_tail | false
- backtrace % integer() #call frames to fetch
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(Pid)
-%% start(Pid, TraceWin, BackTrace)
-%% Pid = pid()
-%% TraceWin = [WinArea]
-%% WinArea = 'Button|Evaluator|Bindings|Trace Area'
-%% Backtrace = integer()
-%%--------------------------------------------------------------------
-start(Pid) -> % Used by debugger:quick/3 (no monitor)
- start(Pid, ?TRACEWIN, ?BACKTRACE).
-start(Pid, TraceWin, BackTrace) ->
- case {whereis(dbg_wx_mon), whereis(dbg_ui_mon)} of
- {undefined, undefined} ->
- case which_gui() of
- gs ->
- start2(Pid, TraceWin, BackTrace);
- wx ->
- dbg_wx_trace:start(Pid, TraceWin, BackTrace)
- end;
- {undefined, Monitor} when is_pid(Monitor) ->
- start2(Pid, TraceWin, BackTrace);
- {Monitor, _} when is_pid(Monitor) ->
- dbg_wx_trace:start(Pid, TraceWin, BackTrace)
- end.
-
-start2(Pid, TraceWin, BackTrace) ->
- %% Inform int about my existence and get the meta pid back
- case int:attached(Pid) of
- {ok, Meta} ->
- init(Pid, Meta, TraceWin, BackTrace);
- error ->
- ignore
- end.
-
-which_gui() ->
- try
- wx:new(),
- wx:destroy(),
- wx
- catch _:_ ->
- gs
- end.
-
-%%--------------------------------------------------------------------
-%% title(Pid) -> string()
-%% By exporting this function, dbg_ui_mon may check with dbg_ui_winman
-%% if there already is an attach window for a given pid and thus avoid
-%% spawning processes unnecessarily.
-%%--------------------------------------------------------------------
-title(Pid) ->
- "Attach Process " ++ pid_to_list(Pid).
-
-
-%%====================================================================
-%% Main loop and message handling
-%%====================================================================
-
-init(Pid, Meta, TraceWin, BackTrace) ->
-
- %% Start necessary stuff
- GS = dbg_ui_trace_win:init(), % Graphics system
-
- %% Create attach process window
- Title = title(Pid),
- Win = dbg_ui_trace_win:create_win(GS, Title, TraceWin, menus()),
- Window = dbg_ui_trace_win:get_window(Win),
- dbg_ui_winman:insert(Title, Window),
-
- %% Initial process state
- State1 = #state{gs=GS, win=Win, coords={0,0}, pid=Pid, meta=Meta,
- status={idle,null,null},
- stack={1,1}},
-
- State2 = init_options(TraceWin,
- int:stack_trace(), % Stack Trace
- BackTrace, % Back trace size
- State1),
-
- State3 = init_contents(int:all_breaks(), % Breakpoints
- State2),
-
- int:meta(Meta, trace, State3#state.trace),
-
- gui_enable_updown(stack_trace, {1,1}),
- gui_enable_btrace(false, false),
- dbg_ui_trace_win:display(idle),
-
- loop(State3).
-
-init_options(TraceWin, StackTrace, BackTrace, State) ->
- lists:foreach(fun(Area) -> dbg_ui_trace_win:select(Area, true) end,
- TraceWin),
-
- Trace = lists:member('Trace Area', TraceWin),
-
- dbg_ui_trace_win:select(map(StackTrace), true),
-
- %% Backtrace size is (currently) not shown in window
-
- State#state{trace=Trace,stack_trace=StackTrace,backtrace=BackTrace}.
-
-init_contents(Breaks, State) ->
- Win =
- lists:foldl(fun(Break, Win) ->
- dbg_ui_trace_win:add_break(Win,
- 'Break',Break)
- end,
- State#state.win,
- Breaks),
-
- State#state{win=Win}.
-
-loop(#state{meta=Meta} = State) ->
- receive
-
- %% From the GUI main window
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd =
- dbg_ui_trace_win:handle_event(GuiEvent,State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the GUI help windows
- {gui, Cmd} ->
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the interpreter
- {int, Cmd} ->
- State2 = int_cmd(Cmd, State),
- loop(State2);
-
- %% From the meta process
- {Meta, Cmd} ->
- State2 = meta_cmd(Cmd, State),
- loop(State2);
- {NewMeta, {exit_at, Where, Reason, Cur}} ->
- State2 = meta_cmd({exit_at, Where, Reason, Cur},
- State#state{meta=NewMeta}),
- loop(State2);
-
- %% From the dbg_ui_edit process
- {dbg_ui_edit, 'Backtrace:', BackTrace} ->
- loop(State#state{backtrace=BackTrace});
- {dbg_ui_edit, Var, Val} ->
- Cmd = atom_to_list(Var)++"="++io_lib:format("~p", [Val]),
- State2 = gui_cmd({user_command, lists:flatten(Cmd)}, State),
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, Data} ->
- dbg_ui_winman:update_windows_menu(Data),
- loop(State);
- {dbg_ui_winman, destroy} ->
- exit(stop)
- end.
-
-%%--Commands from the GUI---------------------------------------------
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd({win, Win}, State) ->
- State#state{win=Win};
-gui_cmd(stopped, _State) ->
- exit(stop);
-gui_cmd({coords, Coords}, State) ->
- State#state{coords=Coords};
-
-gui_cmd({shortcut, Key}, State) ->
- case shortcut(Key) of
- {always, Cmd} -> gui_cmd(Cmd, State);
- {if_enabled, Cmd} ->
- case dbg_ui_trace_win:is_enabled(Cmd) of
- true -> gui_cmd(Cmd, State);
- false -> State
- end;
- false -> State
- end;
-
-%% File menu
-gui_cmd('Close', State) ->
- gui_cmd(stopped, State);
-
-%% Edit menu
-gui_cmd('Go To Line...', State) ->
- %% Will result in message handled below: {gui, {gotoline, Line}}
- dbg_ui_trace_win:helpwin(gotoline, State#state.win,
- State#state.gs, State#state.coords),
- State;
-gui_cmd({gotoline, Line}, State) ->
- Win = dbg_ui_trace_win:select_line(State#state.win, Line),
- State#state{win=Win};
-gui_cmd('Search...', State) ->
- dbg_ui_trace_win:helpwin(search, State#state.win,
- State#state.gs, State#state.coords),
- State;
-
-%% Process menu
-gui_cmd('Step', State) ->
- int:meta(State#state.meta, step),
- State;
-gui_cmd('Next', State) ->
- int:meta(State#state.meta, next),
- State;
-gui_cmd('Continue', State) ->
- int:meta(State#state.meta, continue),
- {Status, Mod, Line} = State#state.status,
- if
- Status==wait_break ->
- Win = dbg_ui_trace_win:unmark_line(State#state.win),
- gui_enable_functions(wait_running),
- State#state{win=Win, status={wait_running,Mod,Line}};
- true ->
- dbg_ui_trace_win:enable(['Stop'], true),
- dbg_ui_trace_win:enable(['Continue'], false),
- State
- end;
-gui_cmd('Finish', State) ->
- int:meta(State#state.meta, finish),
- State;
-gui_cmd('Skip', State) ->
- int:meta(State#state.meta, skip),
- State;
-gui_cmd('Time Out', State) ->
- int:meta(State#state.meta, timeout),
- State;
-gui_cmd('Stop', State) ->
- int:meta(State#state.meta, stop),
- {Status, Mod, Line} = State#state.status,
- if
- Status==wait_running ->
- Win = dbg_ui_trace_win:mark_line(State#state.win, Line,
- break),
- gui_enable_functions(wait_break),
- gui_enable_updown(State#state.stack_trace,
- State#state.stack),
- gui_enable_btrace(State#state.trace,
- State#state.stack_trace),
- dbg_ui_trace_win:display({wait, Mod, Line}),
- State#state{win=Win, status={wait_break,Mod,Line}};
- true ->
- dbg_ui_trace_win:enable(['Stop'], false),
- dbg_ui_trace_win:enable(['Continue'], true),
- State
- end;
-gui_cmd('Where', State) ->
- {_Cur, Max} = State#state.stack,
- Stack = {Max, Max},
- {_Status, Mod, Line} = State#state.status,
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid, break),
- gui_update_bindings(State#state.meta),
- gui_enable_updown(State#state.stack_trace, Stack),
- dbg_ui_trace_win:display(State#state.status),
- State#state{win=Win, cm=Mod, stack=Stack};
-
-gui_cmd('Kill', State) ->
- exit(State#state.pid, kill),
- State;
-gui_cmd('Messages', State) ->
- case int:meta(State#state.meta, messages) of
- [] ->
- dbg_ui_trace_win:eval_output("< No Messages!\n", bold);
- Messages ->
- dbg_ui_trace_win:eval_output("< --- Current Messages ---\n",
- bold),
- lists:foldl(
- fun(Msg, N) ->
- Str1 = io_lib:format(" ~w:", [N]),
- dbg_ui_trace_win:eval_output(Str1, bold),
- Str2 = io_lib:format(" ~ts~n",[io_lib:print(Msg)]),
- dbg_ui_trace_win:eval_output(Str2, normal),
- N+1
- end,
- 1,
- Messages)
- end,
- State;
-gui_cmd('Back Trace', State) ->
- dbg_ui_trace_win:trace_output("\nBACK TRACE\n----------\n"),
- lists:foreach(
- fun({Le, {Mod,Func,Args}}) ->
- Str = io_lib:format("~p > ~p:~p~p~n",
- [Le, Mod, Func, Args]),
- dbg_ui_trace_win:trace_output(Str);
- ({Le, {Fun,Args}}) ->
- Str = io_lib:format("~p > ~p~p~n", [Le, Fun, Args]),
- dbg_ui_trace_win:trace_output(Str);
- (_) -> ignore
- end,
- int:meta(State#state.meta, backtrace, State#state.backtrace)),
- dbg_ui_trace_win:trace_output("\n"),
- State;
-gui_cmd('Up', State) ->
- {Cur, Max} = State#state.stack,
- case int:meta(State#state.meta, stack_frame, {up, Cur}) of
- {New, {undefined,-1}, _Bs} -> % call from non-interpreted code
- Stack = {New, Max},
- Win = dbg_ui_trace_win:show_no_code(State#state.win),
- dbg_ui_trace_win:update_bindings([]),
- gui_enable_updown(State#state.stack_trace, Stack),
- dbg_ui_trace_win:display({New,null,null}),
- State#state{win=Win, cm=null, stack=Stack};
-
- {New, {Mod,Line}, Bs} ->
- Stack = {New, Max},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid,
- where),
- dbg_ui_trace_win:update_bindings(Bs),
- gui_enable_updown(State#state.stack_trace, Stack),
- dbg_ui_trace_win:display({New,Mod,Line}),
- State#state{win=Win, cm=Mod, stack=Stack};
- top ->
- dbg_ui_trace_win:enable(['Up'], false),
- State
- end;
-gui_cmd('Down', State) ->
- {Cur, Max} = State#state.stack,
- case int:meta(State#state.meta, stack_frame, {down, Cur}) of
- {New, {undefined,-1}, _Bs} -> % call from non-interpreted code
- Stack = {New, Max},
- Win = dbg_ui_trace_win:show_no_code(State#state.win),
- dbg_ui_trace_win:update_bindings([]),
- gui_enable_updown(State#state.stack_trace, Stack),
- dbg_ui_trace_win:display({New,null,null}),
- State#state{win=Win, cm=null, stack=Stack};
-
- {New, {Mod,Line}, Bs} ->
- Stack = {New, Max},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid,
- where),
- dbg_ui_trace_win:update_bindings(Bs),
- gui_enable_updown(State#state.stack_trace, Stack),
- dbg_ui_trace_win:display({New,Mod,Line}),
- State#state{win=Win, cm=Mod, stack=Stack};
-
- bottom ->
- gui_cmd('Where', State)
- end;
-
-%% Break menu
-gui_cmd('Line Break...', State) ->
- add_break(State#state.gs, State#state.coords, line,
- State#state.cm,
- dbg_ui_trace_win:selected_line(State#state.win)),
- State;
-gui_cmd('Conditional Break...', State) ->
- add_break(State#state.gs, State#state.coords, conditional,
- State#state.cm,
- dbg_ui_trace_win:selected_line(State#state.win)),
- State;
-gui_cmd('Function Break...', State) ->
- add_break(State#state.gs, State#state.coords, function,
- State#state.cm, undefined),
- State;
-gui_cmd('Enable All', State) ->
- Breaks = int:all_breaks(),
- ThisMod = State#state.cm,
- lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod ->
- int:enable_break(Mod, Line);
- (_Break) ->
- ignore
- end,
- Breaks),
- State;
-gui_cmd('Disable All', State) ->
- Breaks = int:all_breaks(),
- ThisMod = State#state.cm,
- lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod ->
- int:disable_break(Mod, Line);
- (_Break) ->
- ignore
- end,
- Breaks),
- State;
-gui_cmd('Delete All', State) ->
- int:no_break(State#state.cm),
- State;
-gui_cmd({break, {Mod, Line}, What}, State) ->
- case What of
- add -> int:break(Mod, Line);
- delete -> int:delete_break(Mod, Line);
- {status, inactive} -> int:disable_break(Mod, Line);
- {status, active} -> int:enable_break(Mod, Line);
- {trigger, Action} -> int:action_at_break(Mod, Line, Action)
- end,
- State;
-
-%% Options menu
-gui_cmd({'Trace Window', TraceWin}, State) ->
- Trace = lists:member('Trace Area', TraceWin),
- int:meta(State#state.meta, trace, Trace),
- Win = dbg_ui_trace_win:configure(State#state.win, TraceWin),
- {Status,_,_} = State#state.status,
- if
- Status==break; Status==wait_break ->
- gui_enable_btrace(Trace, State#state.stack_trace);
- true -> ignore
- end,
- State#state{win=Win, trace=Trace};
-gui_cmd({'Stack Trace', [Name]}, State) ->
- int:meta(State#state.meta, stack_trace, map(Name)),
- {Status,_,_} = State#state.status,
- if
- Status==break; Status==wait_break ->
- gui_enable_btrace(State#state.trace, map(Name));
- true -> ignore
- end,
- State;
-gui_cmd('Back Trace Size...', State) ->
- dbg_ui_edit:start(State#state.gs, State#state.coords, "Backtrace",
- 'Backtrace:', {integer, State#state.backtrace}),
- State;
-
-%% Help menu
-gui_cmd('Debugger', State) ->
- Window = dbg_ui_trace_win:get_window(State#state.win),
- HelpFile = filename:join([code:lib_dir(debugger),
- "doc", "html", "part_frame.html"]),
- tool_utils:open_help(Window, HelpFile),
- State;
-
-gui_cmd({user_command, Cmd}, State) ->
- {Status, _Mod, _Line} = State#state.status,
- if
- Status==break;
- Status==wait_break;
- Status==wait_running ->
- Cm = State#state.cm,
- Arg = case State#state.stack of
- {Cur, Max} when Cur<Max -> {Cm, Cmd, Cur};
- _Stack -> {Cm, Cmd}
- end,
-
- %% Reply will be received as {Meta, {eval_rsp, Res}}
- int:meta(State#state.meta, eval, Arg);
- true ->
- Str = "Commands not allowed",
- dbg_ui_trace_win:eval_output([$<,Str,10], normal)
- end,
- State;
-
-gui_cmd({edit, {Var, Val}}, State) ->
- dbg_ui_edit:start(State#state.gs, State#state.coords,
- "Edit variable", Var, {term, Val}),
- State.
-
-add_break(GS, Coords, Type, undefined, _Line) ->
- dbg_ui_break:start(GS, Coords, Type);
-add_break(GS, Coords, Type, Mod, undefined) ->
- dbg_ui_break:start(GS, Coords, Type, Mod);
-add_break(GS, Coords, Type, Mod, Line) ->
- dbg_ui_break:start(GS, Coords, Type, Mod, Line).
-
-%%--Commands from the interpreter-------------------------------------
-
-int_cmd({interpret, Mod}, State) ->
- if
- Mod==State#state.cm ->
- State#state{cm_obsolete=true};
- true ->
- State
- end;
-int_cmd({no_interpret, Mod}, State) ->
- if
- Mod==State#state.cm ->
- State#state{cm_obsolete=true};
- true ->
- Win = dbg_ui_trace_win:remove_code(State#state.win, Mod),
- State#state{win=Win}
- end;
-
-int_cmd({new_break, Break}, State) ->
- Win = dbg_ui_trace_win:add_break(State#state.win, 'Break', Break),
- State#state{win=Win};
-int_cmd({delete_break, Point}, State) ->
- Win = dbg_ui_trace_win:delete_break(State#state.win, Point),
- State#state{win=Win};
-int_cmd({break_options, Break}, State) ->
- Win = dbg_ui_trace_win:update_break(State#state.win, Break),
- State#state{win=Win};
-int_cmd(no_break, State) ->
- Win = dbg_ui_trace_win:clear_breaks(State#state.win),
- State#state{win=Win};
-int_cmd({no_break, Mod}, State) ->
- Win = dbg_ui_trace_win:clear_breaks(State#state.win, Mod),
- State#state{win=Win}.
-
-%%--Commands from the meta process------------------------------------
-
-%% Message received when first attached to a living process
-%% '_Trace' is a boolean indicating if the process is traced or not --
-%% ignore this as we already have ordered tracing or not depending on if
-%% the Trace Area is shown or not.
-meta_cmd({attached, Mod, Line, _Trace}, State) ->
- Win = if
- Mod/=undefined ->
- gui_enable_functions(init),
- gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid,
- break);
- true -> State#state.win
- end,
- State#state{win=Win, status={init,Mod,Line}, cm=Mod};
-
-%% Message received when returning to interpreted code
-meta_cmd({re_entry, dbg_ieval, eval_fun}, State) ->
- State;
-meta_cmd({re_entry, Mod, _Func}, State) ->
- Obs = State#state.cm_obsolete,
- case State#state.cm of
- Mod when Obs==true ->
- Win = gui_load_module(State#state.win, Mod,State#state.pid),
- State#state{win=Win, cm_obsolete=false};
- Mod -> State;
- Cm ->
- Win = gui_show_module(State#state.win, Mod, 0,
- Cm, State#state.pid, break),
- State#state{win=Win, cm=Mod}
- end;
-
-%% Message received when attached to a terminated process
-meta_cmd({exit_at, null, Reason, Cur}, State) ->
- Stack = {Cur, Cur},
- gui_enable_functions(exit),
- gui_enable_updown(false, Stack),
- dbg_ui_trace_win:display({exit, null, Reason}),
- State#state{status={exit,null,Reason}, stack=Stack};
-meta_cmd({exit_at, {Mod,Line}, Reason, Cur}, State) ->
- Stack = {Cur+1, Cur+1},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid, break),
- gui_enable_functions(exit),
- gui_enable_updown(State#state.stack_trace, Stack),
- gui_enable_btrace(State#state.trace, State#state.stack_trace),
- gui_update_bindings(State#state.meta),
- dbg_ui_trace_win:display({exit, {Mod,Line}, Reason}),
- State#state{win=Win, cm=Mod,status={exit,{Mod,Line},Reason},
- stack=Stack};
-
-meta_cmd({break_at, Mod, Line, Cur}, State) ->
- Stack = {Cur,Cur},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid, break),
- gui_enable_functions(break),
- gui_enable_updown(State#state.stack_trace, Stack),
- gui_enable_btrace(State#state.trace, State#state.stack_trace),
- gui_update_bindings(State#state.meta),
- dbg_ui_trace_win:display({break, Mod, Line}),
- State#state{win=Win, cm=Mod, status={break,Mod,Line}, stack=Stack};
-meta_cmd({func_at, Mod, Line, Cur}, State) ->
- Stack = {Cur,Cur},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid, where),
- gui_enable_functions(idle),
- dbg_ui_trace_win:display(idle),
- State#state{win=Win, cm=Mod, status={idle,Mod,Line}, stack=Stack};
-meta_cmd({wait_at, Mod, Line, Cur}, #state{status={Status,_,_}}=State)
- when Status/=init, Status/=break ->
- Stack = {Cur,Cur},
- gui_enable_functions(wait_running),
- dbg_ui_trace_win:display({wait,Mod,Line}),
- State#state{status={wait_running,Mod,Line}, stack=Stack};
-meta_cmd({wait_at, Mod, Line, Cur}, State) ->
- Stack = {Cur,Cur},
- Win = gui_show_module(State#state.win, Mod, Line,
- State#state.cm, State#state.pid, break),
- gui_enable_functions(wait_break),
- gui_enable_updown(State#state.stack_trace, Stack),
- gui_enable_btrace(State#state.trace, State#state.stack_trace),
- gui_update_bindings(State#state.meta),
- dbg_ui_trace_win:display({wait, Mod, Line}),
- State#state{win=Win, cm=Mod, status={wait_break,Mod,Line},
- stack=Stack};
-meta_cmd({wait_after_at, Mod, Line, Sp}, State) ->
- meta_cmd({wait_at, Mod, Line, Sp}, State);
-meta_cmd(running, State) ->
- Win = dbg_ui_trace_win:unmark_line(State#state.win),
- gui_enable_functions(running),
- dbg_ui_trace_win:update_bindings([]),
- dbg_ui_trace_win:display({running, State#state.cm}),
- State#state{win=Win, status={running,null,null}};
-
-meta_cmd(idle, State) ->
- Win = dbg_ui_trace_win:show_no_code(State#state.win),
- gui_enable_functions(idle),
- dbg_ui_trace_win:update_bindings([]),
- dbg_ui_trace_win:display(idle),
- State#state{win=Win, status={idle,null,null}, cm=undefined};
-
-%% Message about changed trace option can be ignored, the change must
-%% have been ordered by this process. (In theory, the change could have
-%% been ordered by another attached process. The Debugger, though,
-%% allows max one attached process per debugged process).
-meta_cmd({trace, _Bool}, State) ->
- State;
-
-meta_cmd({stack_trace, Flag}, State) ->
- dbg_ui_trace_win:select(map(Flag), true),
- gui_enable_updown(Flag, State#state.stack),
- {Status,_,_} = State#state.status,
- if
- Status==break; Status==wait_break ->
- gui_enable_btrace(State#state.trace, Flag);
- true -> ignore
- end,
- State#state{stack_trace=Flag};
-
-meta_cmd({trace_output, Str}, State) ->
- dbg_ui_trace_win:trace_output(Str),
- State;
-
-%% Reply on a user command
-meta_cmd({eval_rsp, Res}, State) ->
- Str = io_lib:print(Res),
- dbg_ui_trace_win:eval_output([$<,Str,10], normal),
- State.
-
-
-%%====================================================================
-%% GUI auxiliary functions
-%%====================================================================
-
-menus() ->
- [{'File', [{'Close', no}]},
- {'Edit', [{'Go To Line...', no},
- {'Search...', no}]},
- {'Process', [{'Step', 0},
- {'Next', 0},
- {'Continue', 0},
- {'Finish', 0},
- {'Skip', no},
- {'Time Out', no},
- {'Stop', no},
- separator,
- {'Kill', no},
- separator,
- {'Messages', 0},
- {'Back Trace', no},
- separator,
- {'Where', 0},
- {'Up', no},
- {'Down', no}]},
- {'Break', [{'Line Break...', 5},
- {'Conditional Break...', no},
- {'Function Break...', no},
- separator,
- {'Enable All', no},
- {'Disable All', no},
- {'Delete All', 0},
- separator]},
- {'Options', [{'Trace Window', no, cascade,
- [{'Button Area', no, check},
- {'Evaluator Area', no, check},
- {'Bindings Area', no, check},
- {'Trace Area', no, check}]},
- {'Stack Trace', no, cascade,
- [{'Stack On, Tail', no, radio},
- {'Stack On, No Tail', no, radio},
- {'Stack Off', no, radio}]},
- {'Back Trace Size...', no}]},
- {'Help', [{'Debugger', no}]}].
-
-%% enable(Status) -> [MenuItem]
-%% Status = init % when first message from Meta has arrived
-%% | idle | break | exit | wait_break | wait_running | running
-enable(init) -> [];
-enable(idle) -> ['Stop','Kill'];
-enable(break) -> ['Step','Next','Continue','Finish','Skip',
- 'Kill','Messages'];
-enable(exit) -> [];
-enable(wait_break) -> ['Continue','Time Out','Kill'];
-enable(wait_running) -> ['Stop','Kill'];
-enable(running) -> ['Stop','Kill'].
-
-all_buttons() ->
- ['Step','Next','Continue','Finish','Skip','Time Out','Stop',
- 'Kill','Messages','Back Trace','Where','Up','Down'].
-
-shortcut(s) -> {if_enabled, 'Step'};
-shortcut(n) -> {if_enabled, 'Next'};
-shortcut(c) -> {if_enabled, 'Continue'};
-shortcut(f) -> {if_enabled, 'Finish'};
-shortcut(m) -> {if_enabled, 'Messages'};
-shortcut(w) -> {if_enabled, 'Where'};
-
-shortcut(b) -> {always, 'Line Break...'};
-shortcut(d) -> {always, 'Delete All'};
-
-shortcut(_) -> false.
-
-map('Stack On, Tail') -> all; % Stack trace
-map('Stack On, No Tail') -> no_tail;
-map('Stack Off') -> false;
-map(all) -> 'Stack On, Tail';
-map(true) -> 'Stack On, Tail';
-map(no_tail) -> 'Stack On, No Tail';
-map(false) -> 'Stack Off'.
-
-
-%% gui_show_module(Win, Mod, Line, Cm, Pid, How) -> Win
-%% gui_show_module(Win, {Mod,Line}, _Reason, Cm, Pid, How) -> Win
-%% How = where | break
-%% Show contents of a module in code area
-gui_show_module(Win, {Mod,Line}, _Reason, Cm, Pid, How) ->
- gui_show_module(Win, Mod, Line, Cm, Pid, How);
-gui_show_module(Win, Mod, Line, Mod, _Pid, How) ->
- dbg_ui_trace_win:mark_line(Win, Line, How);
-gui_show_module(Win, Mod, Line, _Cm, Pid, How) ->
- Win2 = case dbg_ui_trace_win:is_shown(Win, Mod) of
- {true, Win3} -> Win3;
- false -> gui_load_module(Win, Mod, Pid)
- end,
- dbg_ui_trace_win:mark_line(Win2, Line, How).
-
-gui_load_module(Win, Mod, Pid) ->
- dbg_ui_trace_win:display({text, "Loading module..."}),
- Contents = int:contents(Mod, Pid),
- Win2 = dbg_ui_trace_win:show_code(Win, Mod, Contents),
- dbg_ui_trace_win:display({text, ""}),
- Win2.
-
-gui_update_bindings(Meta) ->
- Bs = int:meta(Meta, bindings, nostack),
- dbg_ui_trace_win:update_bindings(Bs).
-
-gui_enable_functions(Status) ->
- Enable = enable(Status),
- Disable = all_buttons() -- Enable,
- dbg_ui_trace_win:enable(Disable, false),
- dbg_ui_trace_win:enable(Enable, true).
-
-gui_enable_updown(Flag, Stack) ->
- {Enable, Disable} =
- if
- Flag==false -> {[], ['Up', 'Down']};
- true ->
- case Stack of
- {1,1} -> {[], ['Up', 'Down']};
- {2,2} -> {[], ['Up', 'Down']};
- {Max,Max} -> {['Up'], ['Down']};
- {2,_Max} -> {['Down'], ['Up']};
- {_Cur,_Max} -> {['Up', 'Down'], []}
- end
- end,
- dbg_ui_trace_win:enable(Enable, true),
- dbg_ui_trace_win:enable(Disable, false),
- if
- Enable==[] -> dbg_ui_trace_win:enable(['Where'], false);
- true -> dbg_ui_trace_win:enable(['Where'], true)
- end.
-
-gui_enable_btrace(Trace, StackTrace) ->
- Bool = if
- Trace==false -> false;
- StackTrace==false -> false;
- true -> true
- end,
- dbg_ui_trace_win:enable(['Back Trace'], Bool).
diff --git a/lib/debugger/src/dbg_ui_trace_win.erl b/lib/debugger/src/dbg_ui_trace_win.erl
deleted file mode 100644
index beb3fbd71e..0000000000
--- a/lib/debugger/src/dbg_ui_trace_win.erl
+++ /dev/null
@@ -1,1595 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_trace_win).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,checkbutton,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,4}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,editor,2}},
- {nowarn_deprecated_function,{gs,editor,3}},
- {nowarn_deprecated_function,{gs,entry,2}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,frame,3}},
- {nowarn_deprecated_function,{gs,grid,3}},
- {nowarn_deprecated_function,{gs,gridline,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,label,3}},
- {nowarn_deprecated_function,{gs,menubar,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,window,2}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-%% External exports
--export([init/0]).
--export([create_win/4, get_window/1,
- configure/2,
- enable/2, is_enabled/1, select/2,
- add_break/3, update_break/2, delete_break/2,
- clear_breaks/1, clear_breaks/2,
- display/1, % Help messages
- is_shown/2, % Code area
- show_code/3, show_no_code/1, remove_code/2,
- mark_line/3, unmark_line/1,
- select_line/2, selected_line/1,
- eval_output/2, % Evaluator area
- update_bindings/1, % Bindings area
- trace_output/1, % Trace area
- handle_event/2
- ]).
--export([helpwin/4, % Help windows
- helpwin/5]).
-
--record(breakInfo, {point, status, break}).
--record(winInfo, {window, % gsobj()
- size, % {W, H}
- flags, % {F,F,F,F} F = open|close
-
- marked_line=0, % integer() Current line
- selected_line=0, % integer() Selected line
-
- breaks=[], % [#breakInfo{}] Known breakpoints
-
- editor, % {Mod, Editor} Visible code editor
- editors=[] % [{Mod,Editor}] Code editors
- }).
-
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% init() -> GS
-%% GS = term()
-%%--------------------------------------------------------------------
-init() ->
- dbg_ui_win:init().
-
-%%--------------------------------------------------------------------
-%% create_win(GS, Title, TraceWin, Menus) -> #winInfo{}
-%% GS = gsobj()
-%% Title = string()
-%% TraceWin = [WinArea]
-%% WinArea = 'Button|Evaluator|Bindings|Trace Area'
-%% Menus = [menu()] See dbg_ui_win.erl
-%%--------------------------------------------------------------------
-create_win(GS, Title, TraceWin, Menus) ->
- Bu = flip(lists:member('Button Area', TraceWin)),
- Ev = flip(lists:member('Evaluator Area', TraceWin)),
- Bi = flip(lists:member('Bindings Area', TraceWin)),
- Tr = flip(lists:member('Trace Area', TraceWin)),
-
- Win = gs:window(trace_window, GS, [{title, Title},
- {width, 550},
- {configure,true}, {destroy,true},
- {keypress,true}, {motion,true}]),
-
- MenuBar = gs:menubar(Win, []),
- dbg_ui_win:create_menus(MenuBar, Menus),
- dbg_ui_winman:windows_menu(MenuBar),
-
- FrameOpts = [{anchor,nw}, {relief,raised}, {bw,2}, {keypress,true}],
- Editor = code_area(2, 25, FrameOpts, Win),
- button_area(Bu, 2, 235, FrameOpts, Win),
- eval_area({Ev,Bi}, 2, 265, FrameOpts, Win),
- bind_area({Ev,Bi}, 300, 265, FrameOpts, Win),
- trace_area(Tr, 2, 475, FrameOpts, Win),
-
- Flags = {Bu, Ev, Bi, Tr},
- resizebar(rb1(Flags), 'RB1', 2, 225, 710, 10, Win),
- resizebar(rb2(Flags), 'RB2', 2, 465, 710, 10, Win),
- resizebar(rb3(Flags), 'RB3', 290, 265, 10, 200, Win),
- config_v(),
- config_h(),
-
- gs:config(Win,{height,
- 25 +
- gs:read('CodeArea', height) +
- gs:read('RB1', height) +
- gs:read('ButtonArea', height) +
- erlang:max(gs:read('EvalArea', height),
- gs:read('BindArea', height)) +
- gs:read('RB2', height) +
- gs:read('TraceArea', height)}),
-
- gs:config(Win, {map, true}),
- #winInfo{window=Win, size={gs:read(Win,width), gs:read(Win,height)},
- flags=Flags,
- editor={'$top', Editor}, editors=[{'$top', Editor}]}.
-
-flip(true) -> open;
-flip(false) -> close.
-
-%%--------------------------------------------------------------------
-%% get_window(WinInfo) -> Window
-%% WinInfo = #winInfo{}
-%% Window = gsobj()
-%%--------------------------------------------------------------------
-get_window(WinInfo) ->
- WinInfo#winInfo.window.
-
-%%--------------------------------------------------------------------
-%% configure(WinInfo, TraceWin) -> WinInfo
-%% WinInfo = #winInfo{}
-%% TraceWin = [WinArea]
-%% WinArea = 'Button|Evaluator|Bindings|Trace Area'
-%% Window areas should be opened or closed.
-%%--------------------------------------------------------------------
-configure(WinInfo, TraceWin) ->
- {Bu1, Ev1, Bi1, Tr1} = OldFlags = WinInfo#winInfo.flags,
- Bu2 = flip(lists:member('Button Area', TraceWin)),
- Ev2 = flip(lists:member('Evaluator Area', TraceWin)),
- Bi2 = flip(lists:member('Bindings Area', TraceWin)),
- Tr2 = flip(lists:member('Trace Area', TraceWin)),
- NewFlags = {Bu2, Ev2, Bi2, Tr2},
-
- Win = WinInfo#winInfo.window,
- W = gs:read(Win, width),
- H = gs:read(Win, height),
-
- H2 = if
- Bu1 =:= close, Bu2 =:= open ->
- resize_button_area(open, width, W-4),
- gs:config('ButtonArea', {height, 30}),
- H+30;
- Bu1 =:= open, Bu2 =:= close ->
- gs:config('ButtonArea', [{width, 0}, {height, 0}]),
- H-30;
- true -> H
- end,
- H3 = if
- Ev1 =:= close, Ev2 =:= open, Bi1 =:= open ->
- Wnew1 = round((W-10-4)/2), % W = window/2 - rb - pads
- Hbi1 = gs:read('BindArea', height), % H = bind area h
- resize_eval_area(open, width, Wnew1),
- resize_eval_area(open, height, Hbi1),
- gs:config('RB3', {width, 10}),
- gs:config('RB3', {height, Hbi1}),
- resize_bind_area(open, width,
- Wnew1-gs:read('BindArea', width)),
- H2;
- Ev1 =:= close, Ev2 =:= open, Bi1 =:= close ->
- resize_eval_area(open, width, W-4),
- resize_eval_area(open, height, 200),
- H2+200;
- Ev1 =:= open, Ev2 =:= close, Bi1 =:= open ->
- gs:config('EvalArea', [{width,0}, {height,0}]),
- gs:config('RB3', [{width, 0}, {height, 0}]),
- Wnew2 = W-4,
- resize_bind_area(open, width,
- Wnew2-gs:read('BindArea', width)),
- H2;
- Ev1 =:= open, Ev2 =:= close, Bi1 =:= close ->
- Hs1 = gs:read('EvalArea', height),
- gs:config('EvalArea', [{width, 0}, {height, 0}]),
- H2-Hs1;
- true -> H2
- end,
- H4 = if
- Bi1 =:= close, Bi2 =:= open, Ev2 =:= open ->
- Wnew3 = round((W-10-4)/2), % W = window/2 - rb - pads
- Hs2 = gs:read('EvalArea', height), % H = eval area h
- resize_bind_area(open, width, Wnew3),
- resize_bind_area(open, height, Hs2),
- gs:config('RB3', [{width,10},{height,Hs2}]),
- resize_eval_area(open, width,
- Wnew3-gs:read('EvalArea', width)),
- H3;
- Bi1 =:= close, Bi2 =:= open, Ev2 =:= close ->
- resize_bind_area(open, width, W-4),
- resize_bind_area(open, height, 200),
- H3+200;
- Bi1 =:= open, Bi2 =:= close, Ev2 =:= open ->
- gs:config('BindArea', [{width, 0}, {height, 0}]),
- gs:config('RB3', [{width, 0}, {height, 0}]),
- Wnew4 = W-4,
- resize_eval_area(open, width,
- Wnew4-gs:read('EvalArea', width)),
- H3;
- Bi1 =:= open, Bi2 =:= close, Ev2 =:= close ->
- Hbi2 = gs:read('BindArea', height),
- gs:config('BindArea', [{width, 0}, {height, 0}]),
- H3-Hbi2;
- true -> H3
- end,
- H5 = if
- Tr1 =:= close, Tr2 =:= open ->
- resize_trace_area(open, width, W-4),
- resize_trace_area(open, height, 200),
- H4+200;
- Tr1 =:= open, Tr2 =:= close ->
- Hf = gs:read('TraceArea', height),
- gs:config('TraceArea', [{width, 0}, {height, 0}]),
- H4-Hf;
- true -> H4
- end,
- gs:config(Win, {height, H5}),
-
- RB1old = rb1(OldFlags), RB1new = rb1(NewFlags),
- if
- RB1old =:= close, RB1new =:= open ->
- gs:config('RB1', [{width, W-4}, {height, 10}]),
- gs:config(Win, {height, gs:read(Win, height)+10});
- RB1old =:= open, RB1new =:= close ->
- gs:config('RB1', [{width, 0}, {height, 0}, lower]),
- gs:config(Win, {height, gs:read(Win, height)-10});
- true -> ignore
- end,
-
- RB2old = rb2(OldFlags), RB2new = rb2(NewFlags),
- if
- RB2old =:= close, RB2new =:= open ->
- gs:config('RB2', [{width, W-4}, {height, 10}]),
- gs:config(Win, {height,gs:read(Win, height)+10});
- RB2old =:= open, RB2new =:= close ->
- gs:config('RB2', [{width, 0}, {height, 0}, lower]),
- gs:config(Win, {height, gs:read(Win, height)-10});
- true -> ignore
- end,
- config_v(),
- config_h(),
-
- flush_configure(),
-
- WinInfo#winInfo{size={gs:read(Win, width), gs:read(Win, height)},
- flags=NewFlags}.
-
-flush_configure() ->
- receive
- {gs, _Id, configure, _Data, _Arg} ->
- flush_configure()
- after 100 ->
- true
- end.
-
-%%--------------------------------------------------------------------
-%% enable([MenuItem], Bool)
-%% is_enabled(MenuItem) -> Bool
-%% MenuItem = atom()
-%% Bool = boolean()
-%%--------------------------------------------------------------------
-enable(MenuItems, Bool) ->
- lists:foreach(fun(MenuItem) ->
- gs:config(MenuItem, {enable, Bool}),
- case is_button(MenuItem) of
- {true, Button} ->
- gs:config(Button, {enable, Bool});
- false -> ignore
- end
- end,
- MenuItems).
-
-is_enabled(MenuItem) ->
- gs:read(MenuItem, enable).
-
-%%--------------------------------------------------------------------
-%% select(MenuItem, Bool)
-%% MenuItem = atom()
-%% Bool = boolean()
-%%--------------------------------------------------------------------
-select(MenuItem, Bool) ->
- dbg_ui_win:select(MenuItem, Bool).
-
-%%--------------------------------------------------------------------
-%% add_break(WinInfo, Name, {Point, Options}) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Name = atom() Menu name
-%% Point = {Mod, Line}
-%% Options = [Status, Action, Mods, Cond]
-%% Status = active | inactive
-%% Action = enable | disable | delete
-%% Mods = null (not used)
-%% Cond = null | {Mod, Func}
-%%--------------------------------------------------------------------
-add_break(WinInfo, Menu, {{Mod,Line},[Status|_Options]}=Break) ->
- case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of
- {Mod, Editor} ->
- add_break_to_code(Editor, Line, Status);
- false -> ignore
- end,
- add_break_to_menu(WinInfo, Menu, Break).
-
-add_break_to_code(Editor, Line, Status) ->
- Color = if Status =:= active -> red; Status =:= inactive -> blue end,
- config_editor(Editor, [{overwrite,{{Line,0},"-@- "}},
- {fg,{{{Line,0},{Line,lineend}}, Color}}]).
-
-add_break_to_menu(WinInfo, Menu, {Point, [Status|_Options]=Options}) ->
- Break = dbg_ui_win:add_break(Menu, Point),
- dbg_ui_win:update_break(Break, Options),
- BreakInfo = #breakInfo{point=Point, status=Status, break=Break},
- WinInfo#winInfo{breaks=[BreakInfo|WinInfo#winInfo.breaks]}.
-
-%%--------------------------------------------------------------------
-%% update_break(WinInfo, {Point, Options}) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Point = {Mod, Line}
-%% Options = [Status, Action, Mods, Cond]
-%% Status = active | inactive
-%% Action = enable | disable | delete
-%% Mods = null (not used)
-%% Cond = null | {Mod, Func}
-%%--------------------------------------------------------------------
-update_break(WinInfo, {{Mod,Line},[Status|_Options]}=Break) ->
- case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of
- {Mod, Editor} ->
- add_break_to_code(Editor, Line, Status);
- false -> ignore
- end,
- update_break_in_menu(WinInfo, Break).
-
-update_break_in_menu(WinInfo, {Point, [Status|_Options]=Options}) ->
- {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point,
- WinInfo#winInfo.breaks),
- dbg_ui_win:update_break(BreakInfo#breakInfo.break, Options),
- BreakInfo2 = BreakInfo#breakInfo{status=Status},
- WinInfo#winInfo{breaks=lists:keyreplace(Point, #breakInfo.point,
- WinInfo#winInfo.breaks,
- BreakInfo2)}.
-
-%%--------------------------------------------------------------------
-%% delete_break(WinInfo, Point) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Point = {Mod, Line}
-%%--------------------------------------------------------------------
-delete_break(WinInfo, {Mod,Line}=Point) ->
- case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of
- {Mod, Editor} -> delete_break_from_code(Editor, Line);
- false -> ignore
- end,
- delete_break_from_menu(WinInfo, Point).
-
-delete_break_from_code(Editor, Line) ->
- Prefix = string:substr(integer_to_list(Line)++": ", 1, 5),
- config_editor(Editor, [{overwrite,{{Line,0},Prefix}},
- {fg,{{{Line,0},{Line,lineend}}, black}}]).
-
-delete_break_from_menu(WinInfo, Point) ->
- {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point,
- WinInfo#winInfo.breaks),
- dbg_ui_win:delete_break(BreakInfo#breakInfo.break),
- WinInfo#winInfo{breaks=lists:keydelete(Point, #breakInfo.point,
- WinInfo#winInfo.breaks)}.
-
-%%--------------------------------------------------------------------
-%% clear_breaks(WinInfo) -> WinInfo
-%% clear_breaks(WinInfo, Mod) -> WinInfo
-%% WinInfo = #winInfo{}
-%%--------------------------------------------------------------------
-clear_breaks(WinInfo) ->
- clear_breaks(WinInfo, all).
-clear_breaks(WinInfo, Mod) ->
- Remove = if
- Mod =:= all -> WinInfo#winInfo.breaks;
- true ->
- lists:filter(fun(#breakInfo{point={Mod2,_L}}) ->
- if
- Mod2 =:= Mod -> true;
- true -> false
- end
- end,
- WinInfo#winInfo.breaks)
- end,
- lists:foreach(fun(#breakInfo{point=Point}) ->
- delete_break(WinInfo, Point)
- end,
- Remove),
- Remain = WinInfo#winInfo.breaks -- Remove,
- WinInfo#winInfo{breaks=Remain}.
-
-%%--------------------------------------------------------------------
-%% display(Arg)
-%% Arg = idle | {Status,Mod,Line} | {running,Mod}
-%% | {exit,Where,Reason} | {text,Text}
-%% Status = break | wait | Level
-%% Level = int()
-%% Mod = atom()
-%% Line = integer()
-%% Where = {Mod,Line} | null
-%% Reason = term()
-%% Text = string()
-%%--------------------------------------------------------------------
-display(Arg) ->
- Str = case Arg of
- idle -> "State: uninterpreted";
- {exit, {Mod,Line}, Reason} ->
- gs:config(trace_window, raise),
- io_lib:format("State: EXITED [~w.erl/~w], Reason:~w",
- [Mod, Line, Reason]);
- {exit, null, Reason} ->
- gs:config(trace_window, raise),
- io_lib:format("State: EXITED [uninterpreted], "
- "Reason:~w", [Reason]);
- {Level, null, _Line} when is_integer(Level) ->
- io_lib:format("*** Call level #~w "
- "(in non-interpreted code)",
- [Level]);
- {Level, Mod, Line} when is_integer(Level) ->
- io_lib:format("*** Call level #~w [~w.erl/~w]",
- [Level, Mod, Line]);
- {Status, Mod, Line} ->
- What = case Status of
- wait -> 'receive';
- _ -> Status
- end,
- io_lib:format("State: ~w [~w.erl/~w]",
- [What, Mod, Line]);
- {running, Mod} ->
- io_lib:format("State: running [~w.erl]", [Mod]);
- {text, Text} -> Text
- end,
- gs:config(info_window, {label,{text,lists:flatten(Str)}}).
-
-%%--------------------------------------------------------------------
-%% is_shown(WinInfo, Mod) -> {true, WinInfo} | false
-%% show_code(WinInfo, Mod, Contents) -> WinInfo
-%% show_no_code(WinInfo) -> WinInfo
-%% remove_code(WinInfo, Mod) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Mod = atom()
-%% Contents = string()
-%% Note: remove_code/2 should not be used for currently shown module.
-%%--------------------------------------------------------------------
-is_shown(WinInfo, Mod) ->
- case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of
- {Mod, Editor} ->
- gs:config(Editor, raise),
- {true, WinInfo#winInfo{editor={Mod, Editor}}};
- false -> false
- end.
-
-show_code(WinInfo, Mod, Contents) ->
- Editors = WinInfo#winInfo.editors,
- {Flag, Editor} = case lists:keyfind(Mod, 1, Editors) of
- {Mod, Ed} -> {existing, Ed};
- false -> {new, code_editor()}
- end,
- %% Insert code and update breakpoints, if any
- config_editor(Editor, [raise, clear]),
- show_code(Editor, Contents),
- lists:foreach(fun(BreakInfo) ->
- case BreakInfo#breakInfo.point of
- {Mod2, Line} when Mod2 =:= Mod ->
- Status = BreakInfo#breakInfo.status,
- add_break_to_code(Editor, Line,Status);
- _Point -> ignore
- end
- end,
- WinInfo#winInfo.breaks),
- case Flag of
- existing ->
- WinInfo#winInfo{editor={Mod, Editor}};
- new ->
- WinInfo#winInfo{editor={Mod, Editor},
- editors=[{Mod, Editor} | Editors]}
- end.
-
-show_code(Editor, Text) when length(Text) > 1500 ->
- %% Add some text at a time so that other processes may get scheduled
- Str = string:sub_string(Text, 1, 1500),
- config_editor(Editor, {insert,{'end', Str}}),
- show_code(Editor, string:sub_string(Text, 1501));
-show_code(Editor, Text) ->
- config_editor(Editor, {insert,{'end',Text}}).
-
-show_no_code(WinInfo) ->
- {'$top', Editor} = lists:keyfind('$top', 1, WinInfo#winInfo.editors),
- gs:config(Editor, raise),
- WinInfo#winInfo{editor={'$top', Editor}}.
-
-remove_code(WinInfo, Mod) ->
- Editors = WinInfo#winInfo.editors,
- case lists:keyfind(Mod, 1, Editors) of
- {Mod, Editor} ->
- gs:destroy(Editor),
- WinInfo#winInfo{editors=lists:keydelete(Mod, 1, Editors)};
- false ->
- WinInfo
- end.
-
-%%--------------------------------------------------------------------
-%% mark_line(WinInfo, Line, How) -> WinInfo
-%% WinInfo = #winInfo{}
-%% Line = integer()
-%% How = break | where
-%% Mark the code line where the process is executing.
-%%--------------------------------------------------------------------
-mark_line(WinInfo, Line, How) ->
- {_Mod, Editor} = WinInfo#winInfo.editor,
- mark_line2(Editor, WinInfo#winInfo.marked_line, false),
- mark_line2(Editor, Line, How),
- if
- Line =/= 0 -> config_editor(Editor, {vscrollpos, Line-5});
- true -> ignore
- end,
- WinInfo#winInfo{marked_line=Line}.
-
-unmark_line(WinInfo) ->
- mark_line(WinInfo, 0, false).
-
-mark_line2(Editor, Line, How) ->
- Prefix = case How of
- break -> "-->";
- where -> ">>>";
- false -> " "
- end,
- Font = if
- How =:= false -> dbg_ui_win:font(normal);
- true -> dbg_ui_win:font(bold)
- end,
- config_editor(Editor, [{overwrite, {{Line,5}, Prefix}},
- {font_style,
- {{{Line,0},{Line,lineend}}, Font}}]).
-
-%%--------------------------------------------------------------------
-%% select_line(WinInfo, Line) -> WinInfo
-%% selected_line(WinInfo) -> undefined | Line
-%% WinInfo = #winInfo{}
-%% Line = integer()
-%% Select/unselect a line (unselect if Line=0).
-%%--------------------------------------------------------------------
-select_line(WinInfo, Line) ->
- {_Mod, Editor} = WinInfo#winInfo.editor,
-
- %% Since 'Line' may be specified by the user in the 'Go To Line'
- %% help window, it must be checked that it is correct
- Size = gs:read(Editor, size),
- if
- Line =:= 0 ->
- select_line(Editor, WinInfo#winInfo.selected_line, false),
- WinInfo#winInfo{selected_line=0};
- Line < Size ->
- select_line(Editor, Line, true),
- config_editor(Editor, {vscrollpos, Line-5}),
- WinInfo#winInfo{selected_line=Line};
- true ->
- WinInfo
- end.
-
-select_line(Editor, Line, true) ->
- config_editor(Editor, {selection, {{Line,0}, {Line,lineend}}});
-select_line(Editor, _Line, false) ->
- config_editor(Editor, {selection, {{1,0}, {1,0}}}).
-
-selected_line(WinInfo) ->
- case WinInfo#winInfo.selected_line of
- 0 -> undefined;
- Line -> Line
- end.
-
-%%--------------------------------------------------------------------
-%% eval_output(Str, Face)
-%% Str = string()
-%% Face = normal | bold
-%%--------------------------------------------------------------------
-eval_output(Text, Face) ->
- Y1 = gs:read('EvalEditor', size),
- config_editor('EvalEditor', {insert,{'end',Text}}),
- Y2 = gs:read('EvalEditor', size),
-
- Font = dbg_ui_win:font(Face),
- config_editor('EvalEditor',
- [{font_style, {{{Y1,0},{Y2,lineend}}, Font}},
- {vscrollpos,Y2}]).
-
-%%--------------------------------------------------------------------
-%% update_bindings(Bs)
-%% Bs = [{Var,Val}]
-%%--------------------------------------------------------------------
-update_bindings(Bs) ->
- gs:config('BindGrid', {rows, {1,length(Bs)+1}}),
- Font = dbg_ui_win:font(normal),
- Last =
- lists:foldl(fun({Var, Val}, Row) ->
- Opts = [{text, {1,atom_to_list(Var)}},
- {text, {2,io_lib:format("~P",
- [Val, 4])}},
- {doubleclick, true},
- {data, {binding,{Var,Val}}}],
- case gs:read('BindGrid',{obj_at_row,Row}) of
- undefined ->
- gs:gridline('BindGrid',
- [{row, Row},
- {height, 14},
- {font, Font} | Opts]);
- GridLine ->
- gs:config(GridLine, Opts)
- end,
- Row+1
- end,
- 2,
- Bs),
- delete_gridlines(Last).
-
-delete_gridlines(Row) ->
- case gs:read('BindGrid', {obj_at_row, Row}) of
- undefined -> true;
- GridLine ->
- gs:destroy(GridLine),
- delete_gridlines(Row+1)
- end.
-
-%%--------------------------------------------------------------------
-%% trace_output(Str)
-%% Str = string()
-%%--------------------------------------------------------------------
-trace_output(Str) ->
- Font = dbg_ui_win:font(normal),
- config_editor('TraceEditor',
- [{insert, {'end',Str}},
- {fg, {{{1,0},'end'},black}},
- {font_style, {{{1,0},'end'},Font}}]),
- Max = gs:read('TraceEditor', size),
- config_editor('TraceEditor', {vscrollpos, Max}).
-
-%%--------------------------------------------------------------------
-%% handle_event(GSEvent, WinInfo) -> Command
-%% GSEvent = {gs, Id, Event, Data, Arg}
-%% WinInfo = #winInfo{}
-%% Command = ignore
-%% | {win, WinInfo}
-%% | stopped
-%% | {coords, {X,Y}}
-%%
-%% | {shortcut, Key}
-%% | MenuItem | {Menu, [MenuItem]}
-%% MenuItem = Menu = atom()
-%% | {break, Point, What}
-%% What = add | delete | {status,Status} |{trigger,Trigger}
-%% | {module, Mod, view}
-%%
-%% | {user_command, Cmd}
-%%
-%% | {edit, {Var, Val}}
-%%--------------------------------------------------------------------
-%% Window events
-handle_event({gs, _Id, configure, _Data, [W, H|_]}, WinInfo) ->
- case WinInfo#winInfo.size of
- {W, H} -> ignore;
- _Size ->
- configure(WinInfo, W, H),
- {win, WinInfo#winInfo{size={W, H}}}
- end;
-handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) ->
- stopped;
-handle_event({gs, _Id, motion, _Data, [X,Y]}, WinInfo) ->
- {LastX, LastY} = dbg_ui_win:motion(X, Y),
- Win = WinInfo#winInfo.window,
- {coords, {gs:read(Win, x)+LastX-5, gs:read(Win, y)+LastY-5}};
-handle_event({gs, RB, buttonpress, resizebar, _Arg}, WinInfo) ->
- resize(WinInfo, RB), % Resize window contents
- ignore;
-
-%% Menus, buttons and keyboard shortcuts
-handle_event({gs, _Id, keypress, _Data, [Key,_,_,1]}, _WinInfo) ->
- {shortcut, Key};
-handle_event({gs, _Id, click, {dbg_ui_winman, Win}, _Arg}, _WinInfo) ->
- dbg_ui_winman:raise(Win),
- ignore;
-handle_event({gs, _Id, click, {menuitem, Name}, _Arg}, _WinInfo) ->
- Name;
-handle_event({gs, _Id, click, {menu, Menu}, _Arg}, _WinInfo) ->
- Names = dbg_ui_win:selected(Menu),
- {Menu, Names};
-handle_event({gs, _Id, click, {break, Point, What}, _Arg}, _WinInfo) ->
- {break, Point, What};
-handle_event({gs, _Id, click, {module, Mod, view}, _Arg}, _WinInfo) ->
- {module, Mod, view};
-
-%% Code area
-handle_event({gs, Editor, buttonpress, code_editor, _Arg}, WinInfo) ->
- {Row, _Col} = gs:read(Editor, insertpos),
- Again = receive
- {gs, Editor, buttonpress, code_editor, _} ->
- gs:read(Editor, insertpos)
- after 500 ->
- false
- end,
- case Again of
- {Row, _} ->
- {Mod, _Editor} = WinInfo#winInfo.editor,
- Point = {Mod, Row},
- case lists:keymember(Point, #breakInfo.point,
- WinInfo#winInfo.breaks) of
- false -> {break, Point, add};
- true -> {break, Point, delete}
- end;
- {Row2, _} ->
- select_line(Editor, Row2, true),
- {win, WinInfo#winInfo{selected_line=Row2}};
- false ->
- select_line(Editor, Row, true),
- {win, WinInfo#winInfo{selected_line=Row}}
- end;
-
-%% Button area
-handle_event({gs, _Id, click, {button, Name}, _Arg}, _WinInfo) ->
- Name;
-
-%% Evaluator area
-handle_event({gs, 'EvalEntry', keypress, _Data, ['Return'|_]}, _WI) ->
- Command = case gs:read('EvalEntry', text) of
- [10] ->
- eval_output("\n", normal),
- ignore;
- Cmd ->
- eval_output([$>, Cmd, 10], normal),
- {user_command, Cmd}
- end,
- gs:config('EvalEntry', [{text,""}, {focus,false}]),
- Command;
-
-%% Bindings area
-handle_event({gs, _Id, click, {binding, {Var, Val}}, _Arg}, _WinInfo) ->
- Str = io_lib:format("< ~p = ~p~n", [Var, Val]),
- eval_output(Str, bold),
- ignore;
-handle_event({gs, _Id, doubleclick, {binding, B}, _Arg}, _WinInfo) ->
- {edit, B};
-
-handle_event(_GSEvent, _WinInfo) ->
- ignore.
-
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-%%--Code Area---------------------------------------------------------
-
-code_area(X, Y, FrameOpts, Win) ->
- gs:frame('CodeArea', Win,
- [{x,X}, {y,Y}, {width,546}, {height,400} | FrameOpts]),
- gs:label(info_window, 'CodeArea',
- [{label,{text,""}}, {font,dbg_ui_win:font(normal)},
- {x,5}, {y,10}, {width,406}, {height,15},
- {anchor,nw}, {align,w}]),
- code_editor('CodeEditor', 536, 365).
-
-code_editor() ->
- W = gs:read('CodeEditor', width),
- H = gs:read('CodeEditor', height),
- code_editor(null, W, H).
-
-code_editor(Name, W, H) ->
- Editor = if
- Name =:= null -> gs:editor('CodeArea', []);
- true -> gs:editor(Name, 'CodeArea', [])
- end,
- gs:config(Editor, [{x,5}, {y,30}, {width,W}, {height,H},
- {keypress,false}, {buttonpress,true},
- {data,code_editor}]),
- config_editor(Editor, [{vscroll,right}, {hscroll,bottom}]),
- Font = dbg_ui_win:font(normal),
- config_editor(Editor, [{wrap,none}, {fg,{{{1,0},'end'},black}},
- {font, Font},
- {font_style, {{{1,0},'end'},Font}}]),
- Editor.
-
-resize_code_area(WinInfo, Key, Diff) ->
- gs:config('CodeArea', {Key,gs:read('CodeArea', Key)+Diff}),
- case Key of
- width ->
- gs:config(info_window, {Key,gs:read(info_window,Key)+Diff});
- height -> ignore
- end,
-
- %% Resize all code editors
- Value = gs:read('CodeEditor', Key)+Diff,
- gs:config('CodeEditor', {Key,Value}),
- Editors = WinInfo#winInfo.editors,
- lists:foreach(fun({_Mod, Editor}) ->
- gs:config(Editor, {Key,Value})
- end,
- Editors).
-
-%%--Button Area-------------------------------------------------------
-
-buttons() ->
- [{'Step','StepButton'}, {'Next','NextButton'},
- {'Continue','ContinueButton'}, {'Finish','FinishButton'},
- {'Where','WhereButton'}, {'Up','UpButton'}, {'Down','DownButton'}].
-
-is_button(Name) ->
- case lists:keyfind(Name, 1, buttons()) of
- {Name, Button} -> {true, Button};
- false -> false
- end.
-
-button_area(Bu, X, Y, FrameOpts, Win) ->
- {W,H} = case Bu of
- open -> {546,30};
- close -> {0,0}
- end,
- gs:frame('ButtonArea', Win,
- [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]),
- Font = dbg_ui_win:font(normal),
- lists:foldl(fun({Name, Button}, Xb) ->
- gs:button(Button, 'ButtonArea',
- [{label, {text,Name}}, {font,Font},
- {x, Xb}, {y, 1},
- {width, 77}, {height, 24},
- {data, {button,Name}}]),
- Xb+78
- end,
- 1,
- buttons()).
-
-resize_button_area(close, width, _Diff) ->
- ignore;
-resize_button_area(open, width, Diff) ->
- gs:config('ButtonArea', {width, gs:read('ButtonArea', width)+Diff}).
-
-%%--Evaluator Area----------------------------------------------------
-
-eval_area({Ev,Bi}, X, Y, FrameOpts, Win) ->
- {W,H} = if
- Ev =:= open -> {289,200};
- true -> {0,0}
- end,
- Font = dbg_ui_win:font(normal),
- gs:frame('EvalArea', Win,
- [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]),
- gs:label('EvalArea',
- [{label,{text,"Evaluator:"}}, {font, Font},
- {x,5}, {y,35}, {width,80}, {height,25},
- {anchor,sw}, {align,center}]),
- gs:entry('EvalEntry', 'EvalArea',
- [{font, Font},
- {x,80}, {y,35}, {width,185}, {height,25},
- {anchor,sw}, {keypress,true}]),
- gs:editor('EvalEditor', 'EvalArea',
- [{x,5}, {y,35}, {width, 280}, {height, 160},
- {keypress,false},
- {vscroll,right}, {hscroll,bottom},
- {wrap,none}, {fg,{{{1,0},'end'},black}},
- {font, Font},
- {font_style,{{{1,0},'end'},Font}}]),
- gs:config('EvalEditor', {enable, false}),
- if
- Ev =:= open, Bi =:= close -> resize_eval_area(Ev, width, 257);
- true -> ignore
- end.
-
-resize_eval_area(close, _Key, _Diff) ->
- ignore;
-resize_eval_area(open, Key, Diff) ->
- New = gs:read('EvalArea', Key)+Diff,
- gs:config('EvalArea', {Key,New}),
- case Key of
- width ->
- gs:config('EvalEntry', {width,New-104}),
- gs:config('EvalEditor', {width,New-9});
- height ->
- gs:config('EvalEditor', {height,New-40})
- end.
-
-%%--Bindings Area-----------------------------------------------------
-
-bind_area({Ev,Bi}, X, Y, FrameOpts, Win) ->
- {W,H} = if
- Bi =:= open -> {249,200};
- true -> {0,0}
- end,
- gs:frame('BindArea', Win,
- [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]),
-
- Font = dbg_ui_win:font(bold),
- gs:grid('BindGrid', 'BindArea',
- [{x,2}, {y,2}, {height,193}, {width,241},
- {fg,black}, {vscroll,right}, {hscroll,bottom},
- {font,Font},
- calc_columnwidths(241), {rows, {1,50}}]),
- gs:gridline('BindGrid',
- [{row,1}, {height,14}, {fg,blue},
- {text,{1,"Name"}}, {text,{2,"Value"}}, {font,Font}]),
- gs:config('BindGrid', {rows,{1,1}}),
- if
- Bi =:= open, Ev =:= close -> resize_bind_area(Bi, width, 297);
- true -> ignore
- end.
-
-resize_bind_area(close, _Key, _Diff) ->
- ignore;
-resize_bind_area(open, Key, Diff) ->
- New = gs:read('BindArea', Key)+Diff,
- gs:config('BindArea', {Key,New}),
- case Key of
- width ->
- gs:config('BindGrid', {width,New-8}),
- Cols = calc_columnwidths(New-8),
- gs:config('BindGrid', Cols);
- height ->
- gs:config('BindGrid', {height,New-7})
- end.
-
-calc_columnwidths(Width) ->
- if Width =< 291 ->
- {columnwidths,[90,198]};
- true ->
- S = (Width)/(90+198),
- {columnwidths,[round(90*S),round(198*S)]}
- end.
-
-%%--Trace Area--------------------------------------------------------
-
-trace_area(Tr, X, Y, FrameOpts, Win) ->
- {W,H} = case Tr of
- open -> {546,200};
- close -> {0,0}
- end,
- gs:frame('TraceArea', Win,
- [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]),
- Editor = gs:editor('TraceEditor', 'TraceArea',
- [{x,5}, {y,5}, {width,536}, {height,190},
- {keypress,false}]),
- Font = dbg_ui_win:font(normal),
- config_editor(Editor,
- [{vscroll,right}, {hscroll,bottom},
- {wrap,none},{fg,{{{1,0},'end'},black}},
- {font, Font},
- {font_style,{{{1,0},'end'},Font}}]).
-
-resize_trace_area(close, _Key, _Diff) ->
- ignore;
-resize_trace_area(open, Key, Diff) ->
- New = gs:read('TraceArea', Key)+Diff,
- gs:config('TraceArea', {Key,New}),
- gs:config('TraceEditor', {Key,New-10}).
-
-%%--Editors-----------------------------------------------------------
-
-config_editor(Editor, Opts) ->
- gs:config(Editor, {enable,true}),
- gs:config(Editor, Opts),
- gs:config(Editor, {enable,false}).
-
-%%--Resize Bars-------------------------------------------------------
-%% The resize bars are used to resize the areas within the window.
-
-%%--------------------------------------------------------------------
-%% resizebar(Flag, Name, X, Y, W, H, Obj) -> resizebar()
-%% Flag = open | close
-%% Name = atom()
-%% X = Y = integer() Coordinates relative to Obj
-%% W = H = integer() Width and height
-%% Obj = gsobj()
-%% Creates a 'resize bar', a frame object over which the cursor will
-%% be of the 'resize' type.
-%%--------------------------------------------------------------------
-resizebar(Flag, Name, X, Y, W, H, Obj) ->
- {W2,H2} = case Flag of
- open -> {W,H};
- close -> {0,0}
- end,
- gs:create(frame, Name, Obj, [{x,X}, {y,Y}, {width,W2}, {height,H2},
- {bw,2},
- {cursor,resize},
- {buttonpress,true}, {buttonrelease,true},
- {data,resizebar}]).
-
-rb1({_Bu,Ev,Bi,Tr}) ->
- if
- Ev =:= close, Bi =:= close, Tr =:= close -> close;
- true -> open
- end.
-
-rb2({_Bu,Ev,Bi,Tr}) ->
- if
- Tr =:= open ->
- if
- Ev =:= close, Bi =:= close -> close;
- true -> open
- end;
- true -> close
- end.
-
-rb3({_Bu,Ev,Bi,_Tr}) ->
- if
- Ev =:= open, Bi =:= open -> open;
- true -> close
- end.
-
-%%--Configuration-----------------------------------------------------
-%% Resize the window as well as its contents
-
-%%--------------------------------------------------------------------
-%% config_v()
-%% Reconfigure the window vertically.
-%%--------------------------------------------------------------------
-config_v() ->
- Y1 = 25+gs:read('CodeArea', height),
- gs:config('RB1', {y,Y1}),
-
- Y2 = Y1+gs:read('RB1', height),
- gs:config('ButtonArea', {y,Y2}),
-
- Y3 = Y2+gs:read('ButtonArea', height),
- gs:config('EvalArea', {y,Y3}),
- gs:config('RB3', {y,Y3}),
- gs:config('BindArea', {y,Y3}),
-
- Y4 = Y3 + erlang:max(gs:read('EvalArea', height),
- gs:read('BindArea', height)),
- gs:config('RB2', {y,Y4}),
-
- Y5 = Y4 + gs:read('RB2', height),
- gs:config('TraceArea', {y,Y5}).
-
-%%--------------------------------------------------------------------
-%% config_h()
-%% Reconfigure the window horizontally.
-%%--------------------------------------------------------------------
-config_h() ->
- X1 = 2+gs:read('EvalArea', width),
- gs:config('RB3', {x,X1}),
-
- X2 = X1+gs:read('RB3', width),
- gs:config('BindArea', {x,X2}).
-
-%%--------------------------------------------------------------------
-%% configure(WinInfo, W, H)
-%% The window has been resized, now its contents must be resized too.
-%%--------------------------------------------------------------------
-configure(WinInfo, NewW, NewH) ->
- {Bu,Ev,Bi,Tr} = Flags = WinInfo#winInfo.flags,
-
- OldW = gs:read('CodeArea', width)+4,
- OldH = 25+gs:read('CodeArea', height)+
- gs:read('RB1', height)+
- gs:read('ButtonArea', height)+
- erlang:max(gs:read('EvalArea', height), gs:read('BindArea', height))+
- gs:read('RB2', height)+
- gs:read('TraceArea', height),
-
- %% Adjust width unless it is unchanged or less than minimum width
- if
- OldW =/= NewW ->
- {Dcode,Deval,Dbind} = configure_widths(OldW,NewW,Flags),
- resize_code_area(WinInfo, width, Dcode),
- case rb1(Flags) of
- open ->
- gs:config('RB1', {width,gs:read('RB1',width)+Dcode});
- close -> ignore
- end,
- resize_button_area(Bu, width, Dcode),
- resize_eval_area(Ev, width, Deval),
- resize_bind_area(Bi, width, Dbind),
- case rb2(Flags) of
- open ->
- gs:config('RB2', {width,gs:read('RB2',width)+Dcode});
- close -> ignore
- end,
- resize_trace_area(Tr, width, Dcode),
- config_h();
- true -> ignore
- end,
-
- %% Adjust height unless it is unchanged or less than minimum height
- if
- OldH =/= NewH ->
- {Dcode2,Deval2,Dtrace} = configure_heights(OldH,NewH,Flags),
- resize_code_area(WinInfo, height, Dcode2),
- resize_eval_area(Ev, height, Deval2),
- case rb3(Flags) of
- open ->
- gs:config('RB3',
- {height,gs:read('RB3',height)+Deval2});
- close -> ignore
- end,
- resize_bind_area(Bi, height, Deval2),
- resize_trace_area(Tr, height, Dtrace),
- config_v();
- true -> ignore
- end.
-
-%% Compute how much the width of each frame must be increased or
-%% decreased in order to adjust to the new window width.
-configure_widths(OldW, NewW, Flags) ->
- {_Bu,Ev,Bi,_Tr} = Flags,
-
- %% Difference between old and new width, considering min window width
- Diff = abs(erlang:max(OldW,330)-erlang:max(NewW,330)),
-
- %% Check how much the frames can be resized in reality
- Limits = if
- %% Window larger
- NewW > OldW ->
- if
- Ev =:= open, Bi =:= open -> {0,Diff,Diff};
- Ev =:= open -> {0,Diff,0};
- Bi =:= open -> {0,0,Diff};
- true -> {Diff,0,0}
- end;
-
- %% Window smaller; get difference between min size
- %% and current size
- OldW>NewW ->
- if
- Ev =:= open, Bi =:= open ->
- {0,
- gs:read('EvalArea',width)-204,
- gs:read('BindArea',width)-112};
- Ev =:= open -> {0,Diff,0};
- Bi =:= open -> {0,0,Diff};
- true -> {Diff,0,0}
- end
- end,
-
- case Limits of
-
- %% No Shell or Bind frame, larger window
- {T,0,0} when NewW > OldW -> {T,0,0};
-
- %% No Shell or Bind frame, smaller window
- {T,0,0} when OldW > NewW -> {-T,0,0};
-
- %% Window larger; divide Diff among the frames and return result
- {_,Sf,B} when NewW > OldW ->
- {_,Sf2,B2} = divide([{0,0},{0,Sf},{0,B}],Diff),
- {Sf2+B2,Sf2,B2};
-
- %% Window smaller; divide Diff among the frames and return
- %% the inverted result (the frames should shrink)
- {_,Sf,B} when OldW>NewW ->
- {_,Sf2,B2} = divide([{0,0},{0,Sf},{0,B}],Diff),
- {-(Sf2+B2),-Sf2,-B2}
- end.
-
-%% Compute how much the height of each frame must be increased or
-%% decreased in order to adjust to the new window height.
-configure_heights(OldH, NewH, Flags) ->
- {_Bu,Ev,Bi,Tr} = Flags,
-
- %% Difference between old and new height, considering min win height
- MinH = min_height(Flags),
- Diff = abs(erlang:max(OldH,MinH)-erlang:max(NewH,MinH)),
-
- %% Check how much the frames can be resized in reality
- {T,Sf,Ff} = if
- %% Window larger
- NewH > OldH ->
- {Diff,
- if
- Ev =:= close, Bi =:= close -> 0;
- true -> Diff
- end,
- if
- Tr =:= open -> Diff;
- true -> 0
- end};
-
- %% Window smaller; get difference between min size
- %% and current size
- OldH > NewH ->
- {gs:read('CodeArea',height)-100,
- if
- Ev =:= close, Bi =:= close -> 0;
- true ->
- if
- Ev =:= open ->
- gs:read('EvalArea',height)-100;
- Bi =:= open ->
- gs:read('BindArea',height)-100
- end
- end,
- if
- Tr =:= open -> gs:read('TraceArea',height)-100;
- true -> 0
- end}
- end,
-
- if
- %% Window larger; divide Diff among the frames and return result
- NewH>OldH -> divide([{0,T},{0,Sf},{0,Ff}],Diff);
-
- %% Window smaller; divide Diff among the frames and return
- %% the inverted result (the frames should shrink)
- OldH>NewH ->
- {T2,Sf2,Ff2} = divide([{0,T},{0,Sf},{0,Ff}],Diff),
- {-T2,-Sf2,-Ff2}
- end.
-
-%% Compute minimum window height
-min_height(Flags) ->
- {Bu,S,Bi,F} = Flags,
- H1 = 25 + 100 + 2, % Upper pad + Trace frame + lower pad
- H2 = H1 + bu(Bu) + s_bi(S,Bi) + f(F),
- H3 = case rb1(Flags) of
- open -> H2+10;
- close -> H2
- end,
- H4 = case rb2(Flags) of
- open -> H3+10;
- close -> H3
- end,
- H4.
-
-bu(close) -> 0;
-bu(open) -> 30.
-
-s_bi(close,close) -> 0;
-s_bi(_,_) -> 100.
-
-f(close) -> 0;
-f(open) -> 100.
-
-%% Try to distribute Diff as evenly as possible between E1, E2 and E3.
-divide([{T,T},{S,S},{F,F}], _Diff) ->
- {T,S,F};
-divide(L, Diff) ->
- [{T,Tmax},{S,Smax},{F,Fmax}] = L,
-
- %% Count how many elements in L can still be filled
- Rem = remaining(L),
-
- %% Divide Diff by Rem
- D = Diff div Rem,
-
- if
- %% All of Diff has been distributed
- D =:= 0 -> {T,S,F};
- true ->
- %% For each element, try to add as much as possible of D
- {NewT,Dt} = divide2(D,T,Tmax),
- {NewS,Ds} = divide2(D,S,Smax),
- {NewF,Df} = divide2(D,F,Fmax),
-
- %% Recur with a list of elements with new current values
- %% and decreased Diff
- divide([{NewT,Tmax},{NewS,Smax},{NewF,Fmax}],
- (Diff rem Rem)+Dt+Ds+Df)
- end.
-
-%% Count the number of 'non-filled' elements in L, ie where Curr<Max.
-remaining([]) -> 0;
-remaining([{Max,Max}|T]) -> remaining(T);
-remaining([_H|T]) -> 1 + remaining(T).
-
-divide2(_Diff, Max, Max) -> {Max,0};
-divide2(Diff, Curr, Max) ->
- New = Curr+Diff,
- if
- New>Max -> {Max,New-Max};
- true -> {New,0}
- end.
-
-%%--Resizing using resize bars----------------------------------------
-%% Motions event will move the ResizeBar accordingly in Win, when
-%% the mouse button is released, the window is reconfigured.
-
-resize(WinInfo, ResizeBar) ->
-
- %% Get window dimensions
- W = gs:read(WinInfo#winInfo.window, width),
- H = gs:read(WinInfo#winInfo.window, height),
-
- %% Call resize loop with min and max for the resize bars derived
- %% from the window dimensions
- resizeloop(WinInfo, ResizeBar, null,
- rblimits('RB1',W,H),
- rblimits('RB2',W,H),
- rblimits('RB3',W,H)).
-
-resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3}) ->
- receive
- {gs,_,motion,_,[_,Y]} when RB =:= 'RB1', Y > Min1, Y < Max1 ->
- gs:config('RB1', {y,Y}),
- resizeloop(WI, RB, Y, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
- {gs,_,motion,_,_} when RB =:= 'RB1' ->
- resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
-
- {gs,_,motion,_,[_,Y]} when RB =:= 'RB2', Y > Min2, Y < Max2 ->
- gs:config('RB2', {y,Y}),
- resizeloop(WI, RB, Y, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
- {gs,_,motion,_,_} when RB =:= 'RB2' ->
- resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
-
- {gs,_,motion,_,[X,_]} when RB =:= 'RB3', X > Min3, X < Max3 ->
- gs:config('RB3', {x,X}),
- resizeloop(WI, RB, X, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
- {gs,_,motion,_,_} when RB =:= 'RB3' ->
- resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3});
-
- {gs,_,buttonrelease,_,_} ->
- resize_win(WI, RB, Prev)
- end.
-
-resize_win(_WinInfo, _RB, null) -> ignore;
-resize_win(WinInfo, 'RB1', Y) ->
- {_Bu,S,Bi,F} = Flags = WinInfo#winInfo.flags,
- H = gs:read('CodeArea', height),
- Diff = H-(Y-25),
-
- %% Resize Code, Evaluator and Binding areas
- resize_code_area(WinInfo, height, -Diff),
- if
- S =:= close, Bi =:= close, F =:= open ->
- resize_trace_area(open, height, Diff);
- true ->
- resize_eval_area(S, height, Diff),
- resize_bind_area(Bi, height, Diff)
- end,
-
- %% Resize vertical resize bar
- case rb3(Flags) of
- open -> gs:config('RB3', {height,gs:read('RB3',height)+Diff});
- close -> ignore
- end,
-
- %% Adjust the frames y coordinates
- config_v();
-resize_win(WinInfo, 'RB2', Y) ->
- {_Bu,S,Bi,F} = Flags = WinInfo#winInfo.flags,
- Prev = gs:read('TraceArea',y),
- Diff = Prev-(Y+10),
-
- %% Resize Trace, Evaluator and Binding areas
- resize_trace_area(F, height, Diff),
- resize_eval_area(S, height, -Diff),
- resize_bind_area(Bi, height, -Diff),
-
- %% Resize vertical resize bar
- case rb3(Flags) of
- open -> gs:config('RB3', {height,gs:read('RB3',height)-Diff});
- close -> ignore
- end,
-
- %% Adjust the frames y coordinates
- config_v();
-
-resize_win(WinInfo, 'RB3', X) ->
- {_Bu,S,Bi,_F} = WinInfo#winInfo.flags,
- Prev = gs:read('BindArea', x),
- Diff = Prev-(X+10),
-
- %% Resize Binding and Trace areas
- resize_bind_area(Bi, width, Diff),
- resize_eval_area(S, width, -Diff),
-
- %% Adjust the frames x coordinates
- config_h().
-
-%% Given the window dimensions, return the limits for a resize bar.
-rblimits('RB1',_W,H) ->
-
- %% Code frame should not have height <100
- Min = 126,
-
- %% Max is decided by a minimum distance to 'RB2'
- %% unless 'RB2' is invisible and 'CodeArea' is visible
- %% (=> EvalFrame and BindFrame invisible) in which case
- %% TraceFrame should not have height <100
- RB2 = gs:read('RB2',height),
- FF = gs:read('TraceArea',height),
- Max = case RB2 of
- 0 when FF =/= 0 ->
- H-112;
- _ ->
- Y = gs:read('RB2',y),
- erlang:max(Min,Y-140)
- end,
-
- {Min,Max};
-rblimits('RB2',_W,H) ->
- %% TraceFrame should not have height < 100
- Max = H-112,
- %% Min is decided by a minimum distance to 'RB1'
- Y = gs:read('RB1',y),
- Min = erlang:min(Max,Y+140),
- {Min,Max};
-
-rblimits('RB3',W,_H) ->
- %% Neither CodeArea nor BindArea should occupy
- %% less than 1/3 of the total window width and EvalFrame should
- %% be at least 289 pixels wide
- {erlang:max(round(W/3),289),round(2*W/3)}.
-
-
-%%====================================================================
-%% 'Go To Line' and 'Search' help windows
-%%====================================================================
-
-helpwin(gotoline, WinInfo, GS, Coords) ->
- spawn_link(?MODULE, helpwin, [gotoline, WinInfo, GS, Coords,self()]);
-helpwin(search, WinInfo, GS, Coords) ->
- spawn_link(?MODULE, helpwin, [search, WinInfo, GS, Coords, self()]).
-
-helpwin(Type, WinInfo, GS, Coords, AttPid) ->
- {_Mod, Editor} = WinInfo#winInfo.editor,
- Data = case Type of
- gotoline -> null;
- search ->
- {{1, 0}, false}
- end,
- Win = helpwin(Type, GS, Coords),
- helpwin_loop(Type, AttPid, Editor, Data, Win).
-
-helpwin_loop(Type, AttPid, Editor, Data, Win) ->
- receive
- {gs, _Id, destroy, _Data, _Arg} ->
- helpwin_stop(Type, AttPid, Editor, Data),
- true;
-
- {gs, _Id, keypress, _Data, ['Return'|_]} ->
- gs:config(btn(Win), flash),
- Data2 = helpwin_action(Type, default,
- AttPid, Editor, Data, Win),
- helpwin_loop(Type, AttPid, Editor, Data2, Win);
- {gs, _Id, keypress, _Data, _Arg} ->
- helpwin_loop(Type, AttPid, Editor, Data, Win);
-
- {gs, _Id, click, _Data, ["Clear"]} ->
- gs:config(ent(Win), {delete, {0,last}}),
- Data2 = helpwin_clear(Type, AttPid, Editor, Data, Win),
- helpwin_loop(Type, AttPid, Editor, Data2, Win);
- {gs, _Id, click, _Data, ["Close"]} ->
- helpwin_stop(Type, AttPid, Editor, Data),
- true;
- {gs, _Id, click, Action, _Arg} ->
- Data2 =
- helpwin_action(Type, Action, AttPid, Editor, Data, Win),
- helpwin_loop(Type, AttPid, Editor, Data2, Win)
- end.
-
-helpwin_stop(gotoline, _AttPid, _Editor, _Data) ->
- ignore;
-helpwin_stop(search, _AttPid, Editor, {Pos, _CS}) ->
- unmark_string(Editor, Pos).
-
-helpwin_clear(gotoline, _AttPid, _Editor, Data, _Win) ->
- Data;
-helpwin_clear(search, _AttPid, Editor, {Pos, CS}, Win) ->
- unmark_string(Editor, Pos),
- gs:config(lbl(Win), {label, {text,""}}),
- {{1, 0}, CS}.
-
-helpwin_action(gotoline, default, AttPid, _Editor, Data, Win) ->
- case string:strip(gs:read(ent(Win), text)) of
- "" -> ignore;
- Str ->
- case catch list_to_integer(Str) of
- {'EXIT', _Reason} -> ignore;
- Line -> AttPid ! {gui, {gotoline, Line}}
- end
- end,
- Data;
-helpwin_action(search, case_sensitive, _AttPid, _Ed, {Pos, CS}, _Win) ->
- Bool = if CS =:= true -> false; CS =:= false -> true end,
- {Pos, Bool};
-helpwin_action(search, default, _AttPid, Editor, {Pos, CS}, Win) ->
- gs:config(lbl(Win), {label, {text, ""}}),
- unmark_string(Editor, Pos),
- case gs:read(ent(Win), text) of
- "" -> {Pos, CS};
- Str ->
- gs:config(lbl(Win), {label, {text,"Searching..."}}),
- Str2 = lowercase(CS, Str),
- case search(Str2, Editor, gs:read(Editor, size), Pos, CS) of
- {Row, Col} ->
- gs:config(lbl(Win), {label, {text,""}}),
- mark_string(Editor, {Row, Col}, Str),
- {{Row, Col}, CS};
- not_found ->
- gs:config(lbl(Win), {label, {text,"Not found"}}),
- {Pos, CS}
- end
- end.
-
-search(_Str, _Editor, Max, {Row, _Col}, _CS) when Row>Max ->
- not_found;
-search(Str, Editor, Max, {Row, Col}, CS) ->
- SearchIn = lowercase(CS, gs:read(Editor,
- {get,{{Row,Col+1},{Row,lineend}}})),
- case string:str(SearchIn, Str) of
- 0 -> search(Str, Editor, Max, {Row+1, 0}, CS);
- N -> {Row, Col+N}
- end.
-
-lowercase(true, Str) -> Str;
-lowercase(false, Str) ->
- [if Char >= $A, Char =< $Z -> Char+32;
- true -> Char
- end || Char <- Str].
-
-mark_string(Editor, {Row, Col}, Str) ->
- Between = {{Row,Col}, {Row,Col+length(Str)}},
- Font = dbg_ui_win:font(bold),
- gs:config(Editor, [{vscrollpos, Row-5},
- {font_style, {Between, Font}},
- {fg, {Between, red}}]).
-
-unmark_string(Editor, {Row, Col}) ->
- Between = {{Row,Col}, {Row,lineend}},
- Font = dbg_ui_win:font(normal),
- gs:config(Editor, [{vscrollpos, Row-5},
- {font_style, {Between, Font}},
- {fg, {Between, black}}]).
-
-helpwin(Type, GS, {X, Y}) ->
- W = 200, Pad = 10, Wbtn = 50,
-
- Title = case Type of search -> "Search"; gotoline -> "Go To Line" end,
- Win = gs:window(GS, [{title, Title}, {x, X}, {y, Y}, {width, W},
- {destroy, true}]),
-
- Ent = gs:entry(Win, [{x, Pad}, {y, Pad}, {width, W-2*Pad},
- {keypress, true}]),
- Hent = gs:read(Ent, height),
-
- Font = dbg_ui_win:font(normal),
-
- {Ybtn, Lbl} =
- case Type of
- search ->
- Ycb = Pad+Hent,
- gs:checkbutton(Win, [{label, {text, "Case Sensitive"}},
- {font, Font},
- {align, w},
- {x, Pad}, {y, Ycb},
- {width, W-2*Pad}, {height, 15},
- {data, case_sensitive}]),
- Ylbl = Ycb+15,
- {Ylbl+Hent+Pad,
- gs:label(Win, [{x, Pad}, {y, Ylbl},
- {width, W-2*Pad}, {height, Hent}])};
- gotoline -> {Pad+Hent+Pad, null}
- end,
-
- BtnLbl = case Type of search -> "Search"; gotoline -> "Go" end,
- Btn = gs:button(Win, [{label, {text, BtnLbl}}, {font, Font},
- {x, W/2-3/2*Wbtn-Pad}, {y, Ybtn},
- {width, Wbtn}, {height, Hent},
- {data, default}]),
- gs:button(Win, [{label, {text, "Clear"}}, {font, Font},
- {x, W/2-1/2*Wbtn}, {y, Ybtn},
- {width, Wbtn}, {height, Hent}]),
- gs:button(Win, [{label, {text, "Close"}}, {font, Font},
- {x, W/2+1/2*Wbtn+Pad}, {y, Ybtn},
- {width, Wbtn}, {height, Hent}]),
-
- H = Ybtn+Hent+Pad,
- gs:config(Win, [{height, H}, {map, true}]),
- {Ent, Lbl, Btn}.
-
-ent(Win) -> element(1, Win).
-lbl(Win) -> element(2, Win).
-btn(Win) -> element(3, Win).
diff --git a/lib/debugger/src/dbg_ui_view.erl b/lib/debugger/src/dbg_ui_view.erl
deleted file mode 100644
index be998f22ff..0000000000
--- a/lib/debugger/src/dbg_ui_view.erl
+++ /dev/null
@@ -1,255 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_view).
-
-%% External exports
--export([start/2]).
-
--record(state, {gs, % term() Graphics system id
- win, % term() Attach process window data
- coords, % {X,Y} Mouse point position
- mod % atom() Module
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start(GS, Mod)
-%% Mod = atom()
-%%--------------------------------------------------------------------
-start(GS, Mod) ->
- Title = "View Module " ++ atom_to_list(Mod),
- case dbg_ui_winman:is_started(Title) of
- true -> ignore;
- false -> spawn(fun () -> init(GS, Mod, Title) end)
- end.
-
--spec stop() -> no_return().
-stop() ->
- exit(stop).
-
-%%====================================================================
-%% Main loop and message handling
-%%====================================================================
-
-init(GS, Mod, Title) ->
- %% Subscribe to messages from the interpreter
- int:subscribe(),
-
- %% Create attach process window
- Win1 = dbg_ui_trace_win:create_win(GS, Title, ['Code Area'], menus()),
- Window = dbg_ui_trace_win:get_window(Win1),
- dbg_ui_winman:insert(Title, Window),
-
- Win2 = gui_load_module(Win1, Mod),
- Win3 =
- lists:foldl(fun(Break, Win) ->
- dbg_ui_trace_win:add_break(Win, 'Break', Break)
- end,
- Win2,
- int:all_breaks(Mod)),
-
- loop(#state{gs=GS, win=Win3, coords={0,0}, mod=Mod}).
-
-loop(State) ->
- receive
-
- %% From the GUI main window
- GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs ->
- Cmd = dbg_ui_trace_win:handle_event(GuiEvent, State#state.win),
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the GUI help windows
- {gui, Cmd} ->
- State2 = gui_cmd(Cmd, State),
- loop(State2);
-
- %% From the interpreter
- {int, Cmd} ->
- State2 = int_cmd(Cmd, State),
- loop(State2);
-
- %% From the dbg_ui_winman process (Debugger window manager)
- {dbg_ui_winman, update_windows_menu, Data} ->
- dbg_ui_winman:update_windows_menu(Data),
- loop(State);
- {dbg_ui_winman, destroy} ->
- stop();
-
- %% Help window termination -- ignore
- {'EXIT', _Pid, _Reason} ->
- loop(State)
- end.
-
-%%--Commands from the GUI---------------------------------------------
-
-gui_cmd(ignore, State) ->
- State;
-gui_cmd({win, Win}, State) ->
- State#state{win=Win};
-gui_cmd(stopped, _State) ->
- stop();
-gui_cmd({coords, Coords}, State) ->
- State#state{coords=Coords};
-
-gui_cmd({shortcut, Key}, State) ->
- case shortcut(Key) of
- false -> State;
- Cmd -> gui_cmd(Cmd, State)
- end;
-
-%% File menu
-gui_cmd('Close', _State) ->
- stop();
-
-%% Edit menu
-gui_cmd('Go To Line...', State) ->
- %% Will result in message handled below: {gui, {gotoline, Line}}
- dbg_ui_trace_win:helpwin(gotoline, State#state.win,
- State#state.gs, State#state.coords),
- State;
-gui_cmd({gotoline, Line}, State) ->
- Win = dbg_ui_trace_win:select_line(State#state.win, Line),
- State#state{win=Win};
-gui_cmd('Search...', State) ->
- dbg_ui_trace_win:helpwin(search, State#state.win,
- State#state.gs, State#state.coords),
- State;
-
-%% Break menu
-gui_cmd('Line Break...', State) ->
- add_break(State#state.gs, State#state.coords, line,
- State#state.mod,
- dbg_ui_trace_win:selected_line(State#state.win)),
- State;
-gui_cmd('Conditional Break...', State) ->
- add_break(State#state.gs, State#state.coords, conditional,
- State#state.mod,
- dbg_ui_trace_win:selected_line(State#state.win)),
- State;
-gui_cmd('Function Break...', State) ->
- add_break(State#state.gs, State#state.coords, function,
- State#state.mod, undefined),
- State;
-gui_cmd('Enable All', State) ->
- Breaks = int:all_breaks(),
- ThisMod = State#state.mod,
- lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod ->
- int:enable_break(Mod, Line);
- (_Break) ->
- ignore
- end,
- Breaks),
- State;
-gui_cmd('Disable All', State) ->
- Breaks = int:all_breaks(),
- ThisMod = State#state.mod,
- lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod ->
- int:disable_break(Mod, Line);
- (_Break) ->
- ignore
- end,
- Breaks),
- State;
-gui_cmd('Delete All', State) ->
- int:no_break(State#state.mod),
- State;
-gui_cmd({break, {Mod, Line}, What}, State) ->
- case What of
- add -> int:break(Mod, Line);
- delete -> int:delete_break(Mod, Line);
- {status, inactive} -> int:disable_break(Mod, Line);
- {status, active} -> int:enable_break(Mod, Line);
- {trigger, Action} -> int:action_at_break(Mod, Line, Action)
- end,
- State;
-
-%% Help menu
-gui_cmd('Debugger', State) ->
- Window = dbg_ui_trace_win:get_window(State#state.win),
- HelpFile = filename:join([code:lib_dir(debugger),
- "doc", "html", "part_frame.html"]),
- tool_utils:open_help(Window, HelpFile),
- State.
-
-add_break(GS, Coords, Type, undefined, _Line) ->
- dbg_ui_break:start(GS, Coords, Type);
-add_break(GS, Coords, Type, Mod, undefined) ->
- dbg_ui_break:start(GS, Coords, Type, Mod);
-add_break(GS, Coords, Type, Mod, Line) ->
- dbg_ui_break:start(GS, Coords, Type, Mod, Line).
-
-%%--Commands from the interpreter-------------------------------------
-
-int_cmd({new_break, {{Mod,_Line},_Options}=Break}, #state{mod=Mod}=State) ->
- Win = dbg_ui_trace_win:add_break(State#state.win, 'Break', Break),
- State#state{win=Win};
-int_cmd({delete_break, {Mod,_Line}=Point}, #state{mod=Mod}=State) ->
- Win = dbg_ui_trace_win:delete_break(State#state.win, Point),
- State#state{win=Win};
-int_cmd({break_options, {{Mod,_Line},_Options}=Break}, #state{mod=Mod}=State) ->
- Win = dbg_ui_trace_win:update_break(State#state.win, Break),
- State#state{win=Win};
-int_cmd(no_break, State) ->
- Win = dbg_ui_trace_win:clear_breaks(State#state.win),
- State#state{win=Win};
-int_cmd({no_break, _Mod}, State) ->
- Win = dbg_ui_trace_win:clear_breaks(State#state.win),
- State#state{win=Win};
-int_cmd(_, State) ->
- State.
-
-
-%%====================================================================
-%% GUI auxiliary functions
-%%====================================================================
-
-menus() ->
- [{'File', [{'Close', 0}]},
- {'Edit', [{'Go To Line...', 0},
- {'Search...', 0}]},
- {'Break', [{'Line Break...', 5},
- {'Conditional Break...', 13},
- {'Function Break...', 0},
- separator,
- {'Enable All', no},
- {'Disable All', no},
- {'Delete All', 0},
- separator]},
- {'Help', [{'Debugger', no}]}].
-
-shortcut(c) -> 'Close';
-shortcut(g) -> 'Go To Line...';
-shortcut(s) -> 'Search...';
-shortcut(b) -> 'Line Break...';
-shortcut(r) -> 'Conditional Break...';
-shortcut(f) -> 'Function Break...';
-shortcut(d) -> 'Delete All';
-
-shortcut(_) -> false.
-
-gui_load_module(Win, Mod) ->
- dbg_ui_trace_win:display({text, "Loading module..."}),
- Contents = int:contents(Mod, any),
- Win2 = dbg_ui_trace_win:show_code(Win, Mod, Contents),
- dbg_ui_trace_win:display({text, ""}),
- Win2.
diff --git a/lib/debugger/src/dbg_ui_win.erl b/lib/debugger/src/dbg_ui_win.erl
deleted file mode 100644
index 1c7a80a1c4..0000000000
--- a/lib/debugger/src/dbg_ui_win.erl
+++ /dev/null
@@ -1,281 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_win).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menu,3}},
- {nowarn_deprecated_function,{gs,menubutton,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,menuitem,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,1}}]).
-
-%% External exports
--export([init/0,
- font/1, min_size/3, min_size/4,
- create_menus/2, select/2, selected/1,
- add_break/2, update_break/2, delete_break/1,
- motion/2
- ]).
-
--record(break, {mb, smi, emi, dimi, demi}).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% init() -> GS
-%% GS = term()
-%%--------------------------------------------------------------------
-init() ->
- gs:start([{kernel, true}]).
-
-%%--------------------------------------------------------------------
-%% font(Style) -> Font
-%% Style = normal | bold
-%% Select a suitable font. Defaults to {screen,12} and, if it does not
-%% exist, {courier,12}.
-%%--------------------------------------------------------------------
-font(Style) ->
- GS = init(),
- Style2 = if
- Style =:= normal -> [];
- true -> [Style]
- end,
- case gs:read(GS, {choose_font, {screen,Style2,12}}) of
- Font when element(1, Font) =:= screen ->
- Font;
- _ ->
- gs:read(GS, {choose_font, {courier,Style2,12}})
- end.
-
-%%--------------------------------------------------------------------
-%% min_size(Strings, MinW, MinH) -> {W, H}
-%% min_size(Font, Strings, MinW, MinH) -> {W, H}
-%% Font = GS font - defaults to dbg_ui_win:font(normal)
-%% Strings = [string()]
-%% MinW = MinH = int()
-%% W = H = int()
-%%--------------------------------------------------------------------
-min_size(Strings, MinW, MinH) ->
- min_size(font(normal), Strings, MinW, MinH).
-
-min_size(Font, Strings, MinW, MinH) ->
- GS = init(),
- min_size(GS, Font, Strings, MinW, MinH).
-
-min_size(GS, Font, [String|Strings], MinW, MinH) ->
- {W, H} = gs:read(GS, {font_wh, {Font, String}}),
- min_size(GS, Font, Strings, erlang:max(MinW, W), erlang:max(MinH, H));
-min_size(_GS, _Font, [], W, H) ->
- {W, H}.
-
-%%--------------------------------------------------------------------
-%% create_menus(MenuBar, [Menu])
-%% MenuBar = gsobj()
-%% Menu = {Name, [Item]}
-%% Name = atom()
-%% Item = {Name, N} | {Name, N, Type} | {Name, N, cascade, [Item]}
-%% | separator
-%% N = no | integer()
-%% Type = check | radio
-%% Create the specified menus and menuitems.
-%%
-%% Normal menuitems are specified as {Name, N}. Generates the event:
-%% {gs, _Id, click, {menuitem, Name}, _Arg}
-%%
-%% Check and radio menuitems are specified as {Name, N, check|radio}.
-%% They are assumed to be children to a cascade menuitem! (And all children
-%% to one cascade menuitem are assumed to be either check OR radio
-%% menuitems)!
-%% Selecting a check/radio menuitem generates the event:
-%% {gs, _Id, click, {menu, Menu}, _Arg}
-%% where Menu is the name of the parent, the cascade menuitem.
-%% Use selected(Menu) to retrieve which check/radio menuitems are
-%% selected.
-%%--------------------------------------------------------------------
-create_menus(MenuBar, [{Title, Items}|Menus]) ->
- Title2 = " "++(atom_to_list(Title))++" ",
- MenuBtn = gs:menubutton(MenuBar, [{label, {text,Title2}},
- {font, font(normal)}]),
- case Title of
- 'Help' -> gs:config(MenuBtn, {side, right});
- _ -> ignore
- end,
- Menu = gs:menu(Title, MenuBtn, []),
- create_items(Menu, Items, Title),
- create_menus(MenuBar, Menus);
-create_menus(_MenuBar, []) ->
- done.
-
-create_items(Menu, [Item|Items], Group) ->
- create_item(Menu, Item, Group),
- create_items(Menu, Items, Group);
-create_items(_Menu, [], _Group) ->
- done.
-
-create_item(Menu, {Name, _N, cascade, Items}, _Group) ->
- MenuBtn = gs:menuitem(Menu, [{label, {text,Name}},
- {font, font(normal)},
- {itemtype, cascade}]),
- SubMenu = gs:menu(Name, MenuBtn, []),
- create_items(SubMenu, Items, Name);
-create_item(Menu, separator, _Group) ->
- gs:menuitem(Menu, [{itemtype, separator}]);
-create_item(Menu, MenuItem, Group) ->
- Options = case MenuItem of
- {Name, N} ->
- [{data, {menuitem,Name}}];
- {Name, N, check} ->
- [{itemtype, check}, {data, {menu, Group}}];
- {Name, N, radio} ->
- [{itemtype, radio}, {data, {menu, Group}},
- {group, group(Group)}]
- end,
- gs:menuitem(Name, Menu, [{label, {text,Name}},
- {font, font(normal)} | Options]),
- if
- is_integer(N) -> gs:config(Name, {underline, N});
- true -> ignore
- end.
-
-%% When grouping radio buttons, the group id must be an atom unique for
-%% each window.
-group(Group) ->
- list_to_atom(atom_to_list(Group)++pid_to_list(self())).
-
-%%--------------------------------------------------------------------
-%% select(MenuItem, Bool)
-%% MenuItem = atom()
-%% Bool = boolean()
-%%--------------------------------------------------------------------
-select(MenuItem, Bool) ->
- gs:config(MenuItem, {select, Bool}).
-
-%%--------------------------------------------------------------------
-%% selected(Menu) -> [Name]
-%% Menu = Name = atom()
-%%--------------------------------------------------------------------
-selected(Menu) ->
- Children = gs:read(Menu, children),
- Selected = [gs:read(Child, select) || Child <- Children],
- lists:map(fun(Child) ->
- {text, Name} = gs:read(Child, label),
- list_to_atom(Name)
- end,
- Selected).
-
-%%--------------------------------------------------------------------
-%% add_break(Name, Point) -> #break{}
-%% Name = atom()
-%% Point = {Mod, Line}
-%% The break will generate the following events:
-%% {gs, _Id, click, {break, Point, Event}, _Arg}
-%% Event = delete | {trigger, Action} | {status, Status}
-%% Action = enable | disable | delete
-%% Status = active | inactive
-%%--------------------------------------------------------------------
-add_break(Menu, Point) ->
- Font = font(normal),
-
- %% Create a name for the breakpoint
- {Mod, Line} = Point,
- Label = io_lib:format("~w ~5w", [Mod, Line]),
-
- %% Create a menu for the breakpoint
- MenuBtn = gs:menuitem(Menu, [{label, {text,Label}}, {font, Font},
- {itemtype, cascade}]),
- SubMenu = gs:menu(MenuBtn, []),
- SMI = gs:menuitem(SubMenu, [{data, {break,Point,null}}]),
- gs:menuitem(SubMenu, [{label, {text,"Delete"}}, {font, Font},
- {data, {break,Point,delete}}]),
- TriggerMenuBtn = gs:menuitem(SubMenu,
- [{label,{text,"Trigger Action"}},
- {font, Font},
- {itemtype, cascade}]),
- TriggerMenu = gs:menu(TriggerMenuBtn, []),
- Group = element(3, erlang:now()),
- EMI = gs:menuitem(TriggerMenu, [{label, {text,"Enable"}},
- {font, Font},
- {itemtype, radio}, {group, Group},
- {data,
- {break,Point,{trigger,enable}}}]),
- DiMI = gs:menuitem(TriggerMenu, [{label, {text,"Disable"}},
- {font, Font},
- {itemtype, radio}, {group, Group},
- {data,
- {break,Point,{trigger,disable}}}]),
- DeMI = gs:menuitem(TriggerMenu, [{label, {text,"Delete"}},
- {font, Font},
- {itemtype, radio}, {group, Group},
- {data,
- {break,Point,{trigger,delete}}}]),
-
- #break{mb=MenuBtn, smi=SMI, emi=EMI, dimi=DiMI, demi=DeMI}.
-
-%%--------------------------------------------------------------------
-%% update_break(Break, Options)
-%% Break = #break{}
-%% Options = [Status, Action, Mods, Cond]
-%% Status = active | inactive
-%% Action = enable | disable | delete
-%% Mods = null (not used)
-%% Cond = null | {Mod, Func}
-%%--------------------------------------------------------------------
-update_break(Break, Options) ->
- [Status, Trigger|_] = Options,
- {break, Point, _Status} = gs:read(Break#break.smi, data),
-
- {Label, Data} = case Status of
- active ->
- {"Disable", {break,Point,{status,inactive}}};
- inactive ->
- {"Enable", {break,Point,{status,active}}}
- end,
- gs:config(Break#break.smi, [{label, {text,Label}},
- {font, font(normal)},
- {data, Data}]),
-
- TriggerMI = case Trigger of
- enable -> Break#break.emi;
- disable -> Break#break.dimi;
- delete -> Break#break.demi
- end,
- gs:config(TriggerMI, {select, true}).
-
-%%--------------------------------------------------------------------
-%% delete_break(Break)
-%% Break = #break{}
-%%--------------------------------------------------------------------
-delete_break(Break) ->
- gs:destroy(Break#break.mb).
-
-%%--------------------------------------------------------------------
-%% motion(X, Y) -> {X, Y}
-%% X = Y = integer()
-%%--------------------------------------------------------------------
-motion(X, Y) ->
- receive
- {gs, _Id, motion, _Data, [NX,NY]} ->
- motion(NX, NY)
- after 0 ->
- {X, Y}
- end.
diff --git a/lib/debugger/src/dbg_ui_winman.erl b/lib/debugger/src/dbg_ui_winman.erl
deleted file mode 100644
index b5433a202b..0000000000
--- a/lib/debugger/src/dbg_ui_winman.erl
+++ /dev/null
@@ -1,182 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(dbg_ui_winman).
--behaviour(gen_server).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,menu,3}},
- {nowarn_deprecated_function,{gs,menubutton,3}},
- {nowarn_deprecated_function,{gs,menuitem,3}}]).
-
-%% External exports
--export([start/0]).
--export([insert/2, is_started/1,
- clear_process/1,
- raise/1,
- windows_menu/1, update_windows_menu/1]).
-
-%% gen_server callbacks
--export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- terminate/2, code_change/3]).
-
--record(win, {owner, % pid()
- title, % string()
- win % gsobj()
- }).
-
--record(state, {wins=[] % [#win{}]
- }).
-
-%%====================================================================
-%% External exports
-%%====================================================================
-
-%%--------------------------------------------------------------------
-%% start()
-%%--------------------------------------------------------------------
-start() ->
- gen_server:start({local,?MODULE}, ?MODULE, [], []).
-
-%%--------------------------------------------------------------------
-%% insert(Title, Win)
-%% Title = string()
-%% Win = gsobj()
-%%--------------------------------------------------------------------
-insert(Title, Win) ->
- gen_server:cast(?MODULE, {insert, self(), Title, Win}).
-
-%%--------------------------------------------------------------------
-%% is_started(Title) -> true | false
-%% Title = string()
-%%--------------------------------------------------------------------
-is_started(Title) ->
- case gen_server:call(?MODULE, {is_started, Title}, infinity) of
- {true, Win} ->
- raise(Win),
- true;
- false ->
- false
- end.
-
-%%--------------------------------------------------------------------
-%% clear_process(Title)
-%% Title = string()
-%%--------------------------------------------------------------------
-clear_process(Title) ->
- gen_server:cast(?MODULE, {clear_process, Title}).
-
-%%--------------------------------------------------------------------
-%% raise(Win)
-%% Win = gsobj()
-%%--------------------------------------------------------------------
-raise(Win) ->
- gs:config(Win, [raise, {iconify, false}, {setfocus, true}]).
-
-%%--------------------------------------------------------------------
-%% windows_menu(MenuBar)
-%% MenuBar = gsobj()
-%%--------------------------------------------------------------------
-windows_menu(MenuBar) ->
- gs:menubutton('WindowsMenuBtn', MenuBar,
- [{label,{text," Windows "}},
- {font, dbg_ui_win:font(normal)}]),
- gs:menu('WindowsMenu', 'WindowsMenuBtn', []).
-
-%%--------------------------------------------------------------------
-%% update_windows_menu(Data)
-%% Data = {New, Old}
-%% New = Old = list()
-%%--------------------------------------------------------------------
-update_windows_menu([MonInfo|Infos]) ->
- gs:destroy('WindowsMenu'),
- gs:menu('WindowsMenu', 'WindowsMenuBtn', []),
- menuitem(MonInfo),
- gs:menuitem(separator, 'WindowsMenu', [{itemtype, separator}]),
- lists:foreach(fun(Info) -> menuitem(Info) end, Infos).
-
-menuitem({Title, Win}) ->
- gs:menuitem(Title, 'WindowsMenu', [{label, {text,Title}},
- {font, dbg_ui_win:font(normal)},
- {data, {dbg_ui_winman,Win}}]).
-
-
-%%====================================================================
-%% gen_server callbacks
-%%====================================================================
-
-init(_Arg) ->
- process_flag(trap_exit, true),
- {ok, #state{}}.
-
-handle_call({is_started, Title}, _From, State) ->
- Reply = case lists:keyfind(Title, #win.title, State#state.wins) of
- false -> false;
- Win -> {true, Win#win.win}
- end,
- {reply, Reply, State}.
-
-handle_cast({insert, Pid, Title, Win}, State) ->
- link(Pid),
- Wins = State#state.wins ++ [#win{owner=Pid, title=Title, win=Win}],
- inform_all(Wins),
- {noreply, State#state{wins=Wins}};
-
-handle_cast({clear_process, Title}, State) ->
- OldWins = State#state.wins,
- Wins = case lists:keyfind(Title, #win.title, OldWins) of
- #win{owner=Pid} ->
- Msg = {dbg_ui_winman, destroy},
- Pid ! Msg,
- lists:keydelete(Title, #win.title, OldWins);
- false ->
- OldWins
- end,
- {noreply, State#state{wins=Wins}}.
-
-handle_info({'EXIT', Pid, _Reason}, State) ->
- [Mon | _Wins] = State#state.wins,
- if
- Pid =:= Mon#win.owner -> {stop, normal, State};
- true ->
- Wins2 = lists:keydelete(Pid, #win.owner, State#state.wins),
- inform_all(Wins2),
- {noreply, State#state{wins=Wins2}}
- end.
-
-terminate(_Reason, State) ->
- delete_all(State#state.wins),
- ok.
-
-code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
-
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-inform_all(Wins) ->
- Infos = lists:map(fun(#win{title=Title, win=Win}) -> {Title, Win} end,
- Wins),
- Msg = {dbg_ui_winman, update_windows_menu, Infos},
- lists:foreach(fun(#win{owner=Pid}) -> Pid ! Msg end, Wins).
-
-delete_all(Wins) ->
- Msg = {dbg_ui_winman, destroy},
- lists:foreach(fun(#win{owner=Pid}) -> Pid ! Msg end, Wins).
diff --git a/lib/debugger/src/dbg_wx_mon_win.erl b/lib/debugger/src/dbg_wx_mon_win.erl
index a617f3e1e7..0071b27027 100644
--- a/lib/debugger/src/dbg_wx_mon_win.erl
+++ b/lib/debugger/src/dbg_wx_mon_win.erl
@@ -43,7 +43,7 @@
-record(moduleInfo, {module, menubtn}).
-record(procInfo, {pid, row}).
-record(breakInfo, {point, status, break}).
--record(break, {mb, smi, emi, dimi, demi}). %% BUGBUG defined in dbg_ui_win
+-record(break, {mb, smi, emi, dimi, demi}).
-record(winInfo, {window, % gsobj()
grid, % gsobj()
row, % int() Last row in grid
@@ -76,13 +76,6 @@
init() ->
dbg_wx_win:init().
-%%--------------------------------------------------------------------
-%% create_win(GS, Title, Menus) -> #winInfo{}
-%% GS = gsobj()
-%% Title = string()
-%% Menus = [menu()] See dbg_ui_win.erl
-%%--------------------------------------------------------------------
-
-define(GRID,1000).
-define(PAD, 5).
diff --git a/lib/debugger/src/dbg_wx_trace.erl b/lib/debugger/src/dbg_wx_trace.erl
index 7108b5a79a..1ac796bb4c 100644
--- a/lib/debugger/src/dbg_wx_trace.erl
+++ b/lib/debugger/src/dbg_wx_trace.erl
@@ -71,21 +71,10 @@ start(Pid, TraceWin, BackTrace) ->
start(Pid, TraceWin, BackTrace, ?STRINGS).
start(Pid, TraceWin, BackTrace, Strings) ->
- case {whereis(dbg_wx_mon), whereis(dbg_ui_mon)} of
- {undefined, undefined} ->
- case which_gui() of
- gs ->
- dbg_ui_trace:start(Pid, TraceWin, BackTrace);
- wx ->
- Parent = wx:new(),
- Env = wx:get_env(),
- start(Pid, Env, Parent, TraceWin, BackTrace, Strings)
- end;
- {undefined, Monitor} when is_pid(Monitor) ->
- dbg_ui_trace:start(Pid, TraceWin, BackTrace);
- {Monitor, _} when is_pid(Monitor) ->
+ case whereis(dbg_wx_mon) of
+ Monitor when is_pid(Monitor) ->
Monitor ! {?MODULE, self(), get_env},
- receive
+ receive
{env, Monitor, Env, Parent} ->
start(Pid, Env, Parent, TraceWin, BackTrace, Strings)
end
@@ -110,15 +99,6 @@ start(Pid, Env, Parent, TraceWin, BackTrace, Strings) ->
ignore
end.
-which_gui() ->
- try
- wx:new(),
- wx:destroy(),
- wx
- catch _:_ ->
- gs
- end.
-
%%--------------------------------------------------------------------
%% title(Pid) -> string()
%% By exporting this function, dbg_wx_mon may check with dbg_wx_winman
diff --git a/lib/debugger/src/debugger.app.src b/lib/debugger/src/debugger.app.src
index 807054c983..84fb98c94e 100644
--- a/lib/debugger/src/debugger.app.src
+++ b/lib/debugger/src/debugger.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -27,20 +27,6 @@
dbg_iload,
dbg_iserver,
dbg_istk,
- dbg_ui_break,
- dbg_ui_break_win,
- dbg_ui_edit,
- dbg_ui_edit_win,
- dbg_ui_filedialog_win,
- dbg_ui_interpret,
- dbg_ui_mon,
- dbg_ui_mon_win,
- dbg_ui_settings,
- dbg_ui_trace,
- dbg_ui_trace_win,
- dbg_ui_view,
- dbg_ui_win,
- dbg_ui_winman,
dbg_wx_break,
dbg_wx_break_win,
dbg_wx_code,
@@ -59,5 +45,5 @@
i,
int
]},
- {registered, [dbg_iserver, dbg_ui_mon, dbg_ui_winman]},
- {applications, [kernel, stdlib, gs]}]}.
+ {registered, [dbg_iserver, dbg_wx_mon, dbg_wx_winman]},
+ {applications, [kernel, stdlib]}]}.
diff --git a/lib/debugger/src/debugger.erl b/lib/debugger/src/debugger.erl
index b97091ee6b..8a2ac28df5 100644
--- a/lib/debugger/src/debugger.erl
+++ b/lib/debugger/src/debugger.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -32,44 +32,44 @@
%% --------
%% Interface module.
%%
-%% dbg_ui_winman
+%% dbg_wx_winman
%% -------------
%% Window manager, keeping track of open windows and Debugger
%% processes.
%%
-%% dbg_ui_mon, dbg_ui_mon_win
+%% dbg_wx_mon, dbg_wx_mon_win
%% --------------------------
%% Monitor window, main window of Debugger, displaying information
%% about interpreted modules and debugged processes.
%%
-%% dbg_ui_trace, dbg_ui_trace_win
+%% dbg_wx_trace, dbg_wx_trace_win
%% ------------------------------
%% Attach process window, showing the code executed by a debugged
%% process and providing a GUI for stepping, inspecting variables etc.
%%
-%% dbg_ui_break, dbg_ui_break_win
+%% dbg_wx_break, dbg_wx_break_win
%% ------------------------------
%% Help window for creating new breakpoints.
%%
-%% dbg_ui_edit, dbg_ui_edit_win
+%% dbg_wx_edit, dbg_wx_edit_win
%% --------------------------------------
%% Help window for editing terms, used for setting backtrace size
%% (i.e. how many stack frames to display in the attach process window)
%% and changing variable values.
%%
-%% dbg_ui_interpret, dbg_ui_filedialog_win
+%% dbg_wx_interpret, dbg_wx_filedialog_win
%% --------------------------------------
%% Help window for selecting modules to interpret.
%%
-%% dbg_ui_settings, dbg_ui_filedialog_win
+%% dbg_wx_settings, dbg_wx_filedialog_win
%% --------------------------------------
%% Help window for saving and loading Debugger settings.
%%
-%% dbg_ui_view
+%% dbg_wx_view
%% -----------
-%% Help window for viewing interpreted modules (uses dbg_ui_trace_win).
+%% Help window for viewing interpreted modules (uses dbg_wx_trace_win).
%%
-%% dbg_ui_win
+%% dbg_wx_win
%% ----------
%% GUI specific functionality used by more than one window type.
%%
@@ -78,7 +78,7 @@ start() ->
start(global, default, default).
start(Mode) when Mode==local; Mode==global ->
start(Mode, default, default);
-start(Gui) when Gui==gs; Gui==wx ->
+start(Gui) when Gui==wx ->
start(global, default, Gui);
start(SFile) when is_list(SFile), is_integer(hd(SFile)) ->
start(global, SFile, default).
@@ -86,8 +86,6 @@ start(SFile) when is_list(SFile), is_integer(hd(SFile)) ->
start(Mode, SFile) ->
start(Mode, SFile, default).
-start(Mode, SFile, gs) ->
- dbg_ui_mon:start(Mode, SFile);
start(Mode, SFile, wx) ->
dbg_wx_mon:start(Mode, SFile);
start(Mode, SFile, default) ->
@@ -95,7 +93,7 @@ start(Mode, SFile, default) ->
start(Mode, SFile, Gui).
stop() ->
- dbg_ui_mon:stop().
+ dbg_wx_mon:stop().
quick(M, F, A) ->
int:i(M),
@@ -104,15 +102,7 @@ quick(M, F, A) ->
auto_attach(Flags) ->
case which_gui() of
- gs -> int:auto_attach(Flags, {dbg_ui_trace, start, []});
wx -> int:auto_attach(Flags, {dbg_wx_trace, start, []})
end.
-which_gui() ->
- try
- wx:new(),
- wx:destroy(),
- wx
- catch _:_ ->
- gs
- end.
+which_gui() -> wx.
diff --git a/lib/debugger/test/erl_eval_SUITE.erl b/lib/debugger/test/erl_eval_SUITE.erl
index bb2669f450..be9312b68f 100644
--- a/lib/debugger/test/erl_eval_SUITE.erl
+++ b/lib/debugger/test/erl_eval_SUITE.erl
@@ -39,7 +39,8 @@
otp_8133/1,
funs/1,
try_catch/1,
- eval_expr_5/1]).
+ eval_expr_5/1,
+ eep37/1]).
%%
%% Define to run outside of test server
@@ -78,7 +79,7 @@ all() ->
pattern_expr, match_bin, guard_3, guard_4, lc,
simple_cases, unary_plus, apply_atom, otp_5269,
otp_6539, otp_6543, otp_6787, otp_6977, otp_7550,
- otp_8133, funs, try_catch, eval_expr_5].
+ otp_8133, funs, try_catch, eval_expr_5, eep37].
groups() ->
[].
@@ -1323,6 +1324,27 @@ eval_expr_5(Config) when is_list(Config) ->
ok
end.
+eep37(Config) when is_list(Config) ->
+ check(fun () -> (fun _(X) -> X end)(42) end,
+ "(fun _(X) -> X end)(42).",
+ 42),
+ check(fun () -> (fun _Id(X) -> X end)(42) end,
+ "(fun _Id(X) -> X end)(42).", 42),
+ check(fun () -> is_function((fun Self() -> Self end)(), 0) end,
+ "is_function((fun Self() -> Self end)(), 0).",
+ true),
+ check(fun () ->
+ F = fun Fact(N) when N > 0 ->
+ N * Fact(N - 1);
+ Fact(0) ->
+ 1
+ end,
+ F(6)
+ end,
+ "(fun Fact(N) when N > 0 -> N * Fact(N - 1); Fact(0) -> 1 end)(6).",
+ 720),
+ ok.
+
%% Check the string in different contexts: as is; in fun; from compiled code.
check(F, String, Result) ->
check1(F, String, Result),
diff --git a/lib/debugger/test/fun_SUITE.erl b/lib/debugger/test/fun_SUITE.erl
index a06cdc7165..8425f973e6 100644
--- a/lib/debugger/test/fun_SUITE.erl
+++ b/lib/debugger/test/fun_SUITE.erl
@@ -24,7 +24,7 @@
init_per_testcase/2,end_per_testcase/2,
init_per_suite/1,end_per_suite/1,
good_call/1,bad_apply/1,bad_fun_call/1,badarity/1,
- ext_badarity/1,otp_6061/1,external/1]).
+ ext_badarity/1,otp_6061/1,external/1,eep37/1]).
%% Internal exports.
-export([nothing/0,call_me/1]).
@@ -48,7 +48,7 @@ end_per_group(_GroupName, Config) ->
cases() ->
[good_call, bad_apply, bad_fun_call, badarity,
- ext_badarity, otp_6061, external].
+ ext_badarity, otp_6061, external, eep37].
init_per_testcase(_Case, Config) ->
test_lib:interpret(?MODULE),
@@ -288,5 +288,18 @@ external(Config) when is_list(Config) ->
call_me(I) ->
{ok,I}.
+eep37(Config) when is_list(Config) ->
+ F = fun Fact(N) when N > 0 -> N * Fact(N - 1); Fact(0) -> 1 end,
+ Add = fun _(N) -> N + 1 end,
+ UnusedName = fun BlackAdder(N) -> N + 42 end,
+ 720 = F(6),
+ 10 = Add(9),
+ 50 = UnusedName(8),
+ [1,1,2,6,24,120] = lists:map(F, lists:seq(0, 5)),
+ {'EXIT',{{badarity,_},_}} = (catch lists:map(fun G() -> G() end, [1])),
+ {'EXIT',{{badarity,_},_}} = (catch F()),
+
+ ok.
+
id(I) ->
I.
diff --git a/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl b/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl
index c5c6a56363..ab485fd350 100644
--- a/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl
+++ b/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl
@@ -236,4 +236,8 @@ otp_8310() ->
(catch {a, [X || X <- a]}),
{'EXIT',{{bad_generator,b},_}} =
(catch {a, << <<X>> || << X >> <= b >>}),
+ true = begin (X1 = true) andalso X1, X1 end,
+ false = begin (X2 = false) andalso X2, X2 end,
+ true = begin (X3 = true) orelse X3, X3 end,
+ false = begin (X4 = false) orelse X4, X4 end,
ok.
diff --git a/lib/dialyzer/doc/manual.txt b/lib/dialyzer/doc/manual.txt
index d519ac960b..29c9518d84 100644
--- a/lib/dialyzer/doc/manual.txt
+++ b/lib/dialyzer/doc/manual.txt
@@ -125,7 +125,7 @@ The exit status of the command line version is:
Usage: dialyzer [--help] [--version] [--shell] [--quiet] [--verbose]
[-pa dir]* [--plt plt] [--plts plt*] [-Ddefine]*
[-I include_dir]* [--output_plt file] [-Wwarn]*
- [--src] [--gui | --wx] [files_or_dirs] [-r dirs]
+ [--src] [--gui] [files_or_dirs] [-r dirs]
[--apps applications] [-o outfile]
[--build_plt] [--add_to_plt] [--remove_from_plt]
[--check_plt] [--no_check_plt] [--plt_info] [--get_warnings]
@@ -234,9 +234,7 @@ Options:
--fullpath
Display the full path names of files for which warnings are emitted.
--gui
- Use the gs-based GUI.
- --wx
- Use the wx-based GUI.
+ Use the GUI.
Note:
* denotes that multiple occurrences of these options are possible.
diff --git a/lib/dialyzer/doc/src/dialyzer.xml b/lib/dialyzer/doc/src/dialyzer.xml
index 5bac999ac8..2a631c3010 100644
--- a/lib/dialyzer/doc/src/dialyzer.xml
+++ b/lib/dialyzer/doc/src/dialyzer.xml
@@ -67,7 +67,7 @@
dialyzer [--help] [--version] [--shell] [--quiet] [--verbose]
[-pa dir]* [--plt plt] [--plts plt*] [-Ddefine]*
[-I include_dir]* [--output_plt file] [-Wwarn]*
- [--src] [--gui | --wx] [files_or_dirs] [-r dirs]
+ [--src] [--gui] [files_or_dirs] [-r dirs]
[--apps applications] [-o outfile]
[--build_plt] [--add_to_plt] [--remove_from_plt]
[--check_plt] [--no_check_plt] [--plt_info] [--get_warnings]
@@ -204,9 +204,7 @@
<tag><c><![CDATA[--fullpath]]></c></tag>
<item>Display the full path names of files for which warnings are emitted.</item>
<tag><c><![CDATA[--gui]]></c></tag>
- <item>Use the gs-based GUI.</item>
- <tag><c><![CDATA[--wx]]></c></tag>
- <item>Use the wx-based GUI.</item>
+ <item>Use the GUI.</item>
</taglist>
<note>
<p>* denotes that multiple occurrences of these options are possible.</p>
diff --git a/lib/dialyzer/src/Makefile b/lib/dialyzer/src/Makefile
index bb2edd419a..d7265ba31a 100644
--- a/lib/dialyzer/src/Makefile
+++ b/lib/dialyzer/src/Makefile
@@ -57,7 +57,6 @@ MODULES = \
dialyzer_dataflow \
dialyzer_dep \
dialyzer_explanation \
- dialyzer_gui \
dialyzer_gui_wx \
dialyzer_options \
dialyzer_plt \
@@ -113,9 +112,6 @@ $(EBIN)/dialyzer_cl_parse.$(EMULATOR): dialyzer_cl_parse.erl ../vsn.mk
$(EBIN)/dialyzer_plt.$(EMULATOR): dialyzer_plt.erl ../vsn.mk
$(erlc_verbose)erlc -W $(ERL_COMPILE_FLAGS) -DVSN="\"v$(VSN)\"" -o$(EBIN) dialyzer_plt.erl
-$(EBIN)/dialyzer_gui.$(EMULATOR): dialyzer_gui.erl ../vsn.mk
- $(erlc_verbose)erlc -W $(ERL_COMPILE_FLAGS) -DVSN="\"v$(VSN)\"" -o$(EBIN) dialyzer_gui.erl
-
$(EBIN)/dialyzer_gui_wx.$(EMULATOR): dialyzer_gui_wx.erl ../vsn.mk
$(erlc_verbose)erlc -W $(ERL_COMPILE_FLAGS) -DVSN="\"v$(VSN)\"" -o$(EBIN) dialyzer_gui_wx.erl
@@ -140,7 +136,6 @@ $(EBIN)/dialyzer_contracts.beam: dialyzer.hrl
$(EBIN)/dialyzer_dataflow.beam: dialyzer.hrl
$(EBIN)/dialyzer_dep.beam: dialyzer.hrl
$(EBIN)/dialyzer_explanation.beam: dialyzer.hrl
-$(EBIN)/dialyzer_gui.beam: dialyzer.hrl
$(EBIN)/dialyzer_gui_wx.beam: dialyzer.hrl dialyzer_gui_wx.hrl
$(EBIN)/dialyzer_options.beam: dialyzer.hrl
$(EBIN)/dialyzer_plt.beam: dialyzer.hrl
diff --git a/lib/dialyzer/src/dialyzer.erl b/lib/dialyzer/src/dialyzer.erl
index 822aa0826a..35156afff2 100644
--- a/lib/dialyzer/src/dialyzer.erl
+++ b/lib/dialyzer/src/dialyzer.erl
@@ -62,18 +62,18 @@ plain_cl() ->
cl_halt(cl_check_init(Opts), Opts);
{plt_info, Opts} ->
cl_halt(cl_print_plt_info(Opts), Opts);
- {{gui, Type}, Opts} ->
+ {gui, Opts} ->
try check_gui_options(Opts)
catch throw:{dialyzer_error, Msg} -> cl_error(Msg)
end,
case Opts#options.check_plt of
true ->
case cl_check_init(Opts#options{get_warnings = false}) of
- {ok, _} -> gui_halt(internal_gui(Type, Opts), Opts);
+ {ok, _} -> gui_halt(internal_gui(Opts), Opts);
{error, _} = Error -> cl_halt(Error, Opts)
end;
false ->
- gui_halt(internal_gui(Type, Opts), Opts)
+ gui_halt(internal_gui(Opts), Opts)
end;
{cl, Opts} ->
case Opts#options.check_plt of
@@ -179,12 +179,9 @@ run(Opts) ->
erlang:error({dialyzer_error, lists:flatten(ErrorMsg)})
end.
-internal_gui(Type, OptsRecord) ->
+internal_gui(OptsRecord) ->
F = fun() ->
- case Type of
- gs -> dialyzer_gui:start(OptsRecord);
- wx -> dialyzer_gui_wx:start(OptsRecord)
- end,
+ dialyzer_gui_wx:start(OptsRecord),
?RET_NOTHING_SUSPICIOUS
end,
doit(F).
@@ -205,7 +202,7 @@ gui(Opts) ->
case cl_check_init(OptsRecord) of
{ok, ?RET_NOTHING_SUSPICIOUS} ->
F = fun() ->
- dialyzer_gui:start(OptsRecord)
+ dialyzer_gui_wx:start(OptsRecord)
end,
case doit(F) of
{ok, _} -> ok;
diff --git a/lib/dialyzer/src/dialyzer_callgraph.erl b/lib/dialyzer/src/dialyzer_callgraph.erl
index b9ad3f857d..bc32110751 100644
--- a/lib/dialyzer/src/dialyzer_callgraph.erl
+++ b/lib/dialyzer/src/dialyzer_callgraph.erl
@@ -35,6 +35,7 @@
is_escaping/2,
is_self_rec/2,
non_local_calls/1,
+ lookup_letrec/2,
lookup_rec_var/2,
lookup_call_site/2,
lookup_label/2,
@@ -81,6 +82,8 @@
%% digraph - A digraph representing the callgraph.
%% Nodes are represented as MFAs or labels.
%% esc - A set of all escaping functions as reported by dialyzer_dep.
+%% letrec_map - A dict mapping from letrec bound labels to function labels.
+%% Includes all functions.
%% name_map - A mapping from label to MFA.
%% rev_name_map - A reverse mapping of the name_map.
%% rec_var_map - A dict mapping from letrec bound labels to function names.
@@ -93,6 +96,7 @@
-record(callgraph, {digraph = digraph:new() :: digraph(),
active_digraph :: active_digraph(),
esc :: ets:tid(),
+ letrec_map :: ets:tid(),
name_map :: ets:tid(),
rev_name_map :: ets:tid(),
rec_var_map :: ets:tid(),
@@ -117,11 +121,12 @@
-spec new() -> callgraph().
new() ->
- [ETSEsc, ETSNameMap, ETSRevNameMap, ETSRecVarMap, ETSSelfRec, ETSCalls] =
+ [ETSEsc, ETSNameMap, ETSRevNameMap, ETSRecVarMap, ETSLetrecMap, ETSSelfRec, ETSCalls] =
[ets:new(N,[public, {read_concurrency, true}]) ||
N <- [callgraph_esc, callgraph_name_map, callgraph_rev_name_map,
- callgraph_rec_var_map, callgraph_self_rec, callgraph_calls]],
+ callgraph_rec_var_map, callgraph_letrec_map, callgraph_self_rec, callgraph_calls]],
#callgraph{esc = ETSEsc,
+ letrec_map = ETSLetrecMap,
name_map = ETSNameMap,
rev_name_map = ETSRevNameMap,
rec_var_map = ETSRecVarMap,
@@ -144,6 +149,12 @@ lookup_rec_var(Label, #callgraph{rec_var_map = RecVarMap})
when is_integer(Label) ->
ets_lookup_dict(Label, RecVarMap).
+-spec lookup_letrec(label(), callgraph()) -> 'error' | {'ok', label()}.
+
+lookup_letrec(Label, #callgraph{letrec_map = LetrecMap})
+ when is_integer(Label) ->
+ ets_lookup_dict(Label, LetrecMap).
+
-spec lookup_call_site(label(), callgraph()) -> 'error' | {'ok', [_]}. % XXX: refine
lookup_call_site(Label, #callgraph{calls = Calls})
@@ -348,16 +359,18 @@ ets_lookup_set(Key, Table) ->
scan_core_tree(Tree, #callgraph{calls = ETSCalls,
esc = ETSEsc,
+ letrec_map = ETSLetrecMap,
name_map = ETSNameMap,
rec_var_map = ETSRecVarMap,
rev_name_map = ETSRevNameMap,
self_rec = ETSSelfRec}) ->
%% Build name map and recursion variable maps.
- build_maps(Tree, ETSRecVarMap, ETSNameMap, ETSRevNameMap),
+ build_maps(Tree, ETSRecVarMap, ETSNameMap, ETSRevNameMap, ETSLetrecMap),
%% First find the module-local dependencies.
- {Deps0, EscapingFuns, Calls} = dialyzer_dep:analyze(Tree),
+ {Deps0, EscapingFuns, Calls, Letrecs} = dialyzer_dep:analyze(Tree),
true = ets:insert(ETSCalls, dict:to_list(Calls)),
+ true = ets:insert(ETSLetrecMap, dict:to_list(Letrecs)),
true = ets:insert(ETSEsc, [{E} || E <- EscapingFuns]),
LabelEdges = get_edges_from_deps(Deps0),
@@ -394,7 +407,7 @@ scan_core_tree(Tree, #callgraph{calls = ETSCalls,
NamedEdges3 = NewNamedEdges1 ++ NewNamedEdges2,
{Names3, NamedEdges3}.
-build_maps(Tree, ETSRecVarMap, ETSNameMap, ETSRevNameMap) ->
+build_maps(Tree, ETSRecVarMap, ETSNameMap, ETSRevNameMap, ETSLetrecMap) ->
%% We only care about the named (top level) functions. The anonymous
%% functions will be analysed together with their parents.
Defs = cerl:module_defs(Tree),
@@ -406,6 +419,7 @@ build_maps(Tree, ETSRecVarMap, ETSNameMap, ETSRevNameMap) ->
MFA = {Mod, FunName, Arity},
FunLabel = get_label(Function),
VarLabel = get_label(Var),
+ true = ets:insert(ETSLetrecMap, {VarLabel, FunLabel}),
true = ets:insert(ETSNameMap, {FunLabel, MFA}),
true = ets:insert(ETSRevNameMap, {MFA, FunLabel}),
true = ets:insert(ETSRecVarMap, {VarLabel, MFA})
diff --git a/lib/dialyzer/src/dialyzer_cl_parse.erl b/lib/dialyzer/src/dialyzer_cl_parse.erl
index 2ea3d3af5a..db27b2037d 100644
--- a/lib/dialyzer/src/dialyzer_cl_parse.erl
+++ b/lib/dialyzer/src/dialyzer_cl_parse.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -30,7 +30,7 @@
-type dial_cl_parse_ret() :: {'check_init', #options{}}
| {'plt_info', #options{}}
| {'cl', #options{}}
- | {{'gui', 'gs' | 'wx'}, #options{}}
+ | {'gui', #options{}}
| {'error', string()}.
-type deep_string() :: string() | [deep_string()].
@@ -193,12 +193,9 @@ cl(["--dump_callgraph", File|T]) ->
put(dialyzer_callgraph_file, File),
cl(T);
cl(["--gui"|T]) ->
- put(dialyzer_options_mode, {gui, gs}),
+ put(dialyzer_options_mode, gui),
cl(T);
-cl(["--wx"|T]) ->
- put(dialyzer_options_mode, {gui, wx}),
- cl(T);
-cl(["--solver",Solver|T]) -> % not documented
+cl(["--solver", Solver|T]) -> % not documented
append_var(dialyzer_solvers, [list_to_atom(Solver)]),
cl(T);
cl([H|_] = L) ->
@@ -217,7 +214,7 @@ cl([]) ->
{plt_info, cl_options()};
false ->
case get(dialyzer_options_mode) of
- {gui, _} = GUI -> {GUI, common_options()};
+ gui -> {gui, common_options()};
cl ->
case get(dialyzer_options_analysis_type) =:= plt_check of
true -> {check_init, cl_options()};
@@ -361,7 +358,7 @@ help_message() ->
S = "Usage: dialyzer [--help] [--version] [--shell] [--quiet] [--verbose]
[-pa dir]* [--plt plt] [--plts plt*] [-Ddefine]*
[-I include_dir]* [--output_plt file] [-Wwarn]*
- [--src] [--gui | --wx] [files_or_dirs] [-r dirs]
+ [--src] [--gui] [files_or_dirs] [-r dirs]
[--apps applications] [-o outfile]
[--build_plt] [--add_to_plt] [--remove_from_plt]
[--check_plt] [--no_check_plt] [--plt_info] [--get_warnings]
@@ -473,9 +470,7 @@ Options:
--fullpath
Display the full path names of files for which warnings are emitted.
--gui
- Use the gs-based GUI.
- --wx
- Use the wx-based GUI.
+ Use the GUI.
Note:
* denotes that multiple occurrences of these options are possible.
diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl
index 6956850f1a..922ccad599 100644
--- a/lib/dialyzer/src/dialyzer_dataflow.erl
+++ b/lib/dialyzer/src/dialyzer_dataflow.erl
@@ -308,7 +308,7 @@ traverse(Tree, Map, State) ->
{State1, Map1, Type};
var ->
?debug("Looking up unknown variable: ~p\n", [Tree]),
- case state__lookup_type_for_rec_var(Tree, State) of
+ case state__lookup_type_for_letrec(Tree, State) of
error ->
LType = lookup_type(Tree, Map),
Opaques = State#state.opaques,
@@ -1468,7 +1468,7 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
var ->
Opaques = State#state.opaques,
VarType1 =
- case state__lookup_type_for_rec_var(Pat, State) of
+ case state__lookup_type_for_letrec(Pat, State) of
error ->
LType = lookup_type(Pat, Map),
case t_opaque_match_record(LType, Opaques) of
@@ -2829,12 +2829,11 @@ state__get_warnings(#state{tree_map = TreeMap, fun_tab = FunTab,
state__is_escaping(Fun, #state{callgraph = Callgraph}) ->
dialyzer_callgraph:is_escaping(Fun, Callgraph).
-state__lookup_type_for_rec_var(Var, #state{callgraph = Callgraph} = State) ->
+state__lookup_type_for_letrec(Var, #state{callgraph = Callgraph} = State) ->
Label = get_label(Var),
- case dialyzer_callgraph:lookup_rec_var(Label, Callgraph) of
+ case dialyzer_callgraph:lookup_letrec(Label, Callgraph) of
error -> error;
- {ok, MFA} ->
- {ok, FunLabel} = dialyzer_callgraph:lookup_label(MFA, Callgraph),
+ {ok, FunLabel} ->
{ok, state__fun_type(FunLabel, State)}
end.
diff --git a/lib/dialyzer/src/dialyzer_dep.erl b/lib/dialyzer/src/dialyzer_dep.erl
index febb65b766..1a477f4388 100644
--- a/lib/dialyzer/src/dialyzer_dep.erl
+++ b/lib/dialyzer/src/dialyzer_dep.erl
@@ -39,7 +39,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
-%% analyze(CoreTree) -> {Deps, Esc, Calls}.
+%% analyze(CoreTree) -> {Deps, Esc, Calls, Letrecs}.
%%
%% Deps = a dict mapping labels of functions to an ordset of functions
%% it calls.
@@ -53,6 +53,10 @@
%% which the operation can refer to. If 'external' is part of
%% the set the operation can be externally defined.
%%
+%% Letrecs = a dict mapping var labels to their recursive definition.
+%% top-level letrecs are not included as they are handled
+%% separatedly.
+%%
-spec analyze(cerl:c_module()) -> {dict(), ordset('external' | label()), dict()}.
@@ -64,7 +68,8 @@ analyze(Tree) ->
State1 = state__add_deps(external, output(Esc), State),
Deps = state__deps(State1),
Calls = state__calls(State1),
- {map__finalize(Deps), set__to_ordsets(Esc), map__finalize(Calls)}.
+ Letrecs = state__letrecs(State1),
+ {map__finalize(Deps), set__to_ordsets(Esc), map__finalize(Calls), Letrecs}.
traverse(Tree, Out, State, CurrentFun) ->
%% io:format("Type: ~w\n", [cerl:type(Tree)]),
@@ -131,9 +136,12 @@ traverse(Tree, Out, State, CurrentFun) ->
letrec ->
Defs = cerl:letrec_defs(Tree),
Body = cerl:letrec_body(Tree),
+ State1 = lists:foldl(fun({ Var, Fun }, Acc) ->
+ state__add_letrecs(cerl_trees:get_label(Var), cerl_trees:get_label(Fun), Acc)
+ end, State, Defs),
Out1 = bind_defs(Defs, Out),
- State1 = traverse_defs(Defs, Out1, State, CurrentFun),
- traverse(Body, Out1, State1, CurrentFun);
+ State2 = traverse_defs(Defs, Out1, State1, CurrentFun),
+ traverse(Body, Out1, State2, CurrentFun);
literal ->
{output(none), State};
module ->
@@ -463,7 +471,8 @@ all_vars(Tree, AccIn) ->
-record(state, {deps :: dict(),
esc :: local_set(),
call :: dict(),
- arities :: dict()}).
+ arities :: dict(),
+ letrecs :: dict()}).
state__new(Tree) ->
Exports = set__from_list([X || X <- cerl:module_exports(Tree)]),
@@ -471,7 +480,7 @@ state__new(Tree) ->
|| {Var, Fun} <- cerl:module_defs(Tree),
set__is_element(Var, Exports)]),
Arities = cerl_trees:fold(fun find_arities/2, dict:new(), Tree),
- #state{deps = map__new(), esc = InitEsc, call = map__new(), arities = Arities}.
+ #state{deps = map__new(), esc = InitEsc, call = map__new(), arities = Arities, letrecs = map__new()}.
find_arities(Tree, AccMap) ->
case cerl:is_c_fun(Tree) of
@@ -490,9 +499,15 @@ state__add_deps(From, #output{type = single, content=To},
%% io:format("Adding deps from ~w to ~w\n", [From, set__to_ordsets(To)]),
State#state{deps = map__add(From, To, Map)}.
+state__add_letrecs(Var, Fun, #state{letrecs = Map} = State) ->
+ State#state{letrecs = map__store(Var, Fun, Map)}.
+
state__deps(#state{deps = Deps}) ->
Deps.
+state__letrecs(#state{letrecs = Letrecs}) ->
+ Letrecs.
+
state__add_esc(#output{content = none}, State) ->
State;
state__add_esc(#output{type = single, content = Set},
diff --git a/lib/dialyzer/src/dialyzer_gui.erl b/lib/dialyzer/src/dialyzer_gui.erl
deleted file mode 100644
index 97e5752577..0000000000
--- a/lib/dialyzer/src/dialyzer_gui.erl
+++ /dev/null
@@ -1,1381 +0,0 @@
-%% -*- erlang-indent-level: 2 -*-
-%%------------------------------------------------------------------------
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%%-----------------------------------------------------------------------
-%%% File : dialyzer_gui.erl
-%%% Authors : Tobias Lindahl <[email protected]>
-%%% Kostis Sagonas <[email protected]>
-%%% Description : The graphical user interface for the Dialyzer tool.
-%%%
-%%% Created : 27 Apr 2004 by Tobias Lindahl <[email protected]>
-%%%-----------------------------------------------------------------------
-
--module(dialyzer_gui).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,editor,2}},
- {nowarn_deprecated_function,{gs,entry,2}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,listbox,2}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menubar,2}},
- {nowarn_deprecated_function,{gs,menubutton,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,radiobutton,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,stop,0}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
--export([start/1]).
-
--include("dialyzer.hrl").
-
-%%------------------------------------------------------------------------
-
--define(DIALYZER_ERROR_TITLE, "Dialyzer Error").
--define(DIALYZER_MESSAGE_TITLE, "Dialyzer Message").
-
-%%------------------------------------------------------------------------
-
--type gs_object() :: any(). %% XXX: should be imported from gs
-
--record(mode, {start_byte_code :: gs_object(),
- start_src_code :: gs_object()}).
-
--record(menu, {file_save_log :: gs_object(),
- file_save_warn :: gs_object(),
- file_quit :: gs_object(),
- help_about :: gs_object(),
- help_manual :: gs_object(),
- help_warnings :: gs_object(),
- opts_macros :: gs_object(),
- opts_includes :: gs_object(),
- plt_empty :: gs_object(),
- plt_search_doc :: gs_object(),
- plt_show_doc :: gs_object(),
- warnings :: gs_object()}).
-
--record(gui_state, {add_all :: gs_object(),
- add_file :: gs_object(),
- add_rec :: gs_object(),
- chosen_box :: gs_object(),
- analysis_pid :: pid(),
- del_file :: gs_object(),
- doc_plt :: dialyzer_plt:plt(),
- clear_chosen :: gs_object(),
- clear_log :: gs_object(),
- clear_warn :: gs_object(),
- init_plt :: dialyzer_plt:plt(),
- dir_entry :: gs_object(),
- file_box :: gs_object(),
- file_wd :: gs_object(),
- gs :: gs_object(),
- log :: gs_object(),
- menu :: #menu{},
- mode :: #mode{},
- options :: #options{},
- packer :: gs_object(),
- run :: gs_object(),
- stop :: gs_object(),
- top :: gs_object(),
- warnings_box :: gs_object(),
- backend_pid :: pid()}).
-
-%%------------------------------------------------------------------------
-
--spec start(#options{}) -> ?RET_NOTHING_SUSPICIOUS.
-
-start(#options{from = From, init_plts = InitPltFiles,
- legal_warnings = LegalWarnings} = DialyzerOptions) ->
- process_flag(trap_exit, true),
-
- GS = gs:start(),
- code:add_pathsa(["."]),
- WH = [{width, 1000}, {height, 550}],
- EmptySpace = {stretch, 1},
-
- {ok, Host} = inet:gethostname(),
- %% --------- Top Window --------------
- TopWin = gs:window(GS, [{title, "Dialyzer " ++ ?VSN ++ " @ " ++ Host},
- {configure, true},
- {default, listbox, {bg, white}},
- {default, editor, {bg, white}},
- {default, entry, {bg, white}},
- {default, button, {font, {helvetica, bold, 12}}},
- {default, label, {font, {helvetica, bold, 12}}}
- |WH]),
- Packer = gs:frame(TopWin, [{packer_x, [{stretch, 3},{fixed, 200},
- {stretch, 7}]},
- {packer_y, [{fixed, 25}, {fixed, 20},
- {stretch, 1, 50},
- {fixed, 25}, {fixed, 20},
- {stretch, 1, 50},
- {fixed, 25}]}]),
-
- %% --------- Chosen box --------------
- gs:label(Packer, [{label, {text, "Directories or modules to analyze"}},
- {height, 20}, {pack_xy, {1, 2}}]),
- ChosenBox = gs:listbox(Packer, [{pack_xy, {1, 3}}, {vscroll, right},
- {selectmode, multiple}]),
-
- %% --------- File box --------------
- gs:label(Packer, [{label, {text, "File"}}, {height, 20}, {pack_xy, {1,5}}]),
- FilePacker = gs:frame(Packer, [{packer_x, [{fixed, 30}, {stretch, 1, 100}]},
- {packer_y, [{fixed, 25}, {stretch, 1, 25}]},
- {pack_xy, {1, 6}}]),
- gs:label(FilePacker, [{label, {text, "Dir:"}}, {pack_xy, {1, 1}}]),
- DirEntry = gs:entry(FilePacker, [{height, 30}, {pack_xy, {2, 1}},
- {keypress, true}]),
- File = gs:listbox(FilePacker, [{pack_x, {1,2}}, {pack_y, 2},
- {selectmode, multiple}, {doubleclick, true},
- {vscroll, right}]),
-
- %% --------- Options --------------
- gs:label(Packer, [{label, {text, "Analysis Options"}},
- {height, 20}, {pack_xy, {2, 2}}]),
- ModePacker = gs:frame(Packer, [{packer_x, [{fixed, 75}, {fixed, 120}]},
- {packer_y, [{fixed, 20}, {fixed, 20},
- {fixed, 20},
- %% EmptySpace,
- {fixed, 20}, {fixed, 20},
- {fixed, 20}, EmptySpace]},
- {bw, 10}, {relief, flat},
- {default, {radiobutton, {align, w}}},
- {default, {label, {align, w}}},
- {pack_xy, {2, 3}}]),
-
- %% Bytecode vs. Source code
- gs:label(ModePacker, [{label, {text, "File Type:"}},
- {height, 20}, {pack_xy, {1,1}}]),
- {ByteSel, SrcSel} = case From of
- byte_code -> {[{select, true}], []};
- src_code -> {[], [{select, true}]}
- end,
- ModeByteCode = gs:radiobutton(ModePacker,
- ByteSel ++ [{group, start_from},
- {label, {text,"BeamFiles"}},
- {pack_xy, {2,1}}]),
- ModeSrcCode = gs:radiobutton(ModePacker,
- SrcSel ++ [{group, start_from},
- {label, {text,"SourceFiles"}},
- {pack_xy, {2,2}}]),
- Mode = #mode{start_byte_code = ModeByteCode,
- start_src_code = ModeSrcCode},
-
- %% --------- Log box --------------
- gs:label(Packer, [{label, {text, "Log"}}, {height, 20}, {pack_xy, {3,2}}]),
- Log = gs:editor(Packer, [{pack_x, 3}, {pack_y, 3}, {enable, false},
- {font, {courier, 12}}, {vscroll, right},
- {wrap, word}]),
-
- %% --------- Warnings box --------------
- gs:label(Packer, [{label, {text, "Warnings"}},{height, 20},{pack_xy, {3,5}}]),
- WarningsBox = gs:editor(Packer, [{pack_x, {2,3}}, {pack_y, 6},
- {enable, false},
- {font, {courier, 12}}, {vscroll, right},
- {wrap, word}]),
-
- %% --------- Buttons --------------
- ButtonPackerHighLeft =
- gs:frame(Packer, [{packer_x, [{fixed, 50}, {fixed, 65}, EmptySpace]},
- {pack_xy, {1,4}}]),
- ButtonPackerHighRight =
- gs:frame(Packer, [{packer_x, [{fixed, 70}, {fixed, 70}, EmptySpace]},
- {pack_xy, {3,4}}]),
- ButtonPackerLowLeft =
- gs:frame(Packer, [{packer_x, [{fixed, 50},
- {fixed, 60},
- {fixed, 110},
- EmptySpace]},
- {pack_xy, {1,7}}]),
- ButtonPackerLowRight =
- gs:frame(Packer, [{packer_x, [{fixed, 100},
- {fixed, 70},
- EmptySpace,
- {fixed, 70},
- {fixed, 70}]},
- {pack_x, {2,3}}, {pack_y, 7}]),
-
- WHButton = [{width, 60}, {height, 20}],
- AddFile = gs:button(ButtonPackerLowLeft, [{pack_xy, {1, 1}},
- {label, {text,"Add"}}|WHButton]),
- AddAll = gs:button(ButtonPackerLowLeft, [{pack_xy, {2, 1}},
- {label, {text,"Add All"}}|WHButton]),
- AddRec = gs:button(ButtonPackerLowLeft, [{pack_xy, {3, 1}},
- {label, {text,"Add Recursively"}}
- |WHButton]),
- DelFile = gs:button(ButtonPackerHighLeft, [{pack_xy, {1, 1}},
- {label, {text,"Delete"}}|WHButton]),
- ClearChosen = gs:button(ButtonPackerHighLeft, [{pack_xy, {2, 1}},
- {label, {text,"Delete All"}}
- |WHButton]),
- ClearLog = gs:button(ButtonPackerHighRight, [{pack_xy, {1, 1}},
- {label, {text,"Clear Log"}}
- |WHButton]),
- ClearWarn = gs:button(ButtonPackerLowRight, [{pack_xy, {1, 1}},
- {label, {text,"Clear Warnings"}}
- |WHButton]),
-
- Run = gs:button(ButtonPackerLowRight, [{pack_xy, {4, 1}},
- {label, {text,"Run"}}|WHButton]),
- Stop = gs:button(ButtonPackerLowRight, [{pack_xy, {5, 1}}, {enable, false},
- {label, {text,"Stop"}}|WHButton]),
-
- %% --------- Menu --------------
- MenuBar = gs:menubar(TopWin, []),
-
- %% File Menu
- MenuBarFile = gs:menubutton(MenuBar, [{label, {text, "File"}}]),
- MenuFile = gs:menu(MenuBarFile, []),
- MenuFileSaveWarn = gs:menuitem(MenuFile, [{label, {text, "Save Warnings"}}]),
- MenuFileSaveLog = gs:menuitem(MenuFile, [{label, {text, "Save Log"}}]),
- MenuFileQuit = gs:menuitem(MenuFile, [{label, {text, "Quit"}}]),
-
- %% Warnings Menu
- MenuBarWarn = gs:menubutton(MenuBar, [{label, {text, "Warnings"}}]),
- MenuWarn = gs:menu(MenuBarWarn, []),
- MenuWarnMatch = gs:menuitem(MenuWarn, [{label, {text, "Match failures"}},
- {itemtype, check}, {select, true}]),
- MenuWarnFailingCall = gs:menuitem(MenuWarn,
- [{label, {text, "Failing function calls"}},
- {itemtype, check}, {select, true}]),
- MenuWarnFunApp = gs:menuitem(MenuWarn, [{label,
- {text, "Bad fun applications"}},
- {itemtype, check}, {select, true}]),
- MenuWarnOpaque = gs:menuitem(MenuWarn, [{label,
- {text, "Opaqueness violations"}},
- {itemtype, check}, {select, true}]),
- MenuWarnLists = gs:menuitem(MenuWarn,
- [{label, {text, "Improper list constructions"}},
- {itemtype, check}, {select, true}]),
- MenuWarnNotCalled = gs:menuitem(MenuWarn,
- [{label, {text, "Unused functions"}},
- {itemtype, check}, {select, true}]),
- MenuWarnReturnOnlyExit = gs:menuitem(MenuWarn,
- [{label,
- {text, "Error handling functions"}},
- {itemtype, check}, {select, false}]),
- MenuWarnReturnNoReturn = gs:menuitem(MenuWarn,
- [{label,
- {text, "Functions of no return"}},
- {itemtype, check}, {select, true}]),
- MenuWarnCallNonExported = gs:menuitem(MenuWarn,
- [{label,
- {text, "Call to unexported function"}},
- {itemtype, check}, {select, true}]),
- MenuWarnRaceCondition = gs:menuitem(MenuWarn,
- [{label,
- {text,"Possible race conditions"}},
- {itemtype, check}, {select, false}]),
- MenuWarnContractTypes = gs:menuitem(MenuWarn,
- [{label, {text, "Wrong contracts"}},
- {itemtype, check}, {select, true}]),
- MenuWarnContractSyntax = gs:menuitem(MenuWarn,
- [{label,
- {text, "Wrong contract syntax"}},
- {itemtype, check}, {select, true}]),
-
- %% PLT Menu
- MenuBarPLT = gs:menubutton(MenuBar, [{label, {text,"PLT"}}]),
- MenuPLT = gs:menu(MenuBarPLT, []),
- MenuPLTEmpty = gs:menuitem(MenuPLT, [{label, {text, "Init with empty PLT"}},
- {itemtype, check}, {select, false}]),
- MenuPLTShow = gs:menuitem(MenuPLT, [{label, {text, "Show contents"}}]),
- MenuPLTSearch = gs:menuitem(MenuPLT, [{label, {text, "Search contents"}}]),
-
- %% Options Menu
- MenuBarOpts = gs:menubutton(MenuBar, [{label,{text,"Options"}}]),
- MenuOpts = gs:menu(MenuBarOpts, []),
- MenuOptsMacros = gs:menuitem(MenuOpts,
- [{label, {text, "Manage Macro Definitions"}}]),
- MenuOptsIncludes = gs:menuitem(MenuOpts,
- [{label, {text, "Manage Include Directories"}}]),
-
- %% Help
- MenuBarHelp = gs:menubutton(MenuBar, [{label, {text, "Help"}}, {side, right}]),
- MenuHelp = gs:menu(MenuBarHelp, []),
- MenuHelpManual = gs:menuitem(MenuHelp, [{label, {text, "Manual"}}]),
- MenuHelpWarnings = gs:menuitem(MenuHelp, [{label, {text, "Warning Options"}}]),
- MenuHelpAbout = gs:menuitem(MenuHelp, [{label, {text, "About"}}]),
-
- Warnings = [{?WARN_RETURN_NO_RETURN, MenuWarnReturnNoReturn},
- {?WARN_RETURN_ONLY_EXIT, MenuWarnReturnOnlyExit},
- {?WARN_NOT_CALLED, MenuWarnNotCalled},
- {?WARN_NON_PROPER_LIST, MenuWarnLists},
- {?WARN_FUN_APP, MenuWarnFunApp},
- {?WARN_MATCHING, MenuWarnMatch},
- {?WARN_OPAQUE, MenuWarnOpaque},
- {?WARN_FAILING_CALL, MenuWarnFailingCall},
- {?WARN_CALLGRAPH, MenuWarnCallNonExported},
- {?WARN_RACE_CONDITION, MenuWarnRaceCondition},
- %% For contracts.
- {?WARN_CONTRACT_TYPES, MenuWarnContractTypes},
- {?WARN_CONTRACT_SYNTAX, MenuWarnContractSyntax}
- ],
-
- init_warnings(Warnings, LegalWarnings),
-
- Menu = #menu{file_quit = MenuFileQuit,
- plt_empty = MenuPLTEmpty,
- help_manual = MenuHelpManual,
- help_about = MenuHelpAbout,
- help_warnings = MenuHelpWarnings,
- opts_macros = MenuOptsMacros,
- opts_includes = MenuOptsIncludes,
- plt_search_doc = MenuPLTSearch,
- plt_show_doc = MenuPLTShow,
- file_save_log = MenuFileSaveLog,
- file_save_warn = MenuFileSaveWarn,
- warnings = Warnings},
-
- %% --------- Init --------------
- gs:config(TopWin, [{map, true}]),
- gs:config(Packer, WH),
- {ok, CWD} = file:get_cwd(),
-
- InitPlt =
- case InitPltFiles of
- [] -> dialyzer_plt:new();
- _ ->
- Plts = [dialyzer_plt:from_file(F) || F <- InitPltFiles],
- dialyzer_plt:merge_plts_or_report_conflicts(InitPltFiles, Plts)
- end,
-
- State = #gui_state{add_all = AddAll,
- add_file = AddFile,
- add_rec = AddRec,
- chosen_box = ChosenBox,
- clear_chosen = ClearChosen,
- clear_log = ClearLog,
- clear_warn = ClearWarn,
- del_file = DelFile,
- doc_plt = dialyzer_plt:new(),
- dir_entry = DirEntry,
- file_box = File,
- file_wd = CWD,
- gs = GS,
- init_plt = InitPlt,
- log = Log,
- menu = Menu,
- mode = Mode,
- options = DialyzerOptions,
- packer = Packer,
- run = Run,
- stop = Stop,
- top = TopWin,
- warnings_box = WarningsBox},
- NewState = change_dir_or_add_file(State, "."),
- gui_loop(NewState).
-
-%% ----------------------------------------------------------------
-%%
-%% Main GUI Loop
-%%
-
--spec gui_loop(#gui_state{}) -> ?RET_NOTHING_SUSPICIOUS.
-
-gui_loop(#gui_state{add_all = AddAll, add_file = AddFile, add_rec = AddRec,
- backend_pid = BackendPid, chosen_box = ChosenBox,
- clear_chosen = ClearChosen, clear_log = ClearLog,
- clear_warn = ClearWarn, del_file = DelFile,
- dir_entry = DirEntry, file_box = File, log = Log,
- menu = Menu, packer = Packer, run = Run, stop = Stop,
- top = TopWin, warnings_box = Warn} = State) ->
- %% --- Menu ---
- Quit = Menu#menu.file_quit,
- Manual = Menu#menu.help_manual,
- Warnings = Menu#menu.help_warnings,
- About = Menu#menu.help_about,
- SaveLog = Menu#menu.file_save_log,
- SaveWarn = Menu#menu.file_save_warn,
- SearchPlt = Menu#menu.plt_search_doc,
- ShowPlt = Menu#menu.plt_show_doc,
- Macros = Menu#menu.opts_macros,
- Includes = Menu#menu.opts_includes,
-
- receive
- {gs, TopWin, configure, _Data, [W, H|_]} ->
- gs:config(Packer, [{width, W}, {height, H}]),
- gui_loop(State);
- {gs, TopWin, destroy, _Data, _Args} ->
- ?RET_NOTHING_SUSPICIOUS;
- {gs, File, doubleclick, _, [_Id, Text|_]} ->
- NewState = change_dir_or_add_file(State, Text),
- gui_loop(NewState);
- {gs, DirEntry, keypress, _, ['Return'|_]} ->
- gs:config(TopWin, [{setfocus, true}]),
- NewState = change_dir_absolute(State, gs:read(DirEntry, text)),
- gui_loop(NewState);
- {gs, DirEntry, keypress, _, _} ->
- gui_loop(State);
- %% ----- Buttons -----
- {gs, AddFile, click, _, _} ->
- handle_add_files(State),
- gui_loop(State);
- {gs, AddAll, click, _, _} ->
- handle_add_all_click(State),
- gui_loop(State);
- {gs, AddRec, click, _, _} ->
- handle_add_rec_click(State),
- gui_loop(State);
- {gs, DelFile, click, _, _} ->
- handle_file_delete(State),
- gui_loop(State);
- {gs, ClearChosen, click, _, _} ->
- gs:config(ChosenBox, [clear]),
- gui_loop(State);
- {gs, ClearLog, click, _, _} ->
- Log = State#gui_state.log,
- gs:config(Log, [{enable, true}]),
- gs:config(Log, [clear]),
- gs:config(Log, [{enable, false}]),
- gui_loop(State);
- {gs, ClearWarn, click, _, _} ->
- Warn = State#gui_state.warnings_box,
- gs:config(Warn, [{enable, true}]),
- gs:config(Warn, [clear]),
- gs:config(Warn, [{enable, false}]),
- gui_loop(State);
- {gs, Run, click, _, _} ->
- NewState = start_analysis(State),
- gui_loop(NewState);
- {gs, Stop, click, _, _} ->
- config_gui_stop(State),
- BackendPid ! {self(), stop},
- update_editor(Log, "\n***** Analysis stopped ****\n"),
- gui_loop(State);
- %% ----- Menu -----
- {gs, Quit, click, _, _} ->
- case maybe_quit(State) of
- true -> ?RET_NOTHING_SUSPICIOUS;
- false -> gui_loop(State)
- end;
- {gs, Manual, click, _, _} ->
- spawn_link(fun() -> manual(State) end),
- gui_loop(State);
- {gs, Warnings, click, _, _} ->
- spawn_link(fun() -> warnings(State) end),
- gui_loop(State);
- {gs, About, click, _, _} ->
- spawn_link(fun() -> about(State) end),
- gui_loop(State);
- {gs, SaveLog, click, _, _} ->
- save_log(State),
- gui_loop(State);
- {gs, SaveWarn, click, _, _} ->
- save_warn(State),
- gui_loop(State);
- {gs, SearchPlt, click, _, _} ->
- spawn_link(fun() -> search_doc_plt(State) end),
- gui_loop(State);
- {gs, ShowPlt, click, _, _} ->
- spawn_link(fun() -> show_doc_plt(State) end),
- gui_loop(State);
- {gs, Macros, click, _, _} ->
- Self = self(),
- spawn_link(fun() -> macro_dialog(State, Self) end),
- gui_loop(State);
- {gs, Includes, click, _, _} ->
- Self = self(),
- spawn_link(fun() -> include_dialog(State, Self) end),
- gui_loop(State);
- {new_options, NewOptions} ->
- NewState = State#gui_state{options = NewOptions},
- gui_loop(NewState);
- %% ----- Analysis -----
- {BackendPid, ext_calls, ExtCalls} ->
- Msg = io_lib:format("The following functions are called "
- "but type information about them is not available.\n"
- "The analysis might get more precise by including "
- "the modules containing these functions:\n\n\t~p\n",
- [ExtCalls]),
- free_editor(State, "Analysis done", Msg),
- gui_loop(State);
- {BackendPid, ext_types, ExtTypes} ->
- Map = fun({M,F,A}) -> io_lib:format("~p:~p/~p",[M,F,A]) end,
- ExtTypeString = string:join(lists:map(Map, ExtTypes), "\n"),
- Msg = io_lib:format("The following remote types are being used "
- "but information about them is not available.\n"
- "The analysis might get more precise by including "
- "the modules containing these types and making sure "
- "that they are exported:\n~s\n", [ExtTypeString]),
- free_editor(State, "Analysis done", Msg),
- gui_loop(State);
- {BackendPid, log, LogMsg} ->
- update_editor(Log, LogMsg),
- gui_loop(State);
- {BackendPid, warnings, Warns} ->
- SortedWarns = lists:keysort(2, Warns), %% Sort on file/line
- WarnList = [dialyzer:format_warning(W) || W <- SortedWarns],
- update_editor(Warn, lists:flatten(WarnList)),
- gui_loop(State);
- {BackendPid, done, _NewPlt, NewDocPlt} ->
- message(State, "Analysis done"),
- config_gui_stop(State),
- gui_loop(State#gui_state{doc_plt = NewDocPlt});
- {'EXIT', BackendPid, {error, Reason}} ->
- free_editor(State, ?DIALYZER_ERROR_TITLE, Reason),
- config_gui_stop(State),
- gui_loop(State);
- {'EXIT', BackendPid, Reason} when Reason =/= 'normal' ->
- free_editor(State, ?DIALYZER_ERROR_TITLE, io_lib:format("~p", [Reason])),
- config_gui_stop(State),
- gui_loop(State);
- _Other ->
- %% io:format("Received ~p\n", [Other]),
- gui_loop(State)
- end.
-
-%% ----------------------------------------------------------------
-%%
-%% Main window actions
-%%
-
-%% ---- Adding and deleting files ----
-
-handle_add_all_click(#gui_state{chosen_box = ChosenBox, file_box = File,
- file_wd = FWD, mode = Mode}) ->
- case gs:read(File, items) of
- [] ->
- ok;
- Add0 ->
- gs:config(File, [{selection, clear}]),
- Add1 = ordsets:subtract(Add0, [".."]),
- Add = ordsets:from_list([filename:join(FWD, X) || X <- Add1]),
- case gs:read(Mode#mode.start_byte_code, select) of
- true ->
- add_files(filter_mods(Add, ".beam"), ChosenBox, byte_code);
- false ->
- add_files(filter_mods(Add, ".erl"), ChosenBox, src_code)
- end
- end.
-
-all_subdirs(Dirs) ->
- all_subdirs(Dirs, []).
-
-all_subdirs([Dir|T], Acc) ->
- {ok, Files} = file:list_dir(Dir),
- SubDirs = lists:zf(fun(F) ->
- SubDir = filename:join(Dir, F),
- case filelib:is_dir(SubDir) of
- true -> {true, SubDir};
- false -> false
- end
- end, Files),
- NewAcc = ordsets:union(ordsets:from_list(SubDirs), Acc),
- all_subdirs(T ++ SubDirs, NewAcc);
-all_subdirs([], Acc) ->
- Acc.
-
-handle_add_rec_click(#gui_state{chosen_box = ChosenBox, file_box = File,
- file_wd = FWD, mode = Mode}) ->
- case gs:read(File, selection) of
- [] ->
- ok;
- List ->
- gs:config(File, [{selection, clear}]),
- Dirs1 = [gs:read(File, {get, X}) || X <- List],
- Dirs2 = ordsets:from_list([filename:join(FWD, X) || X <- Dirs1]),
- Dirs3 = ordsets:filter(fun(X) -> filelib:is_dir(X) end, Dirs2),
- TargetDirs = ordsets:union(Dirs3, all_subdirs(Dirs3)),
- {Code, Ext} = case gs:read(Mode#mode.start_byte_code, select) of
- true -> {byte_code, ".beam"};
- false -> {src_code, ".erl"}
- end,
- add_files(filter_mods(TargetDirs, Ext), ChosenBox, Code)
- end.
-
-handle_add_files(#gui_state{chosen_box = ChosenBox, file_box = File,
- file_wd = FWD, mode = Mode}) ->
- case gs:read(File, selection) of
- [] ->
- ok;
- List ->
- gs:config(File, [{selection, clear}]),
- Add0 = [gs:read(File, {get, X}) || X <- List],
- Add = ordsets:from_list([filename:join(FWD, X) || X <- Add0]),
- case gs:read(Mode#mode.start_byte_code, select) of
- true ->
- add_files(filter_mods(Add, ".beam"), ChosenBox, byte_code);
- false ->
- add_files(filter_mods(Add, ".erl"), ChosenBox, src_code)
- end
- end.
-
-filter_mods(Mods, Extension) ->
- Fun = fun(X) ->
- filename:extension(X) =:= Extension
- orelse
- (filelib:is_dir(X) andalso
- contains_files(X, Extension))
- end,
- ordsets:filter(Fun, Mods).
-
-contains_files(Dir, Extension) ->
- {ok, Files} = file:list_dir(Dir),
- lists:any(fun(X) -> filename:extension(X) =:= Extension end, Files).
-
-add_files(Add, ChosenBox, Type) ->
- Set = gs:read(ChosenBox, items),
- Set1 =
- case Type of
- byte_code -> filter_mods(Set, ".beam");
- src_code -> filter_mods(Set, ".erl")
- end,
- Files = ordsets:union(Add, Set1),
- gs:config(ChosenBox, [{items, Files}]),
- ok.
-
-handle_file_delete(#gui_state{chosen_box = ChosenBox}) ->
- List = gs:read(ChosenBox, selection),
- lists:foreach(fun(X) -> gs:config(ChosenBox, [{del, X}]) end,
- lists:reverse(lists:sort(List))).
-
-%% ---- Other ----
-
-change_dir_or_add_file(#gui_state{file_wd = FWD, mode = Mode, dir_entry = Dir,
- chosen_box = CBox, file_box = File} = State,
- Text) ->
- NewWDorFile =
- case Text of
- ".." -> filename:join(butlast(filename:split(FWD)));
- "." -> FWD;
- _ -> filename:join(FWD, Text)
- end,
- case filelib:is_dir(NewWDorFile) of
- true ->
- gs:config(Dir, [{text, NewWDorFile}]),
- {ok, List} = file:list_dir(NewWDorFile),
- gs:config(File, [{items, [".."|lists:sort(List)]}]),
- State#gui_state{file_wd = NewWDorFile};
- false ->
- case gs:read(Mode#mode.start_byte_code, select) of
- true ->
- case filter_mods([NewWDorFile], ".beam") of
- [] -> ok;
- RealFiles -> add_files(RealFiles, CBox, byte_code)
- end;
- false ->
- case filter_mods([NewWDorFile], ".erl") of
- [] -> ok;
- RealFiles -> add_files(RealFiles, CBox, src_code)
- end
- end,
- State
- end.
-
-butlast([H1, H2 | T]) ->
- [H1 | butlast([H2|T])];
-butlast([_]) ->
- [];
-butlast([]) ->
- ["/"].
-
-change_dir_absolute(#gui_state{file_wd = FWD, dir_entry = Dir,
- file_box = File} = State,
- Text) ->
- case filelib:is_dir(Text) of
- true ->
- WD = filename:join(FWD, Text),
- gs:config(Dir, [{text, WD}]),
- {ok, List} = file:list_dir(WD),
- gs:config(File, [{items, [".."|lists:sort(List)]}]),
- State#gui_state{file_wd = WD};
- false ->
- State
- end.
-
-init_warnings([{Tag, GSItem}|Left], LegalWarnings) ->
- Select = ordsets:is_element(Tag, LegalWarnings),
- gs:config(GSItem, [{select, Select}]),
- init_warnings(Left, LegalWarnings);
-init_warnings([], _LegalWarnings) ->
- ok.
-
-config_gui_start(State) ->
- Enabled = [{enable, true}],
- Disabled = [{enable, false}],
- gs:config(State#gui_state.stop, Enabled),
- gs:config(State#gui_state.run, Disabled),
- gs:config(State#gui_state.del_file, Disabled),
- gs:config(State#gui_state.clear_chosen, Disabled),
- gs:config(State#gui_state.add_file, Disabled),
- gs:config(State#gui_state.add_all, Disabled),
- gs:config(State#gui_state.add_rec, Disabled),
- gs:config(State#gui_state.clear_warn, Disabled),
- gs:config(State#gui_state.clear_log, Disabled),
- Menu = State#gui_state.menu,
- gs:config(Menu#menu.file_save_warn, Disabled),
- gs:config(Menu#menu.file_save_log, Disabled),
- gs:config(Menu#menu.opts_macros, Disabled),
- gs:config(Menu#menu.opts_includes, Disabled),
- gs:config(Menu#menu.plt_empty, Disabled),
- gs:config(Menu#menu.plt_search_doc, Disabled),
- gs:config(Menu#menu.plt_show_doc, Disabled),
- Mode = State#gui_state.mode,
- gs:config(Mode#mode.start_byte_code, Disabled),
- gs:config(Mode#mode.start_src_code, Disabled).
-
-config_gui_stop(State) ->
- Enabled = [{enable, true}],
- Disabled = [{enable, false}],
- gs:config(State#gui_state.stop, Disabled),
- gs:config(State#gui_state.run, Enabled),
- gs:config(State#gui_state.del_file, Enabled),
- gs:config(State#gui_state.clear_chosen, Enabled),
- gs:config(State#gui_state.add_file, Enabled),
- gs:config(State#gui_state.add_all, Enabled),
- gs:config(State#gui_state.add_rec, Enabled),
- gs:config(State#gui_state.clear_warn, Enabled),
- gs:config(State#gui_state.clear_log, Enabled),
- Menu = State#gui_state.menu,
- gs:config(Menu#menu.file_save_warn, Enabled),
- gs:config(Menu#menu.file_save_log, Enabled),
- gs:config(Menu#menu.opts_macros, Enabled),
- gs:config(Menu#menu.opts_includes, Enabled),
- gs:config(Menu#menu.plt_empty, Enabled),
- gs:config(Menu#menu.plt_search_doc, Enabled),
- gs:config(Menu#menu.plt_show_doc, Enabled),
- Mode = State#gui_state.mode,
- gs:config(Mode#mode.start_byte_code, Enabled),
- gs:config(Mode#mode.start_src_code, Enabled).
-
-%% ----------------------------------------------------------------
-%%
-%% Messages
-%%
-
-message(State, Message) ->
- output_sms(State, ?DIALYZER_MESSAGE_TITLE, Message).
-
-error_sms(State, Message) ->
- output_sms(State, ?DIALYZER_ERROR_TITLE, Message).
-
-%%
-%% This function is to be used *only* for small messages because lines
-%% are not wrapped and the created window has a limited area for text.
-%% For bigger messages, the function free_editor/3 is to be used.
-%%
-output_sms(#gui_state{gs = GS, top = TopWin}, Title, Message) ->
- %% Lines = string:words(Message, $\n),
- %% io:format("The message has ~w lines\n", [Lines]),
- WH = [{width, 400}, {height, 100}],
- MessageWin = gs:window(GS, [{title, Title},
- {default, button, {font, {helvetica, bold, 12}}}
- |WH]),
- MessagePacker = gs:frame(MessageWin, [{packer_y, [{fixed, 75}, {fixed, 25}]},
- {packer_x, [{fixed, 175},{fixed, 50},
- {fixed, 175}]}]),
- gs:label(MessagePacker, [{pack_x, {1, 3}}, {pack_y, 1},
- {label, {text, Message}}]),
- OK = gs:button(MessagePacker, [{label, {text, "OK"}}, {pack_xy, {2, 2}}]),
- gs:config(MessageWin, [{map, true}]),
- gs:config(MessagePacker, WH),
- message_loop(OK, MessageWin, TopWin).
-
-message_loop(Ok, Win, TopWin) ->
- receive
- {gs, Ok, click, _, _} ->
- gs:destroy(Win);
- {gs, Win, destroy, _, _} ->
- ok;
- {gs, TopWin, destroy, _, _} ->
- exit(normal);
- {gs, _, _, _, _} ->
- message_loop(Ok, Win, TopWin)
- end.
-
-dialog(#gui_state{gs = GS, top = TopWin}, Message, OkLabel, CancelLabel) ->
- WH = [{width, 400}, {height, 100}],
- WHButton = [{width, 70}, {height, 20}],
- DialogWin = gs:window(GS, [{title, "Dialyzer Message"},
- {default, button, {font, {helvetica, bold, 12}}}
- |WH]),
- DialogPacker = gs:frame(DialogWin, [{packer_y, [{fixed, 75}, {fixed, 25}]},
- {packer_x, [{fixed, 150}, {fixed, 50},
- {fixed, 50}, {fixed, 150}]}]),
- gs:label(DialogPacker, [{pack_x, {1,4}}, {pack_y, 1},
- {label, {text, Message}}]),
- Ok = gs:button(DialogPacker, [{label, {text, OkLabel}},
- {pack_xy, {2,2}}|WHButton]),
- Cancel = gs:button(DialogPacker, [{label, {text, CancelLabel}},
- {pack_xy, {3,2}}|WHButton]),
- gs:config(DialogWin, [{map, true}]),
- gs:config(DialogPacker, WH),
- dialog_loop(Ok, Cancel, DialogWin, TopWin).
-
-dialog_loop(Ok, Cancel, Win, TopWin) ->
- receive
- {gs, Ok, click, _, _} ->
- gs:destroy(Win),
- true;
- {gs, Cancel, click, _, _} ->
- gs:destroy(Win),
- false;
- {gs, Win, destroy, _, _} ->
- false;
- {gs, TopWin, destroy, _, _} ->
- exit(normal);
- {gs, _, _, _, _} ->
- dialog_loop(Ok, Cancel, Win, TopWin)
- end.
-
-maybe_quit(#gui_state{top = TopWin} = State) ->
- case dialog(State, "Do you really want to quit?", "Yes", "No") of
- true ->
- flush(),
- gs:destroy(TopWin),
- gs:stop(),
- true;
- false ->
- false
- end.
-
-
-%% ----------------------------------------------------------------
-%%
-%% Menu actions
-%%
-
-%% ---- Help Menu ----
-
-manual(State) ->
- help_menu_common(State, "Dialyzer Manual", 500, "manual.txt", white).
-
-warnings(State) ->
- help_menu_common(State, "Dialyzer Warnings", 500, "warnings.txt", white).
-
-about(State) ->
- help_menu_common(State, "About Dialyzer", 160, "about.txt", yellow).
-
-help_menu_common(#gui_state{gs = GS, top = TopWin} = State,
- Title, Height, TxtFileName, BackGroundColor) ->
- WH = [{width, 600}, {height, Height}],
- Win = gs:window(GS, [{title, Title}, {configure, true},
- {default, editor, {bg, BackGroundColor}} | WH]),
- EmptySpace = {stretch, 1},
- Frame = gs:frame(Win, [{packer_x, [EmptySpace, {fixed, 60}, EmptySpace]},
- {packer_y, [EmptySpace, {fixed, 30}]} | WH]),
- Editor = gs:editor(Frame, [{pack_x, {1, 3}}, {pack_y, 1},
- {font, {courier, 12}}, {vscroll, right},
- {wrap, word}]),
- Button = gs:button(Frame, [{label, {text, "Ok"}}, {pack_xy, {2, 2}}]),
- gs:config(Win, [{map, true}]),
- gs:config(Frame, WH),
- AboutFile = filename:join([code:lib_dir(dialyzer), "doc", TxtFileName]),
- case gs:config(Editor, {load, AboutFile}) of
- {error, Reason} ->
- gs:destroy(Win),
- error_sms(State,
- io_lib:format("Could not find doc/~s file!\n\n ~p",
- [TxtFileName, Reason]));
- ok ->
- gs:config(Editor, [{enable, false}]),
- show_info_loop(TopWin, Win, Frame, Button)
- end.
-
-%% ---- File Menu ----
-
-save_log(#gui_state{file_wd = CWD, log = Log} = State) ->
- {Win, Entry, OkButton, CancelButton} = file_box(State, "Save Log", CWD),
- save_loop(State, OkButton, CancelButton, Entry, Win, Log).
-
-save_warn(#gui_state{file_wd = CWD, warnings_box = WBox} = State) ->
- {Win, Entry, OkButton, CancelButton} = file_box(State, "Save Warnings", CWD),
- save_loop(State, OkButton, CancelButton, Entry, Win, WBox).
-
-file_box(#gui_state{gs = GS}, Title, Default) ->
- WH = [{width, 400}, {height, 75}],
- Win = gs:window(GS, [{title, Title}|WH]),
- Fix25 = {fixed, 27}, Fix75 = {fixed, 75},
- WinPacker = gs:frame(Win, [{packer_y, [Fix25, Fix25, Fix25]},
- {packer_x, [Fix75, Fix75, Fix75, {fixed, 175}]}]),
- gs:label(WinPacker, [{pack_xy, {1,2}}, {label, {text, "Enter file:"}}]),
- Entry = gs:entry(WinPacker, [{pack_x, {2,4}}, {pack_y, 2}, {keypress, true}]),
- OkButton = gs:button(WinPacker, [{label, {text, "Ok"}}, {pack_xy, {2,3}}]),
- CancelButton = gs:button(WinPacker, [{label, {text, "Cancel"}},
- {pack_xy, {3,3}}]),
- gs:config(Entry, [{text, Default}]),
- gs:config(Win, [{map, true}]),
- gs:config(WinPacker, WH),
- {Win, Entry, OkButton, CancelButton}.
-
-save_loop(#gui_state{top = TopWin} = State,
- OkButton, CancelButton, Entry, Save, Editor) ->
- receive
- {gs, OkButton, click, _, _} ->
- File = gs:read(Entry, text),
- case gs:config(Editor, [{save, File}]) of
- {error, _} ->
- error_sms(State, "Could not write to file:\n" ++ File),
- save_loop(State, OkButton, CancelButton, Entry, Save, Editor);
- _ ->
- gs:destroy(Save)
- end;
- {gs, Entry, keypress, _, ['Return'|_]} ->
- File = gs:read(Entry, text),
- case gs:config(Editor, [{save, File}]) of
- {error, _} ->
- error_sms(State, "Could not write to file:\n" ++ File),
- save_loop(State, OkButton, CancelButton, Entry, Save, Editor);
- _ ->
- gs:destroy(Save)
- end;
- {gs, Entry, keypress, _, _} ->
- save_loop(State, OkButton, CancelButton, Entry, Save, Editor);
- {gs, CancelButton, click, _, _} ->
- gs:destroy(Save);
- {gs, TopWin, destroy, _, _} ->
- exit(normal);
- {gs, Save, destroy, _, _} ->
- ok;
- {gs, _, _, _, _} ->
- save_loop(State, OkButton, CancelButton, Entry, Save, Editor)
- end.
-
-%% ---- Plt Menu ----
-
-search_doc_plt(#gui_state{gs = GS, top = TopWin} = State) ->
- WH = [{width, 400}, {height, 100}],
- WHB = [{width, 120}, {height, 30}],
- Title = io_lib:format("Search the PLT", []),
- Win = gs:window(GS, [{title, Title}, {configure, true},
- {default, editor, {bg, white}} | WH]),
- EmptySpace = {stretch, 1},
- Frame = gs:frame(Win, [{packer_x, [EmptySpace, EmptySpace, EmptySpace]},
- {packer_y, [{fixed, 30}, {fixed, 30},
- EmptySpace, {fixed, 30}]} | WH]),
- gs:label(Frame, [{pack_xy, {1,1}}, {label, {text, "Module"}}]),
- ModEntry = gs:entry(Frame, [{pack_xy, {1,2}}]),
- gs:label(Frame, [{pack_xy, {2,1}}, {label, {text, "Function"}}]),
- FunEntry = gs:entry(Frame, [{pack_xy, {2,2}}]),
- gs:label(Frame, [{pack_xy, {3,1}}, {label, {text, "Arity"}}]),
- ArityEntry = gs:entry(Frame, [{pack_xy, {3,2}}]),
- ButtonPacker = gs:frame(Frame, [{pack_xy, {2,4}},
- {packer_x, [{fixed, 60}, {fixed, 60}]},
- {packer_y, {fixed, 30}}]),
- SearchButton = gs:button(ButtonPacker, [{label, {text, "Search"}},
- {pack_xy, {1,1}}]),
- CancelButton = gs:button(ButtonPacker, [{label, {text, "Cancel"}},
- {pack_xy, {2,1}}]),
- gs:config(Win, [{map, true}]),
- gs:config(Frame, WH),
- gs:config(ButtonPacker, WHB),
- search_doc_plt_loop(State, CancelButton, SearchButton, ModEntry,
- FunEntry, ArityEntry, Win, TopWin).
-
-search_doc_plt_loop(State, CancelButton, SearchButton, ModEntry,
- FunEntry, ArityEntry, Win, TopWin) ->
- receive
- {gs, CancelButton, click, _, _} ->
- gs:destroy(Win),
- ok;
- {gs, TopWin, destroy, _, _} ->
- exit(normal);
- {gs, SearchButton, click, _, _} ->
- M = format_search(gs:read(ModEntry, text)),
- F = format_search(gs:read(FunEntry, text)),
- A = format_search(gs:read(ArityEntry, text)),
- case dialyzer_plt:get_specs(State#gui_state.doc_plt, M, F, A) of
- "" ->
- error_sms(State, "No such function"),
- search_doc_plt_loop(State, CancelButton, SearchButton, ModEntry,
- FunEntry, ArityEntry, Win, TopWin);
- NonEmptyString ->
- gs:destroy(Win),
- free_editor(State, "Content of PLT", NonEmptyString)
- end
- end.
-
-format_search([]) ->
- '_';
-format_search(String) ->
- try list_to_integer(String)
- catch error:_ -> list_to_atom(String)
- end.
-
-show_doc_plt(#gui_state{doc_plt = DocPLT} = State) ->
- case dialyzer_plt:get_specs(DocPLT) of
- "" -> error_sms(State, "No analysis has been made yet!\n");
- NonEmptyString -> free_editor(State, "Content of PLT", NonEmptyString)
- end.
-
-free_editor(#gui_state{gs = GS, top = TopWin}, Title, Contents0) ->
- Contents = lists:flatten(Contents0),
- Tokens = string:tokens(Contents, "\n"),
- NofLines = length(Tokens),
- LongestLine = lists:max([length(X) || X <- Tokens]),
- Height0 = NofLines * 25 + 80,
- Height = if Height0 > 500 -> 500; true -> Height0 end,
- Width0 = LongestLine * 7 + 60,
- Width = if Width0 > 800 -> 800; true -> Width0 end,
- WH = [{width, Width}, {height, Height}],
- Win = gs:window(GS, [{title, Title}, {configure, true},
- {default, editor, {bg, white}} | WH]),
- EmptySpace = {stretch, 1},
- Frame = gs:frame(Win, [{packer_x, [EmptySpace, {fixed, 60}, EmptySpace]},
- {packer_y, [EmptySpace, {fixed, 30}]}
- | WH]),
- Editor = gs:editor(Frame, [{pack_x, {1,3}}, {pack_y, 1},
- {font, {courier, 12}}, {vscroll, right},
- {wrap, word}, {enable, true}]),
- Button = gs:button(Frame, [{label, {text, "Ok"}}, {pack_xy, {2,2}}]),
- gs:config(Editor, [{insert, {insert, Contents}}]),
- gs:config(Editor, [{enable, false}]),
- gs:config(Win, [{map, true}]),
- gs:config(Frame, WH),
- show_info_loop(TopWin, Win, Frame, Button).
-
-%% ---- Common ----
-
-show_info_loop(TopWin, Win, Frame, Button) ->
- receive
- {gs, Button, click, _, _} ->
- gs:destroy(Win);
- {gs, TopWin, destroy, _, _} ->
- exit(normal);
- {gs, Win, destroy, _, _} ->
- ok;
- {gs, Win, configure, _Data, [W, H|_]} ->
- gs:config(Frame, [{width, W}, {height, H}]),
- show_info_loop(TopWin, Win, Frame, Button)
- end.
-
-include_dialog(#gui_state{gs = GS, options = Options}, Parent) ->
- WH = [{width, 300}, {height, 400}],
- Title = io_lib:format("Include Directories", []),
- Win = gs:window(GS, [{title, Title}, {configure, true},
- {default, entry, {bg, white}}| WH]),
- EmptySpace = {stretch, 1},
- Frame = gs:frame(Win, [{packer_x, [EmptySpace]},
- {packer_y, [{fixed, 30}, {fixed, 30}, {fixed, 30},
- EmptySpace, {fixed, 30}, {fixed, 30}]}
- | WH]),
- gs:label(Frame, [{pack_xy, {1,1}}, {label, {text, "Directory"}}]),
- DirEntry = gs:entry(Frame, [{pack_xy, {1,2}}]),
- ButtonPacker1 = gs:frame(Frame, [{pack_xy, {1,3}},
- {packer_x, [{fixed, 70}, {fixed, 70},
- EmptySpace]},
- {packer_y, {fixed, 30}}]),
- AddButton = gs:button(ButtonPacker1, [{label, {text, "Add"}},
- {pack_xy, {1,1}}]),
- Dirs = [io_lib:format("~s", [X]) || X <- Options#options.include_dirs],
- DirBox = gs:listbox(Frame, [{pack_xy, {1,4}}, {vscroll, right},
- {bg, white}, {configure, true},
- {selectmode, multiple}, {items, Dirs}]),
- ButtonPacker2 = gs:frame(Frame, [{pack_xy, {1,5}},
- {packer_x, [{fixed, 60}, {fixed, 70},
- EmptySpace]},
- {packer_y, {fixed, 30}}]),
- DeleteButton = gs:button(ButtonPacker2, [{label, {text, "Delete"}},
- {pack_xy, {1,1}}]),
- DeleteAllButton = gs:button(ButtonPacker2, [{label, {text, "Delete All"}},
- {pack_xy, {2,1}}]),
- ButtonPacker3 = gs:frame(Frame, [{pack_xy, {1,6}},
- {packer_x, [EmptySpace,
- {fixed, 60}, {fixed, 60}]},
- {packer_y, {fixed, 30}}]),
- OkButton = gs:button(ButtonPacker3, [{label, {text, "Ok"}},
- {pack_xy, {2,1}}]),
- CancelButton = gs:button(ButtonPacker3, [{label, {text, "Cancel"}},
- {pack_xy, {3,1}}]),
- gs:config(Win, [{map, true}]),
- gs:config(Frame, WH),
- include_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton,
- DirBox, DirEntry, OkButton, CancelButton, Win).
-
-include_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton,
- DirBox, DirEntry, OkButton, CancelButton, Win) ->
- receive
- {gs, CancelButton, click, _, _} ->
- gs:destroy(Win),
- ok;
- {gs, OkButton, click, _, _} ->
- gs:destroy(Win),
- Parent ! {new_options, Options},
- ok;
- {gs, Win, configure, _Data, [W, H|_]} ->
- gs:config(Frame, [{width, W}, {height, H}]),
- include_loop(Parent, Options, Frame, AddButton, DeleteAllButton,
- DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win);
- {gs, AddButton, click, _, _} ->
- Dirs = Options#options.include_dirs,
- NewDirs =
- case gs:read(DirEntry, text) of
- [] -> Dirs;
- Add -> [Add|Dirs]
- end,
- NewOptions = Options#options{include_dirs = NewDirs},
- gs:config(DirBox, [{items, NewDirs}]),
- include_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win);
- {gs, DeleteAllButton, click, _, _} ->
- gs:config(DirBox, [clear]),
- NewOptions = Options#options{include_dirs = []},
- include_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win);
- {gs, DeleteButton, click, _, _} ->
- NewOptions =
- case gs:read(DirBox, selection) of
- [] ->
- Options;
- List ->
- lists:foreach(fun(X) -> gs:config(DirBox, [{del, X}]) end,
- lists:sort(List)),
- NewDirs = gs:read(DirBox, items),
- Options#options{include_dirs = NewDirs}
- end,
- include_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win);
- {gs, Win, destroy, _, _} ->
- ok
- end.
-
-macro_dialog(#gui_state{gs = GS, options = Options}, Parent) ->
- WH = [{width, 300}, {height, 400}],
- Title = io_lib:format("Macro Definitions", []),
- Win = gs:window(GS, [{title, Title}, {configure, true},
- {default, entry, {bg, white}}| WH]),
- EmptySpace = {stretch, 1},
- Frame = gs:frame(Win, [{packer_x, [EmptySpace, EmptySpace]},
- {packer_y, [{fixed, 30}, {fixed, 30}, {fixed, 30},
- EmptySpace, {fixed, 30}, {fixed, 30}]}
- | WH]),
- gs:label(Frame, [{pack_xy, {1,1}}, {label, {text, "Macro"}}]),
- MacroEntry = gs:entry(Frame, [{pack_xy, {1,2}}]),
- gs:label(Frame, [{pack_xy, {2,1}}, {label, {text, "Term"}}]),
- TermEntry = gs:entry(Frame, [{pack_xy, {2,2}}]),
- ButtonPacker1 = gs:frame(Frame, [{pack_x, {1,2}}, {pack_y, 3},
- {packer_x, [{fixed, 70},{fixed, 70},
- EmptySpace]},
- {packer_y, {fixed, 30}}]),
- AddButton = gs:button(ButtonPacker1, [{label, {text, "Add"}},
- {pack_xy, {1,1}}]),
- Macros = [io_lib:format("~p = ~p",[X,Y]) || {X,Y} <- Options#options.defines],
- MacroBox = gs:listbox(Frame, [{pack_x, {1,2}}, {pack_y, 4}, {vscroll, right},
- {bg, white}, {configure, true},
- {selectmode, multiple},
- {items, Macros}]),
- ButtonPacker2 = gs:frame(Frame, [{pack_x, {1,2}}, {pack_y, 5},
- {packer_x, [{fixed, 60}, {fixed, 70},
- EmptySpace]},
- {packer_y, {fixed, 30}}]),
- DeleteButton = gs:button(ButtonPacker2, [{label, {text, "Delete"}},
- {pack_xy, {1,1}}]),
- DeleteAllButton = gs:button(ButtonPacker2, [{label, {text, "Delete All"}},
- {pack_xy, {2,1}}]),
- ButtonPacker3 = gs:frame(Frame, [{pack_x, {1,2}}, {pack_y, 6},
- {packer_x, [EmptySpace,
- {fixed, 60}, {fixed, 60}]},
- {packer_y, {fixed, 30}}]),
- OkButton = gs:button(ButtonPacker3, [{label, {text, "Ok"}},
- {pack_xy, {2,1}}]),
- CancelButton = gs:button(ButtonPacker3, [{label, {text, "Cancel"}},
- {pack_xy, {3,1}}]),
- gs:config(Win, [{map, true}]),
- gs:config(Frame, WH),
- macro_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton,
- MacroBox, MacroEntry, TermEntry, OkButton, CancelButton, Win).
-
-macro_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton,
- MacroBox, MacroEntry, TermEntry, OkButton, CancelButton, Win) ->
- receive
- {gs, CancelButton, click, _, _} ->
- gs:destroy(Win),
- ok;
- {gs, OkButton, click, _, _} ->
- gs:destroy(Win),
- Parent ! {new_options, Options},
- ok;
- {gs, Win, configure, _Data, [W, H|_]} ->
- gs:config(Frame, [{width, W}, {height, H}]),
- macro_loop(Parent, Options, Frame, AddButton, DeleteAllButton,
- DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton,
- CancelButton, Win);
- {gs, AddButton, click, _, _} ->
- Defines = Options#options.defines,
- NewDefines =
- case gs:read(MacroEntry, text) of
- "" -> Defines;
- Macro ->
- Empty = [{text, ""}],
- case gs:read(TermEntry, text) of
- "" ->
- gs:config(MacroEntry, Empty),
- orddict:store(list_to_atom(Macro), true, Defines);
- String ->
- case parse(String) of
- {ok, Term} ->
- gs:config(MacroEntry, Empty),
- gs:config(TermEntry, Empty),
- orddict:store(list_to_atom(Macro), Term, Defines);
- {error, _Reason} ->
- Defines
- end
- end
- end,
- NewOptions = Options#options{defines = NewDefines},
- NewEntries = [io_lib:format("~p = ~p", [X, Y]) || {X, Y} <- NewDefines],
- gs:config(MacroBox, [{items, NewEntries}]),
- macro_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton,
- CancelButton, Win);
- {gs, DeleteAllButton, click, _, _} ->
- gs:config(MacroBox, [clear]),
- NewOptions = Options#options{defines = []},
- macro_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton,
- CancelButton, Win);
- {gs, DeleteButton, click, _, _} ->
- NewOptions =
- case gs:read(MacroBox, selection) of
- [] ->
- Options;
- List ->
- gs:config(MacroBox, [{selection, clear}]),
- Fun =
- fun(X) ->
- Val = gs:read(MacroBox, {get, X}),
- [MacroName|_] = re:split(Val, " ", [{return, list}]),
- list_to_atom(MacroName)
- end,
- Delete = [Fun(X) || X <- List],
- lists:foreach(fun(X) -> gs:config(MacroBox, [{del, X}]) end,
- lists:reverse(lists:sort(List))),
- Defines = Options#options.defines,
- NewDefines = lists:foldl(fun(X, Acc) ->
- orddict:erase(X, Acc)
- end,
- Defines, Delete),
- Options#options{defines = NewDefines}
- end,
- macro_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton,
- DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton,
- CancelButton, Win);
- {gs, Win, destroy, _, _} ->
- ok
- end.
-
-parse(String) ->
- case erl_scan:string(String ++ ".", 1) of
- {ok, Ts, _} ->
- case erl_parse:parse_exprs(Ts) of
- {ok, [Expr]} ->
- try erl_parse:normalise(Expr)
- catch error:Reason -> {error, Reason}
- end;
- {error, E} ->
- parse_error(E)
- end;
- {error, E, _} ->
- parse_error(E)
- end.
-
-parse_error(E) ->
- S = io_lib:fwrite("Error parsing expression: ~P.", [E,15]),
- {error, S}.
-
-%% ----------------------------------------------------------------
-%%
-%% Run the analysis
-%%
-
-start_analysis(State) ->
- Analysis = build_analysis_record(State),
- case get_anal_files(State, Analysis#analysis.start_from) of
- error ->
- Msg = "You must choose one or more files or dirs\n"
- "before starting the analysis!",
- error_sms(State, Msg),
- config_gui_stop(State),
- State;
- {ok, Files} ->
- Msg = "\n========== Starting Analysis ==========\n\n",
- update_editor(State#gui_state.log, Msg),
- NewAnalysis = Analysis#analysis{files = Files},
- run_analysis(State, NewAnalysis)
- end.
-
-build_analysis_record(#gui_state{mode = Mode, menu = Menu, options = Options,
- init_plt = InitPlt0}) ->
- StartFrom =
- case gs:read(Mode#mode.start_byte_code, select) of
- true -> byte_code;
- false -> src_code
- end,
- InitPlt =
- case gs:read(Menu#menu.plt_empty, select) of
- true -> dialyzer_plt:new();
- false -> InitPlt0
- end,
- #analysis{defines = Options#options.defines,
- include_dirs = Options#options.include_dirs,
- plt = InitPlt,
- start_from = StartFrom,
- solvers = Options#options.solvers}.
-
-get_anal_files(#gui_state{chosen_box = ChosenBox}, StartFrom) ->
- Files = gs:read(ChosenBox, items),
- FilteredMods =
- case StartFrom of
- src_code -> filter_mods(Files, ".erl");
- byte_code -> filter_mods(Files, ".beam")
- end,
- FilteredDirs = [X || X <- Files, filelib:is_dir(X)],
- case ordsets:union(FilteredMods, FilteredDirs) of
- [] -> error;
- Set -> {ok, Set}
- end.
-
-run_analysis(State, Analysis) ->
- config_gui_start(State),
- Self = self(),
- NewAnalysis = Analysis#analysis{doc_plt = dialyzer_plt:new()},
- LegalWarnings = find_legal_warnings(State),
- Fun =
- fun() ->
- dialyzer_analysis_callgraph:start(Self, LegalWarnings, NewAnalysis)
- end,
- BackendPid = spawn_link(Fun),
- State#gui_state{backend_pid = BackendPid}.
-
-find_legal_warnings(#gui_state{menu = #menu{warnings = Warnings}}) ->
- ordsets:from_list([Tag || {Tag, GSItem} <- Warnings,
- gs:read(GSItem, select) =:= true]).
-
-flush() ->
- receive
- _ -> flush()
- after
- 0 -> ok
- end.
-
-update_editor(Editor, Msg) ->
- gs:config(Editor, [{enable, true}]),
- NofRows = gs:read(Editor, size),
- gs:config(Editor, [{insertpos, 'end'}]),
- gs:config(Editor, [{insert, {insert, Msg}}]),
- NewNofRows = gs:read(Editor, size),
- ScrollPos = gs:read(Editor, vscrollpos),
- gs:config(Editor, [{vscrollpos, ScrollPos + NewNofRows - NofRows}]),
- gs:config(Editor, [{enable, false}]).
diff --git a/lib/dialyzer/test/options1_SUITE_data/src/compiler/sys_expand_pmod.erl b/lib/dialyzer/test/options1_SUITE_data/src/compiler/sys_expand_pmod.erl
index f48cc05b9c..cd13f468b2 100644
--- a/lib/dialyzer/test/options1_SUITE_data/src/compiler/sys_expand_pmod.erl
+++ b/lib/dialyzer/test/options1_SUITE_data/src/compiler/sys_expand_pmod.erl
@@ -341,6 +341,8 @@ expr({'fun',Line,Body,Info},St) ->
{function,M,F,A} -> %This is an error in lint!
{'fun',Line,{function,M,F,A},Info}
end;
+expr({named_fun,Loc,Name,Cs,Info},St) ->
+ {named_fun,Loc,Name,fun_clauses(Cs, St),Info};
expr({call,Lc,{atom,_,new}=Name,As0},#pmod{parameters=Ps}=St)
when length(As0) =:= length(Ps) ->
%% The new() function does not take a 'THIS' argument (it's static).
diff --git a/lib/appmon/doc/html/.gitignore b/lib/dialyzer/test/small_SUITE_data/results/eep37
index e69de29bb2..e69de29bb2 100644
--- a/lib/appmon/doc/html/.gitignore
+++ b/lib/dialyzer/test/small_SUITE_data/results/eep37
diff --git a/lib/dialyzer/test/small_SUITE_data/src/eep37.erl b/lib/dialyzer/test/small_SUITE_data/src/eep37.erl
new file mode 100644
index 0000000000..2818688f95
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/src/eep37.erl
@@ -0,0 +1,15 @@
+-module(eep37).
+
+-compile(export_all).
+
+-spec self() -> fun(() -> fun()).
+self() ->
+ fun Self() -> Self end.
+
+-spec fact() -> fun((non_neg_integer()) -> non_neg_integer()).
+fact() ->
+ fun Fact(N) when N > 0 ->
+ N * Fact(N - 1);
+ Fact(0) ->
+ 1
+ end.
diff --git a/lib/et/src/Makefile b/lib/et/src/Makefile
index 386169fe95..377e593712 100644
--- a/lib/et/src/Makefile
+++ b/lib/et/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2000-2012. All Rights Reserved.
+# Copyright Ericsson AB 2000-2013. All Rights Reserved.
#
# The contents of this file are subject to the Erlang Public License,
# Version 1.1, (the "License"); you may not use this file except in
@@ -127,15 +127,12 @@ $(EBIN)/et_selector.$(EMULATOR): et_selector.erl ../include/et.hrl
$(EBIN)/et_contents_viewer.$(EMULATOR): et_contents_viewer.erl ../include/et.hrl et_internal.hrl
-$(EBIN)/et_gs_contents_viewer.$(EMULATOR): et_gs_contents_viewer.erl ../include/et.hrl et_internal.hrl
$(EBIN)/et_wx_contents_viewer.$(EMULATOR): et_wx_contents_viewer.erl ../include/et.hrl et_internal.hrl
$(EBIN)/et_collector.$(EMULATOR): et_collector.erl ../include/et.hrl et_internal.hrl
$(EBIN)/et_viewer.$(EMULATOR): et_viewer.erl ../include/et.hrl et_internal.hrl
-$(EBIN)/et_gs_viewer.$(EMULATOR): et_gs_viewer.erl ../include/et.hrl et_internal.hrl
-
$(EBIN)/et_wx_viewer.$(EMULATOR): et_wx_viewer.erl ../include/et.hrl et_internal.hrl
diff --git a/lib/et/src/et.app.src b/lib/et/src/et.app.src
index fd203e3e44..f7189a4197 100644
--- a/lib/et/src/et.app.src
+++ b/lib/et/src/et.app.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -24,8 +24,6 @@
[
et,
et_collector,
- et_gs_contents_viewer,
- et_gs_viewer,
et_selector,
et_viewer,
et_wx_contents_viewer,
diff --git a/lib/et/src/et_collector.erl b/lib/et/src/et_collector.erl
index a78b30c419..e05c67be60 100644
--- a/lib/et/src/et_collector.erl
+++ b/lib/et/src/et_collector.erl
@@ -409,8 +409,6 @@ report(TH, TraceOrEvent) when is_record(TH, table_handle) ->
report(TH#table_handle.collector_pid, TraceOrEvent)
end
end;
-report(TH, end_of_trace) when is_record(TH, table_handle) ->
- {ok, TH};
report(_, Bad) ->
exit({bad_event, Bad}).
diff --git a/lib/et/src/et_gs_contents_viewer.erl b/lib/et/src/et_gs_contents_viewer.erl
deleted file mode 100644
index 2d414f10b4..0000000000
--- a/lib/et/src/et_gs_contents_viewer.erl
+++ /dev/null
@@ -1,602 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Displays details of a trace event
-%%----------------------------------------------------------------------
-
--module(et_gs_contents_viewer).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,editor,2}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menubar,2}},
- {nowarn_deprecated_function,{gs,menubutton,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,menuitem,3}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
--behaviour(gen_server).
-
-%% External exports
--export([start_link/1,
- stop/1]).
-
-%% gen_server callbacks
--export([init/1, terminate/2, code_change/3,
- handle_call/3, handle_cast/2, handle_info/2]).
-
--include("../include/et.hrl").
--include("et_internal.hrl").
-
--record(state, {parent_pid, % Pid of parent process
- viewer_pid, % Pid of viewer process
- event_order, % Field to be used as primary key
- event, % The original event
- filtered_event, % Event processed by active filter
- active_filter, % Name of the active filter
- filters, % List of possible filters
- win, % GUI: Window object
- packer, % GUI: Packer object
- width, % GUI: Window width
- height}). % GUI: Window height
-
-%%%----------------------------------------------------------------------
-%%% Client side
-%%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% start_link(Options) -> {ok, ContentsPid} | {error, Reason}
-%%
-%% Start an viewer for the event contents as window in GS
-%%
-%% Options = [option()]
-%%
-%% option() =
-%%
-%% {parent_pid, pid()} | % Pid of parent process
-%% {viewer_pid, pid()} | % Pid of viewer process
-%% {event_order, event_order()} | % Field to be used as primary key
-%% {active_filter, atom()} | % Name of the active filter
-%% {filter, atom(), fun()} % A named filter fun
-%%
-%% event_order() = 'trace_ts' | 'event_ts'
-%% ContentsPid = pid()
-%% Reason = term()
-%%----------------------------------------------------------------------
-
-start_link(Options) ->
- case parse_opt(Options, default_state()) of
- {ok, S} ->
- case gen_server:start_link(?MODULE, [S], []) of
- {ok, ContentsPid} when S#state.parent_pid =/= self() ->
- unlink(ContentsPid),
- {ok, ContentsPid};
- Other ->
- Other
- end;
- {error, Reason} ->
- {error, Reason}
- end.
-
-default_state() ->
- #state{parent_pid = self(),
- viewer_pid = undefined,
- active_filter = ?DEFAULT_FILTER_NAME,
- filters = [?DEFAULT_FILTER],
- width = 600,
- height = 300}.
-
-parse_opt([], S) ->
- Name = S#state.active_filter,
- Filters = S#state.filters,
- if
- S#state.event =:= undefined ->
- {error, {badarg, no_event}};
- is_atom(Name) ->
- case lists:keysearch(Name, #filter.name, Filters) of
- {value, F} when is_record(F, filter) ->
- {ok, S#state{active_filter = Name}};
- false ->
- {error, {badarg, {no_such_filter, Name, Filters}}}
- end
- end;
-parse_opt([H | T], S) ->
- case H of
- {parent_pid, ParentPid} when is_pid(ParentPid) ->
- parse_opt(T, S#state{parent_pid = ParentPid});
- {viewer_pid, ViewerPid} when is_pid(ViewerPid) ->
- parse_opt(T, S#state{viewer_pid = ViewerPid});
- {event_order, trace_ts} ->
- parse_opt(T, S#state{event_order = trace_ts});
- {event_order, event_ts} ->
- parse_opt(T, S#state{event_order = event_ts});
- {event, Event} when is_record(Event, event) ->
- parse_opt(T, S#state{event = Event});
- {active_filter, Name} when is_atom(Name) ->
- parse_opt(T, S#state{active_filter = Name});
- F when is_record(F, filter),
- is_atom(F#filter.name),
- is_function(F#filter.function) ->
- Filters = lists:keydelete(F#filter.name, #filter.name, S#state.filters),
- Filters2 = lists:keysort(#filter.name, [F | Filters]),
- parse_opt(T, S#state{filters = Filters2});
- {width, Width} when is_integer(Width), Width > 0 ->
- parse_opt(T, S#state{width = Width});
- {height, Height} when is_integer(Height), Height > 0 ->
- parse_opt(T, S#state{height = Height});
- Bad ->
- {error, {bad_option, Bad}}
- end;
-parse_opt(BadList, _S) ->
- {error, {bad_option_list, BadList}}.
-
-%%----------------------------------------------------------------------
-%% stop(ContentsPid) -> ok
-%%
-%% Stops a contents viewer process
-%%
-%% ContentsPid = pid()
-%%----------------------------------------------------------------------
-
-stop(ContentsPid) ->
- unlink(ContentsPid),
- call(ContentsPid, stop).
-
-call(ContentsPid, Request) ->
- gen_server:call(ContentsPid, Request, infinity).
-
-%%%----------------------------------------------------------------------
-%%% Callback functions from gen_server
-%%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Func: init/1
-%% Returns: {ok, State} |
-%% {ok, State, Timeout} |
-%% ignore |
-%% {stop, Reason}
-%%----------------------------------------------------------------------
-
-init([S]) when is_record(S, state) ->
- process_flag(trap_exit, true),
- S2 = create_window(S),
- {ok, S2}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_call/3
-%% Returns: {reply, Reply, State} |
-%% {reply, Reply, State, Timeout} |
-%% {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, Reply, State} | (terminate/2 is called)
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_call(stop, _From, S) ->
- unlink(S#state.parent_pid),
- {stop, shutdown, ok, S};
-handle_call(Request, From, S) ->
- ok = error_logger:format("~p(~p): handle_call(~p, ~p, ~p)~n",
- [?MODULE, self(), Request, From, S]),
- Reply = {error, {bad_request, Request}},
- {reply, Reply, S}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_cast/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_cast(Msg, S) ->
- ok = error_logger:format("~p(~p): handle_cast(~p, ~p)~n",
- [?MODULE, self(), Msg, S]),
- {noreply, S}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_info/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_info({gs, Button, click, Data, _Other}, S) ->
- case Button of
- close ->
- gs:destroy(S#state.win),
- {stop, normal, S};
- save ->
- Event = S#state.event,
- Bin = list_to_binary(event_to_string(Event, S#state.event_order)),
- TimeStamp =
- case S#state.event_order of
- trace_ts -> Event#event.trace_ts;
- event_ts -> Event#event.event_ts
- end,
- FileName = ["et_contents_viewer_", now_to_string(TimeStamp), ".save"],
- file:write_file(lists:flatten(FileName), Bin),
- {noreply, S};
- _PopupMenuItem when is_record(Data, filter) ->
- F = Data,
- ChildState= S#state{active_filter = F#filter.name},
- case gen_server:start_link(?MODULE, [ChildState], []) of
- {ok, Pid} when S#state.parent_pid =/= self() ->
- unlink(Pid),
- {noreply, S};
- _ ->
- {noreply, S}
- end;
- {hide, Actors} ->
- send_viewer_event(S, {delete_actors, Actors}),
- {noreply, S};
- {show, Actors} ->
- send_viewer_event(S, {insert_actors, Actors}),
- {noreply, S};
- {mode, Mode} ->
- send_viewer_event(S, {mode, Mode}),
- {noreply, S};
- Nyi ->
- ok = error_logger:format("~p: click ~p ignored (nyi)~n",
- [?MODULE, Nyi]),
- {noreply, S}
- end;
-handle_info({gs, _Obj, destroy,_, _}, S) ->
- unlink(S#state.parent_pid),
- gs:destroy(S#state.win),
- {stop, normal, S};
-handle_info({gs, _Obj, keypress, _, [KeySym, _Keycode, _Shift, _Control | _]}, S) ->
- case KeySym of
- 'c' ->
- gs:destroy(S#state.win),
- {stop, normal, S};
-
- 'f' ->
- E = S#state.filtered_event,
- From = E#event.from,
- send_viewer_event(S, {delete_actors, [From]}),
- {noreply, S};
- 't' ->
- E = S#state.filtered_event,
- To = E#event.to,
- send_viewer_event(S, {delete_actors, [To]}),
- {noreply, S};
- 'b' ->
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- send_viewer_event(S, {delete_actors, [From, To]}),
- {noreply, S};
-
- 'F' ->
- E = S#state.filtered_event,
- From = E#event.from,
- send_viewer_event(S, {insert_actors, [From]}),
- {noreply, S};
- 'T' ->
- E = S#state.filtered_event,
- To = E#event.to,
- send_viewer_event(S, {insert_actors, [To]}),
- {noreply, S};
- 'B' ->
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- send_viewer_event(S, {insert_actors, [From, To]}),
- {noreply, S};
-
- 's' ->
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- First = et_collector:make_key(S#state.event_order, E),
- Mode = {search_actors, forward, First, [From, To]},
- send_viewer_event(S, {mode, Mode}),
- {noreply, S};
- 'r' ->
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- First = et_collector:make_key(S#state.event_order, E),
- Mode = {search_actors, reverse, First, [From, To]},
- send_viewer_event(S, {mode, Mode}),
- {noreply, S};
- 'a' ->
- send_viewer_event(S, {mode, all}),
- {noreply, S};
-
- 0 ->
- case lists:keysearch(?DEFAULT_FILTER_NAME, #filter.name, S#state.filters) of
- {value, F} when is_record(F, filter) ->
- ChildState= S#state{active_filter = F#filter.name},
- case gen_server:start_link(?MODULE, [ChildState], []) of
- {ok, Pid} when S#state.parent_pid =/= self() ->
- unlink(Pid);
- _ ->
- ignore
- end;
- false ->
- ignore
- end,
- {noreply, S};
- Int when is_integer(Int), Int > 0, Int =< 9 ->
- case catch lists:nth(Int, S#state.filters) of
- F when is_record(F, filter) ->
- ChildState= S#state{active_filter = F#filter.name},
- case gen_server:start_link(?MODULE, [ChildState], []) of
- {ok, Pid} when S#state.parent_pid =/= self() ->
- unlink(Pid);
- _ ->
- ignore
- end;
- {'EXIT', _} ->
- ignore
- end,
- {noreply, S};
-
- 'Shift_L' ->
- {noreply, S};
- 'Shift_R' ->
- {noreply, S};
- 'Caps_Lock' ->
- {noreply, S};
- _ ->
- io:format("~p: ignored: ~p~n", [?MODULE, KeySym]),
- {noreply, S}
- end;
-handle_info({gs, _Obj, configure, [], [W, H | _]}, S) ->
- gs:config(S#state.packer, [{width, W},{height, H}]),
- S2 = S#state{width = W, height = H},
- {noreply, S2};
-handle_info({'EXIT', Pid, Reason}, S) ->
- if
- Pid =:= S#state.parent_pid ->
- unlink(Pid),
- {stop, Reason, S};
- true ->
- {noreply, S}
- end;
-handle_info(Info, S) ->
- ok = error_logger:format("~p(~p): handle_info(~p, ~p)~n",
- [?MODULE, self(), Info, S]),
- {noreply, S}.
-
-%%----------------------------------------------------------------------
-%% Func: terminate/2
-%% Purpose: Shutdown the server
-%% Returns: any (ignored by gen_server)
-%%----------------------------------------------------------------------
-
-terminate(_Reason, _S) ->
- ignore.
-
-%%----------------------------------------------------------------------
-%% Func: code_change/3
-%% Purpose: Convert process state when code is changed
-%% Returns: {ok, NewState}
-%%----------------------------------------------------------------------
-
-code_change(_OldVsn, S, _Extra) ->
- {ok, S}.
-
-%%%----------------------------------------------------------------------
-%%% Handle graphics
-%%%----------------------------------------------------------------------
-
-create_window(S) ->
- H = S#state.height,
- W = S#state.width,
- Name = S#state.active_filter,
- Title = lists:concat([?MODULE, " (filter: ", Name, ")"]),
- WinOpt = [{title, Title}, {configure, true},
- {width, W}, {height, H}],
- GS = gs:start(),
- Win = gs:window(GS, WinOpt),
- Bar = gs:menubar(Win, []),
- create_file_menu(Bar),
- PackerOpt = [{packer_x, [{stretch, 1}]},
- {packer_y, [{stretch, 1}, {fixed, 25}]},
- {x, 0}, {y, 25}],
- Packer = gs:frame(Win, PackerOpt),
- EditorOpt = [{pack_xy, {1, 1}}, {vscroll, right}, {hscroll, bottom},
- {wrap, none},
- {bg, lightblue}, {font, {courier, 12}}],
- Editor = gs:editor(Packer, EditorOpt),
- FilteredEvent = config_editor(Editor, S),
- S2 = S#state{win = Win, packer = Packer, filtered_event = FilteredEvent},
- create_hide_menu(Bar, S2),
- create_search_menu(Bar, S2),
- create_filter_menu(Bar, S#state.filters),
- gs:config(Packer, [{width, W}, {height, H}]),
- gs:config(Win, [{map,true}, {keypress, true}]),
- S2.
-
-create_file_menu(Bar) ->
- Button = gs:menubutton(Bar, [{label, {text, "File"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(close, Menu, [{label, {text,"Close (c)"}}]),
- gs:menuitem(save, Menu, [{label, {text,"Save"}}]).
-
-create_filter_menu(Bar, Filters) ->
- Button = gs:menubutton(Bar, [{label, {text, "Filters"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(Menu, [{label, {text, "Select Filter"}}, {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- Item = fun(F, N) when F#filter.name =:= ?DEFAULT_FILTER_NAME->
- Label = lists:concat([pad_string(F#filter.name, 20), "(0)"]),
- gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]),
- N + 1;
- (F, N) ->
- Name = F#filter.name,
- Label = lists:concat([pad_string(Name, 20), "(", N, ")"]),
- gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]),
- N + 1
- end,
- Filters2 = lists:keysort(#filter.name, Filters),
- lists:foldl(Item, 1, Filters2),
- Menu.
-
-create_hide_menu(Bar, S) ->
- Button = gs:menubutton(Bar, [{label, {text, "Hide"}}]),
- Menu = gs:menu(Button, []),
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- if
- S#state.viewer_pid =:= undefined ->
- ignore;
- From =:= To ->
- gs:menuitem(Menu, [{label, {text, "Hide actor in Viewer "}}, {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem({hide, [From]}, Menu, [{label, {text,"From=To (f|t|b)"}}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "Show actor in Viewer "}}, {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem({show, [From]}, Menu, [{label, {text,"From=To (F|T|B)"}}]);
- true ->
- gs:menuitem(Menu, [{label, {text, "Hide actor in Viewer "}}, {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem({hide, [From]}, Menu, [{label, {text,"From (f)"}}]),
- gs:menuitem({hide, [To]}, Menu, [{label, {text,"To (t)"}}]),
- gs:menuitem({hide, [From, To]}, Menu, [{label, {text,"Both (b)"}}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "Show actor in Viewer "}}, {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem({show, [From]}, Menu, [{label, {text,"From (F)"}}]),
- gs:menuitem({show, [To]}, Menu, [{label, {text,"To (T)"}}]),
- gs:menuitem({show, [From, To]}, Menu, [{label, {text,"Both (B)"}}])
- end.
-
-create_search_menu(Bar, S) ->
- Button = gs:menubutton(Bar, [{label, {text, "Search"}}]),
- Menu = gs:menu(Button, []),
- E = S#state.filtered_event,
- From = E#event.from,
- To = E#event.to,
- gs:menuitem(Menu, [{label, {text, "Search in Viewer "}},
- {bg, lightblue}, {enable, false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- if
- S#state.viewer_pid =:= undefined ->
- S;
- From =:= To ->
- Key = et_collector:make_key(S#state.event_order, E),
- ModeS = {search_actors, forward, Key, [From]},
- ModeR = {search_actors, reverse, Key, [From]},
- gs:menuitem({mode, ModeS}, Menu, [{label, {text,"Forward from this event (s)"}}]),
- gs:menuitem({mode, ModeR}, Menu, [{label, {text,"Reverse from this event (r)"}}]);
- true ->
- Key = et_collector:make_key(S#state.event_order, E),
- ModeS = {search_actors, forward, Key, [From, To]},
- ModeR = {search_actors, reverse, Key, [From, To]},
- gs:menuitem({mode, ModeS}, Menu, [{label, {text,"Forward from this event (s)"}}]),
- gs:menuitem({mode, ModeR}, Menu, [{label, {text,"Reverse from this event (r)"}}])
- end,
- gs:menuitem({mode, all}, Menu, [{label, {text,"Abort search. Display all (a)"}}]).
-
-config_editor(Editor, S) ->
- Event = S#state.event,
- Name = S#state.active_filter,
- {value, F} = lists:keysearch(Name, #filter.name, S#state.filters),
- FilterFun = F#filter.function,
- case catch FilterFun(Event) of
- true ->
- do_config_editor(Editor, Event, lightblue, S#state.event_order);
- {true, Event2} when is_record(Event2, event) ->
- do_config_editor(Editor, Event2, lightblue, S#state.event_order);
- false ->
- do_config_editor(Editor, Event, red, S#state.event_order);
- Bad ->
- Contents = {bad_filter, Name, Bad},
- BadEvent = Event#event{contents = Contents},
- do_config_editor(Editor, BadEvent, red, S#state.event_order)
- end.
-
-do_config_editor(Editor, Event, Colour, TsKey) ->
- String = event_to_string(Event, TsKey),
- gs:config(Editor, {insert, {'end', String}}),
- gs:config(Editor, {enable, false}),
- gs:config(Editor, {bg, Colour}),
- Event.
-
-%%%----------------------------------------------------------------------
-%%% String handling
-%%%----------------------------------------------------------------------
-
-term_to_string(Term) ->
- case catch io_lib:format("~s", [Term]) of
- {'EXIT', _} -> io_lib:format("~p", [Term]);
- GoodString -> GoodString
- end.
-
-now_to_string({Mega, Sec, Micro} = Now)
- when is_integer(Mega), is_integer(Sec), is_integer(Micro) ->
- {{Y, Mo, D}, {H, Mi, S}} = calendar:now_to_universal_time(Now),
- lists:concat([Y, "-", Mo, "-", D, " ", H, ".", Mi, ".", S, ".", Micro]);
-now_to_string(Other) ->
- term_to_string(Other).
-
-event_to_string(Event, TsKey) ->
- ReportedTs = Event#event.trace_ts,
- ParsedTs = Event#event.event_ts,
- Deep =
- ["DETAIL LEVEL: ", term_to_string(Event#event.detail_level),
- "\nLABEL: ", term_to_string(Event#event.label),
- case Event#event.from =:= Event#event.to of
- true ->
- ["\nACTOR: ", term_to_string(Event#event.from)];
- false ->
- ["\nFROM: ", term_to_string(Event#event.from),
- "\nTO: ", term_to_string(Event#event.to)]
- end,
- case ReportedTs =:= ParsedTs of
- true ->
- ["\nPARSED: ", now_to_string(ParsedTs)];
- false ->
- case TsKey of
- trace_ts ->
- ["\nTRACE_TS: ", now_to_string(ReportedTs),
- "\nEVENT_TS: ", now_to_string(ParsedTs)];
- event_ts ->
- ["\nEVENT_TS: ", now_to_string(ParsedTs),
- "\nTRACE_TS: ", now_to_string(ReportedTs)]
- end
- end,
- "\nCONTENTS:\n\n", term_to_string(Event#event.contents)],
- lists:flatten(Deep).
-
-pad_string(Atom, MinLen) when is_atom(Atom) ->
- pad_string(atom_to_list(Atom), MinLen);
-pad_string(String, MinLen) when is_integer(MinLen), MinLen >= 0 ->
- Len = length(String),
- case Len >= MinLen of
- true ->
- String;
- false ->
- String ++ lists:duplicate(MinLen - Len, $ )
- end.
-
-send_viewer_event(S, Event) ->
- case S#state.viewer_pid of
- ViewerPid when is_pid(ViewerPid) ->
- ViewerPid ! {et, Event};
- undefined ->
- ignore
- end.
diff --git a/lib/et/src/et_gs_viewer.erl b/lib/et/src/et_gs_viewer.erl
deleted file mode 100644
index ce8634d09f..0000000000
--- a/lib/et/src/et_gs_viewer.erl
+++ /dev/null
@@ -1,1498 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Displays a sequence chart for trace events (messages/actions)
-%%----------------------------------------------------------------------
-
--module(et_gs_viewer).
--compile([{nowarn_deprecated_function,{gs,canvas,2}},
- {nowarn_deprecated_function,{gs,checkbutton,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,line,2}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menu,3}},
- {nowarn_deprecated_function,{gs,menubar,2}},
- {nowarn_deprecated_function,{gs,menubutton,2}},
- {nowarn_deprecated_function,{gs,menubutton,3}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,menuitem,3}},
- {nowarn_deprecated_function,{gs,scale,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,text,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
--behaviour(gen_server).
-
-%% External exports
--export([start_link/1]).
-
-%% gen_server callbacks
--export([init/1, terminate/2, code_change/3,
- handle_call/3, handle_cast/2, handle_info/2]).
-
--include("../include/et.hrl").
--include("et_internal.hrl").
-
--define(unknown, "UNKNOWN").
-
--record(state,
- {parent_pid, % Pid of parent process
- collector_pid, % Pid of collector process
- event_order, % Field to be used as primary key
- trace_pattern, % Collector trace pattern
- active_filter, % Name of the active filter
- filters, % List of possible filters
- selected_actor, % Actor selected by user
- first_event, % Key of first event (regardless of visibility)
- last_event, % Key of last event (regardless of visibility)
- max_events, % Maximum number of shown events
- events, % Queue containg all event keys (regardless of visibility)
- max_actors, % Maximum number of shown actors
- actors, % List of known actors
- refresh_needed, % Refresh is needed in order to show all actors
- display_mode, % Display all or only matching actors
- detail_level, % Show only events with lesser detail level
- hide_actions, % Hide/show events where to == from actor (bool)
- hide_unknown, % Hide/show events with unknown actor (bool)
- is_suspended, % Suspend viewer updates (bool)
- title, % GUI: Window title
- win, % GUI: Window object
- menubar, % GUI: Menu bar object
- packer, % GUI: Packer object
- width, % GUI: Window width
- height, % GUI: Window height
- scale, % GUI: Scaling factor on canvas
- font, % GUI: Font to be used on text labels
- canvas_width, % GUI: Canvas width
- canvas_height, % GUI: Canvas height
- canvas, % GUI: Canvas object
- y_pos}). % GUI: Current y position on canvas
-
--record(actor, {name, string}).
-
--define(initial_x, 10).
--define(incr_x, 60).
--define(initial_y, 15).
--define(incr_y, 15).
-
-%%%----------------------------------------------------------------------
-%%% Client side
-%%%----------------------------------------------------------------------
-
-start_link(Options) ->
- case parse_opt(Options, default_state(), []) of
- {ok, S, CollectorOpt} ->
- case S#state.collector_pid of
- CollectorPid when is_pid(CollectorPid) ->
- case gen_server:start_link(?MODULE, [S], []) of
- {ok, Pid} when S#state.parent_pid =/= self() ->
- unlink(Pid),
- {ok, Pid};
- Other ->
- Other
- end;
- undefined ->
- case et_collector:start_link(CollectorOpt) of
- {ok, CollectorPid} ->
- S2 = S#state{collector_pid = CollectorPid},
- case gen_server:start_link(?MODULE, [S2], []) of
- {ok, Pid} when S#state.parent_pid =/= self() ->
- unlink(Pid),
- {ok, Pid};
- Other ->
- Other
- end;
- {error, Reason} ->
- {error, {et_collector, Reason}}
- end
- end;
- {error, Reason} ->
- {error, Reason}
- end.
-
-default_state() ->
- #state{parent_pid = self(),
- collector_pid = undefined,
- detail_level = ?detail_level_max,
- active_filter = ?DEFAULT_FILTER_NAME,
- filters = [?DEFAULT_FILTER],
- event_order = trace_ts,
- is_suspended = false,
- max_events = 100,
- first_event = first,
- last_event = first,
- events = queue_new(),
- max_actors = 5,
- actors = [create_actor(?unknown)],
- selected_actor = ?unknown,
- hide_actions = false,
- hide_unknown = false,
- refresh_needed = false,
- display_mode = all,
- scale = 2,
- canvas_height = 0,
- canvas_width = 0,
- width = 800,
- height = 600}.
-
-parse_opt([], S, CollectorOpt) ->
- {ok, S, [{parent_pid, S#state.parent_pid} | CollectorOpt]};
-parse_opt([H | T], S, CollectorOpt) ->
- case H of
- {parent_pid, Parent} when Parent =:= undefined ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{parent_pid = Parent}, CollectorOpt2);
- {parent_pid, Parent} when is_pid(Parent) ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{parent_pid = Parent}, CollectorOpt2);
- {title, Title} ->
- parse_opt(T, S#state{title = name_to_string(Title)}, CollectorOpt);
- {detail_level, Level} when is_integer(Level),
- Level >= ?detail_level_min,
- Level =< ?detail_level_max ->
- parse_opt(T, S#state{detail_level = Level}, CollectorOpt);
- {detail_level, max} ->
- parse_opt(T, S#state{detail_level = ?detail_level_max}, CollectorOpt);
- {detail_level, min} ->
- parse_opt(T, S#state{detail_level = ?detail_level_min}, CollectorOpt);
- {is_suspended, true} ->
- parse_opt(T, S#state{is_suspended = true}, CollectorOpt);
- {is_suspended, false} ->
- parse_opt(T, S#state{is_suspended = false}, CollectorOpt);
- {scale, Scale} when is_integer(Scale), Scale > 0 ->
- parse_opt(T, S#state{scale = Scale}, CollectorOpt);
- {width, W} when is_integer(W), W > 0 ->
- parse_opt(T, S#state{width = W, canvas_width = W}, CollectorOpt);
- {height, WH} when is_integer(WH), WH > 0 ->
- parse_opt(T, S#state{height = WH, canvas_height = WH}, CollectorOpt);
- {collector_pid, Pid} when is_pid(Pid) ->
- parse_opt(T, S#state{collector_pid = Pid}, CollectorOpt);
- {collector_pid, undefined} ->
- parse_opt(T, S#state{collector_pid = undefined}, CollectorOpt);
- {active_filter, Name} when is_atom(Name) ->
- parse_opt(T, S#state{active_filter = Name}, CollectorOpt);
- {event_order, trace_ts} -> %% BUGBUG: Verify event_order with collector
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{event_order = trace_ts}, CollectorOpt2);
- {event_order, event_ts} -> %% BUGBUG: Verify event_order with collector
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{event_order = event_ts}, CollectorOpt2);
- {trace_port, _Port} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {trace_max_queue, _Queue} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {trace_pattern, _Pattern} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {trace_global, _Boolean} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {trace_client, _Client} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {dict_insert, {filter, Name}, Fun} ->
- if
- is_atom(Name), is_function(Fun) ->
- F = #filter{name = Name, function = Fun},
- Filters = lists:keydelete(Name, #filter.name, S#state.filters),
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{filters = Filters ++ [F]}, CollectorOpt2);
- true ->
- {error, {bad_option, H}}
- end;
- {dict_insert, {subscriber, Pid}, _Val} ->
- if
- is_pid(Pid) ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- true ->
- {error, {bad_option, H}}
- end;
- {dict_insert, _Key, _Val} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {dict_delete, {filter, Name}} ->
- Filters = lists:keydelete(Name, #filter.name, S#state.filters),
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S#state{filters = Filters}, CollectorOpt2);
- {dict_delete, _Key} ->
- CollectorOpt2 = [H | CollectorOpt],
- parse_opt(T, S, CollectorOpt2);
- {max_events, Max} when is_integer(Max), Max > 0->
- parse_opt(T, S#state{max_events = Max}, CollectorOpt);
- {max_events, Max} when Max =:= infinity ->
- parse_opt(T, S#state{max_events = Max}, CollectorOpt);
- {max_actors, Max} when is_integer(Max), Max >= 0->
- parse_opt(T, S#state{max_actors = Max}, CollectorOpt);
- {max_actors, Max} when Max =:= infinity ->
- parse_opt(T, S#state{max_actors = Max}, CollectorOpt);
- {actors, ActorNames} when is_list(ActorNames) ->
- ActorNames2 =
- case lists:member(?unknown, ActorNames) of
- false -> [?unknown | ActorNames];
- true -> ActorNames
- end,
- Actors = [create_actor(Name) || Name <- ActorNames2],
- parse_opt(T, S#state{actors = Actors}, CollectorOpt);
- {first_event, First} ->
- parse_opt(T, S#state{first_event = First}, CollectorOpt);
- {hide_unknown, Bool} when Bool =:= false ->
- parse_opt(T, S#state{hide_unknown = Bool}, CollectorOpt);
- {hide_unknown, Bool} when Bool =:= true ->
- parse_opt(T, S#state{hide_unknown = Bool}, CollectorOpt);
- {hide_actions, Bool} when Bool =:= false ->
- parse_opt(T, S#state{hide_actions = Bool}, CollectorOpt);
- {hide_actions, Bool} when Bool =:= true ->
- parse_opt(T, S#state{hide_actions = Bool}, CollectorOpt);
- {display_mode, Mode = all} ->
- parse_opt(T, S#state{display_mode = Mode}, CollectorOpt);
- {display_mode, Mode = {search_actors, Dir, _Key, Actors}} when is_list(Actors), Dir =:= forward ->
- parse_opt(T, S#state{display_mode = Mode}, CollectorOpt);
- {display_mode, Mode = {search_actors, Dir, _Key, Actors}} when is_list(Actors), Dir =:= reverse ->
- parse_opt(T, S#state{display_mode = Mode}, CollectorOpt);
-
- Bad ->
- {error, {bad_option, Bad}}
- end;
-parse_opt(BadList, _S, _CollectorOpt) ->
- {error, {bad_option_list, BadList}}.
-
-do_dict_insert({filter, Name}, Fun, S) when is_atom(Name), is_function(Fun) ->
- F = #filter{name = Name, function = Fun},
- Filters = lists:keydelete(Name, #filter.name, S#state.filters),
- Filters2 = lists:keysort(#filter.name, [F | Filters]),
- gs:destroy(filter_menu),
- create_filter_menu(S#state.active_filter, Filters2),
- S#state{filters = Filters2};
-do_dict_insert(_Key, _Val, S) ->
- %% ok = error_logger:format("~p(~p): handle_info({et, {dict_insert, ~p, ~p}})~n",
- %% [?MODULE, self(), Key, Val]),
- S.
-
-do_dict_delete({filter, Name}, S) when is_atom(Name), Name =/= S#state.active_filter ->
- Filters = lists:keydelete(Name, #filter.name, S#state.filters),
- gs:destroy(filter_menu),
- create_filter_menu(S#state.active_filter, Filters),
- S#state{filters = Filters};
-do_dict_delete(_Key, S) ->
- %% ok = error_logger:format("~p(~p): handle_info({et, {dict_delete, ~p}})~n",
- %% [?MODULE, self(), Key]),
- S.
-
-%%%----------------------------------------------------------------------
-%%% Callback functions from gen_server
-%%%----------------------------------------------------------------------
-
-%%----------------------------------------------------------------------
-%% Func: init/1
-%% Returns: {ok, State} |
-%% {ok, State, Timeout} |
-%% ignore |
-%% {stop, Reason}
-%%----------------------------------------------------------------------
-
-init([S]) when is_record(S, state) ->
- process_flag(trap_exit, true),
- InitialTimeout = 0,
- case S#state.parent_pid of
- undefined ->
- ignore;
- Pid when is_pid(Pid) ->
- link(Pid)
- end,
- et_collector:dict_insert(S#state.collector_pid,
- {subscriber, self()},
- ?MODULE),
- {ok, create_main_window(S), InitialTimeout}.
-
-%%----------------------------------------------------------------------
-%% Func: handle_call/3
-%% Returns: {reply, Reply, State} |
-%% {reply, Reply, State, Timeout} |
-%% {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, Reply, State} | (terminate/2 is called)
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_call(get_collector_pid, _From, S) ->
- Reply = S#state.collector_pid,
- reply(Reply, S);
-handle_call(stop, _From, S) ->
- gs:destroy(S#state.win),
- {stop, shutdown, ok, S};
-handle_call(Request, From, S) ->
- ok = error_logger:format("~p(~p): handle_call(~p, ~p, ~p)~n",
- [?MODULE, self(), Request, From, S]),
- Reply = {error, {bad_request, Request}},
- reply(Reply, S).
-
-%%----------------------------------------------------------------------
-%% Func: handle_cast/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_cast(Msg, S) ->
- ok = error_logger:format("~p(~p): handle_cast(~p, ~p)~n",
- [?MODULE, self(), Msg, S]),
- noreply(S).
-
-%%----------------------------------------------------------------------
-%% Func: handle_info/2
-%% Returns: {noreply, State} |
-%% {noreply, State, Timeout} |
-%% {stop, Reason, State} (terminate/2 is called)
-%%----------------------------------------------------------------------
-
-handle_info({et, {more_events, _Size}}, S) ->
- noreply(S);
-handle_info({et, {insert_actors, ActorNames}}, S) when is_list(ActorNames) ->
- Fun = fun(N, Actors) ->
- case lists:keymember(N, #actor.name, Actors) of
- true -> Actors;
- false -> Actors ++ [create_actor(N)]
- end
- end,
- Actors = lists:foldl(Fun, S#state.actors, ActorNames),
- S2 = refresh_main_window(S#state{actors = Actors}),
- noreply(S2);
-handle_info({et, {delete_actors, ActorNames}}, S) when is_list(ActorNames)->
- Fun = fun(N, Actors) when N =:= ?unknown ->
- Actors;
- (N, Actors) ->
- lists:keydelete(N, #actor.name, Actors)
- end,
- New = lists:foldl(Fun, S#state.actors, ActorNames),
- S2 = refresh_main_window(S#state{actors = New}),
- noreply(S2);
-handle_info({et, {dict_insert, Key, Val}}, S) ->
- S2 = do_dict_insert(Key, Val, S),
- noreply(S2);
-handle_info({et, {dict_delete, Key}}, S) ->
- S2 = do_dict_delete(Key, S),
- noreply(S2);
-handle_info({et, first}, S) ->
- S2 = scroll_first(S),
- noreply(S2);
-handle_info({et, prev}, S) ->
- S2 = scroll_prev(S),
- noreply(S2);
-handle_info({et, next}, S) ->
- S2 = scroll_next(S),
- noreply(S2);
-handle_info({et, last}, S) ->
- S2 = scroll_last(S),
- noreply(S2);
-handle_info({et, refresh}, S) ->
- S2 = refresh_main_window(S),
- noreply(S2);
-handle_info({et, {display_mode, Mode}}, S) ->
- S2 = change_display_mode(Mode, S),
- noreply(S2);
-handle_info({et, close}, S) ->
- gs:destroy(S#state.win),
- {stop, shutdown, S};
-handle_info({gs, Button, click, Data, Other} = Click, S) ->
- CollectorPid = S#state.collector_pid,
- case Button of
- close ->
- gs:destroy(S#state.win),
- {stop, shutdown, S};
- suspended ->
- case Other of
- [_Text, _Group, Bool | _] when Bool =:= true ->
- S2 = do_suspend(S),
- noreply(S2);
- [_Text, _Group, Bool | _] when Bool =:= false ->
- S2 = do_resume(S),
- noreply(S2);
- _ ->
- click_error(Click, S),
- noreply(S)
- end;
- hide_actions ->
- case Other of
- [_Text, _Group, Bool | _] when Bool =:= true ->
- S2 = refresh_main_window(S#state{hide_actions = Bool}),
- noreply(S2);
- [_Text, _Group, Bool | _] when Bool =:= false ->
- S2 = refresh_main_window(S#state{hide_actions = Bool}),
- noreply(S2);
- _ ->
- click_error(Click, S),
- noreply(S)
- end;
- hide_unknown ->
- case Other of
- [_Text, _Group, Bool | _] when Bool =:= true ->
- S2 = refresh_main_window(S#state{hide_unknown = Bool}),
- noreply(S2);
- [_Text, _Group, Bool | _] when Bool =:= false ->
- S2 = refresh_main_window(S#state{hide_unknown = Bool}),
- noreply(S2);
- _ ->
- click_error(Click, S),
- noreply(S)
- end;
- up ->
- S2 = scroll_up(S),
- noreply(S2);
- down ->
- S2 = scroll_down(S),
- noreply(S2);
- first ->
- S2 = scroll_first(S),
- noreply(S2);
- prev ->
- S2 = scroll_prev(S),
- noreply(S2);
- next ->
- S2 = scroll_next(S),
- noreply(S2);
- last ->
- S2 = scroll_last(S),
- noreply(S2);
- refresh ->
- S2 = refresh_main_window(S),
- noreply(S2);
- {display_mode, Mode} ->
- S2 = change_display_mode(Mode, S),
- noreply(S2);
- close_all ->
- close_all(S);
- close_all_others ->
- close_all_others(S);
- first_all ->
- et_collector:multicast(CollectorPid, first),
- noreply(S);
- prev_all ->
- et_collector:multicast(CollectorPid, prev),
- noreply(S);
- next_all ->
- et_collector:multicast(CollectorPid, next),
- noreply(S);
- last_all ->
- et_collector:multicast(CollectorPid, last),
- noreply(S);
- refresh_all ->
- et_collector:multicast(CollectorPid, refresh),
- noreply(S);
- clear_all ->
- et_collector:clear_table(CollectorPid),
- et_collector:multicast(CollectorPid, refresh),
- noreply(S);
- load_all ->
- et_collector:start_trace_client(CollectorPid, event_file, "et_viewer.log"),
- noreply(S);
- save_all ->
- et_collector:save_event_file(CollectorPid,
- "et_viewer.log",
- [existing, write, keep]),
- noreply(S);
- {open_viewer, Scale} ->
- Actors = [A#actor.name || A <- S#state.actors],
- open_viewer(Scale, S#state.active_filter, Actors, S),
- noreply(S);
- _Level when Data =:= detail_level, is_integer(hd(Other)),
- hd(Other) >= ?detail_level_min,
- hd(Other) =< ?detail_level_max ->
- S2 = S#state{detail_level = hd(Other)},
- noreply(S2);
- _PopupMenuItem when is_record(Data, filter) ->
- open_viewer(S#state.scale, Data#filter.name, [?unknown], S),
- noreply(S);
- _ ->
- click_error(Click, S),
- noreply(S)
- end;
-handle_info({gs, _Obj, destroy,_, _}, S) ->
- gs:destroy(S#state.win),
- {stop, shutdown, S};
-handle_info({gs, _Obj, buttonpress, _, [_Button, X, Y | _]}, S) ->
- S3 =
- case y_to_n(Y, S) of
- actor ->
- %% Actor click
- case S#state.actors of
- [] ->
- S;
- _ ->
- N = x_to_n(X, S),
- A = lists:nth(N, S#state.actors),
- S#state{selected_actor = A}
- end;
- {event, N} ->
- %% Event click
- List = queue_to_list(S#state.events),
- S2 = S#state{events = list_to_queue(List)},
-
- Key = lists:nth(N, List),
- Pid = S#state.collector_pid,
- Fun = fun create_contents_window/2,
- case et_collector:iterate(Pid, Key, -1) of
- Prev when Prev =:= Key ->
- et_collector:iterate(Pid, first, 1, Fun, S2);
- Prev ->
- et_collector:iterate(Pid, Prev, 1, Fun, S2)
- end
- end,
- noreply(S3);
-handle_info({gs, _Obj, buttonrelease, _, [_Button, X, Y | _]}, S) ->
- S2 =
- case y_to_n(Y, S) of
- actor ->
- %% Actor click
- case S#state.actors of
- [] ->
- S;
- Actors ->
- N = x_to_n(X, S),
- New = lists:nth(N, S#state.actors),
- Old = S#state.selected_actor,
- case New#actor.name =:= Old#actor.name of
- true ->
- A = S#state.selected_actor,
- toggle_search_for_actor(A#actor.name, S);
- false ->
- move_actor(Old, New, Actors, S)
- end
- end;
- {event, _N} ->
- %% Event click ignored
- S
- end,
- noreply(S2);
-handle_info({gs, _Obj, keypress, _, [KeySym, _Keycode, _Shift, _Control | _]} = Key, S) ->
- case KeySym of
- 'c' ->
- close_all_others(S);
- 'C' ->
- close_all(S);
- 'Up' ->
- S2 = scroll_up(S),
- noreply(S2);
- 'Down' ->
- S2 = scroll_down(S),
- noreply(S2);
- 'f' ->
- S2 = scroll_first(S),
- noreply(S2);
- 'p' ->
- S2 = scroll_prev(S),
- noreply(S2);
- 'Prior' ->
- S2 = scroll_prev(S),
- noreply(S2);
- 'n' ->
- S2 = scroll_next(S),
- noreply(S2);
- 'Next' ->
- S2 = scroll_next(S),
- noreply(S2);
- 'l' ->
- S2 = scroll_last(S),
- noreply(S2);
- 'r' ->
- S2 = refresh_main_window(S),
- noreply(S2);
- 'F' ->
- et_collector:multicast(S#state.collector_pid, first),
- noreply(S);
- 'P' ->
- et_collector:multicast(S#state.collector_pid, prev),
- noreply(S);
- 'N' ->
- et_collector:multicast(S#state.collector_pid, next),
- noreply(S);
- 'L' ->
- et_collector:multicast(S#state.collector_pid, last),
- noreply(S);
- 'R' ->
- et_collector:multicast(S#state.collector_pid, refresh),
- noreply(S);
-
- 'a' ->
- S2 = S#state{display_mode = all},
- S3 = refresh_main_window(S2),
- noreply(S3);
-
- 'equal' ->
- Scale = S#state.scale,
- Actors = [A#actor.name || A <- S#state.actors],
- open_viewer(Scale, S#state.active_filter, Actors, S),
- noreply(S);
- 'plus' ->
- Scale = S#state.scale + 1,
- Actors = [A#actor.name || A <- S#state.actors],
- open_viewer(Scale, S#state.active_filter, Actors, S),
- noreply(S);
- 'minus' ->
- case S#state.scale of
- 1 ->
- gs:config(S#state.canvas, beep);
- Scale ->
- Actors = [A#actor.name || A <- S#state.actors],
- open_viewer(Scale - 1, S#state.active_filter, Actors, S)
- end,
- noreply(S);
- 0 ->
- case lists:keysearch(?DEFAULT_FILTER_NAME, #filter.name, S#state.filters) of
- {value, F} when is_record(F, filter) ->
- open_viewer(S#state.scale, F#filter.name, [?unknown], S);
- false ->
- gs:config(S#state.canvas, beep)
- end,
- noreply(S);
- Int when is_integer(Int), Int > 0, Int =< 9 ->
- case catch lists:nth(Int, S#state.filters) of
- F when is_record(F, filter) ->
- open_viewer(S#state.scale, F#filter.name, [?unknown], S);
- {'EXIT', _} ->
- gs:config(S#state.canvas, beep)
- end,
- noreply(S);
-
- 'Shift_L' ->
- noreply(S);
- 'Shift_R' ->
- noreply(S);
- 'Caps_Lock' ->
- noreply(S);
-
- _ ->
- click_error(Key, S),
- noreply(S)
- end;
-handle_info({gs, _Obj,configure, [], [W, H | _]}, S) ->
- gs:config(S#state.packer, [{width, W}, {height, H}]),
- S2 = S#state{width = W, height = H},
- noreply(S2);
-handle_info(timeout, S) ->
- Try =
- case S#state.display_mode of
- {search_actors, reverse, _, _} ->
- -10;
- _ ->
- 10
- end,
- if
- S#state.is_suspended =:= true ->
- {noreply, S, infinity};
- S#state.max_events =:= infinity ->
- display_more_events(Try, S);
- true ->
- Needed = S#state.max_events - queue_length(S#state.events),
- if
- Needed =< 0 -> {noreply, S, infinity};
- Needed > 10 -> display_more_events(Try, S);
- Needed =< 10 -> display_more_events(Needed, S)
- end
- end;
-
-handle_info({'EXIT', Pid, Reason}, S) ->
- if
- Pid =:= S#state.collector_pid ->
- unlink(Pid),
- gs:destroy(S#state.win),
- {stop, Reason, S};
- Pid =:= S#state.parent_pid ->
- unlink(Pid),
- gs:destroy(S#state.win),
- {stop, Reason, S};
- true ->
- noreply(S)
- end;
-handle_info(Info, S) ->
- ok = error_logger:format("~p(~p): handle_info(~p, ~p)~n",
- [?MODULE, self(), Info, S]),
- noreply(S).
-
-%%----------------------------------------------------------------------
-%% Func: terminate/2
-%% Purpose: Shutdown the server
-%% Returns: any (ignored by gen_server)
-%%----------------------------------------------------------------------
-
-terminate(_Reason, _S) ->
- ignore.
-
-%%----------------------------------------------------------------------
-%% Func: code_change/3
-%% Purpose: Convert process state when code is changed
-%% Returns: {ok, NewState}
-%%----------------------------------------------------------------------
-
-code_change(_OldVsn, S, _Extra) ->
- {ok, S}.
-
-%%%----------------------------------------------------------------------
-%%% Handle suspend/resume
-%%%----------------------------------------------------------------------
-
-reply(Reply, S) ->
- case queue_length(S#state.events) of
- _ when S#state.is_suspended =:= true ->
- {reply, Reply, S, infinity};
- _ when S#state.max_events =:= infinity ->
- {reply, Reply, S, 500};
- N when N >= S#state.max_events ->
- {reply, Reply, S, infinity};
- _ ->
- {reply, Reply, S, 0}
- end.
-
-noreply(S) ->
- case queue_length(S#state.events) of
- _ when S#state.is_suspended =:= true ->
- {noreply, S, infinity};
- _ when S#state.max_events =:= infinity ->
- {noreply, S, 500};
- N when N >= S#state.max_events ->
- {noreply, S, infinity};
- _ ->
- {noreply, S, 0}
- end.
-
-do_suspend(S) ->
- config_suspend(S#state{is_suspended = true}).
-
-do_resume(S) ->
- config_suspend(S#state{is_suspended = false}).
-
-config_suspend(S) ->
- Suspended = S#state.is_suspended,
- gs:config(refresh, [{enable, not Suspended}]),
- gs:config(refresh_all, [{enable, not Suspended}]),
- gs:config(clear_all, [{enable, not Suspended}]),
- S.
-
-refresh_main_window(S) ->
- Pid = S#state.collector_pid,
- Key = S#state.first_event,
- case et_collector:iterate(Pid, Key, -1) of
- Prev when Prev =:= Key ->
- scroll_first(S);
- _Prev ->
- S2 = S#state{last_event = S#state.first_event},
- clear_canvas(S2)
- end.
-
-scroll_first(S) ->
- S2 = S#state{first_event = first, last_event = first},
- clear_canvas(S2).
-
-scroll_prev(S) ->
- Try =
- case S#state.max_events of
- infinity -> -10;
- Max -> -Max
- end,
- Key = et_collector:iterate(S#state.collector_pid, S#state.first_event, Try),
- S2 = S#state{first_event = Key, last_event = Key},
- clear_canvas(S2).
-
-scroll_next(S) ->
- S2 = S#state{first_event = S#state.last_event},
- clear_canvas(S2).
-
-scroll_up(S) ->
- Key = et_collector:iterate(S#state.collector_pid, S#state.first_event, -5),
- S2 = S#state{first_event = Key, last_event = Key},
- clear_canvas(S2).
-
-scroll_down(S) ->
- Key = et_collector:iterate(S#state.collector_pid, S#state.first_event, 5),
- S2 = S#state{first_event = Key, last_event = Key},
- clear_canvas(S2).
-
-scroll_last(S) ->
- S2 = S#state{first_event = last, last_event = last},
- clear_canvas(S2).
-
-change_display_mode(Mode, S) ->
- case Mode of
- all ->
- S2 = S#state{display_mode = Mode},
- refresh_main_window(S2);
- {search_actors, _Dir, _Key, []} ->
- S2 = S#state{display_mode = all},
- refresh_main_window(S2);
- {search_actors, _Dir, Key, Actors} when is_list(Actors) ->
- Pid = S#state.collector_pid,
- Prev = et_collector:iterate(Pid, Key, -1),
- S2 = S#state{first_event = Prev,
- last_event = Prev,
- display_mode = Mode},
- clear_canvas(S2)
- end.
-
-close_all(S) ->
- et_collector:multicast(S#state.collector_pid, close),
- timer:sleep(timer:seconds(1)),
- spawn(et_collector, stop, [S#state.collector_pid]),
- gs:destroy(S#state.win),
- {stop, shutdown, S}.
-
-close_all_others(S) ->
- Fun =
- fun({{subscriber, Pid}, _}) ->
- if
- Pid =:= self() ->
- ignore;
- true ->
- unlink(Pid),
- Pid ! {et, close}
- end
- end,
- All = et_collector:dict_match(S#state.collector_pid,
- {{subscriber, '_'}, '_'}),
- lists:foreach(Fun, All),
- noreply(S).
-
-click_error(Click, S) ->
- gs:config(S#state.canvas, beep),
- io:format("~p: ignored: ~p~n", [?MODULE, Click]).
-
-%%%----------------------------------------------------------------------
-%%% Clone viewer
-%%%----------------------------------------------------------------------
-
-open_viewer(Scale, FilterName, Actors, S) ->
- Filters = [{dict_insert, {filter, F#filter.name}, F#filter.function}
- || F <- S#state.filters],
- Options =
- [{parent_pid, S#state.parent_pid},
- {title, S#state.title},
- {collector_pid, S#state.collector_pid},
- {is_suspended, S#state.is_suspended},
- {detail_level, S#state.detail_level},
- {active_filter, FilterName},
- {event_order, S#state.event_order},
- {first_event, S#state.first_event},
- {max_events, S#state.max_events},
- {max_actors, S#state.max_actors},
- {hide_actions, S#state.hide_actions},
- {hide_unknown, S#state.hide_unknown},
- {is_suspended, S#state.is_suspended},
- {actors, Actors},
- {scale, Scale},
- {width, S#state.width},
- {height, S#state.height} | Filters],
- case start_link(Options) of
- {ok, ViewerPid} ->
- unlink(ViewerPid),
- ok;
- {error, Reason} ->
- ok = error_logger:format("~p: Failed to start a new window: ~p~n",
- [?MODULE, Reason])
- end.
-
-%%%----------------------------------------------------------------------
-%%% Handle graphics
-%%%----------------------------------------------------------------------
-
-create_main_window(S) ->
- Font = select_font(S#state.scale),
- GS = gs:start(),
- Name = name_to_string(S#state.active_filter),
- Title = case S#state.title of
- undefined -> atom_to_list(?MODULE);
- Explicit -> name_to_string(Explicit)
- end,
- WinOpt = [{title, Title ++ " (filter: " ++ Name ++ ")"},
- {configure, true},
- {width, S#state.width},
- {height, S#state.height}],
- Win = gs:window(GS, WinOpt),
- Bar = gs:menubar(Win, []),
-
- create_file_menu(Bar),
- create_viewer_menu(Bar),
- create_collector_menu(Bar),
- gs:menubutton(filter_button, Bar, [{label, {text, "Filter"}}]),
- create_filter_menu(S#state.active_filter, S#state.filters),
- create_help_menu(Bar),
-
- config_suspend(S),
-
- PackerOpt = [{packer_x, [{fixed, 5}, {fixed, 40}, {fixed, 40},
- {stretch, 1}, {fixed, 5}]},
- {packer_y, [{fixed, 30}, {fixed, 30},
- {stretch, 1}, {fixed, 30}]},
- {x, 0}, {y, 30}],
- Packer = gs:frame(Win, PackerOpt),
- gs:checkbutton(suspended, Packer, [{label,{text,"Freeze"}},
- {x, 10}, {y, 0},
- {width, 120}, {align, w},
- {select, S#state.is_suspended}]),
- gs:checkbutton(hide_actions, Packer, [{label,{text,"Hide From=To"}},
- {x, 10}, {y, 20},
- {width, 120}, {align, w},
- {select, S#state.hide_actions}]),
- gs:checkbutton(hide_unknown, Packer, [{label,{text,"Hide Unknown"}},
- {x, 10}, {y, 40},
- {width, 120}, {align, w},
- {select, S#state.hide_unknown}]),
- gs:scale(Packer, [{text,"Detail Level"},
- {range, {?detail_level_min, ?detail_level_max}},
- {orient, horizontal},
- {x, 150}, {y, 0}, {height, 65}, {width, 200},
- {pos, S#state.detail_level}, {data, detail_level}]),
- CanvasW = calc_canvas_width(S),
- CanvasH = calc_canvas_height(S),
- CanOpt = [{pack_xy, {{2, 4}, 3}}, {vscroll, right}, {hscroll, bottom},
- {scrollregion, {2, 2, CanvasW, CanvasH}}],
- Canvas = gs:canvas(Packer, CanOpt),
- gs:config(Canvas, [{buttonpress, true}, {buttonrelease, true}]),
- gs:config(Packer, [{width, S#state.width}, {height, S#state.height}]),
- gs:config(Win, [{map, true}, {keypress, true}]),
- S2 = S#state{title = Title,
- win = Win, font = Font, packer = Packer,
- canvas_width = CanvasW, canvas_height = CanvasH,
- canvas = Canvas,
- y_pos = ?initial_y * S#state.scale},
- draw_all_actors(S2).
-
-select_font(Scale) when is_integer(Scale) ->
- case Scale of
- 1 -> {courier, 7};
- 2 -> {courier, 10};
- 3 -> {courier, 12};
- 4 -> {courier, 14};
- S -> {courier, S * 4}
- end.
-
-create_file_menu(Bar) ->
- Button = gs:menubutton(Bar, [{label, {text, "File"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(close_all, Menu, [{label, {text, "Close Collector and all Viewers (C) "}}]),
- gs:menuitem(close_all_others, Menu, [{label, {text, "Close other Viewers, but keep Collector (c)"}}]),
- gs:menuitem(close, Menu, [{label, {text, "Close this Viewer, but keep Collector"}}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
-
- gs:menuitem(clear_all, Menu, [{label, {text, "Clear Collector"}}]),
- gs:menuitem(load_all, Menu, [{label, {text, "Load Collector from the file \"et_viewer.log\""}}]),
- gs:menuitem(save_all, Menu, [{label, {text, "Save Collector to the file \"et_viewer.log\""}}]).
-
-create_viewer_menu(Bar) ->
- Button = gs:menubutton(Bar, [{label, {text, "Viewer"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(Menu, [{label, {text, "Scroll this Viewer"}}, {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(first, Menu, [{label, {text, "First (f)"}}]),
- gs:menuitem(prev, Menu, [{label, {text, "Prev (p)"}}]),
- gs:menuitem(next, Menu, [{label, {text, "Next (n)"}}]),
- gs:menuitem(last, Menu, [{label, {text, "Last (l)"}}]),
- gs:menuitem(refresh, Menu, [{label, {text, "Refresh (r)"}}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(up, Menu, [{label, {text, "Up 5 (Up)"}}]),
- gs:menuitem(down, Menu, [{label, {text, "Down 5 (Down)"}}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "Search in this Viewer"}}, {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem({mode, all}, Menu, [{label, {text, "Abort search. Display all (a)"}}]).
-
-create_collector_menu(Bar) ->
- Button = gs:menubutton(Bar, [{label, {text, "Collector"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(Menu, [{label, {text, "Scroll all Viewers"}}, {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(first_all, Menu, [{label, {text, "First (F)"}}]),
- gs:menuitem(prev_all, Menu, [{label, {text, "Prev (P)"}}]),
- gs:menuitem(next_all, Menu, [{label, {text, "Next (N)"}}]),
- gs:menuitem(last_all, Menu, [{label, {text, "Last (L)"}}]),
- gs:menuitem(refresh_all, Menu, [{label, {text, "Refresh (R)"}}]).
-
-create_filter_menu(ActiveFilterName, Filters) ->
- Menu = gs:menu(filter_menu, filter_button, []),
- Item = fun(F, N) when F#filter.name =:= collector ->
- Label = lists:concat([pad_string(F#filter.name, 20), "(0)"]),
- gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]),
- N + 1;
- (F, N) ->
- Label = lists:concat([pad_string(F#filter.name, 20), "(", N, ")"]),
- gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]),
- N + 1
- end,
- gs:menuitem(Menu, [{label, {text, "Same Filter New Scale"}}, {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- {value, Filter} = lists:keysearch(ActiveFilterName, #filter.name, Filters),
- Same = lists:concat([pad_string(ActiveFilterName, 20), "(=)"]),
- Larger = lists:concat([pad_string(ActiveFilterName, 20), "(+)"]),
- Smaller = lists:concat([pad_string(ActiveFilterName, 20), "(-)"]),
- gs:menuitem(Menu, [{label, {text, Same}}, {data, Filter}]),
- gs:menuitem(Menu, [{label, {text, Smaller}}, {data, Filter}]),
- gs:menuitem(Menu, [{label, {text, Larger}}, {data, Filter}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "New Filter Same Scale"}}, {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- lists:foldl(Item, 1, Filters).
-
-create_help_menu(Bar) ->
- Button = gs:menubutton(Bar, [{label, {text, "Help"}}]),
- Menu = gs:menu(Button, []),
- gs:menuitem(Menu, [{label, {text, "Display details of an event"}},
- {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{label, {text, " Single click on the name tag or the arrow (Mouse-1)"}},
- {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "Toggle actor search"}},
- {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{label, {text, " Single click on the name tag (Mouse-1)"}},
- {enable,false}]),
- gs:menuitem(Menu, [{itemtype, separator}]),
- gs:menuitem(Menu, [{label, {text, "Move actor"}},
- {bg, lightblue}, {enable,false}]),
- gs:menuitem(Menu, [{label, {text, " se drag and drop on name tag (Mouse-1)"}},
- {enable,false}]).
-
-clear_canvas(S) ->
- gs:destroy(S#state.canvas),
- CanvasW = calc_canvas_width(S),
- CanvasH = calc_canvas_height(S),
- CanOpt = [{pack_xy, {{2, 4}, 3}}, {vscroll, right}, {hscroll, bottom},
- {scrollregion, {2, 2, CanvasW, CanvasH}}],
- Canvas = gs:canvas(S#state.packer, CanOpt),
- gs:config(S#state.packer, [{width, S#state.width}, {height, S#state.height}]),
- gs:config(Canvas, [{buttonpress, true}, {buttonrelease, true}]),
- S2 = S#state{refresh_needed = false,
- y_pos = ?initial_y * S#state.scale,
- canvas = Canvas,
- canvas_width = CanvasW,
- canvas_height = CanvasH,
- events = queue_new()},
- draw_all_actors(S2).
-
-calc_canvas_width(S) ->
- Min = calc_min_actors(S),
- CanvasW = ((2 * ?initial_x) + (Min * ?incr_x)) * S#state.scale,
- lists:max([CanvasW, S#state.width - (15 * S#state.scale), S#state.canvas_width]).
-
-calc_canvas_height(S) ->
- Min = calc_min_events(S),
- CanvasH = ((2 * ?initial_y) + (Min * ?incr_y)) * S#state.scale,
- lists:max([CanvasH, S#state.height - (4 * 30), S#state.canvas_height]).
-
-calc_min_actors(S) ->
- Max = S#state.max_actors,
- N = length(S#state.actors),
- if
- Max =:= infinity ->
- N * 2;
- Max < N ->
- N;
- true ->
- Max
- end.
-
-calc_min_events(S) ->
- Max = S#state.max_events,
- N = queue_length(S#state.events),
- if
- Max =:= infinity ->
- N * 2;
- Max < N ->
- N;
- true ->
- Max
- end.
-
-display_more_events(Try, S) ->
- Name = S#state.active_filter,
- {value, F} = lists:keysearch(Name, #filter.name, S#state.filters),
- FilterFun = F#filter.function,
- Fun = fun(Event, State) ->
- case catch FilterFun(Event) of
- true ->
- State2 = ensure_key(Event, State),
- opt_display_event(Event, State2);
- {true, Event2} ->
- State2 = ensure_key(Event2, State),
- opt_display_event(Event2, State2);
- false ->
- ensure_key(Event, State);
- Bad ->
- Contents = {bad_filter, Name, Bad, Event},
- Event2 = Event#event{contents = Contents,
- from = bad_filter,
- to = bad_filter},
- State2 = ensure_key(Event2, State),
- opt_display_event(Event2, State2)
- end
- end,
- Pid = S#state.collector_pid,
- S2 = et_collector:iterate(Pid, S#state.last_event, Try, Fun, S),
- case queue_length(S2#state.events) - queue_length(S#state.events) of
- Diff when Diff =:= Try ->
- %% Got as much as requested, look for more
- %% io:format("Done: ~p~n", [{Try, Diff}]),
- {noreply, S2, 0};
- _Diff when S2#state.first_event =:= S#state.first_event,
- S2#state.last_event =:= S#state.last_event ->
- %% Got lesser than requested, wait a while before looking for more
- %% io:format("More: ~p~n", [{Try, Diff}]),
- {noreply, S2, 500};
- _Diff ->
- %% Got lesser than requested, look for more
- %% io:format("More2: ~p~n", [{Try, Diff}]),
- {noreply, S2, 0}
- end.
-
-ensure_key(E, S) when is_record(E, event), is_record(S, state) ->
- Key = et_collector:make_key(S#state.event_order, E),
- case S#state.first_event of
- first ->
- S#state{first_event = Key, last_event = Key};
- last ->
- S#state{first_event = Key, last_event = Key};
- _ ->
- S#state{last_event = Key}
- end.
-
-opt_display_event(E, S) ->
- case S#state.display_mode of
- all ->
- display_event(E, S);
- {search_actors, _Dir, _FirstKey, Actors} ->
- %% Key = S#state.last_event,
- From = select_actor_name(E#event.from, S),
- case lists:member(From, Actors) of
- true ->
- display_event(E, S);
- false ->
- To = select_actor_name(E#event.to, S),
- case lists:member(To, Actors) of
- true ->
- display_event(E, S);
- false ->
- S
- end
- end
- end.
-
-select_actor_name(Name, S) ->
- case lists:keymember(Name, #actor.name, S#state.actors) of
- true -> Name;
- false -> ?unknown
- end.
-
-display_event(E, S) when E#event.detail_level < S#state.detail_level ->
- {FromRefresh, From} = ensure_actor(E#event.from, S),
- {FromName, FromPos, S2} = From,
- {ToRefresh, To} = ensure_actor(E#event.to, S2),
- {ToName, ToPos, S3} = To,
- if
- FromRefresh =/= false, ToRefresh =/= false ->
- Key = S#state.last_event,
- refresh_beep(S),
- S3#state{refresh_needed = true,
- events = queue_in(Key, S3#state.events)};
- FromName =:= ToName ->
- case S#state.hide_actions of
- true ->
- S3;
- false ->
- Label = name_to_string(E#event.label),
- draw_named_arrow(Label, FromName, FromPos, ToName, ToPos, S3)
- end;
- true ->
- Label = name_to_string(E#event.label),
- draw_named_arrow(Label, FromName, FromPos, ToName, ToPos, S3)
- end;
-display_event(_, S) ->
- S.
-
-draw_named_arrow(Label, FromName, FromPos, ToName, ToPos, S) ->
- Key = S#state.last_event,
- case S#state.y_pos + (?incr_y * S#state.scale) of
- _ when S#state.hide_unknown =:= true, FromName =:= ?unknown ->
- S;
- _ when S#state.hide_unknown =:= true, ToName =:= ?unknown ->
- S;
- Y when Y > S#state.canvas_height ->
- refresh_beep(S),
- S#state{refresh_needed = true,
- events = queue_in(Key, S#state.events)};
- Y ->
- S2 = S#state{y_pos = Y, events = queue_in(Key, S#state.events)},
- S3 = draw_arrow(FromPos, ToPos, S2),
- draw_label(Label, FromName, ToName, FromPos, ToPos, S3)
- end.
-
-refresh_beep(S) ->
- case S#state.refresh_needed of
- false ->
- gs:config(S#state.canvas, beep),
- gs:config(S#state.canvas, beep),
- gs:config(S#state.canvas, beep);
- true ->
- ignore
- end.
-
-draw_arrow(Pos, Pos, S) ->
- S;
-draw_arrow(FromPos, ToPos, S) ->
- Y = S#state.y_pos,
- CanOpts = [{coords, [{FromPos , Y}, {ToPos, Y}]},
- {arrow, last},{width, 1}, {fg, black}],
- gs:line(S#state.canvas, CanOpts),
- S.
-
-draw_label(Label, FromName, ToName, FromPos, ToPos, S) ->
- Colour =
- if
- FromName =:= ?unknown,
- ToName =:= ?unknown -> blue; %turquoise;
- FromName =:= ?unknown -> orange;
- ToName =:= ?unknown -> orange;
- FromPos =:= ToPos -> blue;
- true -> red
- end,
- Scale = S#state.scale,
- X = lists:min([FromPos, ToPos]) + (6 * Scale),
- Y = S#state.y_pos,
- write_text(Label, X, Y, Colour, S),
- S.
-
-draw_all_actors(State) ->
- Scale = State#state.scale,
- Fun = fun(A, X) ->
- draw_actor(A, X, State),
- X + (?incr_x * Scale)
- end,
- lists:foldl(Fun, ?initial_x * Scale, State#state.actors),
- State.
-
-%% Returns: {NeedsRefreshBool, {ActorPos, NewsS, NewActors}}
-ensure_actor(Name, S) ->
- do_ensure_actor(Name, S, S#state.actors, 0).
-
-do_ensure_actor(Name, S, [H | _], N) when H#actor.name =:= Name ->
- Pos = (?initial_x + (N * ?incr_x)) * S#state.scale,
- {false, {Name, Pos, S}};
-do_ensure_actor(Name, S, [_ | T], N) ->
- do_ensure_actor(Name, S, T, N + 1);
-do_ensure_actor(Name, S, [], N) ->
- %% A brand new actor, let's see if it does fit
- Pos = (?initial_x + (N * ?incr_x)) * S#state.scale,
- MaxActors = S#state.max_actors,
- if
- is_integer(MaxActors), N > MaxActors ->
- %% Failed on max_actors limit, put into unknown
- %% Assume that unknown always is in actor list
- ensure_actor(?unknown, S);
- Pos > (S#state.canvas_width - ((?initial_x - 15) * S#state.scale)) ->
- %% New actor does not fit in canvas, refresh needed
- A = create_actor(Name),
- draw_actor(A, Pos, S),
- {true, {Name, Pos, S#state{actors = S#state.actors ++ [A]}}};
- true ->
- %% New actor fits in canvas. Draw the new actor.
- A = create_actor(Name),
- draw_actor(A, Pos, S),
- {false, {Name, Pos, S#state{actors = S#state.actors ++ [A]}}}
- end.
-
-draw_actor(A, LineX, S) ->
- Scale = S#state.scale,
- TextX = LineX - (5 * Scale),
- TextY = ?initial_y * Scale,
- LineTopY = TextY + ((?incr_y / 2) * Scale),
- LineBotY = S#state.canvas_height - ((?incr_y / 2) * Scale),
- Colour = case A#actor.name of
- ?unknown -> orange;
- _ -> red
- end,
- write_text(A#actor.string, TextX, TextY, Colour, S),
- LineOpt = [{coords, [{LineX, LineTopY}, {LineX, LineBotY}]},
- {width, 1}, {fg, Colour}],
- gs:line(S#state.canvas, LineOpt).
-
-toggle_search_for_actor(ActorName,S) ->
- case S#state.display_mode of
- all ->
- io:format("~p: search for: ~p ++ ~p~n", [?MODULE, [], [ActorName]]),
- %% Search for this actor
- Key = S#state.first_event,
- Actors = [ActorName],
- Mode = {search_actors, forward, Key, Actors},
- change_display_mode(Mode, S);
- {search_actors, Dir, Key, Actors}->
- Actors2 =
- case lists:member(ActorName, Actors) of
- true ->
- io:format("~p: search for: ~p -- ~p~n", [?MODULE, Actors, [ActorName]]),
- %% Remove actor from search list
- Actors -- [ActorName];
- false ->
- io:format("~p: search for: ~p ++ ~p~n", [?MODULE, Actors, [ActorName]]),
- %% Add actor from search list
- [ActorName | Actors]
- end,
- Mode2 = {search_actors, Dir, Key, Actors2},
- change_display_mode(Mode2, S)
- end.
-
-move_actor(From, To, Actors, S) ->
- Pos = #actor.name,
- ToName = To#actor.name,
- FromName = From#actor.name,
- ToIx = actor_index(ToName, Pos, Actors),
- FromIx = actor_index(FromName, Pos, Actors),
- if
- FromIx =/= 0, ToIx =/= 0, ToIx > FromIx ->
- Actors2 = lists:keydelete(FromName, Pos, Actors),
- Actors3 = insert_actor_after(From, To, Actors2),
- S2 = S#state{actors = Actors3},
- refresh_main_window(S2);
- FromIx =/= 0, ToIx =/= 0 ->
- Actors2 = lists:keydelete(FromName, Pos, Actors),
- Actors3 = insert_actor_before(From, To, Actors2),
- S2 = S#state{actors = Actors3},
- refresh_main_window(S2);
- true ->
- %% Ignore
- S
- end.
-
-insert_actor_after(From, To, [H | T]) ->
- case To#actor.name =:= H#actor.name of
- true -> [H, From | T];
- false -> [H | insert_actor_after(From, To, T)]
- end;
-insert_actor_after(_From, _To, []) ->
- [].
-
-insert_actor_before(From, To, [H | T]) ->
- case To#actor.name =:= H#actor.name of
- true -> [From, H | T];
- false -> [H | insert_actor_before(From, To, T)]
- end;
-insert_actor_before(_From, _To, []) ->
- [].
-
-actor_index(_Key, _Pos, []) ->
- 0;
-actor_index(Key, Pos, [H | T]) ->
- case Key =:= element(Pos, H) of
- false -> actor_index(Key, Pos, T) + 1;
- true -> 1
- end.
-
-y_to_n(Y, S) ->
- Y2 = ((Y / S#state.scale) - ?initial_y + (?incr_y / 2)),
- N = round(Y2 / ?incr_y - 0.2),
- MaxN = queue_length(S#state.events),
- if
- N =< 0 -> actor;
- N > MaxN -> actor;
- true -> {event, N}
- end.
-
-x_to_n(X, S) ->
- Scale = S#state.scale,
- Len = length(S#state.actors),
- X2 = X - (?initial_x * Scale),
- N = X2 / (?incr_x * Scale),
- N2 = trunc(N + 1.5),
- if
- N2 > Len -> Len;
- N2 < 1 -> 1;
- true -> N2
- end.
-
-write_text(Text, X, Y, Colour, S) ->
- Opt = [{coords, [{X, Y - (?incr_y * S#state.scale / 2)}]},
- {font, S#state.font}, {fg, Colour}, {text, Text}],
- gs:text(S#state.canvas, Opt).
-
-create_contents_window(Event, S) ->
- Options = [{viewer_pid, self()},
- {event, Event},
- {event_order, S#state.event_order},
- {active_filter, S#state.active_filter}
- | S#state.filters],
- case et_gs_contents_viewer:start_link(Options) of
- {ok, _Pid} ->
- S;
- {error, Reason} ->
- ok = error_logger:format("~p(~p): create_contents_window(~p) ->~n ~p~n",
- [?MODULE, self(), Options, Reason]),
- S
- end.
-
-%%%----------------------------------------------------------------------
-%%% String padding of actors
-%%%----------------------------------------------------------------------
-
-create_actor(Name) ->
- String = name_to_string(Name),
- PaddedString = pad_string(String, 8),
- #actor{name = Name, string = PaddedString}.
-
-name_to_string(Name) ->
- case catch io_lib:format("~s", [Name]) of
- {'EXIT', _} -> lists:flatten(io_lib:format("~w", [Name]));
- GoodString -> lists:flatten(GoodString)
- end.
-
-pad_string(Atom, MinLen) when is_atom(Atom) ->
- pad_string(atom_to_list(Atom), MinLen);
-pad_string(String, MinLen) when is_integer(MinLen), MinLen >= 0 ->
- Len = length(String),
- case Len >= MinLen of
- true ->
- String;
- false ->
- String ++ lists:duplicate(MinLen - Len, $ )
- end.
-
-%%%----------------------------------------------------------------------
-%%% Queue management
-%%%----------------------------------------------------------------------
-
-queue_new() ->
- {0, [], []}.
-
-queue_in(X, {Size, In, Out}) ->
- {Size + 1, [X | In], Out}.
-
-%% queue_out(Q) ->
-%% case Q of
-%% {Size, In, [H | Out]} -> {{value, H}, {Size - 1, In, Out}};
-%% {Size, [], []} -> {empty, {Size, [], []}};
-%% {Size, In, _} -> queue_out({Size, [], lists:reverse(In)})
-%% end.
-
-queue_to_list({_Size, [], Out}) ->
- Out;
-queue_to_list({_Size, In, Out}) ->
- Out ++ lists:reverse(In).
-
-queue_length({Size, _In, _Out}) ->
- Size.
-
-list_to_queue(List) when is_list(List) ->
- {length(List), [], List}.
diff --git a/lib/et/src/et_viewer.erl b/lib/et/src/et_viewer.erl
index d9bd01f8d0..ead5639da6 100644
--- a/lib/et/src/et_viewer.erl
+++ b/lib/et/src/et_viewer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2000-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2000-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -76,7 +76,7 @@ start() ->
%% start(Options) -> {ok, ViewerPid} | {error, Reason}
%%----------------------------------------------------------------------
-start(GUI) when GUI =:= wx; GUI =:= gs; GUI =:= default ->
+start(GUI) when GUI =:= wx; GUI =:= default ->
start_link([{trace_global, true}], GUI);
start(Options) ->
start_link([{parent_pid, undefined} | Options], default).
@@ -139,7 +139,7 @@ start(Options, GUI) ->
%% and returns false | true | {true, NewEvent}.
%%----------------------------------------------------------------------
-start_link(GUI) when GUI =:= wx; GUI =:= gs; GUI =:= default ->
+start_link(GUI) when GUI =:= wx; GUI =:= default ->
start_link([{trace_global, true}], GUI);
start_link(Options) ->
start_link(Options, default).
@@ -148,22 +148,11 @@ start_link(Options, GUI) ->
case GUI of
wx ->
et_wx_viewer:start_link(Options);
- gs ->
- et_gs_viewer:start_link(Options);
default ->
start_link(Options, which_gui())
end.
-
-which_gui() ->
- try
- wx:new(),
- wx:destroy(),
- wx
- catch _:_ ->
- gs
- end.
-
+which_gui() -> wx.
get_collector_pid(ViewerPid) ->
call(ViewerPid, get_collector_pid).
diff --git a/lib/et/src/modules.mk b/lib/et/src/modules.mk
index 8d6c0902fb..b2d2f0b481 100644
--- a/lib/et/src/modules.mk
+++ b/lib/et/src/modules.mk
@@ -1,7 +1,7 @@
#-*-makefile-*- ; force emacs to enter makefile-mode
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2001-2010. All Rights Reserved.
+# Copyright Ericsson AB 2001-2013. All Rights Reserved.
#
# The contents of this file are subject to the Erlang Public License,
# Version 1.1, (the "License"); you may not use this file except in
@@ -19,8 +19,6 @@
MODULES = \
et \
et_collector \
- et_gs_contents_viewer \
- et_gs_viewer \
et_selector \
et_viewer \
et_wx_contents_viewer \
diff --git a/lib/hipe/tools/Makefile b/lib/hipe/tools/Makefile
index 3ce8ad5dd7..ed80eb075b 100644
--- a/lib/hipe/tools/Makefile
+++ b/lib/hipe/tools/Makefile
@@ -42,7 +42,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/hipe-$(VSN)
# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------
-MODULES = hipe_tool hipe_profile hipe_jit
+MODULES = hipe_profile hipe_jit
# hipe_timer
HRL_FILES=
@@ -110,5 +110,4 @@ realclean: clean
# ----------------------------------------------------
$(EBIN)/hipe_ceach.beam: ../main/hipe.hrl
-$(EBIN)/hipe_tool.beam: ../main/hipe.hrl
diff --git a/lib/hipe/tools/hipe_tool.erl b/lib/hipe/tools/hipe_tool.erl
deleted file mode 100644
index efcf073efa..0000000000
--- a/lib/hipe/tools/hipe_tool.erl
+++ /dev/null
@@ -1,525 +0,0 @@
-%% -*- erlang-indent-level: 2 -*-
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Copyright (c) 2002 by Erik Johansson.
-%% ====================================================================
-%% Module : hipe_tool
-%% Purpose :
-%% Notes :
-%% History : * 2002-03-13 Erik Johansson ([email protected]): Created.
-%% ====================================================================
-%% Exports :
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
--module(hipe_tool).
--compile([{nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,editor,3}},
- {nowarn_deprecated_function,{gs,label,3}},
- {nowarn_deprecated_function,{gs,listbox,3}},
- {nowarn_deprecated_function,{gs,menu,3}},
- {nowarn_deprecated_function,{gs,menubar,3}},
- {nowarn_deprecated_function,{gs,menubutton,3}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
--export([start/0]).
-
-%%---------------------------------------------------------------------
-
--include("../main/hipe.hrl").
-
-%%---------------------------------------------------------------------
-
--define(WINDOW_WIDTH, 920).
--define(WINDOW_HEIGHT, 460).
--define(DEFAULT_BG_COLOR, {217,217,217}).
--define(POLL_INTERVAL, 5000).
--define(FONT, {screen, 12}).
--define(HEADER_FONT, {screen, [bold], 12}).
--define(NORMAL_FG_COLOR, {0,0,0}).
-
-%%---------------------------------------------------------------------
-
--type fa() :: {atom(), arity()}. % {Fun,Arity}
--type fa_address() :: {atom(), arity(), non_neg_integer()}. % {F,A,Address}
-
-%%---------------------------------------------------------------------
-
--record(state, {win_created = false :: boolean(),
- mindex = 0 :: integer(),
- mod :: atom(),
- funs = [] :: [fa()],
- mods = [] :: [atom()],
- options = [o2] :: comp_options(),
- compiling = false :: 'false' | pid()
- }).
-
-%%---------------------------------------------------------------------
-
--spec start() -> pid().
-
-start() ->
- spawn(fun () -> init() end).
-
-init() ->
- process_flag(trap_exit, true),
- gs:start(),
- S = init_window(#state{}),
- loop(S).
-
--spec loop(#state{}) -> no_return().
-
-loop(State) ->
- receive
- {gs, code_listbox, click, Data, [Idx, Txt | _]} ->
- NewState = update_module_box(State,Idx,Data,Txt),
- loop(NewState);
- {gs, module_listbox, click, Data, [Idx, _Txt | _]} ->
- NewState = update_fun(State,Idx,Data),
- loop(NewState);
- {gs, compmod, click, _, _} ->
- loop(compile(State));
- {gs, prof, click, [], ["Turn off\nProfiling"]} ->
- hipe_profile:prof_module_off(State#state.mod),
- loop(update_module_box(State,State#state.mindex,State#state.mods,""));
- {gs, prof, click, [], _} ->
- hipe_profile:prof_module(State#state.mod),
- loop(update_module_box(State,State#state.mindex,State#state.mods,""));
- {gs, win, configure, _, _} ->
- gs:config(win, [{width, ?WINDOW_WIDTH}, {height, ?WINDOW_HEIGHT}]),
- loop(State);
-
- show_window when State#state.win_created =:= true ->
- gs:config(win, [raise]),
- loop(State);
- show_window when State#state.win_created =:= false ->
- loop((init_window(State))#state{win_created = true});
-
- {gs, _Id, click, close_menu, _Args} ->
- gs:destroy(win),
- loop(State#state{win_created = false});
- {gs, _Id, keypress, _Data, [c, _, 0, 1 | _]} ->
- gs:destroy(win),
- loop(State#state{win_created = false});
- {gs, _Id, keypress, _Data, ['C', _, 1, 1 | _]} ->
- gs:destroy(win),
- loop(State#state{win_created = false});
- {gs, _Id, keypress, _Data, _Args} ->
- loop(State);
- {gs, _, destroy, _, _} ->
- loop(State#state{win_created = false});
-
- {compilation_done, _Res, Sender} ->
- case State#state.compiling of
- Sender ->
- catch gs:config(compmod, [{enable, true}]),
- update_text(compiling, ""),
- loop(update_module_box(State,
- State#state.mindex,
- State#state.mods, ""));
- _ ->
- loop(State)
- end;
-
- {'EXIT', _Pid, _Reason} ->
- exit(normal);
- _Other ->
- io:format("HiPE window received message ~p ~n", [_Other]),
- loop(State)
- after
- ?POLL_INTERVAL ->
- loop(update_code_listbox(State))
- end.
-
--spec init_window(#state{}) -> #state{}.
-
-init_window(State) ->
- create_window(State),
- gs:config(win, [{map,true}]),
- update_code_listbox(State#state{win_created = true}).
-
--spec create_window(#state{}) -> 'ok'.
-
-create_window(State) ->
- gs:window(win, gs:start(), [{width, ?WINDOW_WIDTH},
- {height, ?WINDOW_HEIGHT},
- {bg, ?DEFAULT_BG_COLOR},
- {title, "[HiPE] Code list"},
- {configure, true},
- {destroy, true},
- {cursor, arrow},
- {keypress, true}
- ]),
- create_menu(),
- Xpos = 4,
- Ypos1 = 60,
- Width = (?WINDOW_WIDTH - (Xpos*4)) div 3,
- create_labels([{mods,Ypos1-20,"Loaded Modules"}], Xpos + 1 + 3),
- Xpos2 = Xpos*2+Width,
- create_labels([{mod,Ypos1-20,"Module:"++atom_to_list(State#state.mod)},
- {ver,Ypos1,""},
- {time,Ypos1+20,""},
- {native,Ypos1+40,""},
- {compiling,Ypos1+60,""}], Xpos2),
- create_labels([{function,Ypos1-20,"Function:"},
- {nativefun,Ypos1,""}], Xpos*3+Width*2),
- Ypos = 240,
- Height1 = ?WINDOW_HEIGHT - Ypos1 - Xpos,
- Height = ?WINDOW_HEIGHT - Ypos - Xpos,
- gs:listbox(code_listbox, win, [{x, Xpos},
- {y, Ypos1},
- {width, Width},
- {height, Height1},
- {bg, {255,255,255}},
- {vscroll, right},
- {hscroll, true},
- {click, true}]),
- gs:listbox(module_listbox, win, [{x, Xpos*2+Width},
- {y, Ypos},
- {width, Width},
- {height, Height},
- {bg, {255,255,255}},
- {vscroll, right},
- {hscroll, true},
- {click, true}]),
- gs:listbox(profile_listbox, win, [{x, Xpos*3+Width*2},
- {y, Ypos1+40},
- {width, Width},
- {height, Height-60},
- {bg, {255,255,255}},
- {vscroll, right},
- {hscroll, true},
- {click, true}]),
- gs:button(compmod,win,[{label,{text,"Compile\nModule"}},
- {justify,center},
- {x,Xpos*2+Width*1},
- {height,60},
- {y,Ypos-80}]),
- gs:button(prof,win,[{label,{text,"Profile\nModule"}},
- {justify,center},
- {x,Xpos*2+Width*1+100},
- {height,60},
- {y,Ypos-80}]),
- gs:button(clearprof,win,[{label, {text,"Clear\nProfile"}},
- {justify, center},
- {x, Xpos*2+Width*1+200},
- {height, 60},
- {y, Ypos-80}]),
- gs:editor(edoc,win,[{x, Xpos*3+Width*2}, {y, Ypos},
- {width, Width}, {height, Height},
- {insert, {'end',"Edit this text!"}},
- {vscroll, right},
- {hscroll, true},
- {wrap, none}]),
- ok.
-
--spec create_menu() -> 'ok'.
-
-create_menu() ->
- gs:menubar(menubar, win, [{bg, ?DEFAULT_BG_COLOR}]),
- create_sub_menus([{mbutt, fmenu, " File",
- [{" Close Ctrl-C ",close_menu}]},
- {mbuttc,cmenu, " Compile ",
- [{" Compile Module", comp_mod}]},
- {mbuttp,pmenu, " Profile ",
- [{" Profile Module", prof_mod}]},
- {mbutte,emenu, " Edoc", [separator]},
- {mbutta,amenu, " Analyze ", [separator]},
- {mbuttb,bmenu, " Benchmark ", [separator]},
- {mbuttj,jmenu, " Jit ", [separator]}]),
- ok.
-
-create_menuitems(Parent, [{Text,Data}|Rest]) ->
- gs:menuitem(Parent, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}},
- {label, {text, Text}},
- {data, Data},
- {underline, 1}
- ]),
- create_menuitems(Parent, Rest);
-create_menuitems(Parent, [separator|Rest]) ->
- gs:menuitem(Parent, [{itemtype, separator}]),
- create_menuitems(Parent, Rest);
-create_menuitems(_, []) -> ok.
-
-create_sub_menus([{Parent, Name, Text, Items}|Rest]) ->
- BG = {bg, ?DEFAULT_BG_COLOR},
- FG = {fg, {178, 34, 34}}, % firebrick
- Label = {label, {text, Text}},
- gs:menubutton(Parent, menubar, [BG, FG, Label, {underline, 1}]),
- gs:menu(Name, Parent, [BG, FG]),
- create_menuitems(Name, Items),
- create_sub_menus(Rest);
-create_sub_menus([]) -> ok.
-
-create_labels([{Name,Y,Text}|Rest], Xpos) ->
- gs:label(Name, win, [{width, (?WINDOW_WIDTH - 16) div 3},
- {height, 20},
- {x, Xpos + 1 + 3},
- {y, Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, ?NORMAL_FG_COLOR},
- {font, ?HEADER_FONT},
- {align, w},
- {label, {text, Text}}
- ]),
- create_labels(Rest,Xpos);
-create_labels([],_) -> ok.
-
--spec update_code_listbox(#state{}) -> #state{}.
-
-update_code_listbox(State) ->
- Mods = lists:sort(mods()),
- case State#state.win_created of
- false ->
- State;
- true ->
- case Mods =:= State#state.mods of
- true -> State;
- false ->
- update_text(mods,
- "Loaded Modules ("++
- integer_to_list(length(Mods))++")"),
- catch gs:config(code_listbox, [{data, Mods},
- {items, Mods},
- {selection, 0}]),
- update_module_box(State#state{mods = Mods}, 0, Mods, "")
- end
- end.
-
--spec update_fun(#state{}, integer(), [mfa()]) -> #state{}.
-
-update_fun(State, Idx, Data) ->
- case State#state.win_created of
- false ->
- State;
- true ->
- MFA = {M,F,A} = get_selection(Idx, Data, {?MODULE,start,0}),
- update_text(function, "Function: "++mfa_to_string(MFA)),
- case in_native(F, A, native_code(M)) of
- true -> update_text(nativefun, "Native");
- false -> update_text(nativefun, "Emulated")
- end,
- State
- end.
-
-get_selection(Idx, Data, Default) ->
- try lists:nth(Idx+1, Data) catch _:_ -> Default end.
-
--spec update_module_box(#state{}, integer(), [atom()], string()) -> #state{}.
-
-update_module_box(State, Idx, Data, _Txt) ->
- case State#state.win_created of
- false ->
- State;
- true ->
- Mod = get_selection(Idx, Data, hipe_tool),
- %% io:format("~w\n", [Mod:module_info()]),
- Info = Mod:module_info(),
- Funs = lists:usort(funs(Mod)),
- MFAs = mfas(Mod, Funs),
- ModText = atom_to_list(Mod),
- update_text(mod, "Module:"++ModText),
- update_text(compmod, "Compile\nModule\n"++ModText),
- Options = get_compile(Info),
- update_text(ver, get_version(Options)),
- update_text(time, get_time(Options)),
- NativeCode = native_code(Mod),
-
- Prof = is_profiled(Mod),
- if Prof -> update_text(prof, "Turn off\nProfiling");
- true -> update_text(prof, "Profile\n"++ModText)
- end,
-
- Mode = get_mode(Funs, NativeCode),
-
- update_text(native, Mode),
- Items = fun_names(Mod, Funs, NativeCode, Prof),
-
- Selection = {selection, 0},
- catch gs:config(module_listbox, [{data, MFAs},
- {items, Items},
- Selection]),
- ProfData = [mfa_to_string(element(1, X)) ++ " " ++
- integer_to_list(element(2,X))
- || X <- hipe_profile:res(), element(2, X) > 0],
- catch gs:config(profile_listbox, [{data, ProfData},
- {items, ProfData},
- Selection]),
- get_edoc(Mod),
- update_fun(State#state{mindex = Idx, mod = Mod, funs = Funs}, 0, MFAs)
- end.
-
-update_text(Lab, Text) ->
- catch gs:config(Lab, [{label, {text, Text}}]).
-
-%%---------------------------------------------------------------------
-%% @doc Returns a list of all loaded modules.
-%%---------------------------------------------------------------------
-
--spec mods() -> [atom()].
-
-mods() ->
- [Mod || {Mod,_File} <- code:all_loaded()].
-
--spec funs(module()) -> [fa()].
-
-funs(Mod) ->
- Mod:module_info(functions).
-
--spec native_code(module()) -> [fa_address()].
-
-native_code(Mod) ->
- Mod:module_info(native_addresses).
-
--spec mfas(atom(), [fa()]) -> [mfa()].
-
-mfas(Mod, Funs) ->
- [{Mod,F,A} || {F,A} <- Funs].
-
--spec fun_names(atom(), [fa()], [fa_address()], boolean()) -> [string()].
-
-fun_names(M, Funs, NativeCode, Prof) ->
- [atom_to_list(F) ++ "/" ++ integer_to_list(A)
- ++
- (case in_native(F, A, NativeCode) of
- true -> " [native] ";
- false -> ""
- end)
- ++
- if Prof ->
- (catch integer_to_list(hipe_bifs:call_count_get({M,F,A})));
- true -> ""
- end
- || {F,A} <- Funs].
-
--spec in_native(atom(), arity(), [fa_address()]) -> boolean().
-
-in_native(F, A, NativeCode) ->
- lists:any(fun({Fun,Arity,_}) ->
- (Fun =:= F andalso Arity =:= A)
- end,
- NativeCode).
-
--spec mfa_to_string(mfa()) -> [char(),...].
-
-mfa_to_string({M,F,A}) ->
- atom_to_list(M) ++ ":" ++ atom_to_list(F) ++ "/" ++ integer_to_list(A).
-
-get_mode(Funs, NativeCode) ->
- case NativeCode of
- [] -> "Emulated";
- InNative when is_list(InNative) ->
- if length(InNative) =:= length(Funs) ->
- "Native";
- true -> "Mixed"
- end
- end.
-
-get_time(Comp) ->
- case lists:keyfind(time, 1, Comp) of
- {_, {Y,Month,D,H,Min,S}} ->
- integer_to_list(Y) ++
- "-" ++ integer_to_list(Month) ++
- "-" ++ integer_to_list(D) ++ " " ++
- integer_to_list(H) ++ ":" ++ integer_to_list(Min) ++
- ":" ++ integer_to_list(S);
- false -> ""
- end.
-
-get_version(Comp) ->
- case lists:keyfind(version, 1, Comp) of
- {_, V} when is_list(V) -> V;
- false -> ""
- end.
-
-get_cwd(Options) ->
- case lists:keyfind(cwd, 1, Options) of
- {_, V} when is_atom(V) -> atom_to_list(V);
- {_, V} -> V;
- false -> ""
- end.
-
-get_options(Comp) ->
- case lists:keyfind(options, 1, Comp) of
- {_, V} when is_list(V) -> V;
- false -> ""
- end.
-
-get_compile(Info) ->
- case lists:keyfind(compile, 1, Info) of
- {_, O} when is_list(O) -> O;
- false -> []
- end.
-
--spec is_profiled(atom()) -> boolean().
-
-is_profiled(Mod) ->
- case hipe_bifs:call_count_get({Mod,module_info,0}) of
- false -> false;
- C when is_integer(C) -> true
- end.
-
--spec compile(#state{}) -> #state{}.
-
-compile(State) ->
- catch gs:config(compmod, [{enable, false}]),
- update_text(compiling, "Compiling..."),
- Parent = self(),
- P = spawn(fun() -> c(Parent, State#state.mod, State#state.options) end),
- State#state{compiling = P}.
-
--spec c(pid(), atom(), comp_options()) -> 'ok'.
-
-c(Parent, Mod, Options) ->
- Res = hipe:c(Mod, Options),
- Parent ! {compilation_done,Res,self()},
- ok.
-
-get_edoc(Mod) ->
- Info = Mod:module_info(),
- Comp = get_compile(Info),
- Options = get_options(Comp),
- Dir = get_cwd(Options),
- File =
- case Dir of
- "" -> atom_to_list(Mod) ++ ".erl";
- _ -> Dir ++"/" ++ atom_to_list(Mod) ++ ".erl"
- end,
- %% io:format("Get ~s\n", [File]),
- Text = try edoc(File, [{xml_export,xmerl_text}, no_output])
- catch _:_ -> "error"
- end,
- gs:config(edoc, {enable, true}),
- gs:config(edoc, clear),
- gs:config(edoc, {insert, {insert, Text}}),
- gs:config(edoc, {enable, false}),
- ok.
-
-edoc(Name, Opts) ->
- Doc = edoc:get_doc(Name, Opts),
- %% Comments = edoc:read_comments(Name, Opts),
- %% Text = edoc:forms(Forms, Comments, Name, Opts),
- edoc:layout(Doc, Opts),
- ok.
diff --git a/lib/inets/doc/src/httpc.xml b/lib/inets/doc/src/httpc.xml
index 357a62381d..37eb7ba718 100644
--- a/lib/inets/doc/src/httpc.xml
+++ b/lib/inets/doc/src/httpc.xml
@@ -387,7 +387,7 @@ Receiver(ReplyInfo)
</pre>
</item>
- <tag><c><![CDATA[{Module, Funcion, Args}]]></c></tag>
+ <tag><c><![CDATA[{Module, Function, Args}]]></c></tag>
<item>
<p>Information will be delivered to the receiver via calls
to the callback function: </p>
diff --git a/lib/megaco/doc/src/definitions/term.defs b/lib/megaco/doc/src/definitions/term.defs
index 57379eaa5d..16212923ea 100644
--- a/lib/megaco/doc/src/definitions/term.defs
+++ b/lib/megaco/doc/src/definitions/term.defs
@@ -1,7 +1,6 @@
[{"agent","agent","An entity that terminates a management protocol in the Network Element.","mbj"},
{"API","API","Application Programming Interface. The interface towards an application. Usually this is a set of functions available, but can also be a set of messages sent to or from an application.","mbj"},
{"application","application","A collection of resources which is required to offer a specific service.","mbj"},
-{"appmon","Application Monitor","A graphical node and application process tree viewer. See also appmon.","mbj"},
{"Appmon","Appmon","Application name for the Application Monitor within Erlang/OTP. A graphical node and process viewer.","mbj"},
{"app callback","application callback module","A module which is called when the application is started, and when it has stopped. Every application has one application callback module.","mbj"},
{"AC","application controller","A process which coordinates all operations on applications.","mbj"},
@@ -136,7 +135,6 @@ the module Erlang in the application kernel","kenneth"},
{"pattern matching","pattern matching","A basic mechanism in Erlang for assigning values to variables and for controlling the flow of a program.","kenneth"},
{"permanent child","permanent child","A supervised process which always is restarted when it dies.","mbj"},
{"Pid","Pid","Process Identifier. A data type in Erlang for storing process references. The process identity of the process displayed in the line.","kenneth"},
-{"Pman","Pman","Module and application name for the Process Trace Tool.","olin"},
{"point","point","A unit used to indicate the size of a typeface. Equal to 1/72 inches.","jocke"},
{"pointer","pointer","A pointer tells where data is stored. Memory pointers are not used in Erlang.","kent"},
{"port","port","A data type in Erlang. Ports provide the basic mechanism for communication with the external world.","peterl"},
@@ -198,7 +196,6 @@ the module Erlang in the application kernel","kenneth"},
{"Table Visualizer","Table Visualizer","A tool which enables the user to examine ETS and Mnesia tables.","olin"},
{"temporary child","temporary child","A supervised process which is never restarted when it dies.","mbj"},
{"term","term","The super type of all Erlang types.","kenneth"},
-{"Toolbar","Toolbar","A tool that provides an simplistic interface to the other various Erlang/OTP tools","olin"},
{"tools","tools","An application within Erlang/OTP which contains the tools which are not applications themselves.","olin"},
{"transaction","transaction","Transactions groups a set of database accesses into an atomic unit. All transactions has the ACID (atomicity, concistency, isolation and durability) properties.","hakan"},
{"transient child","transient child","A supervised process which is restarted if it dies non-normally.","mbj"},
diff --git a/lib/observer/doc/src/Makefile b/lib/observer/doc/src/Makefile
index 0f564d3299..b43aeccd73 100644
--- a/lib/observer/doc/src/Makefile
+++ b/lib/observer/doc/src/Makefile
@@ -68,10 +68,6 @@ ONLY_HTML_FILE = \
GIF_FILES = \
et_processes.gif \
et_modsprocs.gif \
- etop_main.gif \
- etop_5.gif \
- etop_lines.gif \
- etop_opt.gif \
note.gif
# ----------------------------------------------------
diff --git a/lib/observer/doc/src/etop.xml b/lib/observer/doc/src/etop.xml
index 99d3b15811..9f3cdd6de8 100644
--- a/lib/observer/doc/src/etop.xml
+++ b/lib/observer/doc/src/etop.xml
@@ -38,21 +38,19 @@
<description>
<p><c>etop</c> should be started with the provided scripts
- <c>etop</c> and <c>getop</c> for text based and graphical
- presentation respectively. This will start a hidden erlang node
+ <c>etop</c>. This will start a hidden erlang node
which connects to the node to be measured. The measured node is
given with the <c>-node</c> option. If the measured node has a
different cookie than the default cookie for the user who
invokes the script, the cookie must be explicitly given witht
the <c>-setcookie</c> option.</p>
- <p>Under Windows the batch files <c>etop.bat</c> and
- <c>getop.bat</c> can be used.</p>
+ <p>Under Windows the batch file <c>etop.bat</c> can be used.</p>
<p>The following configuration parameters exist for the
- <c>etop</c> tool. When executing the <c>etop</c> or <c>getop</c>
- scripts, these parameters can be given as command line options,
- e.g. <c>getop -node testnode@myhost -setcookie MyCookie</c>.</p>
+ <c>etop</c> tool. When executing the <c>etop</c> script,
+ these parameters can be given as command line options,
+ e.g. <c>etop -node testnode@myhost -setcookie MyCookie</c>.</p>
<taglist>
<tag>node</tag>
<item>The measured node.
@@ -103,11 +101,6 @@ Value: <c>on | off</c> <br></br>
Default: <c>on</c></item>
</taglist>
- <p>All interaction with <c>etop</c> when running the graphical
- presentation should happen via the menus. For the text based
- presentation the functions described below can be used.
- </p>
-
<p>See the <seealso marker="etop_ug">user's guide</seealso> for
more information about the <c>etop</c> tool.</p>
@@ -118,7 +111,7 @@ Default: <c>on</c></item>
<fsummary>Start etop</fsummary>
<desc>
<p>This function starts <c>etop</c>.
- Note that etop is preferably started with the etop and getop scripts</p>
+ Note that etop is preferably started with the etop script.</p>
</desc>
</func>
<func>
diff --git a/lib/observer/doc/src/etop_5.gif b/lib/observer/doc/src/etop_5.gif
deleted file mode 100644
index 9650176366..0000000000
--- a/lib/observer/doc/src/etop_5.gif
+++ /dev/null
Binary files differ
diff --git a/lib/observer/doc/src/etop_lines.gif b/lib/observer/doc/src/etop_lines.gif
deleted file mode 100644
index 10620a1155..0000000000
--- a/lib/observer/doc/src/etop_lines.gif
+++ /dev/null
Binary files differ
diff --git a/lib/observer/doc/src/etop_main.gif b/lib/observer/doc/src/etop_main.gif
deleted file mode 100644
index 699cb986c8..0000000000
--- a/lib/observer/doc/src/etop_main.gif
+++ /dev/null
Binary files differ
diff --git a/lib/observer/doc/src/etop_opt.gif b/lib/observer/doc/src/etop_opt.gif
deleted file mode 100644
index e420bff7f6..0000000000
--- a/lib/observer/doc/src/etop_opt.gif
+++ /dev/null
Binary files differ
diff --git a/lib/observer/doc/src/etop_ug.xml b/lib/observer/doc/src/etop_ug.xml
index 8291e417e7..c57df1d324 100644
--- a/lib/observer/doc/src/etop_ug.xml
+++ b/lib/observer/doc/src/etop_ug.xml
@@ -39,9 +39,7 @@
<section>
<title>Output</title>
- <p>The output from <c>etop</c> can be graphical or text based.
- </p>
- <p>Text based it looks like this:</p>
+ <p>The output from <c>etop</c> looks like this:</p>
<code type="none"><![CDATA[
========================================================================================
tiger@durin 13:40:32
@@ -63,10 +61,6 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func
<127.137.0> net_kernel:do_spawn_ 0 553 5840 0 dbg:do_relay_1/1
========================================================================================
]]></code>
- <p>And graphically it looks like this:</p>
- <image file="etop_main.gif">
- <icaption>Graphical presentation of etop</icaption>
- </image>
<p>The header includes some system information:
</p>
<taglist>
@@ -102,9 +96,7 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func
<section>
<title>Start</title>
- <p>To start etop with the graphical presentation, use the script
- <c>getop</c> or the batch file <c>getop.bat</c>, e.g. <c>getop -node tiger@durin</c></p>
- <p>To start etop with the text based presentation use the script
+ <p>To start etop use the script
<c>etop</c> or the batch file <c>etop.bat</c>, e.g. <c>etop -node tiger@durin</c>,
</p>
</section>
@@ -115,30 +107,12 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func
<c>-OptName Value</c> to the command line, e.g. <c>etop -node tiger@durin -setcookie mycookie -lines 15</c>.
</p>
<p>The parameters <c>lines</c>, <c>interval</c>, <c>accumulate</c>
- and <c>sort</c> can be changed during runtime. Use the
- <em>Options</em> menu with the graphical presentation or the
- function <c>etop:config/2</c> with the text based presentation.
+ and <c>sort</c> can be changed during runtime by the
+ function <c>etop:config/2</c>.
</p>
<p>A list of all valid configuration parameters can be found in
the reference manual for <c>etop</c>.
</p>
- <p>Note that it is even possible to change which information to
- sort by by clicking the header line of the table in the graphical
- presentation.
- </p>
-
- <section>
- <title>Example: Change configuration with graphical presentation</title>
- <image file="etop_opt.gif">
- <icaption>Select the option to change from the Options menu.</icaption>
- </image>
- <image file="etop_lines.gif">
- <icaption>Enter the new value in the popup window and click "Ok"</icaption>
- </image>
- <image file="etop_5.gif">
- <icaption>The interface is updated with the new configuration</icaption>
- </image>
- </section>
<section>
<title>Example: Change configuration with text based presentation</title>
@@ -187,18 +161,14 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func
<section>
<title>Print to file</title>
<p>At any time, the current <c>etop</c> display can be dumped to a
- text file. Use <em>Dump to file</em> on the <em>File</em> menu
- with the graphical presentation or the function <c>etop:dump/1</c>
- with the text based presentation.
+ text file with the function <c>etop:dump/1</c>.
</p>
</section>
<section>
<title>Stop</title>
- <p>To stop <c>etop</c>, use <em>Exit</em> on the <em>File</em>
- menu for the graphical presentation, or the function
- <c>etop:stop/0</c> with the text based presentation.
- </p>
+ <p>Use the function <c>etop:stop/0</c> to stop <c>etop</c>.
+ </p>
</section>
</chapter>
diff --git a/lib/observer/priv/bin/getop b/lib/observer/priv/bin/getop
deleted file mode 100755
index 5cd9bf3d76..0000000000
--- a/lib/observer/priv/bin/getop
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-NAME="etop"
-erl -sname $NAME -noinput -hidden -s etop -s erlang halt $@
diff --git a/lib/observer/priv/bin/getop.bat b/lib/observer/priv/bin/getop.bat
deleted file mode 100644
index 8b6f108f06..0000000000
--- a/lib/observer/priv/bin/getop.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@ECHO OFF
-CALL werl -sname etop -noinput -hidden -s etop -s erlang halt %*
diff --git a/lib/observer/src/Makefile b/lib/observer/src/Makefile
index 42f5c19935..646892663f 100644
--- a/lib/observer/src/Makefile
+++ b/lib/observer/src/Makefile
@@ -38,7 +38,6 @@ MODULES= \
crashdump_viewer \
crashdump_viewer_html \
etop \
- etop_gui \
etop_tr \
etop_txt \
observer \
@@ -72,13 +71,12 @@ PRIVDIR= ../priv
WEBTOOLFILES= $(PRIVDIR)/crashdump_viewer.tool $(PRIVDIR)/erlang_observer.png
BINDIR= $(PRIVDIR)/bin
ifeq ($(findstring win32,$(TARGET)),win32)
-WIN32_EXECUTABLES= $(BINDIR)/etop.bat $(BINDIR)/getop.bat $(BINDIR)/cdv.bat
+WIN32_EXECUTABLES= $(BINDIR)/etop.bat $(BINDIR)/cdv.bat
else
WIN32_EXECUTABLES=
endif
EXECUTABLES= \
$(BINDIR)/etop \
- $(BINDIR)/getop \
$(BINDIR)/cdv \
$(WIN32_EXECUTABLES)
CDVDIR= $(PRIVDIR)/crashdump_viewer
diff --git a/lib/observer/src/etop.erl b/lib/observer/src/etop.erl
index 2610060eae..96a18cf450 100644
--- a/lib/observer/src/etop.erl
+++ b/lib/observer/src/etop.erl
@@ -44,9 +44,6 @@ help() ->
" sort runtime | reductions | memory | msg_q~n"
" What information to sort by~n"
" Default: runtime (reductions if tracing=off)~n"
- " output graphical | text~n"
- " How to present results~n"
- " Default: graphical~n"
" tracing on | off etop uses the erlang trace facility, and thus~n"
" no other tracing is possible on the node while~n"
" etop is running, unless this option is set to~n"
@@ -317,7 +314,7 @@ handle_args([_| R], C) ->
handle_args([], C) ->
C.
-output(graphical) -> etop_gui;
+output(graphical) -> exit({deprecated, "Use observer instead"});
output(text) -> etop_txt.
diff --git a/lib/observer/src/etop_defs.hrl b/lib/observer/src/etop_defs.hrl
index 664de61973..720fb50b5a 100644
--- a/lib/observer/src/etop_defs.hrl
+++ b/lib/observer/src/etop_defs.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -22,8 +22,8 @@
" procs~8w processes~8w code ~8w~n"
" runq ~8w atom ~8w ets ~8w~n").
--record(opts, {node=node(), port = 8415, accum = false, intv = 5000, lines = 10,
+-record(opts, {node=node(), port = 8415, accum = false, intv = 5000, lines = 10,
width = 700, height = 340, sort = runtime, tracing = on,
%% Other state information
- out_mod=etop_gui, out_proc, server, host, tracer, store,
+ out_mod=etop_txt, out_proc, server, host, tracer, store,
accum_tab, remote}).
diff --git a/lib/observer/src/etop_gui.erl b/lib/observer/src/etop_gui.erl
deleted file mode 100644
index 3971646abc..0000000000
--- a/lib/observer/src/etop_gui.erl
+++ /dev/null
@@ -1,374 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(etop_gui).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,create,4}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}}]).
-
--author('[email protected]').
-
--export([init/1,stop/1]).
--export([formatmfa/1,to_list/1]).% For etop_txt
-
--include("etop.hrl").
--include("etop_defs.hrl").
-
--import(etop, [loadinfo/1, meminfo/2, getopt/2]).
-
-%% Heights
--define(BarH, 28). % height of menubar
--define(LabelH, 90). % height of label with system info
--define(GridLineH, 21). % height of one line in the table (grid)
-
-%% Column numbers for grid - click to sort
--define(TimeCol, 3).
--define(RedsCol, 4).
--define(MemCol, 5).
--define(MsgQCol, 6).
-
-%% Font
--define(Normal, {screen,12}).
--define(Bold, {screen,bold,12}).
-
-
-%% -----------------------------------------------------------------------------
-stop(_) -> ok.
-
-init(Config) ->
- S = gs:start(),
- Width = getopt(width, Config),
- TotLines = getopt(lines,Config)+1,
-
- %% Max number of processes shown in window at startup is 10
- %% If less than 10 lines is specified, window size fits number of lines
- WinH = if TotLines > 11 -> 11*?GridLineH + ?BarH + ?LabelH;
- true -> TotLines*?GridLineH + ?BarH + ?LabelH
- end,
- Win = gs:create(window, S,
- [{title, "Erlang Top"},
- {map, true}, %% While debugging
- {configure, true},
- {width, Width}, {height, WinH}]),
- Bar = gs:create(menubar, Win, []),
-
- FileButt = gs:create(menubutton, Bar, [{label,{text, " File "}}]),
- OptionsButt = gs:create(menubutton, Bar, [{label,{text, " Options "}}]),
- File = gs:create(menu, FileButt, []),
- Options = gs:create(menu, OptionsButt, []),
- gse:named_menuitem(refresh, File,
- [{label,{text," Refresh "}}]),
- gse:named_menuitem(dump, File,
- [{label,{text," Dump to file "}}]),
- gse:named_menuitem(exit, File,
- [{label,{text," Exit "}}]),
-
- gse:named_menuitem(accum, Options,
- [{label,{text, " Accumulate "}},
- {itemtype, check}]),
- gse:named_menuitem(intv, Options,
- [{label,{text, " Update Interval "}}]),
- gse:named_menuitem(lines, Options,
- [{label,{text, " Number of Lines "}}]),
- Sort = gse:named_menuitem(sort, Options,
- [{label,{text, " Sort "}},
- {itemtype,cascade}]),
- SortMenu = gse:create(menu, Sort, []),
- gse:named_menuitem(runtime, SortMenu,
- [{label,{text, " Time "}},
- {itemtype,radio},{group,gr1}]),
- gse:named_menuitem(memory, SortMenu,
- [{label,{text, " Memory "}},
- {itemtype,radio},{group,gr1}]),
- gse:named_menuitem(reductions, SortMenu,
- [{label,{text, " Reductions "}},
- {itemtype,radio},{group,gr1}]),
- gse:named_menuitem(msg_q, SortMenu,
- [{label,{text, " Message Queue "}},
- {itemtype,radio},{group,gr1}]),
-
- SysInfo = gs:create(label,Win,[{x, 0}, {y, ?BarH},{align,sw},
- {width, Width},{height,?LabelH}]),
-
- {GridH,VScroll} = calc_grid_h(WinH,TotLines),
- Grid = gse:grid(Win,
- [{x, 0}, {y, ?BarH+?LabelH},
- {width, Width},
- {height, GridH},
- {hscroll, false},
- {vscroll, VScroll},
- {columnwidths, calc_column_w(Width)},
- {rows, {1, TotLines}},
- {font,?Normal}]),
-
- %% Header line
- GL1 = gse:gridline(Grid, [{{text, 1}, "PID"},
- {{text, 2}, "Name or Initial Function"},
- {{text, ?TimeCol}, "Time(us)"},
- {{text, ?RedsCol}, "Reds"},
- {{text, ?MemCol}, "Memory"},
- {{text, ?MsgQCol}, "MsgQ"},
- {{text, 7}, "Current Function"},
- {bg, lightblue},
- {row, 1},
- {click, true}]),
-
- config_sort(GL1,getopt(sort,Config)),
- Info = do_update(Grid, SysInfo, Config),
-
- get_event(Info, Win, Grid, GL1, SysInfo, Config).
-
-calc_column_w(W) ->
- %% W = [2x, 3x, 1x, 1x, 1x, 1x, 3x] = 12x
- RW = W-9, % just to make nice small margins on each side of grid
- X = RW div 12,
- [2*X, 3*X, X, X, X, X, 3*X + (RW - 12*X)].
-
-config_sort(GL1,Sort) ->
- gs:config(Sort,[{select,true}]),
- lists:foreach(fun(S) ->
- gs:config(GL1,[{{font,S},?Normal}])
- end,
- [?TimeCol,?MemCol,?RedsCol,?MsgQCol]),
- case Sort of
- runtime -> gs:config(GL1,{{font,?TimeCol},?Bold});
- memory -> gs:config(GL1,{{font,?MemCol},?Bold});
- reductions -> gs:config(GL1,{{font,?RedsCol},?Bold});
- msg_q -> gs:config(GL1,{{font,?MsgQCol},?Bold})
- end.
-
-config_lines(Win,Grid,TotLines) ->
- OldGridH = gs:read(Grid,height),
- NewLinesH = TotLines*?GridLineH,
- if NewLinesH =< OldGridH ->
- gs:config(Win,[{height,NewLinesH+?BarH+?LabelH}]),
- gs:config(Grid,[{rows,{1,TotLines}},
- {height,NewLinesH},
- {vscroll,false}]);
- true ->
- gs:config(Grid,[{rows,{1,TotLines}},{vscroll,right}])
- end.
-
-calc_grid_h(WinH,TotLines) ->
- LeftInWin = WinH - ?BarH - ?LabelH,
- TotGrid = TotLines * ?GridLineH,
- if LeftInWin >= TotGrid ->
- {TotGrid,false};
- true ->
- {LeftInWin,right}
- end.
-
-set_win_h(Win,OrigH,TotLines) ->
- TotH = TotLines*?GridLineH + ?BarH + ?LabelH,
- if TotH >= OrigH -> OrigH;
- true -> gs:config(Win,[{height,TotH}]),
- TotH
- end.
-
-get_event(Info, Win, Grid, GL1, SysInfo, Config) ->
- receive
- {gs, Win, configure,[],[W,H,_,_]} ->
- TotLines = getopt(lines,Config)+1,
- %% Will not make window higher than total number of lines
- RealWinH = set_win_h(Win,H,TotLines),
- {GridH,VScroll} = calc_grid_h(RealWinH,TotLines),
- gs:config(Grid, [{width, W},
- {columnwidths, calc_column_w(W)},
- {height,GridH}, {vscroll,VScroll}]),
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs, refresh, _, _, _} ->
- Info1 = do_update(Grid, SysInfo, Config),
- get_event(Info1, Win, Grid, GL1, SysInfo, Config);
- {gs, dump, _, _, _} ->
- case pop(Win,dump) of
- {ok,File} -> etop:dump(File);
- {error,cancel} -> ok
- end,
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs, Win, destroy, _, _} ->
- normal;
- {gs, exit, _, _, _} ->
- ok;
- {gs, accum, _, _, _} ->
- Old = getopt(accum,Config),
- etop:config(accumulate,not Old),
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs,intv,_,_,_} ->
- case pop(Win,interval) of
- {ok,Intv} -> etop:config(interval,list_to_integer(Intv));
- {error,cancel} -> ok
- end,
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs,lines,_,_,_} ->
- case pop(Win,lines) of
- {ok,Lines} -> etop:config(lines,list_to_integer(Lines));
- {error,cancel} -> ok
- end,
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs,Sort,_,_,_} when Sort=:=runtime;
- Sort=:=memory;
- Sort=:=reductions;
- Sort=:=msg_q ->
- etop:config(sort,Sort),
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {gs,GL1,click,_,[Col,1,_]} ->
- case Col of
- ?TimeCol -> etop:config(sort, runtime);
- ?MemCol -> etop:config(sort, memory);
- ?RedsCol -> etop:config(sort, reductions);
- ?MsgQCol -> etop:config(sort, msg_q);
- _other -> ignore
- end,
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- {config,{Key,Value},Config1} ->
- case Key of
- lines -> config_lines(Win,Grid,Value+1);
- sort -> config_sort(GL1,Value);
- accumulate -> gs:config(accum,[{select,Value}]);
- _ -> ok
- end,
- Info1 = do_update(Grid, SysInfo, Config1),
- get_event(Info1, Win, Grid, GL1, SysInfo, Config1);
- {dump,Fd} ->
- etop_txt:do_update(Fd,Info,Config),
- get_event(Info, Win, Grid, GL1, SysInfo, Config);
- Msg ->
- io:format("~p got unexpected msg ~p~n", [?MODULE, Msg]),
- get_event(Info, Win, Grid, GL1, SysInfo, Config)
- after getopt(intv,Config) ->
- Info1 = do_update(Grid, SysInfo, Config),
- get_event(Info1, Win, Grid, GL1, SysInfo, Config)
- end.
-
-do_update(Grid, SysInfo, Config) ->
- Info = etop:update(Config),
- Lines = makegridlines(Info#etop_info.procinfo, Grid, 2),
- clear_lines(Lines, getopt(lines,Config) + 1, Grid),
- makesysinfo(getopt(node,Config),Info,SysInfo),
- Info.
-
-%clear_lines(From, To, _Grid) when From > To -> ok;
-clear_lines(From, To, Grid) ->
- case gs:read(Grid, {obj_at_row, From}) of
- undefined ->
- ok;
- GridLine ->
- gs:destroy(GridLine),
- clear_lines(From + 1, To, Grid)
- end.
-
-formatmfa({M, F, A}) ->
- io_lib:format("~w:~w/~w",[M, F, A]);
-formatmfa(Other) ->
- %% E.g. when running hipe - the current_function for some
- %% processes will be 'undefined'
- io_lib:format("~w",[Other]).
-
-
-makegridlines([#etop_proc_info{pid=Pid,
- mem=Mem,
- reds=Reds,
- name=Name,
- runtime=Time,
- cf=MFA,
- mq=MQ}
- |T], Grid, Count) ->
- update_gl(Grid, Count, [{{text, 1}, pid_to_list(Pid)},
- {{text, 2}, to_list(Name)},
- {{text, ?TimeCol},
- if is_integer(Time)->integer_to_list(Time);
- true -> Time
- end},
- {{text, ?RedsCol}, integer_to_list(Reds)},
- {{text, ?MemCol}, integer_to_list(Mem)},
- {{text, ?MsgQCol}, integer_to_list(MQ)},
- {{text, 7}, formatmfa(MFA)},
- {row, Count}, {click, false}]),
- makegridlines(T, Grid, Count + 1);
-makegridlines([],_Grid,Count) ->
- Count.
-
-update_gl(Grid, Row, GL) ->
- case gs:read(Grid, {obj_at_row, Row}) of
- undefined ->
- gse:gridline(Grid,[{row, Row}|GL]);
- GridLine ->
- gs:config(GridLine,GL)
- end.
-
-to_list(Name) when is_atom(Name) -> atom_to_list(Name);
-to_list({_M,_F,_A}=MFA) -> formatmfa(MFA).
-
-
-makesysinfo(Node,Info,SysInfo) ->
- {Cpu,NProcs,RQ,Clock} = loadinfo(Info),
- case Info#etop_info.memi of
- undefined ->
- Str = "No memory information is available.";
- Memi ->
- [Tot,Procs,Atom,Bin,Code,Ets] =
- meminfo(Memi, [total,processes,atom,binary,code,ets]),
- Str = io_lib:fwrite(?SYSFORM,
- [Node,Clock,
- Cpu,Tot,Bin,
- NProcs,Procs,Code,
- RQ,Atom,Ets])
- end,
- gs:config(SysInfo,[{label,{text,Str}},{font,?Normal}]).
-
-
-pop(Win,Key) ->
- Pop = gs:create(window,Win,[{title,"Config"},
- {width,160},{height,100}]),
- gs:create(label,Pop,[{label,{text,txt(Key)}},
- {width,160}]),
- gs:create(entry,entry,Pop,[{x,10},{y,30},{width,130},
- {keypress,true}]),
- gs:create(button,ok,Pop,[{width,45},{y,60},{x,10},
- {label,{text,"Ok"}}]),
- gs:create(button,cancel,Pop,[{width,60},{y,60},{x,80},
- {label,{text,"Cancel"}}]),
- gs:config(Pop,{map,true}),
- pop_loop(Pop).
-
-pop_loop(Pop) ->
- receive
- {gs,entry,keypress,_,['Return'|_]} ->
- Str = gs:read(entry,text),
- gs:destroy(Pop),
- {ok,Str};
- {gs,entry,keypress,_,_} -> % all other keypresses
- pop_loop(Pop);
- {gs,ok,click,_,_} ->
- Str = gs:read(entry,text),
- gs:destroy(Pop),
- {ok,Str};
- {gs,cancel,click,_,_} ->
- gs:destroy(Pop),
- {error,cancel};
- X ->
- io:format("Got X=~w~n",[X]),
- pop_loop(Pop)
- end.
-
-txt(interval) -> "Enter new interval:";
-txt(lines) -> "Enter number of lines:";
-txt(dump) -> "Enter file name:".
diff --git a/lib/observer/src/etop_txt.erl b/lib/observer/src/etop_txt.erl
index d0612f15b4..f048ff17ca 100644
--- a/lib/observer/src/etop_txt.erl
+++ b/lib/observer/src/etop_txt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -27,7 +27,6 @@
-include("etop_defs.hrl").
-import(etop,[loadinfo/1,meminfo/2]).
--import(etop_gui,[formatmfa/1,to_list/1]).
-define(PROCFORM,"~-15w~-20s~8w~8w~8w~8w ~-20s~n").
@@ -99,3 +98,13 @@ writepinfo(Fd,[#etop_proc_info{pid=Pid,
writepinfo(_Fd,[]) ->
ok.
+
+formatmfa({M, F, A}) ->
+ io_lib:format("~w:~w/~w",[M, F, A]);
+formatmfa(Other) ->
+ %% E.g. when running hipe - the current_function for some
+ %% processes will be 'undefined'
+ io_lib:format("~w",[Other]).
+
+to_list(Name) when is_atom(Name) -> atom_to_list(Name);
+to_list({_M,_F,_A}=MFA) -> formatmfa(MFA).
diff --git a/lib/observer/src/observer.app.src b/lib/observer/src/observer.app.src
index e881cb3c97..6d5259624c 100644
--- a/lib/observer/src/observer.app.src
+++ b/lib/observer/src/observer.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -22,7 +22,6 @@
{modules, [crashdump_viewer,
crashdump_viewer_html,
etop,
- etop_gui,
etop_tr,
etop_txt,
observer,
diff --git a/lib/pman/AUTHORS b/lib/pman/AUTHORS
deleted file mode 100644
index 5a354526b4..0000000000
--- a/lib/pman/AUTHORS
+++ /dev/null
@@ -1,9 +0,0 @@
-pman was first implemented for the old X windows interface "pxw" by
-Claes Wikstr�m and has since then been rewritten a couple of times by
-among others Peter Olin.
-
-Original Authors and Contributors:
-
-Claes Wikstr�m
-Peter Olin
-Gunilla Arendt \ No newline at end of file
diff --git a/lib/pman/Makefile b/lib/pman/Makefile
deleted file mode 100644
index 3600504d07..0000000000
--- a/lib/pman/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Common Macros
-# ----------------------------------------------------
-
-SUB_DIRECTORIES = src priv doc/src
-
-SPECIAL_TARGETS =
-
-# ----------------------------------------------------
-# Default Subdir Targets
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_subdir.mk
-
diff --git a/lib/pman/doc/html/.gitignore b/lib/pman/doc/html/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/pman/doc/html/.gitignore
+++ /dev/null
diff --git a/lib/pman/doc/man3/.gitignore b/lib/pman/doc/man3/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/pman/doc/man3/.gitignore
+++ /dev/null
diff --git a/lib/pman/doc/pdf/.gitignore b/lib/pman/doc/pdf/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/pman/doc/pdf/.gitignore
+++ /dev/null
diff --git a/lib/pman/doc/src/Makefile b/lib/pman/doc/src/Makefile
deleted file mode 100644
index d9e0317f05..0000000000
--- a/lib/pman/doc/src/Makefile
+++ /dev/null
@@ -1,116 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-#
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../../vsn.mk
-VSN=$(PMAN_VSN)
-APPLICATION=pman
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-XML_APPLICATION_FILES = ref_man.xml
-XML_REF3_FILES = pman.xml
-
-XML_PART_FILES = part.xml part_notes.xml
-XML_CHAPTER_FILES = pman_chapter.xml notes.xml
-
-BOOK_FILES = book.xml
-
-XML_FILES = \
- $(BOOK_FILES) $(XML_CHAPTER_FILES) \
- $(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES)
-
-GIF_FILES = \
- main_window.gif \
- trace.gif \
- options.gif
-
-# ----------------------------------------------------
-
-HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
-
-INFO_FILE = ../../info
-
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
-
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-$(HTMLDIR)/%.gif: %.gif
- $(INSTALL_DATA) $< $@
-
-docs: pdf html man
-
-$(TOP_PDF_FILE): $(XML_FILES)
-
-pdf: $(TOP_PDF_FILE)
-
-html: gifs $(HTML_REF_MAN_FILE)
-
-man: $(MAN3_FILES)
-
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
-
-debug opt:
-
-clean clean_docs:
- rm -rf $(HTMLDIR)/*
- rm -f $(MAN3DIR)/*
- rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
- rm -f errs core *~
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_docs_spec: docs
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(HTMLDIR)/* \
- "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
- $(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
-
-
-release_spec:
diff --git a/lib/pman/doc/src/book.xml b/lib/pman/doc/src/book.xml
deleted file mode 100644
index 809015016b..0000000000
--- a/lib/pman/doc/src/book.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE book SYSTEM "book.dtd">
-
-<book xmlns:xi="http://www.w3.org/2001/XInclude">
- <header titlestyle="normal">
- <copyright>
- <year>1997</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Pman</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <pagetext>Pman</pagetext>
- <preamble>
- </preamble>
- <parts lift="no">
- <xi:include href="part.xml"/>
- </parts>
- <applications>
- <xi:include href="ref_man.xml"/>
- </applications>
- <releasenotes>
- <xi:include href="notes.xml"/>
- </releasenotes>
-</book>
-
diff --git a/lib/pman/doc/src/fascicules.xml b/lib/pman/doc/src/fascicules.xml
deleted file mode 100644
index 37feca543f..0000000000
--- a/lib/pman/doc/src/fascicules.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE fascicules SYSTEM "fascicules.dtd">
-
-<fascicules>
- <fascicule file="part" href="part_frame.html" entry="no">
- User's Guide
- </fascicule>
- <fascicule file="ref_man" href="ref_man_frame.html" entry="yes">
- Reference Manual
- </fascicule>
- <fascicule file="part_notes" href="part_notes_frame.html" entry="no">
- Release Notes
- </fascicule>
- <fascicule file="" href="../../../../doc/print.html" entry="no">
- Off-Print
- </fascicule>
-</fascicules>
-
diff --git a/lib/pman/doc/src/main_window.gif b/lib/pman/doc/src/main_window.gif
deleted file mode 100644
index e12754631c..0000000000
--- a/lib/pman/doc/src/main_window.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/doc/src/main_window.ps b/lib/pman/doc/src/main_window.ps
deleted file mode 100644
index c66620c677..0000000000
--- a/lib/pman/doc/src/main_window.ps
+++ /dev/null
@@ -1,1573 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./main_window.tmp.eps)
-%%CreationDate: (Tue Jun 12 18:03:36 2001)
-%%BoundingBox: 0 22 377 234
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 22 377 234
-userdict begin
-%%BeginData:
-DisplayImage
-0 22
-377.000000 212.000000
-12
-757 426
-1
-0
-0
-16
-ffffff
-000000
-b24d7a
-dcadc2
-57253b
-0000ff
-d9d9d9
-c3c3c3
-bebebe
-828282
-000000
-000000
-000000
-000000
-000000
-000000
-03ff03ff03ff0311040003ff03ff03b70400031c04000301021a0400030002ff02ff02b6
-04000300021a04010301021a0400030002ff02ff02b604000300021a04010301021a0400
-030002ff02ff02b604000300021a0401030102020418030004ff04ff04b7030004170202
-040103010202040003ff03ff03e902020401030102020400030002150400030002ff02ff
-029e04000300021504000300021504000300020204010301020204000300021504000300
-02ff02ff029e040003000215040003000215040003000202040103010202040003000215
-0400030002ff02ff029e0400030002150400030002150400030002020401030102020400
-030002150400030002ff02ff029e040003000215040003000202030f0202040003000202
-0401030102020400030002150400030002ff0272000302ff022704000300021504000300
-02020300020d040002020400030002020401030102020400030002150400030002d10006
-0202000102060001020600010206000102050000020a00050225000102380001021b0004
-020d00010208000102ee0400030002150400030002020300020d04000202040003000202
-0401030102020400030002150400030002d1000102020002020100020204000202050002
-0206000202040000020900010203000102240001023800010219000102040000020c0001
-0208000102ee0400030002150400030002020300020d0400020204000300020204010301
-02020400030002150400030002d100010203000102010002020400020205000002000001
-02050002020400000208000102050001025e00010218000002070000020b000102f90400
-030002150400030002020300020d04000202040003000202040103010202040003000215
-0400030002d1000102030001020100000200000002030003020500000200000102050000
-020000010203000002030001020100010207000302040000020300030203000102000003
-020400000201000102040003020100010203000002030001020700040202000102000003
-020800040202000402040004020300000203000302010000020300040201000102000003
-020300010201000102040000020200040203000402d30400030002150400030002020300
-020d04000202040003000202040103010202040003000202030f02020400030002d10001
-020300010201000002000001020200000200000102040001020000010205000002000002
-020200000203000102010001020700010200000002040000020200010201000102020002
-020200000204000002010001020300010201000102000001020200020202000002070001
-020200010201000202020001020800010203000102020001020200010202000102020000
-020100010202000002010000020200010205000202020001020200010202000002040000
-02020000020200010201000102d7040003000208030302080400030002020300020d0400
-02020400030002020401030102020400030002020300020d040002020400030002d10001
-020200010202000002000001020200000200000102040000020200010204000002010001
-020200000207000102070001020000010202000002020001020300010201000102030001
-020200000202000102020001020300010200000002020000020000000202000002060001
-020400010200000102030001020800010202000102040001020000010204000102000000
-020200000202000102010000020100010206000102030001020200010202000102020000
-020700010201000102d704000300020803000201040002080400030002020300020d0400
-02020400030002020401030102020400030002020300020d040002020400030002d10005
-020300000201000102000000020100010203000102020001020400000202000102010000
-020700010207000102000001020200000202000102030001020100010203000102020000
-020200010202000102030001020000010201000002000000020100010206000102040001
-020000010203000102080001020200010204000102000001020400010200000002010000
-020200010202000002010001020600010203000102020001020200010202000002070001
-0201000302d504000300020803000201040002080400030002020300020d040002020400
-030002020401030102020400030002020300040e02020400030002d10001020700000201
-000102000000020100010203000102020002020300000202000202000000020700010207
-000102010000020100010202000702010001020400000201000102020001020200070200
-000102000001020000000201000002070001020400010200000102030001020800010202
-000102040001020000010204000102000000020100000201000202010001020100010206
-000102030001020200010203000002010001020400040203000302d30400030002080300
-040202080400030002020300020d04000202040003000202040103010202040003000215
-0400030002d1000102070000020100010200000002010001020300070203000002030001
-020000000207000102070001020100010200000002030001020700010204000102000000
-020300010202000102070000020000000201000102000000020700010204000102000001
-020300010208000102020001020400010200000102040001020000000201000002010000
-020000000201000002020001020600010203000102020001020300010200000002030002
-020100010205000202d20400030002150400030002020300020d04000202040003000202
-0401030102020400030002150400030002d1000102070000020200010202000102020001
-020400010203000002040002020800010205000102020001020000000203000102070001
-020400010200000002030001020200010207000002000000020200000200000002070001
-020400010200000102030001020800010202000102040001020000010204000102010000
-020000020201000202030001020600010203000102020001020300010200000002030001
-020200010206000102d20400030002150400030002020300020d04000202040003000202
-0401030102020400030002150400030002d1000102070000020200010202000102020000
-020600010202000002040002020300010203000102030001020400010205000102030000
-020100010205000102040001020300010203000002010002020200010209000102020001
-020100010203000102080001020300010202000102020001020200010202000102030000
-020700010202000002010001020300010202000102040001020400010202000102010000
-0203000102d20400030002150400030002020300020d0400020204000300020204010301
-02020400030002150400030002d100010207000002070001020100010206000102020000
-020500010203000102040005020500010207000402010001020500010204000102050004
-0201000102030001020a0004020200010203000102080001020400040204000402050003
-020900040201000102030001020200010204000102050003020000010200000502d30400
-030002150400030002020300020d04000202040003000202040103010202040003000215
-0400030002ff02ff029e0400030002150400030002020300020d04000202040003000202
-0401030102020400030002150400030002ff02ff029e0400030002150400030002020300
-040e02020400030002020401030102020400030002150400030002ff02ff029e04000300
-02150400030002150400030002020401030102020400030002150400030002ff02ff029e
-0400030002150400030002150400030002020401030102020400030002150400030002ff
-02ff029e04000300021504000300021504000300020204010300040403000416030004ff
-04ff049f030004160300041603000404030500ff00ff00e80304040003010202040000ff
-00ff00e70900030002020401030102020400000106ff06ff06e409010300020204010301
-02020400000106ff06ff06e40901030002020401030102020400000106ff06ff06e40901
-030002020401030102020400000106ff06ff06e409010300020204010301020204000001
-06ff06ff06e409010300020204010301020204000001060b01040604010006030102061f
-01000602010006040100062601040633010006020100060c010006ff06ff060201000602
-010006090102061309010300020204010301020204000001060b0100060f0100061f0100
-06020100062e01000635010106010100060c010006ff06ff0602010006020100060b0100
-061309010300020204010301020204000001060b01000606010206050100060301020618
-010006020100060201020603010206020100060201000619010006030100060001010603
-010206030102060301020618010106010100060201020603010106000100060201020603
-010206ff06f501000602010006020102060501000602010006000101060c090103000202
-04010301020204000001060b010006080100060501000602010006020100061801000600
-010006050100060201000602010006010100060201000619010006030101060101000601
-010006020100060101000602010006010100060201000617010006000100060001000601
-01000602010006010100060101010601010006020100060101000602010006ff06f40100
-060201000601010006020100060401000602010106010100060b09010300020204010301
-020204000001060b01030605010006050100060201000602010006180100060001000605
-010006020100060201000601010006000100060001000619010006030100060901000601
-010006050100060201000617010006000100060001000601010006020100060101000602
-010006010100060201000601010006ff06f8010406010100060201000604010006020100
-06020100060b09010300020204010301020204000001060b010006080100060501000602
-010406180100060001000605010006020104060101000600010006000100061901000603
-010006060103060101000605010406170100060101010601010006020100060101000602
-0100060101040602010206ff06f501000602010006010104060401000602010006020100
-060b09010300020204010301020204000001060b0100060801000605010006020100061d
-010006060100060201000605010006000100060001000619010006030100060501000602
-01000601010006050100061b010006010101060101000602010006010100060201000601
-01000609010006ff06f401000602010006010100060801000602010006020100060b0901
-0300020204010301020204000001060b0100060801000605010006020100060201000619
-010006060100060201000602010006010100060001000600010006190100060301000605
-010006020100060101000602010006010100060201000617010006020100060101000602
-010006010100060101010601010006020100060101000602010006ff06f4010006020100
-0601010006020100060401000602010106010100060b0901030002020401030102020400
-0001060b0100060801000605010006030102061a01000606010006030102060301000600
-0100061a0100060301000606010306020102060301020618010006020100060201020603
-010106000100060201020603010206ff06f5010006020100060201020605010006020100
-06000101060c0901030002020401030102020400000106ff06ff06d30100060f09010300
-020204010301020204000001060a0106062a0106062a010606ff06ff06470106060e0100
-060f09010300020204010301020204000001060a0106062a0106062a010606ff06ff0647
-0106060e0100060f0901030002020401030102020400000106ff06ff06e4090103000202
-0401030102020400000106ff06ff06e40901030002020401030102020400000106ff06ff
-06e40901030002020401030102020400000109ff09ff09e6030002020401030102020400
-000009ff09ff09e703000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202
-040006ff06ff06e8030002020401030102020400060005ff05ff05d40912030002020401
-030102020400060005000849050108d50501089005010858050108670501085709110000
-030002020401030102020400060005000849050108d50501089005010858050108670501
-085709010706090007060001030002020401030102020400060005000849050108d50501
-089005010858050108670501085709010705000009000706000103000202040103010202
-040006000500080105030805050008060500083405010802050208270500080a05040818
-050008060500087405010801050008020500088905010800050008030500085105010801
-0503080d0500085205010802050208050500084a09010705000009010705000103000202
-0401030102020400060005000801050008020500080c0500083405010801050008020500
-08260500080a0500081c0500087c05010801050108010500088905010800050008030500
-085105010801050008020500080c05000852050108010500080205000850090107040001
-090107050001030002020401030102020400060005000801050008020500080205020803
-050108000500083405010801050008020500080105000802050008010500080005010802
-050008000501080305020802050008000501080205040808050008050500080205000801
-050008000501080305020802050408020502080305020802050008000501086605010801
-050108010500080205020802050108000500080305020875050108000501080105010802
-0502080305010800050008020502083d0501080105000802050008020502080305010800
-050008020502084c050108010500080605020802050408020502083c0901070400010600
-090107040001030002020401030102020400060005000801050008020500080405000802
-050008010501083405010801050008050500080205000801050108010500080105010801
-05000801050008020500080105010801050008030500080a050008050500080205000801
-050108010500080105000802050008030500080605000802050008020500080105010801
-050008650501080105000800050008000500080105000802050008010500080005000800
-050008010500080205000874050108000501080105010801050008020500080105000801
-05010801050008020500083c050108010500080205000801050008020500080105000801
-05010801050008020500084b05010802050008070500080605000801050008020500083b
-090107030001060109010704000103000202040103010202040006000500080105030805
-050008020500080205000834050108010500080505000802050008010500080505000805
-050008020500080105000802050008030500080a05030802050008020500080105000802
-050008010500080705000806050008020500080205000801050008020500086505010801
-050008000500080005000805050008010500080005000800050008010500080205000874
-050108000500080005010800050008010500080505000802050008010500084005010801
-05030802050008020500080105000802050008010500084f050108030501080505000805
-05000802050008020500083b090107030001060209010703000103000202040103010202
-040006000500080105000808050008020500080205000834050108010500080505000802
-0500080105000805050008050504080105000802050008030500080a0500080505000802
-050008010500080205000801050008070500080605000802050008020500080105000802
-050008650501080105000801050108020503080105000800050008000500080105040874
-050108000500080005010800050008020502080205000802050008020502083d05010801
-05000801050008020504080105000802050008020502084c050108050500080405000804
-050008030504083b09010702000106030901070300010300020204010301020204000600
-050008010500080805000802050008020500083405010801050008020500080105000802
-0500080105000805050008050500080505000802050008030500080a0500080505000802
-050008010500080205000801050008070500080605000802050008020500080105000802
-050008650501080105000801050108010500080205000801050008000500080005000801
-050008780501080005000803050008050500080105000802050008050500083c05010801
-05000802050008010500080505000802050008050500084b050108010500080205000804
-05000803050008040500083f090107020001060409010702000103000202040103010202
-040006000500080105000808050008020500080105010834050108010500080205000801
-05000801050108010500080505000805050008020500080105000802050008030500080a
-050008050500080105010801050008020500080105000802050008030500080605000802
-050008020500080105000802050008650501080105000802050008010500080205000801
-050008000500080005000801050008020500087405010800050008030500080105000802
-050008010500080105010801050008020500083c05010801050008020500080105000802
-050008010500080105010801050008020500084b05010801050008020500080405000802
-05000805050008020500083b090107010001060509010702000103000202040103010202
-040006000500080105000808050008030501080005000834050108020502080305010800
-050008010500080505000806050208020500080205000804050108080500080605010800
-050008010500080205000802050208050501080405000803050208020500080205000865
-050108010500080205000802050308010500080005000800050008020502087505010800
-05000803050008020502080305010800050008020502083d050108010500080205000802
-0502080305010800050008020502084c050108020502080505000802050408020502083c
-0901070100010606090107010001030002020401030102020400060005000849050108d5
-050108900501081305000843050108670501085709010700000106070901070100010300
-02020401030102020400060005000849050108d5050108900501080f0500080205000843
-050108670501085709010700000106080901070000010300020204010301020204000600
-05000849050108d5050108900501081005020844050108670501085709010001090b0700
-0001030002020401030102020400060005000849050108d5050108900501085805010867
-0501085709010000090d0001030002020401030102020400060005000849050108d50501
-08900501085805010867050108570901070e000103000202040103010202040006000500
-0849050108d5050108900501085805010867050108570901001003000202040103010202
-0400060005000849050108d5050108900501085805010867050108570901000d09000001
-030002020401030102020400060005ff05ff05d409010001060a09010001030002020401
-030102020400060001ff01ff01d409010001060a09010001030002020401030102020400
-060001000849010108d50101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-085709010001060a09010001030002020401030102020400060001000805010008230100
-081d010108440100088f0101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000804010008040101080b0101080b010108020100
-081c010108040100080c010008040100080b0102081b010008030100088a010108040100
-080c01000804010008760101080301010852010108020102080301020806010008520101
-080201020803010208020104084209010001060a09010001030002020401030102020400
-060001000803010008040100080101000809010008010100080901000801010008020100
-081b010108180100080d0100081a010008030101088a0101081801000876010108020100
-080101000851010108010100080201000801010008020100080401010852010108010100
-0802010008010100080201000801010008020100084209010001060a0901000103000202
-040103010202040006000100080201000805010008010100080901000801010008090100
-0801010008030100081a0101080201020802010008000101080301020802010408030101
-0805010008030102080301020802010008000101080501000802010008000100088a0101
-080201020802010008000101080301020802010408740101080201000801010008510101
-080101000802010008010100080701000800010008520101080101000805010008020100
-08050100084209010001060a090100010300020204010301020204000600010008010100
-080601000801010008090100080101000809010008010100080401000819010108040100
-080201010801010008040100080401000805010108050100080201000802010008010100
-0802010008010101080101000803010008050100088a0101080401000802010108010100
-080401000804010008760101080201000801010008510101080101000802010008010100
-08060100080101000852010108010100080501000802010008040100084309010001060a
-090100010300020204010301020204000600010008000100080701000801010008090100
-080101000809010008010100080501000818010108040100080201000802010008040100
-08040100080d010008020100080201000801010008020100080101000802010008030100
-08050100088a010108040100080201000802010008040100080401000876010108020100
-080101000851010108020103080101030802010008020100085201010801010308030103
-08040100084309010001060a090100010300020204010301020204000600010008010100
-080601000801010008090100080101000809010008010100080401000819010108040100
-08020100080201000804010008040100080d010008020100080201000801010008020100
-08010100080201000802010008060100088a010108040100080201000802010008040100
-080401000876010108020100080101000851010108050100080101000802010008010100
-080201000852010108010100080201000805010008040100084309010001060a09010001
-030002020401030102020400060001000802010008050100080101000809010008010100
-080901000801010008030100081a01010804010008020100080201000804010008040100
-080d01000802010008020100080101000802010008010100080201000802010008060100
-088a01010804010008020100080201000804010008040100087601010802010008010100
-085101010805010008010100080201000801010508510101080101000802010008050100
-08030100084409010001060a090100010300020204010301020204000600010008030100
-080401000801010008030101080301000801010008030101080301000801010008020100
-081b01010804010008020100080201000804010008040100080501010805010008020100
-08020100080101000802010008010101080101000801010008070100088a010108040100
-080201000802010008040100080401000876010108020100080101000851010108010100
-080201000801010008020100080501000852010108010100080201000801010008020100
-08030100084409010001060a090100010300020204010301020204000600010008040100
-080401010804010108040101080401010804010108020100081c01010804010008020100
-080201000804010008050101080301010805010008030102080301020802010008000101
-080201000805010408880101080401000802010008020100080401000805010108740101
-080301010852010108020102080301020806010008520101080201020803010208040100
-084409010001060a09010001030002020401030102020400060001000805010008230100
-081d010108390100089a0101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000849010108390100089a01010890010108580101
-08670101085709010001060a090100010300020204010301020204000600010008490101
-08390100089a0101089001010858010108670101085709010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000849010108d5010108900101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-0849010108d50101089001010858010108670101085709010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001ff01ff01d409010001060a0901
-0001030002020401030102020400060001ff01ff01d409010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000849010108d5010108900101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-0805010008230100081d0101089101000842010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000804010008040101080a0102
-080b010108020100081c010108100102081a0100081101020814010008170102081b0100
-08010104083b010108100102081a01000811010208140100083501010803010108520101
-08020102080301020803010208030102084c010108030100080401020803010208060100
-083b09010001060a09010001030002020401030102020400060001000803010008040100
-080101000808010008020100080901000801010008020100081b010108120100082f0100
-0814010008190100081a010008020100083f010108120100082f01000814010008350101
-080201000801010008510101080101000802010008010100080201000801010008020100
-0801010008020100084b0101080201010803010008020100080101000802010008040101
-083b09010001060a09010001030002020401030102020400060001000802010008050100
-08010100080c0100080901000801010008030100081a0101080201020802010008000101
-0805010008090100080001010802010008000101080301020802010108000100080c0100
-080301020803010208030101080001000802010208020100080001010804010108050100
-080301020803010208020100080001010805010008020100083f01010802010208020100
-080001010805010008090100080001010802010008000101080301020802010108000100
-080c01000803010208030102080301010800010008020102080201000800010108280101
-0802010008010100085101010801010008020100080101000809010008050100084b0101
-08010100080001000803010008050100080201000803010008000100083b09010001060a
-0901000103000202040103010202040006000100080101000806010008010100080c0100
-080901000801010008040100081901010801010008020100080101010801010008040100
-0809010108010100080101010801010008040100080201000800010008000100080b0100
-080201000802010008010100080201000801010008010101080101000802010008010101
-080101000803010108050100080201000802010008010100080201000801010108010100
-0803010008030103083c0101080101000802010008010101080101000804010008090101
-08010100080101010801010008040100080201000800010008000100080b010008020100
-080201000801010008020100080101000801010108010100080201000801010108010100
-082701010802010008010100085101010801010008020100080101000809010008050100
-084b0101080301000803010008050100080201000802010008010100083b09010001060a
-0901000103000202040103010202040006000100080001000807010008010100080b0100
-080a01000801010008050100081801010801010008020100080101000808010008090100
-080201000801010008080100080201000800010008000100080b01000802010008020100
-080501000801010008020100080101000802010008010100080f01000802010008020100
-080101000802010008010100080201000803010008070100083b01010801010008020100
-080101000808010008090100080201000801010008080100080201000800010008000100
-080b01000802010008020100080501000801010008020100080101000802010008010100
-082b010108020100080101000851010108020102080201030805010008050100084c0101
-0803010008030103080301020802010008020100083b09010001060a0901000103000202
-040103010202040006000100080101000806010008010100080a0100080b010008010100
-080401000819010108010104080101000808010008090100080201000801010008080100
-080201000800010008000100080b01000802010008020100080201030801010008020100
-0801010408010100080f0100080201000802010008010100080201000801010008020100
-0802010008080100083b0101080101040801010008080100080901000802010008010100
-08080100080201000800010008000100080b010008020100080201000802010308010100
-080201000801010408010100082b01010802010008010100085101010801010008020100
-08010100080201000803010008050100084d010108030100080301000802010008010100
-080201000801010008020100083b09010001060a09010001030002020401030102020400
-0600010008020100080501000801010008090100080c01000801010008030100081a0101
-080101000805010008080100080901000802010008010100080801000802010008000100
-08000100080b010008020100080201000801010008020100080101000802010008010100
-08050100080f010008020100080201000801010008020100080101000802010008020100
-0804010008020100083b0101080101000805010008080100080901000802010008010100
-08080100080201000800010008000100080b010008020100080201000801010008020100
-08010100080201000801010008050100082b010108020100080101000851010108010100
-0802010008010100080201000802010008050100084e0101080301000803010008020100
-080101000802010008010105083a09010001060a09010001030002020401030102020400
-060001000803010008040100080101000803010108020100080701010803010008010100
-08020100081b010108010100080201000801010008080100080901010801010008010100
-08080100080201000800010008000100080b010008020100080201000801010008020100
-080101000801010108010100080201000801010008070101080501000802010008020100
-08010100080201000801010108010100080101000805010008020100083b010108010100
-080201000801010008080100080901010801010008010100080801000802010008000100
-08000100080b010008020100080201000801010008020100080101000801010108010100
-0802010008010100082b0101080201000801010008510101080101000802010008010100
-080201000801010008050100084f01010803010008030100080201000801010008020100
-08050100083b09010001060a090100010300020204010301020204000600010008040100
-080401010804010108020104080301010804010108020100081c01010802010208020100
-0808010008090100080001010802010008080100080201000800010008000100080b0100
-080301020803010308020101080001000802010208020100080701010805010008030102
-0803010208020100080001010802010008060102083c0101080201020802010008080100
-08090100080001010802010008080100080201000800010008000100080b010008030102
-0803010308020101080001000802010208020100082b0101080301010852010108020102
-080301020802010408010104084b010108010104080201020803010208060100083b0901
-0001060a09010001030002020401030102020400060001000805010008230100081d0101
-08150105080101000819010508470100084d010108150105080101000819010508510101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-08490101081d010008670100084d0101081d010008710101085801010867010108570901
-0001060a090100010300020204010301020204000600010008490101081d010008670100
-084d0101081d0100087101010858010108670101085709010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000849010108d5010108900101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-0849010108d50101089001010858010108670101085709010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001ff01ff01d409010001060a0901
-0001030002020401030102020400060001ff01ff01d409010001060a0901000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000849010108d5010108900101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-0805010008230100081d010108670100086c010108900101085801010867010108570901
-0001060a09010001030002020401030102020400060001000804010008040101080d0100
-080a010108020100081c0101083b0100080b0102081b01000805010008650101082c0102
-086001010803010108520101080301000804010208030102085301010801010408030100
-08040102084309010001060a090100010300020204010301020204000600010008030100
-0804010008010100080b0101080901000801010008020100081b0101083b0100080d0100
-081a01000805010108650101082e01000860010108020100080101000851010108020101
-080301000802010008010100080201000852010108010100080601010803010008020100
-084209010001060a09010001030002020401030102020400060001000802010008050100
-08010100080a010008000100080901000801010008030100081a01010802010108000100
-080201020802010008000101080a01020802010008020100080201020802010008000101
-080201040803010108050100080301020803010208020100080001010805010008040100
-080001000865010108020102080201000800010108020100080001010803010208020100
-08000101080c010008030102080301010800010008020101080001000802010208020100
-08000101083d010108020100080101000851010108010100080001000803010008090100
-085201010801010008050100080001000803010008020100084209010001060a09010001
-030002020401030102020400060001000801010008060100080101000809010008010100
-080901000801010008040100081901010801010008010101080101000802010008010101
-080101000808010008020100080101000802010008010100080201000801010108010100
-080301000805010108050100080201000802010008010100080201000801010108010100
-080301000804010008010100086501010801010008020100080101010801010008010101
-0801010008010100080201000801010108010100080b0100080201000802010008010100
-08010101080101000801010108010100080201000801010108010100083c010108020100
-080101000851010108030100080301000809010008520101080101030804010008030100
-08020100084209010001060a090100010300020204010301020204000600010008000100
-080701000801010008080100080201000809010008010100080501000818010108010100
-080201000801010008020100080101000802010008080100080201000801010008020100
-0801010008020100080101000802010008030100080d0100080201000802010008010100
-080201000801010008020100080301000803010008020100086501010801010008020100
-0801010008050100080501000802010008010100080f0100080201000802010008010100
-080201000801010008020100080101000802010008010100084001010802010008010100
-085101010803010008030103080501000853010108050100080301000804010308420901
-0001060a0901000103000202040103010202040006000100080101000806010008010100
-080801000802010008090100080101000804010008190101080101000802010008010104
-080101000802010008080104080201000800010008020104080101000802010008030100
-080d01000802010008020100080101000802010008010100080201000802010008040100
-0802010008650101080101040801010008050100080501000802010008010100080f0100
-080201000802010008010100080201000801010008020100080101040801010008400101
-080201000801010008510101080301000803010008020100080301000854010108050100
-0803010008070100084209010001060a0901000103000202040103010202040006000100
-08020100080501000801010008080105080801000801010008030100081a010108010100
-080201000801010008050100080201000808010008060100080001000802010008050100
-0802010008030100080d0100080201000802010008010100080201000801010008020100
-080201000804010508640101080101000805010008050100080501000802010008010100
-080f01000802010008020100080101000802010008010100080201000801010008050100
-084001010802010008010100085101010803010008030100080201000802010008550101
-08010100080201000803010008070100084209010001060a090100010300020204010301
-020204000600010008030100080401000801010008030101080601000803010108030100
-0801010008020100081b0101080101000801010108010100080201000801010008020100
-080801000802010008030100080301000802010008010100080201000803010008050101
-080501000802010008020100080101000802010008010101080101000801010008090100
-0865010108010100080201000801010008050100080501000802010008010100080f0100
-080201000802010008010100080101010801010008010101080101000802010008010100
-084001010802010008010100085101010803010008030100080201000801010008560101
-0801010008020100080301000803010008020100084209010001060a0901000103000202
-040103010202040006000100080401000804010108040101080601000803010108040101
-08020100081c010108020101080001000802010208020100080201000809010208040100
-080401020802010008020100080401010803010108050100080301020803010208020100
-080001010802010008090100086501010802010208020100080501000806010208020100
-080f01000803010208030101080001000802010108000100080201020802010008400101
-080301010852010108010104080201020802010408520101080201020802010408020102
-084309010001060a09010001030002020401030102020400060001000805010008230100
-081d010108050100080e01050840010008770101082301050813010008050100084a0101
-0858010108670101085709010001060a0901000103000202040103010202040006000100
-084901010801010008020100085501000877010108390100080201000801010008020100
-084a01010858010108670101085709010001060a09010001030002020401030102020400
-0600010008490101080201020856010008770101083a010208030102084b010108580101
-08670101085709010001060a090100010300020204010301020204000600010008490101
-08d50101089001010858010108670101085709010001060a090100010300020204010301
-02020400060001000849010108d50101089001010858010108670101085709010001060a
-09010001030002020401030102020400060001000849010108d501010890010108580101
-08670101085709010001060a090100010300020204010301020204000600010008490101
-08d50101089001010858010108670101085709010001060a090100010300020204010301
-02020400060001ff01ff01d409010001060a090100010300020204010301020204000600
-00ff00ff00d409010001060a090100010300020204010301020204000600000008490001
-08d50001089000010858000108670001085709010001060a090100010300020204010301
-02020400060000000849000108d50001089000010858000108670001085709010001060a
-09010001030002020401030102020400060000000805000008230000081d0001086e0000
-08650001089000010858000108670001085709010001060a090100010300020204010301
-0202040006000000080400000804000108090004080a000108020000081c0001084f0002
-081b000008020002085f000108170002080500000812000008060000082e000008120002
-080300020805000108030001085200010805000008020002080400010853000108030000
-080400020803000208060000083b09010001060a09010001030002020401030102020400
-0600000008030000080400000801000008080000080d00000801000008020000081b0001
-08510000081a00000802000008020000085e000108190000081900000836000008140000
-080500000805000108020000080100000851000108040001080100000802000008020000
-0801000008520001080200010803000008020000080100000802000008040001083b0901
-0001060a0901000103000202040103010202040006000000080200000805000008010000
-08080000080d00000801000008030000081a000108020001080000000802000208020000
-08000001080a000208030002080200000800000108020000080200000802000208020000
-080000010804000108050000080300020803000208020000080000010805000008020000
-086200010802000208020000080000010802000008000001080500000803000208030002
-080300020802000408020002080300020802000008000001080a00020803000208020000
-080000010802000408010000080000010803000208050000080500000803000308020000
-080100000851000108030000080000000805000008020000080100000852000108010000
-080000000803000008050000080200000803000008000000083b09010001060a09010001
-0300020204010301020204000600000008010000080600000801000008080003080a0000
-080100000804000008190001080100000801000108010000080200000801000108010000
-080800000802000008010000080200000801000108010000080100000802000008010000
-080200000801000108010000080300010805000008020000080200000801000008020000
-080100010801000008030000080300000862000108010000080200000801000108010000
-080100010801000008040000080500000802000008020000080100000802000008030000
-080600000802000008020000080100010801000008080000080200000801000008020000
-080100010801000008030000080300010801000008010000080200000804000008050000
-080200000801000108020000080100000851000108020000080100000805000008020000
-0801000008520001080300000803000008050000080200000802000008010000083b0901
-0001060a0901000103000202040103010202040006000000080000000807000008010000
-080c00000809000008010000080500000818000108010000080200000801000008020000
-080100000802000008080000080500000802000008010000080500000802000008010000
-0802000008010000080f0000080200000802000008010000080200000801000008020000
-0803000008030003085f0001080500000801000008020000080100000802000008040000
-080500000802000008090000080300000806000008020000080200000801000008020000
-080800000805000008020000080100000802000008030000080300000805000008020000
-080400000805000008020000080100010802000008010000085100010801000008020000
-080300010803000008010000085200010803000008030003080300020802000008020000
-083b09010001060a09010001030002020401030102020400060000000801000008060000
-08010000080c000008090000080100000804000008190001080100000802000008010004
-080100000802000008090002080200040801000008060000080000000802000408010000
-080f00000802000008020000080100000802000008010000080200000802000008040000
-08020000085e000108020003080100000802000008010000080200000804000008050000
-080200000806000308030000080600000802000008020000080100000802000008080000
-080500000802000008010000080200000803000008030000080500000802000008040000
-080500000802000408020000080100000851000108010000080200000805000008020000
-080100000852000108030000080300000802000008010000080200000801000008020000
-083b09010001060a09010001030002020401030102020400060000000802000008050000
-080100000808000008020000080900000801000008030000081a00010801000008020000
-080100000805000008020000080c00000801000008050000080600000800000008020000
-08050000080f000008020000080200000801000008020000080100000802000008020000
-0804000008020000085e0001080100000802000008010000080200000801000008020000
-080400000805000008020000080500000802000008030000080600000802000008020000
-080100000802000008080000080500000802000008010000080200000803000008030000
-080500000802000008040000080500000802000008010001080200000801000008510001
-080100050804000008020000080100000852000108030000080300000802000008010000
-0802000008010005083a09010001060a0901000103000202040103010202040006000000
-080300000804000008010000080300010802000008020000080300010803000008010000
-08020000081b000108010000080100010801000008020000080100000802000008080000
-080200000801000008020000080100000807000008030000080200000801000008070001
-080500000802000008020000080100000802000008010001080100000801000008050000
-08020000085e000108010000080200000801000108010000080100010801000008040000
-080500000802000008020000080100000802000008030000080600000802000008020000
-080100000802000008080000080200000801000008020000080100000802000008030000
-080300000805000008020000080400000805000008020000080100010802000008010000
-085100010805000008010000080200000802000008010000085200010803000008030000
-08020000080100000802000008050000083b09010001060a090100010300020204010301
-020204000600000008040000080400010804000108030002080400010804000108020000
-081c00010802000108000000080200020802000008020000080900020803000208020000
-080700000804000208020000080700010805000008030002080300020802000008000001
-0802000008060002085f0001080200030801000008000001080200000800000108050000
-080500000803000208030003080400010804000008030002080200000802000008090002
-080300020802000008020000080400010801000008060002080500000805000008030003
-080300010852000108050000080200020804000108530001080100040802000208030002
-08060000083b09010001060a090100010300020204010301020204000600000008050000
-08230000081d000108050000080e000508470000087000010808000008050000083c0005
-083c00010858000108670001085709010001060a09010001030002020401030102020400
-06000000084900010801000008020000085c0000087000010808000008050000087f0001
-0858000108670001085709010001060a0901000103000202040103010202040006000000
-0849000108020002085d0000087000010808000008050000087f00010858000108670001
-085709010001060a09010001030002020401030102020400060000000849000108d50001
-089000010858000108670001085709010001060a09010001030002020401030102020400
-060000000849000108d50001089000010858000108670001085709010001060a09010001
-030002020401030102020400060000000849000108d50001089000010858000108670001
-085709010001060a09010001030002020401030102020400060000000849000108d50001
-089000010858000108670001085709010001060a09010001030002020401030102020400
-060000ff00ff00d409010001060a09010001030002020401030102020400060001ff01ff
-01d409010001060a09010001030002020401030102020400060001000849010108d50101
-089001010858010108670101085709010001060a09010001030002020401030102020400
-060001000849010108d50101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000805010008230100081d010108c90100080a0101
-089001010858010108670101085709010001060a09010001030002020401030102020400
-060001000804010008040101080a0102080b010108020100081c01010817010208050100
-0812010008060100082e01000829010008110102081b0100080201020804010108900101
-08030101085201010803010008040102085a010108020102080301020804010108430901
-0001060a0901000103000202040103010202040006000100080301000804010008010100
-0808010008020100080901000801010008020100081b0101081901000819010008360100
-083e0100081a010008020100080201000803010108900101080201000801010008510101
-080201010803010008020100085901010801010008020100080101000802010008020100
-08010100084209010001060a090100010300020204010301020204000600010008020100
-080501000801010008080100080d01000801010008030100081a01010802010208020100
-080001010802010008000101080501000803010208030102080301020802010408020102
-080301020802010008000101080901010800010008030102080301020802010408020102
-080201000800010108040101080201010800010008030102080301020802010008000101
-080c01000803010208030102080201000800010108050100080601000803010108900101
-080201000801010008510101080101000800010008070100085901010805010008050100
-0802010008010100084209010001060a0901000103000202040103010202040006000100
-08010100080601000801010008080100080d010008010100080401000819010108010100
-080201000801010108010100080101010801010008040100080501000802010008020100
-080101000802010008030100080601000802010008020100080101010801010008080100
-080001000800010008010100080201000801010008020100080301000803010008020100
-080101010801010008030101080201000800010008000100080101000802010008040100
-0802010108010100080b0100080201000802010008010100080201000801010108010100
-080301000807010008030101089001010802010008010100085101010803010008070100
-0859010108050100080501000802010008010100084209010001060a0901000103000202
-04010301020204000600010008000100080701000801010008080103080a010008010100
-080501000818010108050100080101000802010008010100080201000804010008050100
-080201000809010008030100080601000802010008020100080101000802010008080100
-0800010008000100080501000801010008070100080301000802010008010100080c0100
-080001000800010008050100080401000802010008020100080b01000802010008020100
-080101000802010008010100080201000803010008060100080401010890010108020100
-08010100085101010803010008060100085a010108030101080501000803010008010100
-084209010001060a09010001030002020401030102020400060001000801010008060100
-080101000808010008020100080901000801010008040100081901010802010308010100
-080201000801010008020100080401000805010008020100080601030803010008060100
-080201000802010008010100080201000808010008000100080001000802010308020102
-080401000803010408010100080c01000800010008000100080201030804010008020100
-08020100080b010008020100080201000801010008020100080101000802010008020100
-0806010008050101089001010802010008010100085101010803010008050100085b0101
-08050100080301000804010008010100084209010001060a090100010300020204010301
-020204000600010008020100080501000801010008080100080201000809010008010100
-08030100081a010108010100080201000801010008020100080101000802010008040100
-080501000802010008050100080201000803010008060100080201000802010008010100
-080201000808010008000100080001000801010008020100080501000803010008030100
-08050100080c010008000100080001000801010008020100080401000802010008020100
-080b01000802010008020100080101000802010008010100080201000802010008050100
-08060101089001010802010008010100085101010803010008040100085c010108050100
-080201000805010008010100084209010001060a09010001030002020401030102020400
-060001000803010008040100080101000803010108020100080201000803010108030100
-0801010008020100081b0101080101000802010008010101080101000801010108010100
-080401000805010008020100080201000801010008020100080301000806010008020100
-080201000801010008020100080801000800010008000100080101000802010008010100
-080201000803010008030100080201000801010008070101080201000800010008000100
-0801010008020100080401000802010008020100080b0100080201000802010008010100
-080201000801010108010100080101000805010008070101089001010802010008010100
-085101010803010008030100085d01010801010008020100080101000806010008010100
-084209010001060a09010001030002020401030102020400060001000804010008040101
-0804010108030102080401010804010108020100081c0101080201030801010008000101
-080201000800010108050100080501000803010208030103080401010804010008030102
-080201000802010008080100080001000800010008020103080201020805010108020102
-080201000807010108020100080001000800010008020103080401000802010008020100
-080b01000803010208030102080201000800010108020100080501040803010108900101
-080301010852010108010104080101040859010108020102080201040803010108430901
-0001060a09010001030002020401030102020400060001000805010008230100081d0101
-0808010008050100083c0105084d01050816010008150101089001010858010108670101
-085709010001060a09010001030002020401030102020400060001000849010108080100
-0805010008ad010008150101089001010858010108670101085709010001060a09010001
-0300020204010301020204000600010008490101080801000805010008ad010008150101
-089001010858010108670101085709010001060a09010001030002020401030102020400
-060001000849010108d50101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-085709010001060a09010001030002020401030102020400060001000849010108d50101
-089001010858010108670101085709010001060a09010001030002020401030102020400
-060001000849010108d50101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001ff01ff01d409010001060a09010001030002020401
-030102020400060001ff01ff01d409010001060a09010001030002020401030102020400
-060001000849010108d50101089001010858010108670101085709010001060a09010001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-085709010001060a09010001030002020401030102020400060001000805010008230100
-081d010108bb010008180101089001010858010108670101085709010001060a09010001
-03000202040103010202040006000100080401000804010108090104080a010108020100
-081c010108170102080501000812010008060100082e0100081901020821010008040100
-0807010008050100081101010890010108030101085201010805010008020102085a0101
-080201020803010208030102084309010001060a09010001030002020401030102020400
-060001000803010008040100080101000808010008020100080901000801010008020100
-081b0101081901000819010008360100081b010008270100080601000805010108110101
-089001010802010008010100085101010804010108010100080201000859010108010100
-0802010008010100080201000801010008020100084209010001060a0901000103000202
-040103010202040006000100080201000805010008010100080c01000809010008010100
-08030100081a010108020102080201000800010108020100080001010805010008030102
-080301020803010208020104080201020803010208020100080001010809010108000100
-080301020803010208020104080201020802010008000101080401010805010008030102
-080301020802010008000101080a01020802010408040100080401000800010008110101
-089001010802010008010100085101010803010008000100080501000859010108050100
-080101000802010008010100084609010001060a09010001030002020401030102020400
-06000100080101000806010008010100080b0100080a0100080101000804010008190101
-080101000802010008010101080101000801010108010100080401000805010008020100
-080201000801010008020100080301000806010008020100080201000801010108010100
-080801000800010008000100080101000802010008010100080201000803010008030100
-080201000801010108010100080301010805010008020100080201000801010008020100
-0801010108010100080b0100080401000805010008040100080101000811010108900101
-080201000801010008510101080201000801010008050100085901010805010008010100
-0802010008010100084609010001090c0001030002020401030102020400060001000800
-01000807010008010100080b0100080a0100080101000805010008180101080501000801
-010008020100080101000802010008040100080501000802010008090100080301000806
-010008020100080201000801010008020100080801000800010008000100080501000801
-010008070100080301000802010008010100080f01000802010008020100080101000802
-01000801010008020100080b010008040100080501000803010008020100081101010890
-0101080201000801010008510101080101000802010008040100085a0101080401000803
-010208020103084309010000090d00010300020204010301020204000600010008010100
-0806010008010100080b0100080a01000801010008040100081901010802010308010100
-080201000801010008020100080401000805010008020100080601030803010008060100
-080201000802010008010100080201000808010008000100080001000802010308020102
-080401000803010408010100080f01000802010008020100080101000802010008010100
-08020100080b010008040100080401000804010008020100081101010890010108020100
-0801010008510101080101000802010008030100085b0101080301000803010008020100
-080101000802010008420901070e00010300020204010301020204000600010008020100
-0805010008010100080a0100080b01000801010008030100081a01010801010008020100
-080101000802010008010100080201000804010008050100080201000805010008020100
-080301000806010008020100080201000801010008020100080801000800010008000100
-080101000802010008050100080301000803010008050100080f01000802010008020100
-08010100080201000801010008020100080b010008040100080401000804010508100101
-089001010802010008010100085101010801010508010100085c01010802010008040100
-08020100080101000802010008420901070e000103000202040103010202040006000100
-080301000804010008010100080301010804010008050101080301000801010008020100
-081b01010801010008020100080101010801010008010101080101000804010008050100
-080201000802010008010100080201000803010008060100080201000802010008010100
-080201000808010008000100080001000801010008020100080101000802010008030100
-080301000802010008010100080701010805010008020100080201000801010008020100
-0801010108010100080b0100080401000803010008090100081101010890010108020100
-08010100085101010805010008010100085d010108010100080501000802010008010100
-0802010008420901070e0001030002020401030102020400060001000804010008040101
-0804010108040100080501010804010108020100081c0101080201030801010008000101
-080201000800010108050100080501000803010208030103080401010804010008030102
-080201000802010008080100080001000800010008020103080201020805010108020102
-08020100080701010805010008030102080301020802010008000101080c010008050101
-080101000809010008110101089001010803010108520101080501000801010408590101
-08010104080201020803010208430901070e000103000202040103010202040006000100
-0805010008230100081d01010808010008050100083c01050847010008040105082d0101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-084901010808010008050100088a01000838010108900101085801010867010108570901
-070e000103000202040103010202040006000100084901010808010008050100088a0100
-0838010108900101085801010867010108570901070e0001030002020401030102020400
-060001000849010108d5010108900101085801010867010108570901070e000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-070e0001030002020401030102020400060001000849010108d501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e0001030002020401030102020400060001ff
-01ff01d40901070e0001030002020401030102020400060001ff01ff01d40901070e0001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-08570901070e0001030002020401030102020400060001000849010108d5010108900101
-085801010867010108570901070e00010300020204010301020204000600010008050100
-08230100081d0101086e01000865010108900101085801010867010108570901070e0001
-030002020401030102020400060001000804010008040101080a0102080b010108020100
-081c0101084f0102081b010008020102085f010108010100082201020867010108030101
-085201010801010408030101080601000852010108030100080401020803010208060100
-083b0901070e000103000202040103010202040006000100080301000804010008010100
-0808010008020100080901000801010008020100081b010108510100081a010008020100
-08020100085e010108010100082401000867010108020100080101000851010108010100
-080601000801010008040101085201010802010108030100080201000801010008020100
-08040101083b0901070e0001030002020401030102020400060001000802010008050100
-080101000808010008020100080901000801010008030100081a01010802010108000100
-080201020802010008000101080a01020803010208020100080001010802010008020100
-080201020802010008000101080401010805010008030102080301020802010008000101
-080501000802010008620101080101000801010008030102080201000800010108020100
-080001010803010208050100080a010208020100080201000801010008000101084b0101
-080201000801010008510101080101000806010008010100080301000800010008520101
-08010100080001000803010008050100080201000803010008000100083b0901070e0001
-030002020401030102020400060001000801010008060100080101000808010008020100
-080901000801010008040100081901010801010008010101080101000802010008010101
-080101000808010008020100080101000802010008010101080101000801010008020100
-080101000802010008010101080101000803010108050100080201000802010008010100
-080201000801010108010100080301000803010008620101080101000800010008030100
-080201000801010108010100080101010801010008010100080201000804010008090100
-0802010008010100080201000801010108010100084a0101080201000801010008510101
-080101030803010008010100080201000801010008520101080301000803010008050100
-080201000802010008010100083b0901070e000103000202040103010202040006000100
-08000100080701000801010008090102080a010008010100080501000818010108010100
-080201000801010008020100080101000802010008080100080501000802010008010100
-0805010008020100080101000802010008010100080f0100080201000802010008010100
-0802010008010100080201000803010008030103085f0101080101010804010008020100
-080101000805010008020100080101000802010008040100080901000805010008020100
-0801010008020100084a0101080201000801010008510101080501000802010008010100
-0801010008020100085201010803010008030103080301020802010008020100083b0901
-070e00010300020204010301020204000600010008010100080601000801010008080100
-080201000809010008010100080401000819010108010100080201000801010408010100
-0802010008090102080201040801010008060100080001000802010408010100080f0100
-080201000802010008010100080201000801010008020100080201000804010008020100
-085e010108010101080401040801010008050100080201000801010408040100080a0102
-08020100080201000801010008020100084a010108020100080101000851010108050100
-080201000801010008010100080201000852010108030100080301000802010008010100
-080201000801010008020100083b0901070e000103000202040103010202040006000100
-0802010008050100080101000808010008020100080901000801010008030100081a0101
-0801010008020100080101000805010008020100080c0100080101000805010008060100
-080001000802010008050100080f01000802010008020100080101000802010008010100
-08020100080201000804010008020100085e010108010100080001000803010008050100
-08050100080201000801010008080100080d010008010100080201000801010008020100
-084a01010802010008010100085101010801010008020100080201000801010008010105
-08510101080301000803010008020100080101000802010008010105083a0901070e0001
-030002020401030102020400060001000803010008040100080101000803010108020100
-0802010008030101080301000801010008020100081b0101080101000801010108010100
-080201000801010008020100080801000802010008010100080201000801010008070100
-080301000802010008010100080701010805010008020100080201000801010008020100
-0801010108010100080101000805010008020100085e0101080101000801010008020100
-080201000801010008050100080201000801010008020100080401000809010008020100
-08010100080101010801010108010100084a010108020100080101000851010108010100
-080201000802010008010100080501000852010108030100080301000802010008010100
-0802010008050100083b0901070e00010300020204010301020204000600010008040100
-080401010804010108030102080401010804010108020100081c01010802010108000100
-080201020802010008020100080901020803010208020100080701000804010208020100
-0807010108050100080301020803010208020100080001010802010008060102085f0101
-0801010008020100080201020802010008050100080201000802010208050100080a0102
-08030101080001000801010008000101084b010108030101085201010802010208040101
-080601000852010108010104080201020803010208060100083b0901070e000103000202
-0401030102020400060001000805010008230100081d010108050100080e010508470100
-08700101082a0105080f0100084e0101085801010867010108570901070e000103000202
-040103010202040006000100084901010801010008020100085c01000870010108400100
-084e0101085801010867010108570901070e000103000202040103010202040006000100
-0849010108020102085d01000870010108400100084e0101085801010867010108570901
-070e0001030002020401030102020400060001000849010108d501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-02020400060001000849010108d5010108900101085801010867010108570901070e0001
-030002020401030102020400060001ff01ff01d40901070e000103000202040103010202
-0400060001ff01ff01d40901070e00010300020204010301020204000600010008490101
-08d5010108900101085801010867010108570901070e0001030002020401030102020400
-060001000849010108d5010108900101085801010867010108570901070e000103000202
-0401030102020400060001000805010008230100081d0101086e01000865010108900101
-085801010867010108570901070e00010300020204010301020204000600010008040100
-08040101080a0102080b010108020100081c0101084f0102081b010008020102085f0101
-0890010108030101085201010802010208030102085a0101080201020803010208030102
-08430901070e000103000202040103010202040006000100080301000804010008010100
-0808010008020100080901000801010008020100081b010108510100081a010008020100
-08020100085e010108900101080201000801010008510101080101000802010008010100
-080201000859010108010100080201000801010008020100080101000802010008420901
-070e00010300020204010301020204000600010008020100080501000801010008080100
-08020100080901000801010008030100081a010108020101080001000802010208020100
-08000101080a010208030102080201000800010108020100080201000802010208020100
-080001010804010108050100080301020803010208020100080001010805010008020100
-086201010801010008000101080301020802010008020100087b01010802010008010100
-085101010805010008050100085901010805010008010100080201000801010008460901
-070e00010300020204010301020204000600010008010100080601000801010008080100
-080201000809010008010100080401000819010108010100080101010801010008020100
-080101010801010008080100080201000801010008020100080101010801010008010100
-080201000801010008020100080101010801010008030101080501000802010008020100
-080101000802010008010101080101000803010008030100086201010801010108010100
-08010100080201000801010008020100087b010108020100080101000851010108050100
-08050100085901010805010008010100080201000801010008460901070e000103000202
-040103010202040006000100080001000807010008010100080901030809010008010100
-080501000818010108010100080201000801010008020100080101000802010008080100
-0805010008020100080101000805010008020100080101000802010008010100080f0100
-0802010008020100080101000802010008010100080201000803010008030103085f0101
-0801010008050100080201000802010008000100087c0101080201000801010008510101
-0804010008050100085a010108040100080301020802010308430901070e000103000202
-040103010202040006000100080101000806010008010100080c01000809010008010100
-080401000819010108010100080201000801010408010100080201000809010208020104
-0801010008060100080001000802010408010100080f0100080201000802010008010100
-080201000801010008020100080201000804010008020100085e01010801010008050104
-08030100087d01010802010008010100085101010803010008050100085b010108030100
-0803010008020100080101000802010008420901070e0001030002020401030102020400
-06000100080201000805010008010100080c0100080901000801010008030100081a0101
-0801010008020100080101000805010008020100080c0100080101000805010008060100
-080001000802010008050100080f01000802010008020100080101000802010008010100
-08020100080201000804010008020100085e010108010100080501000806010008000100
-087c01010802010008010100085101010802010008050100085c01010802010008040100
-08020100080101000802010008420901070e000103000202040103010202040006000100
-080301000804010008010100080301010802010008020100080301010803010008010100
-08020100081b010108010100080101010801010008020100080101000802010008080100
-080201000801010008020100080101000807010008030100080201000801010008070101
-080501000802010008020100080101000802010008010101080101000801010008050100
-08020100085e01010801010008050100080201000801010008020100087b010108020100
-08010100085101010801010008050100085d010108010100080501000802010008010100
-0802010008420901070e0001030002020401030102020400060001000804010008040101
-0804010108030102080401010804010108020100081c0101080201010800010008020102
-080201000802010008090102080301020802010008070100080401020802010008070101
-08050100080301020803010208020100080001010802010008060102085f010108010100
-080601020802010008020100087b01010803010108520101080101040801010408590101
-08010104080201020803010208430901070e000103000202040103010202040006000100
-0805010008230100081d010108050100080e010508470100087001010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108010100
-08020100085c01000870010108900101085801010867010108570901070e000103000202
-0401030102020400060001000849010108020102085d0100087001010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-02020400060001000849010108d5010108900101085801010867010108570901070e0001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-08570901070e0001030002020401030102020400060001ff01ff01d40901070e00010300
-02020401030102020400060001ff01ff01d40901070e0001030002020401030102020400
-060001000849010108d5010108900101085801010867010108570901070e000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-070e00010300020204010301020204000600010008050100082a010008160101086e0100
-0865010108900101085801010867010108570901070e0001030002020401030102020400
-060001000804010008040101080b010008050101080b01010802010008150101084f0102
-081b010008020102085f01010809010208090100080d0102086701010803010108520101
-0802010208030102085a010108020102080201040801010408420901070e000103000202
-040103010202040006000100080301000804010008010100080901010804010008010100
-0809010008010100080201000814010108510100081a01000802010008020100085e0101
-080b010008090100080f0100086701010802010008010100085101010801010008020100
-080101000802010008590101080101000802010008010100080201000801010008460901
-070e00010300020204010301020204000600010008020100080501000801010008080100
-080001000804010008010100080901000801010008030100081301010802010108000100
-080201020802010008000101080a01020803010208020100080001010802010008020100
-080201020802010008000101080401010805010008030102080301020802010008000101
-080501000802010008620101080201010800010008040100080301020802010008000101
-0803010208050100080901000800010108030102080201010800010008030102080a0102
-080301020802010008000101080201000802010008020102080201000800010108130101
-080201000801010008510101080101000802010008010100080201000859010108050100
-080501000801010008460901070e00010300020204010301020204000600010008010100
-0806010008010100080a0100080401000801010008090100080101000804010008120101
-080101000801010108010100080201000801010108010100080801000802010008010100
-080201000801010108010100080101000802010008010100080201000801010108010100
-080301010805010008020100080201000801010008020100080101010801010008030100
-080301000862010108010100080101010804010008020100080201000801010108010100
-080101000802010008040100080901010801010008010100080201000801010008000100
-080001000801010008020100080801000802010008010100080201000801010108010100
-080101000802010008010100080201000801010108010100081201010802010008010100
-085101010801010008020100080101000802010008590101080501000804010008020103
-08430901070e000103000202040103010202040006000100080001000807010008010100
-080a01000804010008010100080901000801010008050100081101010801010008020100
-080101000802010008010100080201000808010008050100080201000801010008050100
-08020100080101000802010008010100080f010008020100080201000801010008020100
-08010100080201000803010008030103085f010108010100080201000804010008020100
-080201000801010008020100080501000804010008090100080201000805010008010100
-080001000800010008010100080201000808010008050100080201000801010008050100
-080201000801010008020100080101000816010108020100080101000851010108020102
-08030102085a010108030101080501000806010008420901070e00010300020204010301
-0202040006000100080101000806010008010100080a0100080401000801010008090100
-080101000804010008120101080101000802010008010104080101000802010008090102
-080201040801010008060100080001000802010408010100080f01000802010008020100
-08010100080201000801010008020100080201000804010008020100085e010108010100
-080201000804010008020100080201000801010008020100080201030804010008090100
-080201000802010308010100080001000800010008010104080901020802010408010100
-080601000800010008020104080101000816010108020100080101000851010108010100
-0802010008010100080201000859010108050100080401000806010008420901070e0001
-03000202040103010202040006000100080201000805010008010100080a010008040100
-080101000809010008010100080301000813010108010100080201000801010008050100
-08020100080c0100080101000805010008060100080001000802010008050100080f0100
-080201000802010008010100080201000801010008020100080201000804010008020100
-085e01010801010008020100080401000802010008020100080101000802010008010100
-080201000804010008090100080201000801010008020100080101000800010008000100
-080101000810010008010100080501000806010008000100080201000805010008160101
-080201000801010008510101080101000802010008010100080201000859010108050100
-08030100080301000802010008420901070e000103000202040103010202040006000100
-080301000804010008010100080301010804010008040100080101000803010108030100
-080101000802010008140101080101000801010108010100080201000801010008020100
-080801000802010008010100080201000801010008070100080301000802010008010100
-080701010805010008020100080201000801010008020100080101010801010008010100
-0805010008020100085e0101080101000801010108040100080201000802010008010101
-080101000801010008020100080401000809010008020100080101000802010008010100
-080001000800010008010100080201000808010008020100080101000802010008010100
-080701000803010008020100080101000816010108020100080101000851010108010100
-080201000801010008020100085901010801010008020100080301000803010008020100
-08420901070e000103000202040103010202040006000100080401000804010108040101
-080201040803010108040101080401010802010008150101080201010800010008020102
-080201000802010008090102080301020802010008070100080401020802010008070101
-08050100080301020803010208020100080001010802010008060102085f010108020101
-080001000804010008030102080201000800010108030103080401000809010008020100
-0802010308010100080001000800010008020102080a0102080301020802010008070100
-08040102080201000816010108030101085201010802010208030102085a010108020102
-080401000804010208430901070e00010300020204010301020204000600010008050100
-082a01000816010108050100080e010508470100087001010805010008230105081c0105
-083c0101085801010867010108570901070e000103000202040103010202040006000100
-084901010801010008020100085c01000870010108010100080201000889010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108020102
-085d01000870010108020102088a0101085801010867010108570901070e000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-070e0001030002020401030102020400060001000849010108d501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-02020400060001ff01ff01d40901070e0001030002020401030102020400060001ff01ff
-01d40901070e0001030002020401030102020400060001000849010108d5010108900101
-085801010867010108570901070e00010300020204010301020204000600010008490101
-08d5010108900101085801010867010108570901070e0001030002020401030102020400
-0600010008050100082a010008160101086e010008650101089001010858010108670101
-08570901070e0001030002020401030102020400060001000804010008040101080b0100
-08050100080c01010802010008150101084f0102081b010008020102085f010108110100
-087d01010803010108520101080301000805010008040102085301010802010208030102
-0804010108430901070e0001030002020401030102020400060001000803010008040100
-080101000809010108040101080b010008010100080201000814010108510100081a0100
-0802010008020100085e010108110100087d010108020100080101000851010108020101
-080401010803010008020100085201010801010008020100080101000802010008020100
-0801010008420901070e0001030002020401030102020400060001000802010008050100
-0801010008080100080001000803010008000100080b0100080101000803010008130101
-0802010108000100080201020802010008000101080a0102080301020802010008000101
-080201000802010008020102080201000800010108040101080501000803010208030102
-080201000800010108050100080201000862010108010100080001010803010208020104
-080901020802010008020100080101000800010108600101080201000801010008510101
-080101000800010008030100080001000803010008560101080501000805010008020100
-0801010008420901070e0001030002020401030102020400060001000801010008060100
-08010100080a010008050100080b01000801010008040100081201010801010008010101
-080101000802010008010101080101000808010008020100080101000802010008010101
-080101000801010008020100080101000802010008010101080101000803010108050100
-080201000802010008010100080201000801010108010100080301000803010008620101
-0801010108010100080101000802010008030100080a0100080201000801010008020100
-0801010108010100085f0101080201000801010008510101080301000805010008030100
-085601010805010008050100080201000801010008420901070e00010300020204010301
-0202040006000100080001000807010008010100080a010008050100080b010008010100
-080501000811010108010100080201000801010008020100080101000802010008080100
-0805010008020100080101000805010008020100080101000802010008010100080f0100
-0802010008020100080101000802010008010100080201000803010008030103085f0101
-0801010008020100080101000802010008030100080a0100080501000802010008010100
-08020100085f010108020100080101000851010108030100080501000803010308530101
-0803010108050100080301000801010008420901070e0001030002020401030102020400
-06000100080101000806010008010100080a010008050100080b01000801010008040100
-081201010801010008020100080101040801010008020100080901020802010408010100
-08060100080001000802010408010100080f010008020100080201000801010008020100
-0801010008020100080201000804010008020100085e0101080101000802010008010104
-08030100080b010208020100080201000801010008020100085f01010802010008010100
-085101010803010008050100080301000802010008520101080501000803010008040100
-0801010008420901070e0001030002020401030102020400060001000802010008050100
-08010100080a010008050100080b01000801010008030100081301010801010008020100
-080101000805010008020100080c01000801010008050100080601000800010008020100
-08050100080f010008020100080201000801010008020100080101000802010008020100
-0804010008020100085e010108010100080201000801010008070100080e010008010100
-080201000801010008020100085f01010802010008010100085101010803010008050100
-0803010008020100085201010805010008020100080501000801010008420901070e0001
-030002020401030102020400060001000803010008040100080101000803010108040100
-080501000805010108030100080101000802010008140101080101000801010108010100
-080201000801010008020100080801000802010008010100080201000801010008070100
-080301000802010008010100080701010805010008020100080201000801010008020100
-0801010108010100080101000805010008020100085e0101080101000802010008010100
-0802010008030100080a01000802010008010100080101010801010108010100085f0101
-080201000801010008510101080301000805010008030100080201000852010108010100
-0802010008010100080601000801010008420901070e0001030002020401030102020400
-060001000804010008040101080401010802010408010104080301010804010108020100
-081501010802010108000100080201020802010008020100080901020803010208020100
-080701000804010208020100080701010805010008030102080301020802010008000101
-0802010008060102085f0101080101000802010008020102080501010809010208030101
-080001000801010008000101086001010803010108520101080101040801010408020102
-0853010108020102080201040803010108430901070e0001030002020401030102020400
-0600010008050100082a01000816010108050100080e0105084701000870010108150105
-080f010008630101085801010867010108570901070e0001030002020401030102020400
-06000100084901010801010008020100085c010008700101082b01000863010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108020102
-085d010008700101082b010008630101085801010867010108570901070e000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-070e0001030002020401030102020400060001000849010108d501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-02020400060001ff01ff01d40901070e0001030002020401030102020400060001ff01ff
-01d40901070e0001030002020401030102020400060001000849010108d5010108900101
-085801010867010108570901070e00010300020204010301020204000600010008490101
-08d5010108900101085801010867010108570901070e0001030002020401030102020400
-0600010008050100082a010008160101086e010008650101089001010858010108670101
-08570901070e0001030002020401030102020400060001000804010008040101080b0100
-08040102080b01010802010008150101084f0102081b010008020102085f010108110100
-080301000878010108030101085201010802010208030102085a01010802010208030102
-0804010008440901070e0001030002020401030102020400060001000803010008040100
-080101000809010108030100080201000809010008010100080201000814010108510100
-081a01000802010008020100085e01010811010008030100087801010802010008010100
-085101010801010008020100080101000802010008590101080101000802010008010100
-080201000802010108440901070e00010300020204010301020204000600010008020100
-080501000801010008080100080001000807010008090100080101000803010008130101
-0802010108000100080201020802010008000101080a0102080301020802010008000101
-080201000802010008020102080201000800010108040101080501000803010208030102
-080201000800010108050100080201000862010108020102080201000802010008010104
-080101000800010108750101080201000801010008510101080501000805010008590101
-0805010008050100080101000800010008440901070e0001030002020401030102020400
-06000100080101000806010008010100080a010008070100080901000801010008040100
-081201010801010008010101080101000802010008010101080101000808010008020100
-080101000802010008010101080101000801010008020100080101000802010008010101
-080101000803010108050100080201000802010008010100080201000801010108010100
-080301000803010008620101080101000802010008010100080201000803010008030101
-080101000874010108020100080101000851010108050100080501000859010108050100
-080501000803010008440901070e00010300020204010301020204000600010008000100
-0807010008010100080a010008060100080a010008010100080501000811010108010100
-080201000801010008020100080101000802010008080100080501000802010008010100
-0805010008020100080101000802010008010100080f0100080201000802010008010100
-0802010008010100080201000803010008030103085f0101080501000801010008020100
-080301000803010008020100087401010802010008010100085101010804010008050100
-085a010108040100080401010804010008440901070e0001030002020401030102020400
-06000100080101000806010008010100080a010008050100080b01000801010008040100
-081201010801010008020100080101040801010008020100080901020802010408010100
-08060100080001000802010408010100080f010008020100080201000801010008020100
-0801010008020100080201000804010008020100085e0101080201030801010008020100
-080301000803010008020100087401010802010008010100085101010803010008050100
-085b010108030100080701000803010008440901070e0001030002020401030102020400
-06000100080201000805010008010100080a010008040100080c01000801010008030100
-081301010801010008020100080101000805010008020100080c01000801010008050100
-08060100080001000802010008050100080f010008020100080201000801010008020100
-0801010008020100080201000804010008020100085e0101080101000802010008010100
-080201000803010008030100080201000874010108020100080101000851010108020100
-08050100085c010108020100080801000803010008440901070e00010300020204010301
-020204000600010008030100080401000801010008030101080401000803010008070101
-080301000801010008020100081401010801010008010101080101000802010008010100
-080201000808010008020100080101000802010008010100080701000803010008020100
-080101000807010108050100080201000802010008010100080201000801010108010100
-080101000805010008020100085e01010801010008020100080101000801010108030100
-0803010008020100087401010802010008010100085101010801010008050100085d0101
-0801010008050100080201000803010008440901070e0001030002020401030102020400
-060001000804010008040101080401010802010408010104080301010804010108020100
-081501010802010108000100080201020802010008020100080901020803010208020100
-080701000804010208020100080701010805010008030102080301020802010008000101
-0802010008060102085f0101080201030802010108000100080401010801010008020100
-087401010803010108520101080101040801010408590101080101040802010208020104
-08420901070e00010300020204010301020204000600010008050100082a010008160101
-08050100080e0105084701000870010108900101085801010867010108570901070e0001
-03000202040103010202040006000100084901010801010008020100085c010008700101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108020102085d01000870010108900101085801010867010108570901070e0001
-030002020401030102020400060001000849010108d50101089001010858010108670101
-08570901070e0001030002020401030102020400060001000849010108d5010108900101
-085801010867010108570901070e00010300020204010301020204000600010008490101
-08d5010108900101085801010867010108570901070e0001030002020401030102020400
-060001000849010108d5010108900101085801010867010108570901070e000103000202
-0401030102020400060001ff01ff01d40901070e00010300020204010301020204000600
-01ff01ff01d40901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-020204000600010008050100082a010008160101086e0100086501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000804010008040101
-080b010008040102080b01010802010008150101084f0102081b010008020102085f0101
-08110100080a010008220102084b01010803010108520101080101040805010008050100
-0852010108020102080201040801010408420901070e0001030002020401030102020400
-060001000803010008040100080101000809010108030100080201000809010008010100
-080201000814010108510100081a01000802010008020100085e010108110100080a0100
-08240100084b010108020100080101000851010108010100080801010804010108520101
-080101000802010008010100080201000801010008460901070e00010300020204010301
-020204000600010008020100080501000801010008080100080001000807010008090100
-0801010008030100081301010802010108000100080201020802010008000101080a0102
-080301020802010008000101080201000802010008020102080201000800010108040101
-080501000803010208030102080201000800010108050100080201000862010108010100
-080001010803010208020104080801000801010008030102080201000800010108020100
-080001010803010208050100084b01010802010008010100085101010801010008070100
-0800010008030100080001000852010108050100080501000801010008460901070e0001
-03000202040103010202040006000100080101000806010008010100080a010008070100
-080901000801010008040100081201010801010008010101080101000802010008010101
-080101000808010008020100080101000802010008010101080101000801010008020100
-080101000802010008010101080101000803010108050100080201000802010008010100
-080201000801010108010100080301000803010008620101080101010801010008010100
-0802010008030100080a0100080001000803010008020100080101010801010008010101
-08010100080101000802010008040100084b010108020100080101000851010108010103
-080301000801010008020100080101000852010108050100080401000802010308430901
-070e000103000202040103010202040006000100080001000807010008010100080a0100
-08050101080a010008010100080501000811010108010100080201000801010008020100
-080101000802010008080100080501000802010008010100080501000802010008010100
-0802010008010100080f0100080201000802010008010100080201000801010008020100
-0803010008030103085f01010801010008020100080101000802010008030100080a0101
-0804010008020100080101000805010008020100080101000802010008040100084b0101
-080201000801010008510101080501000801010008020100080101000802010008520101
-08030101080501000806010008420901070e000103000202040103010202040006000100
-080101000806010008010100080a01000807010008090100080101000804010008120101
-080101000802010008010104080101000802010008090102080201040801010008060100
-080001000802010408010100080f01000802010008020100080101000802010008010100
-08020100080201000804010008020100085e010108010100080201000801010408030100
-080a0101080401040801010008050100080201000801010408040100084b010108020100
-080101000851010108050100080101000802010008010100080201000852010108050100
-080401000806010008420901070e00010300020204010301020204000600010008020100
-0805010008010100080a0100080701000809010008010100080301000813010108010100
-08020100080101000805010008020100080c010008010100080501000806010008000100
-0802010008050100080f0100080201000802010008010100080201000801010008020100
-080201000804010008020100085e010108010100080201000801010008070100080a0100
-08000100080301000805010008050100080201000801010008080100084b010108020100
-080101000851010108010100080201000801010508000105085101010805010008030100
-080301000802010008420901070e00010300020204010301020204000600010008030100
-080401000801010008030101080401000803010008020100080301010803010008010100
-080201000814010108010100080101010801010008020100080101000802010008080100
-080201000801010008020100080101000807010008030100080201000801010008070101
-080501000802010008020100080101000802010008010101080101000801010008050100
-08020100085e01010801010008020100080101000802010008030100080a010008010100
-0802010008020100080101000805010008020100080101000802010008040100084b0101
-080201000801010008510101080101000802010008050100080501000852010108010100
-0802010008030100080301000802010008420901070e0001030002020401030102020400
-060001000804010008040101080401010802010408020102080401010804010108020100
-081501010802010108000100080201020802010008020100080901020803010208020100
-080701000804010208020100080701010805010008030102080301020802010008000101
-0802010008060102085f0101080101000802010008020102080501010808010008020100
-080201020802010008050100080201000802010208050100084b01010803010108520101
-0802010208060100080501000852010108020102080401000804010208430901070e0001
-0300020204010301020204000600010008050100082a01000816010108050100080e0105
-08470100087001010815010508740101085801010867010108570901070e000103000202
-040103010202040006000100084901010801010008020100085c01000870010108900101
-085801010867010108570901070e00010300020204010301020204000600010008490101
-08020102085d01000870010108900101085801010867010108570901070e000103000202
-0401030102020400060001000849010108d5010108900101085801010867010108570901
-070e0001030002020401030102020400060001000849010108d501010890010108580101
-0867010108570901070e0001030002020401030102020400060001000849010108d50101
-08900101085801010867010108570901070e000103000202040103010202040006000100
-0849010108d5010108900101085801010867010108570901070e00010300020204010301
-02020400060001ff01ff01d40901070e0001030002020401030102020400060001ff01ff
-01d40901070e0001030002020401030102020400060001000849010108d5010108900101
-0858010108670101085709010010030002020401030102020400060001000849010108d5
-0101089001010858010108670101085709010700000c0900000103000202040103010202
-04000600010008050100082a010008160101088301000850010108900101085801010867
-010108570901070000010608090107000001030002020401030102020400060001000804
-010008040101080b010008070100080a0101080201000815010108110100080a01000822
-0102080b01000806010008090100081501000807010008020102084a0101089001010803
-0101085201010805010008020102085a0101080201020802010408490901070100010607
-090107000001030002020401030102020400060001000803010008040100080101000809
-0101080601010809010008010100080201000814010108110100080a010008240100080b
-010008110100081401010806010008020100080201000849010108900101080201000801
-010008510101080401010801010008020100085901010801010008020100080101000802
-010008490901070100010606090107010001030002020401030102020400060001000802
-010008050100080101000808010008000100080501000800010008090100080101000803
-010008130101080101000800010108030102080201040808010008010100080301020802
-010008000101080201000800010108030102080501000804010108020104080201020803
-010208020100080101000803010208020100080001010802010008000100080601000806
-010008490101089001010802010008010100085101010803010008000100080101000802
-010008590101080101000802010008050100084909010702000106050901070100010300
-0202040103010202040006000100080101000806010008010100080a0100080401000801
-010008090100080101000804010008120101080101010801010008010100080201000803
-0100080a0100080001000803010008020100080101010801010008010101080101000801
-010008020100080401000804010108040100080601000802010008020100080101000800
-010008030100080201000801010108010100080301000805010008070100084901010890
-010108020100080101000851010108020100080101000801010008020100085901010801
-01000802010008040100084a090107020001060409010702000103000202040103010202
-040006000100080001000807010008010100080a01000803010008020100080901000801
-010008050100081101010801010008020100080101000802010008030100080a01010804
-010008020100080101000805010008020100080101000802010008040100080b01000806
-01000802010008050101080401000802010008010100080701000805010008060100084a
-010108900101080201000801010008510101080101000802010008020102085a01010802
-010208050100084a09010703000106030901070200010300020204010301020204000600
-0100080101000806010008010100080a0100080301000802010008090100080101000804
-01000812010108010100080201000801010408030100080a010108040104080101000805
-0100080201000801010408040100080b0100080601000802010008050101080401040801
-0100080701000804010008060100084b0101089001010802010008010100085101010801
-010008020100080101000802010008590101080101000802010008040100084a09010703
-000106020901070300010300020204010301020204000600010008020100080501000801
-0100080a0100080301050808010008010100080301000813010108010100080201000801
-010008070100080a01000800010008030100080501000805010008020100080101000808
-0100080b0100080601000802010008050100080001000803010008050100080701000804
-010008050100084c01010890010108020100080101000851010108010105080001000802
-010008590101080101000802010008030100084b09010704000106010901070300010300
-020204010301020204000600010008030100080401000801010008030101080401000807
-010008030101080301000801010008020100081401010801010008020100080101000802
-010008030100080a01000801010008020100080201000801010008050100080201000801
-010008020100080401000804010108040100080601000802010008020100080101000801
-0100080201000802010008010100080701000803010008050100084d0101089001010802
-010008010100085101010805010008010100080201000859010108010100080201000803
-0100084b0901070400010600090107040001030002020401030102020400060001000804
-010008040101080401010802010408050100080301010804010108020100081501010801
-010008020100080201020805010108080100080201000802010208020100080501000802
-010008020102080501000804010108050101080401000803010208020100080201000802
-010208020100080501040801010008050104084901010890010108030101085201010805
-010008020102085a01010802010208040100084b09010705000009020704000103000202
-04010301020204000600010008050100082a0100081601010815010508b9010108900101
-085801010867010108570901070500000901070500010300020204010301020204000600
-01000849010108d501010890010108580101086701010857090107060901070500010300
-02020401030102020400060001000849010108d501010890010108580101086701010857
-09010706090007060001030002020401030102020400060001000849010108d501010890
-010108580101086701010857090100100300020204010301020204000600010008490101
-08d5010108900101085801010867010108570900001103000202040103010202040009ff
-09ff09d9060e03000202040103010202040009ff09ff09d80000060e0300020204010301
-020204000901070d0000070000ff00ff00a507100001070c0001060e0300020204010301
-020204000901070b00010900070000ff00ff00a4090007100003070a0001060e03000202
-040103010202040009010709000209010700000106ff06ff06a109010710000507080001
-060e030002020401030102020400090107070003060009010700000106ff06ff06a10901
-071000010601000307060001060e03000202040103010202040009010705000306020901
-0700000106ff06ff06a10901071000010603000307040001060e03000202040103010202
-0400090107030003060409010700000106ff06ff06a10901071000010605000307020001
-060e030002020401030102020400090107010003060609010700000106ff06ff06a10901
-071000010607000307000001060e03000202040103010202040009050608090107000001
-06ff06ff06a1090107100001060809030001060e03000202040103010202040009010701
-0903060609010700000106ff06ff06a10901071000010607090307000001060e03000202
-0401030102020400090107030903060409010700000106ff06ff06a10901071000010605
-090307020001060e030002020401030102020400090107050903060209010700000106ff
-06ff06a10901071000010603090307040001060e03000202040103010202040009010707
-0903060009010700000106ff06ff06a10901071000010601090307060001060e03000202
-04010301020204000901070909040700000106ff06ff06a1090107100001090307080001
-060e0300020204010301020204000901070b09020700000109ff09ff09a3071000010901
-070a0001060e0300020204010301020204000901070d09000700000009ff09ff09a40710
-00000900070c0001060e030002020401030102020400090100ff00ff00d7060e03000202
-0401030102020400090000ff00ff00d8060e03000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff0615
-01000601010006ce030002020401030004040601000a0607010006020100060401000606
-010006100102061201000686000a06090100060c01000611010006020100060401000606
-0100060f01000602010006e0010006010100060801000602010006040100060601000605
-0100061f010106890300040403050601000909000607010006020100060c0100060f0100
-060201000611010006860009090006090100060c01000611010006020100060c0100060f
-01010601010006e00100060101000608010006020100060c010006050100061e01000601
-010006880304040003010202040006010001060609010607010006020100060201020603
-010106000100060201020609010006050100060201000602010206020104060201020602
-010106000100060901000600010106020100060001010603010206030102060301020603
-010206030102060301020603010206310001060609010608010006000100060201000602
-010006010104060201020609010006020100060201020603010106000100060201020609
-01010601010006020102060201000602010006d101050607010006020100060201020603
-010106000100060201010600010006020102060201000600010106040101060a01000601
-010006880300020204010301020204000601000106060901060701000602010006040100
-060201000601010106010100060201000609010006040100060201000601010006020100
-060301000603010006020100060101000600010006000100060801010601010006010101
-060101000601010006020100060101000602010006010100060201000601010006020100
-060101000602010006010100060201000601010006020100063000010606090106080100
-060001000602010006020100060301000603010006020100060801000602010006040100
-060201000601010106010100060201000608010006000100060001000601010006020100
-060101000602010006d20100060101000608010006020100060401000602010006010101
-06010100060101010601010006020100060101010601010006030101060a010006010100
-068803000202040103010202040006010001060609010607010406040100060201000602
-01000601010006020100060a010106030100060101000601010006070100060301000602
-010006010100060001000600010006080100060201000601010006050100060201000601
-010006050100060201000601010006050100060501000602010006010100063400010606
-090106080100060001000602010006020100060301000603010006020100060101040601
-010406040100060201000602010006010100060201000608010006000100060001000601
-01000602010006010100060001000600010006d101000601010006090104060401000602
-010006020100060101000602010006010100060201000601010006020100061001000601
-010006880300020204010301020204000601000106060901060701000602010006040100
-060201000602010006010104060c01000602010006010100060201020604010006030104
-060101000600010006000100060801000602010006010100060501000602010006010100
-060501040602010206030102060201040602010206310001060609010607010006020100
-060101000602010006030100060301000602010006080100060201000604010006020100
-060201000601010406080100060101010601010406010100060001000600010006d00105
-060801000602010006040100060201000602010006010100060201000601010406010100
-060201000610010006010100068803000202040103010202040006010001060609010607
-01000602010006040100060201000602010006010100060c010006020100060301000600
-010006050100060301000603010006050100060001000600010006080100060201000601
-010006050100060201000601010006050100060901000605010006010100060901000630
-000106060901060701040601010006020100060301000603010006020100060801000602
-010006040100060201000602010006010100060c01000601010106010100060501000600
-01000600010006d101000601010006090100060201000604010006020100060201000601
-010006020100060101000605010006020100061001000601010006880300020204010301
-020204000601000106060901060701000602010006040100060201000601010106010100
-060201000608010006020100060301010602010006020100060301000603010006020100
-060101000600010006000100060801010601010006010100060501000602010006010100
-060201000601010006020100060101000602010006010100060201000601010006020100
-060101000602010006300001060609010607010006020100060101000601010106030100
-060301000602010006080100060201000604010006020100060101010601010006020100
-0608010006020100060101000602010006010100060001000600010006d1010006010100
-060901000602010006040100060201000601010106010100060101010601010006020100
-060101000602010006030101060a01000601010006880300020204010301020204000601
-000106060901060701000602010006040100060301010600010006020102060a01020605
-010006030102060501010602010206020100060001000600010006080100060001010602
-010006060102060301020603010206030102060301020603010206030102063100010606
-090106070100060201000602010106000100060401010602010206090100060201000604
-0100060301010600010006020102060901000602010006020102060301000600010006d2
-010006010100060901000602010006040100060301010600010006020101060001000602
-0102060201000602010006030101060b0101068903000202040103010202040006010001
-09080634010006250100066c0001090806ff06ff06060300020204010301020204000601
-00000909063101000600010006260100066c0000090906ff06ff06060300020204010301
-02020400063f01000627010006ff06ff067e03000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8
-03000202040103010202040003ff03ff03e9020204010301021a0400030002ff02ff02b6
-04000300021a04010301021a0400030002ff02ff02b604000300021a04010301021a0400
-030002ff02ff02b604000300021a04010301041b030004ff04ff04b70300041c030004ff
-04ff04f3
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 22 377 234
-%%EOF
diff --git a/lib/pman/doc/src/note.gif b/lib/pman/doc/src/note.gif
deleted file mode 100644
index 6fffe30419..0000000000
--- a/lib/pman/doc/src/note.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/doc/src/notes.xml b/lib/pman/doc/src/notes.xml
deleted file mode 100644
index 4e9663c916..0000000000
--- a/lib/pman/doc/src/notes.xml
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Pman Release Notes</title>
- <prepared>otp_appnotes</prepared>
- <docno>nil</docno>
- <date>nil</date>
- <rev>nil</rev>
- <file>notes.xml</file>
- </header>
- <p>This document describes the changes made to the Pman application.</p>
-
-<section><title>Pman 2.7.1.4</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Tuple funs (deprecated in R15B) are no longer supported.</p>
- <p>
- *** POTENTIAL INCOMPATIBILITY ***</p>
- <p>
- Own Id: OTP-10170</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Pman 2.7.1.3</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Misc build updates</p>
- <p>
- Own Id: OTP-10784</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Pman 2.7.1.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The GS applications is now deprecated and will be
- removed in the R16 release. The following GS-based
- applications have been superseded by the Observer
- application and will removed in R16: Appmon, Pman,
- Tv.</p>
- <p>
- *** POTENTIAL INCOMPATIBILITY ***</p>
- <p>
- Own Id: OTP-9907</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Pman 2.7.1.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Miscellaneous documentation build updates</p>
- <p>
- Own Id: OTP-9813</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Pman 2.7.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The documentation is now built with open source tools
- (xsltproc and fop) that exists on most platforms. One
- visible change is that the frames are removed.</p>
- <p>
- Own Id: OTP-8201</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Pman 2.7</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The copyright notices have been updated.</p>
- <p>
- Own Id: OTP-7851</p>
- </item>
- </list>
- </section>
-
-</section>
-
- <section>
- <title>Pman 2.6</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Some maintenance work to replace deprecated guard
- expressions etc. somehow grew into a larger rewrite of
- parts of the Pman code, fixing some of the more blatant
- errors and removing unused code.</p>
- <p>The default font has been changed, so now the entire text
- on buttons etc. should be visible on most platforms.</p>
- <p>Saving and restoring trace options to/from file now
- works.</p>
- <p>Selecting different sets of processes to hide/view should
- now work in a more consistent and logical way.</p>
- <p>It is now possible to select more than one module or
- process to hide/show.</p>
- <p>Own Id: OTP-6012 Aux Id: OTP-5987 </p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Pman 2.5.3</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>Removed some dead code from <c>pman_process</c>.</p>
- <p>Own Id: OTP-6550</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Pman 2.5.2</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>Some dead code reported by Dialyzer was eliminated.</p>
- <p>A bug in <c>dbg</c> when tracing to wrap trace files
- has been corrected. It failed to delete any already existing
- wrap trace files with the same names when starting a new
- wrap trace.</p>
- <p>Own Id: OTP-5329</p>
- </item>
- <item>
- <p>The graphic applications now search for HTML
- documentation in the correct place.</p>
- <p>Own Id: OTP-5381</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Pman 2.5.1</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>The Pman 'trace shell' functionality was broken, it has
- now been fixed. Furthermore, Pman could not correctly
- find the pid of the active shell if more than one shell
- process was running on the node. This has also been
- corrected.</p>
- <p>Own Id: OTP-5191</p>
- </item>
- </list>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/pman/doc/src/options.gif b/lib/pman/doc/src/options.gif
deleted file mode 100644
index 18377fbed1..0000000000
--- a/lib/pman/doc/src/options.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/doc/src/options.ps b/lib/pman/doc/src/options.ps
deleted file mode 100644
index b5e2c6a391..0000000000
--- a/lib/pman/doc/src/options.ps
+++ /dev/null
@@ -1,829 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./options.tmp.eps)
-%%CreationDate: (Tue Jun 12 18:04:30 2001)
-%%BoundingBox: 0 53 250 318
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 53 250 318
-userdict begin
-%%BeginData:
-DisplayImage
-0 53
-250.000000 265.000000
-12
-350 371
-1
-0
-0
-8
-ffffff
-000000
-708090
-b03060
-d9d9d9
-808080
-a3a3a3
-000000
-03ff03ff03ff035f04000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400031b040c0392040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000307040c03050400030a040003080404030b0402030d
-0401030104010305040703200403030a040103010401031e040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000308040003020400030204000302
-040003050400030a0400030804010301040103090401030f040103010401030804010322
-040103010401030904010321040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070400030204000302040003020400030504000303
-040203030400030804010302040103010403030104030301040303010401030104010300
-040103000403030704010302040103000401030004030302040303020403030604010303
-04010300040103000401030104030300040103010403030104010300040103020403030a
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000308
-040003020400030204000302040003050400030204040302040003080401030204010300
-040103010401030104010301040103010401030004010301040103000401030104010308
-040103020406030104010300040103010401030004010301040103050401030304010300
-040203000401030104010301040103000401030104010300040203000401030004010301
-040103080400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030704040302040003020400030504000301040603010400030804010302
-040103000401030104010301040103050401030004010301040103000401030104010308
-040103020402030504010300040103040401030104010305040103030401030004010301
-040103010401030104010300040103010401030004010301040103000402030c04000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030804000306
-040003020400030504000301040603010400030804010302040103000405030104010302
-040403000401030104010300040103010401030804010302040103030404030004010304
-040503050401030304010300040103010401030104010301040103000401030104010300
-040103010401030204020309040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070400030604000302040003050400030104060301
-040003080401030204010300040103050401030104010301040103000401030104010300
-040103010401030804010302040103020401030104010300040103040401030904010303
-040103000401030104010301040103010401030004010301040103000401030104010303
-040203090400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003080400030604000302040003050400030204040302040003080401030104010301
-040103010401030104010301040103010401030004010300040203000401030104010300
-040003060401030204010302040103010401030004010301040103000401030104010306
-040103010401030104020300040103010401030004020300040103010401030004010301
-040103000401030104010308040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003070408030204000305040003030402030304000308
-040403030403030204010302040203000401030004010300040103000401030204010307
-040103020401030304020300040103000403030204030308040303020401030004010303
-04010300040103010403030104010301040103010403030a040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000300040003000400030004000300040003080400030a040003050400030a
-040003660401032904000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-0400030004000300040003070400030a040003050400030a040003660401032a04000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003000400030004000300040003080400030a
-04000305040c036604010329040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000307040c03a604000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-040003000400030004000300040003000400030004000300040003000400030004000300
-04000300040003000400030004000300040003ff03ff03d402ff02ff02bb00ff00ff00ba
-050000ff005b050100ff00ff000e050000ff005b050100b104a80502000204a8000504a8
-0502000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a8
-000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a80502
-000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a80005
-04a8050200020407010404080100041601000404010004360100040601000433000504a8
-0502000204090100040a0100041c010004360100043b0005040801040434010004130100
-041a010004060100042b0502000204090100040301000400010104020100040001010403
-010204020100040001010403010204020104040201020402010004000101040301020403
-0102040a0102040201000400010104020104040201020403010204020100040001010403
-01020404010104170005040a01000436010004130100041a010004330502000204090100
-040301010401010004010101040101000401010004020100040101010401010004040100
-040401000403010004020100040101010401010004010100040201000401010004020100
-040801000402010004010101040101000403010004060100040201000402010004010101
-0401010004010100040201000403010104170005040a0100040301000400010104030102
-0403010204030102040a0102040201000402010004010104040101000400010104020100
-040201000401010404090102040201000400010104020104040201020403010204020100
-040001010403010204040101040f05020002040901000403010004020100040101000402
-010004010100040201000401010004080100040401000407010004010100040201000401
-010004050100040201000408010004020100040101000402010004030100040601000402
-01000402010004010100040201000401010004210005040a010004030101040101000401
-010004020100040101000402010004010100040201000408010004020100040101000402
-0100040301000403010104010100040101000402010004030100040a0100040201000401
-010104010100040301000406010004020100040201000401010104010100040101000402
-010004030101040f05020002040901000403010004020100040101000402010004010104
-040101000408010004040100040401030401010004020100040101000405010404080100
-040201000401010004020100040301000406010004020100040201000401010004020100
-04020102041e0005040a0100040301000409010004010100040501000402010004080100
-040201000401010004020100040301000403010004020100040101000402010004030100
-040a01000402010004010100040201000403010004060100040201000402010004010100
-040201000401010004190502000204090100040301000402010004010100040201000401
-010004050100040801000404010004030100040201000401010004020100040101000405
-0100040c0100040201000401010004020100040301000406010004020100040201000401
-01000402010004050100041d0005040a0100040301000406010304010100040501040408
-010004020100040101000402010004030100040301000402010004010100040201000403
-0100040a0100040201000401010004020100040301000406010004020100040201000401
-010004020100040201020416050200020409010004030100040201000401010004020100
-040101000402010004010100040801000404010004030100040201000401010004020100
-040101000402010004010100040201000408010004020100040101010401010004030100
-040601000402010004020100040101000402010004010100040201000403010104170005
-040a01000403010004050100040201000401010004050100040c01000402010004010100
-04020100040301000403010004020100040101000402010004030100040a010004020100
-040101000402010004030100040601000402010004020100040101000402010004050100
-041505020002040701040401010004020100040101000402010004020102040201000408
-0100040501010402010304010100040201000402010204030102040a0102040201000400
-01010405010104040100040301020402010004020100040201020404010104170005040a
-010004030100040501000402010004010100040201000401010004020100040801000402
-01000401010004010101040301000403010104010100040101000401010104030100040a
-010004020100040101010401010004030100040601000402010004020100040101000402
-0100040101000402010004030101040f050200020462010004440005040a010004030100
-040601030402010204030102040a01020403010104000100040401010401010004000101
-040301010400010004040101040901020402010004000101040501010404010004030102
-04020100040201000402010204040101040f050200020462010004440005044701000421
-0100043c0502000204620100044400050447010004210100043c0502000204a800050447
-010004210100043c0502000204a8000504a80502000204a8000504a80502000204a80005
-04a80502000204a8000504a80502000204a8000504a80502000204a8000504a805020002
-04a8000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8
-0502000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a8
-000504a8050200020408050a04070104040801000416010004040100045f000504a80502
-000204080509000004090100040a0100041c0100045f000504a805020002040805010306
-000104090100040301000400010104020100040001010403010204020100040001010403
-010204020104040901020402010004000101040a01020402010004000101040301020402
-0100040201000401010004000101041f000504a805020002040805010306000104090100
-040301010401010004010101040101000401010004020100040101010401010004040100
-04040100040a010004020100040101010401010004080100040201000401010104010100
-040101000402010004010100040201000401010104010100041e00050409050a04070104
-043d01000447050200020408050103060001040901000403010004020100040101000402
-01000401010004020100040101000408010004040100040a010004020100040101000402
-010004080100040501000402010004050100040101000400010004000100040101000402
-0100041e000504090509000004090100043f010004470502000204080501030600010409
-01000403010004020100040101000402010004010104040101000408010004040100040a
-010004020100040101000402010004090102040201000402010004020103040101000400
-0100040001000401010004020100041e0005040905010306000104090100040301000400
-0101040301020403010204030102040a0102040301020402010004000101040301010400
-010004470502000204080501030600010409010004030100040201000401010004020100
-04010100040501000408010004040100040a0100040201000401010004020100040c0100
-040101000402010004010100040201000401010004000100040001000401010004020100
-041e00050409050103060001040901000403010104010100040101000402010004010100
-040201000401010004020100040801000402010004010100040201000401010104010100
-040101000401010104470502000204080501030600010409010004030100040201000401
-0100040201000401010004020100040101000408010004040100040a0100040201000401
-010004020100040801000402010004010101040101000401010004020100040101000400
-0100040001000401010004020100041e0005040905010306000104090100040301000409
-010004010100040501000402010004080100040501000402010004010100040201000401
-010004020100044705020002040805010306000104070104040101000402010004010100
-040201000402010204020100040801000405010104090102040201000402010004090102
-04020100040001010403010304020100040001000402010004020100041e000504090501
-030600010409010004030100040601030401010004050104040901020402010404010100
-040201000401010004020100044705020002040805010008045b01000437000504090501
-030600010409010004030100040501000402010004010100040501000410010004010100
-04050100040201000401010004020100044705020002040805000009045b010004370005
-040905010306000104090100040301000405010004020100040101000402010004010100
-040201000408010004020100040101000402010004010100040201000401010004010101
-044705020002046f01000437000504090501030600010409010004030100040601030402
-010204030102040a01020403010204020100040201000402010104000100044705020002
-04a8000504090501000804930502000204a8000504090500000904930502000204a80005
-04a80502000204a8000504a805020002041b0501048a000504a805020002041a0503040e
-01000404010204030102046a000504a80502000204190505040d01000406010004050100
-046a000504a8050200020418050203010502040b0100040001000405010004050100040a
-010204020100040001010403010204020100040201000401010004000101040301020439
-000504a8050200020417050203030502040a010004000100040501000405010004090100
-040201000401010104010100040101000402010004010100040201000401010104010100
-04010100040201000438000504a805020002041605020305050204090100040001000405
-010004050100040901000405010004020100040501000401010004000100040001000401
-01000402010004010100043c000504a80502000204150002030700020407010004020100
-0404010004050100040a0102040201000402010004020103040101000400010004000100
-0401010004020100040201020439000504a8050200020416000203050002040801040404
-010004050100040d01000401010004020100040101000402010004010100040001000400
-0100040101000402010004050100043800050409050a0407010404430100044105020002
-041700020303000204090100040201000404010004050100040901000402010004010101
-040101000401010004020100040101000400010004000100040101000402010004010100
-0402010004380005040905090000040901000488050200020418000203010002040a0100
-040201000404010004050100040a01020402010004000101040301030402010004000100
-040201000402010004020102043900050409050103060001040901000403010004000101
-040301020403010204030102040901000400010104030102040301020403010204030102
-04020100040201000402010204330502000204190005042e010004580005040905010306
-000104090100040301010401010004010100040201000401010004020100040101000402
-010004080101040101000401010004020100040101000402010004010100040201000404
-010004020100040201000401010004020100043205020002041a0003042f010004580005
-040905010306000104090100040301000409010004010100040501000402010004080100
-040501000402010004010100040501000402010004040100040201000402010004010100
-04020100043205020002041b000104300100045800050409050103060001040901000403
-010004060103040101000405010404080100040501040401010004050104040401000403
-0100040001000402010404320502000204a8000504090501030600010409010004030100
-04050100040201000401010004050100040c010004050100040501000405010004080100
-04030100040001000402010004360502000204a800050409050103060001040901000403
-010004050100040201000401010004020100040101000402010004080100040501000402
-010004010100040201000401010004020100040401000404010004030100040201000432
-0502000204a8000504090501030600010409010004030100040601030402010204030102
-0409010004060102040301020403010204050100040401000404010204330502000204a8
-000504090501000804930502000204a80005040905000009049305020002041b0001048a
-000504a805020002041a0003040c01040404010004120100044301020416000504a80502
-000204190005040b0100041c0100044501000416000504a8050200020418000204010002
-040a01000406010204020100040001010403010204020104040901020402010004000101
-0403010204020100040201000401010004000101040a0102040201000400010104050100
-0402010004020100040e000504a805020002041700020403000204090100040801000402
-010104010100040101000402010004030100040a01000402010004010101040101000401
-010004020100040101000402010004010101040101000408010004020100040101010401
-0100040401000402010004020100040e000504a805020002041600020405000204080103
-04050100040201000405010004070100040a010004050100040201000405010004010100
-040001000400010004010100040201000408010004020100040101000402010004040100
-0403010004010100040e000504a805020002041505020407050204070100040801000402
-01000406010204040100040b010204020100040201000402010304010100040001000400
-010004010100040201000408010004020100040101000402010004040100040301000401
-0100040e000504a805020002041605020405050204080100040801000402010004090100
-04030100040e010004010100040201000401010004020100040101000400010004000100
-040101000402010004080100040201000401010004020100040401000404010004000100
-040e000504a8050200020417050204030502040901000408010004020100040501000402
-010004030100040a01000402010004010101040101000401010004020100040101000400
-010004000100040101000402010004080100040201000401010004020100040401000404
-0101040f00050409000a04070104042701010418010004060100043a0502000204180502
-04010502040a010004080100040201000406010204050101040901020402010004000101
-040301030402010004000100040201000402010004090102040201000402010004040100
-04050100040f00050409000905000409010004280100041a010004420502000204190505
-043c010004390100040f0005040900010406050104090100040301000400010104030102
-0403010204030102040b0100040301000402010004010100040001010403010204020104
-0402010204030102040201000400010104030102042505020002041a0503043d01000436
-010004000100041000050409000104060501040901000403010104010100040101000402
-010004010100040201000401010004020100040801040401010004020100040101010401
-010004010100040201000403010004060100040201000402010004010101040101000401
-010004020100042405020002041b0501043e010004370100041100050409000104060501
-040901000403010004090100040101000405010004020100040a01000403010004020100
-040101000402010004010100040701000406010004020100040201000401010004020100
-0401010004280502000204a8000504090001040605010409010004030100040601030401
-010004050104040a01000403010004020100040101000402010004010100040701000406
-0100040201000402010004010100040201000402010204250502000204a8000504090001
-04060501040901000403010004050100040201000401010004050100040e010004030100
-040201000401010004020100040101000407010004060100040201000402010004010100
-040201000405010004240502000204a80005040900010406050104090100040301000405
-01000402010004010100040201000401010004020100040a010004030100040101010401
-010004020100040101000402010004030100040601000402010004020100040101000402
-0100040101000402010004240502000204a8000504090001040605010409010004030100
-040601030402010204030102040b01000404010104000100040101000402010004020102
-04050101040401000403010204020100040201000402010204250502000204a800050409
-0001050804930502000204a8000504090000050904930502000204a8000504a805020002
-04a8000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8
-0502000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a8
-000504a80502000204a800050409000a040701040442010004420502000204a800050409
-00090500040901000444010004420502000204a800050409000104060501040901000403
-010004000101040301020403010204030102040a01020402010004020100040201020402
-0100040001010402010404020102043a0502000204a80005040900010406050104090100
-040301010401010004010100040201000401010004020100040101000402010004080100
-040201000401010004020100040101000402010004010101040101000403010004030100
-0402010004390502000204a8000504090001040605010409010004030100040901000401
-010004050100040201000408010004020100040101000402010004010100040201000401
-0100040201000403010004030100043d0502000204a80005040900010406050104090100
-040301000406010304010100040501040408010404020100040001000402010404010100
-040201000403010004040102043a0502000204a800050409000104060501040901000403
-010004050100040201000401010004050100040c01000406010004000100040201000405
-010004020100040301000407010004390502000204a80005040900010406050104090100
-040301000405010004020100040101000402010004010100040201000408010004020100
-040301000403010004020100040101000402010004030100040301000402010004390502
-00020408050a040701040408010004160100040401000420010204050100040901000429
-000504090001040605010409010004030100040601030402010204030102040a01020404
-01000404010204020100040201000404010104020102043a050200020408050900000409
-0100040a0100041c01000422010004100100042900050409000105080493050200020408
-050103060001040901000403010004000101040201000400010104030102040201000400
-01010403010204020104040901020402010004000101040c010004030102040201000400
-010104020100040101000426000504090000050904930502000204080501030600010409
-010004030101040101000401010104010100040101000402010004010101040101000404
-010004040100040a0100040201000401010104010100040b010004050100040201010401
-010004010100040001000427000504a80502000204080501030600010409010004030100
-0402010004010100040201000401010004020100040101000408010004040100040a0100
-040201000401010004020100040b01000405010004020100040201000401010104280005
-04a805020002040805010306000104090100040301000402010004010100040201000401
-0104040101000408010004040100040a0100040201000401010004020100040b01000405
-01000402010004020100040101010428000504a805020002040805010306000104090100
-0403010004020100040101000402010004010100040501000408010004040100040a0100
-040201000401010004020100040b01000405010004020100040201000401010004000100
-0427000504a8050200020408050103060001040901000403010004020100040101000402
-01000401010004020100040101000408010004040100040a010004020100040101000402
-0100040b010004050100040201000402010004010100040101000426000504a805020002
-040805010306000104070104040101000402010004010100040201000402010204020100
-0408010004050101040901020402010004020100040b0100040501000402010004020100
-04010100040201000425000504a8050200020408050100080494000504a8050200020408
-050000090494000504a80502000204a8000504a80502000204a8000504a80502000204a8
-000504a80502000204a8000504a80502000204a8000504a805020002041b0501048a0005
-04a805020002041a0503040e01000404010204030102040a01020405010004090100044a
-000504a80502000204190505040d01000406010004050100040c010004100100044a0005
-04a8050200020418050203010502040b0100040001000405010004050100040c01000403
-010204020100040001010402010004010100040301020440000504a80502000204170502
-03030502040a0100040001000405010004050100040c0100040501000402010104010100
-04010100040001000403010004020100043f000504a80502000204160502030505020409
-0100040001000405010004050100040c0100040501000402010004020100040101010404
-01000443000504a805020002041500020307000204070100040201000404010004050100
-040c010004050100040201000402010004010101040501020440000504a8050200020416
-000203050002040801040404010004050100040c01000405010004020100040201000401
-01000400010004070100043f000504a80502000204170002030300020409010004020100
-0404010004050100040c0100040501000402010004020100040101000401010004020100
-04020100043f000504a8050200020418000203010002040a010004020100040401000405
-0100040c01000405010004020100040201000401010004020100040201020440000504a8
-05020002041900050488000504a805020002041a00030489000504a805020002041b0001
-048a000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8
-0502000204a8000504a80502000204a8000504a805020002041b0001048a000504a80502
-0002041a0003040c01040404010004120100040b01020405010004090100041b0102041d
-000504a80502000204190005040b0100041c0100040d010004100100041d0100041d0005
-04a8050200020418000204010002040a0100040601020402010004000101040301020402
-0104040b01000403010204020100040001010402010004010100040a0102040201000400
-01010405010004020100040201000415000504a805020002041700020403000204090100
-040801000402010104010100040101000402010004030100040d01000405010004020101
-040101000401010004000100040a01000402010004010101040101000404010004020100
-040201000415000504a80502000204160002040500020408010304050100040201000405
-010004070100040d010004050100040201000402010004010101040b0100040201000401
-0100040201000404010004030100040101000415000504a8050200020415050204070502
-0407010004080100040201000406010204040100040d0100040501000402010004020100
-04010101040b010004020100040101000402010004040100040301000401010004150005
-04a80502000204160502040505020408010004080100040201000409010004030100040d
-01000405010004020100040201000401010004000100040a010004020100040101000402
-01000404010004040100040001000415000504a805020002041705020403050204090100
-0408010004020100040501000402010004030100040d0100040501000402010004020100
-040101000401010004090100040201000401010004020100040401000404010104160005
-04a8050200020418050204010502040a010004080100040201000406010204050101040b
-010004050100040201000402010004010100040201000409010204020100040201000404
-0100040501000416000504a80502000204190505047001000416000504a805020002041a
-0503046e0100040001000417000504a805020002041b0501047001000418000504a80502
-000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a80005
-04a80502000204a8000504a80502000204a8000504a80502000204a8000504a805020002
-04a8000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8
-0502000204a8000504a80502000204a8000505ab000205a8000405ac000105a9000305ad
-000005aa00ff00ff00ff00ff001f04ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff04570005040f01040434010004130100041a01000406010004d3
-0005041101000436010004130100041a010004db00050411010004030100040001010403
-01020403010204030102040a010204020100040201000401010404010100040001010402
-010004020100040101040409010204020100040001010402010404020102040301020402
-010004000101040301020404010104b70005041101000403010104010100040101000402
-010004010100040201000401010004020100040801000402010004010100040201000403
-01000403010104010100040101000402010004030100040a010004020100040101010401
-010004030100040601000402010004020100040101010401010004010100040201000403
-010104b70005041101000403010004090100040101000405010004020100040801000402
-01000401010004020100040301000403010004020100040101000402010004030100040a
-010004020100040101000402010004030100040601000402010004020100040101000402
-01000401010004c100050411010004030100040601030401010004050104040801000402
-01000401010004020100040301000403010004020100040101000402010004030100040a
-010004020100040101000402010004030100040601000402010004020100040101000402
-01000402010204be0005041101000403010004050100040201000401010004050100040c
-010004020100040101000402010004030100040301000402010004010100040201000403
-0100040a0100040201000401010004020100040301000406010004020100040201000401
-0100040201000405010004bd000504110100040301000405010004020100040101000402
-010004010100040201000408010004020100040101000401010104030100040301010401
-0100040101000401010104030100040a0100040201000401010104010100040301000406
-01000402010004020100040101000402010004010100040201000403010104b700050411
-010004030100040601030402010204030102040a01020403010104000100040401010401
-010004000101040301010400010004040101040901020402010004000101040501010404
-0100040301020402010004020100040201020404010104b70005044e01000421010004e4
-0005044e01000421010004e40005044e01000421010004e4000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff045700050416050104ff043e000504150503040c010404190100
-040d010004ff0401000504140505040d0100042a010004ff040100050413050203010502
-040c01000403010004000101040901000402010004020102040201000400010104030101
-0400010004020102040201000402010004f300050412050203030502040b010004030101
-040101000408010004020100040401000402010104010100040101000401010104010100
-04020100040101000402010004f300050411050203050502040a01000403010004020100
-040801000400010004000100040401000402010004020100040101000402010004010100
-0402010004010100040001000400010004f3000504100002030700020409010004030100
-040201000408010004000100040001000404010004020100040201000401010004020100
-040101000402010004010100040001000400010004f300050411000203050002040a0100
-040301000402010004080100040001000400010004040100040201000402010004010100
-04020100040101000402010004010100040001000400010004f300050412000203030002
-040b01000403010004020100040801000400010004000100040401000402010004020100
-0401010004010101040101000402010004010100040001000400010004f3000504130002
-03010002040a010404010100040201000409010004000100040501000402010004020100
-040201010400010004020102040301000400010004f400050414000504ff043c00050415
-000304ff043d00050416000104ff043e000504ff0457000504ff0457000504ff04570005
-04ff0457000504ff0457000504ff040600470408000504ff040600460500040800050467
-058d0410000104430501040800050467058c000004100001044305010408000504670501
-048900010410000104430501040800050467050104890001041000010443050104080005
-04160001044e0501048900010410000104070602043805010408000504150003040c0104
-041201010404010004030102041905010489000104100001040706000401060004370501
-0408000504140005040d010004130100040d010004190501048900010410000104070600
-040106000402060004000601040306020402060004020600040206020403060204140501
-040800050413000204010002040c010004040102040b0100040401020405010004030102
-041205010489000104100001040706000401060004020601040106000401060004020600
-040106000402060004010600040206000401060004020600041305010408000504120002
-04030002040b010004030100040201000408010404040100040501000402010004020100
-041105010489000104100001040706030402060004050600040206000401060004000600
-0400060004010600040506000402060004130501040800050411000204050002040a0100
-0403010004020100040a0100040601000405010004020100040201000411050104890001
-041000010407060004020600040106000405060004020600040106000400060004000600
-040206020402060404130501040800050410050204070502040901000403010004020100
-040a01000406010004050100040201040411050104890001041000010407060004020600
-040106000405060004020600040106000400060004000600040506000401060004170501
-040800050411050204050502040a01000403010004020100040a01000406010004050100
-040201000415050104890001041000010407060004020600040106000405060004020600
-040106000400060004000600040106000402060004010600040206000403060104040601
-040406010501040800050412050204030502040b01000403010004020100040a01000406
-010004050100040201000402010004110501048900010410000104070603040206000406
-060204030600040006000403060204030602040406010404060104040601050104080005
-0413050204010502040c010004040102040b010004060100040501000403010204120501
-0489000104100001044305010408000504140505044c0501048900010410000104430501
-0408000504150503044d05010489000104100001044305010408000504160501044e0501
-048900010410000104430501040800050467050104890001041000010443050104080005
-04670501008b04100001044305010408000504670500008c041000010443050104080005
-04ff0406000105450408000504ff0406000005460408000504ff0457000504ff04570005
-04ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff04570005
-04ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff04570005
-04ff0457000504ff0457000504ff0457000505ff0557000405ff0558000305ff055900ff
-00ff00ff00ff001f04ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff04570005044c003b044b003b04460005044c003a
-0500044b003a050004460005044c000104370501044b00010437050104460005044c0001
-04370501044b00010437050104460005044c000104370501044b00010437050104460005
-044c000104370501044b00010437050104460005044c000104370501044b000104370501
-04460005044c000104370501044b00010437050104460005044c000104370501044b0001
-0437050104460005044c000104150102040201000402010004160501044b000104070102
-041f01020409050104460005044c00010414010004020100040101000401010004170501
-044b00010406010004020100042001000409050104460005044c00010414010004020100
-040101000400010004180501044b00010406010004020100040201020402010004000101
-0403010204030102040501000409050104460005044c0001041401000402010004010101
-04190501044b000104060100040501000402010004010101040101000401010004020100
-0401010004020100040401000409050104460005044c0001041401000402010004010100
-0400010004180501044b0001040601000409010004010100040201000401010004050100
-04020100040401000409050104460005044c000104140100040201000401010004010100
-04170501044b000104060100040601030401010004020100040101000405010404040100
-0409050104460005044c00010414010004020100040101000401010004170501044b0001
-040601000402010004010100040201000401010004020100040101000405010004080100
-0409050104460005044c00010414010004020100040101000402010004160501044b0001
-040601000402010004010100040201000401010004020100040101000402010004010100
-04020100040401000409050104460005044c000104150102040201000402010004160501
-044b00010407010204030103040101000402010004020102040301020405010004090501
-04460005044c000104370501044b00010437050104460005044c000104370501044b0001
-0437050104460005044c000104370501044b00010437050104460005044c000104370501
-044b00010437050104460005044c000104370501044b00010437050104460005044c0001
-04370501044b00010437050104460005044c000104370501044b00010437050104460005
-044c000104370501044b00010437050104460005044c000104370501044b000104370501
-04460005044c000104370501044b00010437050104460005044c00010539044b00010539
-04460005044c0000053a044b0000053a0446000504ff0457000504ff0457000504ff0457
-000504ff0457000504ff0457000504ff045700010500000204ff045700000501000204ff
-0457
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 53 250 318
-%%EOF
diff --git a/lib/pman/doc/src/part.xml b/lib/pman/doc/src/part.xml
deleted file mode 100644
index 140d7bc3c8..0000000000
--- a/lib/pman/doc/src/part.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>1996</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Pman User's Guide</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p>The process manager <em>Pman</em> is a graphical tool used to
- inspect the Erlang processes executing either locally or on remote
- nodes. It is also possible to trace events in the individual processes.</p>
- </description>
- <xi:include href="pman_chapter.xml"/>
-</part>
-
diff --git a/lib/pman/doc/src/part_notes.xml b/lib/pman/doc/src/part_notes.xml
deleted file mode 100644
index e9465d7502..0000000000
--- a/lib/pman/doc/src/part_notes.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Pman Release Notes</title>
- <prepared></prepared>
- <docno></docno>
- <date>2004-09-07</date>
- <rev>1.0</rev>
- <file>part_notes.sgml</file>
- </header>
- <description>
- <p>The process manager <em>Pman</em> is a graphical tool used to
- inspect the Erlang processes executing either locally or on remote
- nodes. It is also possible to trace events in the individual
- processes.</p>
- </description>
- <xi:include href="notes.xml"/>
-</part>
-
diff --git a/lib/pman/doc/src/pman.xml b/lib/pman/doc/src/pman.xml
deleted file mode 100644
index db1a43065c..0000000000
--- a/lib/pman/doc/src/pman.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>1996</year>
- <year>2013</year>
- <holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- The Initial Developer of the Original Code is Ericsson AB.
- </legalnotice>
-
- <title>pman</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <module>pman</module>
- <modulesummary>A graphical process manager.</modulesummary>
- <description>
- <warning>
- <p>
- The Pman application has been superseded by the Observer application.
- Pman will be removed in R16.
- </p>
- </warning>
- <p>A graphical tool used to inspect the Erlang processes executing either
- locally or on remote nodes. It is also possible to trace events in
- the individual processes.</p>
- </description>
- <funcs>
- <func>
- <name>start()</name>
- <name>start(Excluded)</name>
- <name>start_notimeout()</name>
- <name>start_notimeout(Excluded)</name>
- <fsummary>Start Pman.</fsummary>
- <type>
- <v>Excluded = [Module]</v>
- <v>&nbsp;Module = atom()</v>
- </type>
- <desc>
- <p>Starts Pman. It will use the previously saved trace settings
- in <c>HOME/.erlang_tools/pman.opts</c>, where <c>HOME</c> is
- the user's home directory, if such a file exists. Otherwise
- standard trace settings will be used. The return value should
- be ignored.</p>
- <p><c>Excluded</c> is a list of module names. If the argument is
- present, processes currently executing in any of these modules
- will not be shown by Pman.</p>
- <p><c>start/0,1</c> will fail unless the start-up succeeds
- within 20 seconds, whereas <c>start_notimeout/0,1</c> will
- wait indefinitely.</p>
- </desc>
- </func>
- <func>
- <name>proc(Process)</name>
- <name>proc(A, B, C)</name>
- <fsummary>Start a Pman trace window.</fsummary>
- <type>
- <v>Process = pid() | atom()</v>
- <v>A = B = C = integer()</v>
- </type>
- <desc>
- <p>Starts a Pman trace window for the specified process.
- The return value should be ignored.</p>
- <p>The process to trace is given either by its pid or by its
- registered name. It is also possible to use <c>proc/3</c>
- to trace the pid represented as <c><![CDATA[<A,B,C>]]></c>.</p>
- </desc>
- </func>
- </funcs>
-</erlref>
-
diff --git a/lib/pman/doc/src/pman_chapter.xml b/lib/pman/doc/src/pman_chapter.xml
deleted file mode 100644
index d0b50c58f8..0000000000
--- a/lib/pman/doc/src/pman_chapter.xml
+++ /dev/null
@@ -1,377 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>1996</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Pman</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- <file>pman_chapter.xml</file>
- </header>
- <marker id="here"></marker>
-
- <section>
- <title>Introduction</title>
- <warning>
- <p>
- The Pman application has been superseded by the Observer application.
- Pman will be removed in R16.
- </p>
- </warning>
- <p>The process manager Pman is a tool for viewing processes executing
- locally or on remote nodes. Its main purpose is to locate
- erroneous code by inspecting the state of the processes and by tracing
- events. Bottlenecks, unread messages, and bad memory handling are
- some of the problems that can be solved with Pman.</p>
- <p>Processes may be inspected individually in a process trace
- window. There the user may dynamically follow the execution of a
- process by getting trace output for sent and received messages
- as well as for called functions and some other process
- events. Information about source code modules executed by the
- processes is also accessible. Note that Pman has some effect on
- the real time behavior of a running system.</p>
- </section>
-
- <section>
- <title>Getting Started with Pman</title>
- <p>Start Pman by calling <c>pman:start()</c>. It will start
- the <seealso marker="#main_win">Main Window</seealso>, showing an
- overview of all processes running at the current node.</p>
- <p>To trace a certain process, select it by clicking on its line and
- then chose Trace-&gt;Selected Process, or simply double-click it. This
- will open a <seealso marker="#trace_win">Trace Window</seealso>.
- In the Trace Window, there is some information about the process
- and traced events are added dynamically.</p>
- <p>Which events to trace are selected in
- the <seealso marker="#options_win">Options Window</seealso> which
- is opened by choosing File-&gt;Options... in the Main Window or in a
- Trace Window. Currently supported trace events are message sending,
- message receiving, function calls and process events.</p>
- <p>It is possible to by-pass the Main Window and open a Trace
- Window directly for the process <c>Pid</c> by calling
- <c>pman:proc(Pid)</c>.</p>
- </section>
-
- <section>
- <marker id="main_win"></marker>
- <title>The Main Window</title>
- <p>The Main Window shows all processes running at the displayed node.
- The window is automatically updated every 5 seconds.
- Select which node to display in the window by choosing the node name
- from the Nodes menu.</p>
- <image file="main_window.gif">
- <icaption>The Main Window.</icaption>
- </image>
- <p>A process can be selected by clicking on its line. The selected
- process is highlighted. Use the arrow keys to move up and down in
- the process overview.</p>
- <p>The following information is displayed for each process:</p>
- <list type="bulleted">
- <item>Pid - process identifier.</item>
- <item>Current Function - the function (<c>Module:Function/Arity</c>)
- the process is currently executing.</item>
- <item>Name - registered name of the process, if any.</item>
- <item>Msgs - number of messages in the process' mailbox.</item>
- <item>Reds - number of reductions performed. Gives a rough estimate
- of the process' work load.</item>
- <item>Size - estimated size of the process, in words, calculated by
- adding the stack size and the heap size.</item>
- </list>
- <p>At the bottom of the window the following functions and
- information can be found:</p>
- <taglist>
- <tag><em>Hide System Processes</em></tag>
- <item>This check button controls the display of what Pman consider
- <em>system processes</em>, that is, processes Pman knows are part
- of Erlang/OTP rather than the user's application.
- If the button is selected, these system processes will not be
- shown.</item>
- <tag><em>Auto-Hide New</em></tag>
- <item>This check button controls the treatment of newly created
- processes. If it is selected, new processes will not be shown.</item>
- <tag><em># Hidden</em></tag>
- <item>This label displays the number of processes currently
- executing that are not shown in the process overview.</item>
- </taglist>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Options...</em></tag>
- <item>Open the <seealso marker="#options_win">Options Window</seealso>
- which allows the user to set the trace options to use.</item>
- <tag><em>Save Options</em></tag>
- <item>Save the options set using the Options Window. The options are
- stored to the file <c>HOME/.erlang_tools/pman.opts</c>, where
- <c>HOME</c> is the user's home directory, and are automatically
- loaded the next time Pman is started.</item>
- <tag><em>Exit</em></tag>
- <item>Stop Pman.</item>
- </taglist>
- </section>
-
- <section>
- <title>The View Menu</title>
- <p>This menu mainly contains buttons for controlling what to
- display in the Main Window. Note that the View Menu overrides
- the settings of the check buttons (Hide System processes, Auto-Hide
- new) in the Main Window.</p>
- <taglist>
- <tag><em>Hide All Processes</em></tag>
- <item>Hide all processes.</item>
- <tag><em>Hide Modules...</em></tag>
- <item>Opens a dialog window with all loaded modules. If the user
- selects a window and clicks OK, the process overview will not
- show any processes running code from those modules.</item>
- <tag><em>Hide Selected Processs</em></tag>
- <item>Hide the selected process.</item>
- <tag><em>Module Info...</em></tag>
- <item>Given a selected process currently executing a function in
- the module <c>Module</c>, this menu button opens a window
- showing information about the module as returned from
- <c>Module:module_info()</c>.</item>
- <tag><em>Refresh</em></tag>
- <item>Updates the process overview.</item>
- <tag><em>Show All Processes</em></tag>
- <item>Show all processes, except system processes and/or new
- processes if <em>Hide System Processes</em> and/or
- <em>Auto-Hide New</em> is selected.</item>
- <tag><em>Show Processes...</em></tag>
- <item>Opens a dialog window with all hidden processes. If
- the user selects a process and clicks OK, the process
- overview will show that process.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Trace Menu</title>
- <taglist>
- <tag><em>Kill</em></tag>
- <item>Terminates the selected process by calling
- <c>exit(Pid,kill)</c>.</item>
- <tag><em>Trace Selected Process</em></tag>
- <item>Opens a Trace Window for the selected process. Tracing
- will start immediately with the default trace flags set from
- the Main Window.</item>
- <tag><em>Shell Process</em></tag>
- <item>Opens a Trace Window for the shell process of node Pman
- was started at (not the displayed node). If the shell process
- dies, the opened Trace Window will find the pid of
- the automatically started new shell process, and continue to
- trace that process.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Nodes Menu</title>
- <p>The Nodes menu contains one entry for each known node.
- By selecting a node from the Nodes menu, the process overview
- window will change its view, and display the processes running
- on that node.</p>
- </section>
-
- <section>
- <title>The Help Menu</title>
- <taglist>
- <tag><em>Help</em></tag>
- <item>Selecting Help from the Help menu will cause the HTML
- version of the Pman User's Guide (this document) to be
- displayed. Currently this function requires Netscape to be up
- and running.</item>
- </taglist>
- </section>
- </section>
-
- <section>
- <marker id="trace_win"></marker>
- <title>The Trace Window</title>
- <p>A Trace Window outputs trace information for a traced process.
- A Trace Window automatically uses the trace options set in
- the Main Window, but it is also possible to change the options for
- each Trace Window individually.</p>
- <image file="trace.gif">
- <icaption>The Trace Window.</icaption>
- </image>
- <p>There is no limit to how many Trace Windows can be open at the same
- time. However, notice that if more processes are traced,
- the performance degradation of the system will be more noticeable.</p>
- <p>The following information is displayed, where applicable:</p>
- <list type="bulleted">
- <item>initial call - the function (<c>Module:Function/Arity</c>)
- the process started executing in.</item>
- <item>current function - the function (<c>Module:Function/Arity</c>)
- the process is currently executing.</item>
- <item>messages - the messages in the mailbox.</item>
- <item>dictionary - the contents of the process dictionary.</item>
- <item>heap size - heap size in words.</item>
- <item>stack size - stack size in words.</item>
- <item>reductions - number of reductions performed. Gives a rough
- estimate of the process' work load.</item>
- <item>links - list of pids the process is linked to.</item>
- <item>trap_exit - <c>true</c> if the process trap exit signals,
- <c>false</c> otherwise.</item>
- </list>
- <p>In the Trace Window, trace output is continuously added. First in
- each trace message is the pid of the traced process.
- Note that if the inheritance flags for tracing are set, the trace
- output for the spawned/linked processes will be shown in the same
- window as the spawning/linking process.</p>
- <p>Each trace message also has a mnemonic tag:</p>
- <taglist>
- <tag><em>!</em></tag>
- <item>This tag indicates that a message has been sent. Following
- the <c>To:</c> tag will be a pid/name of the receiver. Next,
- following the <c>Msg:</c> tag will be the sent message.</item>
- <tag><em>rec</em></tag>
- <item>This tag indicates that a message has been received.
- Following this will be the received message.</item>
- <tag><em>call</em></tag>
- <item>This tag indicates a call to a function. Following this will be
- the actual call, with all the arguments.</item>
- <tag><em>link</em></tag>
- <item>This tag indicates that a link between the traced process and
- another process has been created. Following this will be the pid
- of the other process.</item>
- <tag><em>spawn</em></tag>
- <item>This tag indicates that the traced process has spawned another
- process. Following this will be the pid of the spawned process.</item>
- <tag><em>exit</em></tag>
- <item>This tag indicates that traced process has exited. Following
- this will be the exit reason.</item>
- </taglist>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Options...</em></tag>
- <item>Opens the <seealso marker="#options_win">Options Window</seealso>
- which allows the user to set the trace options to use for this
- specific Trace Window.</item>
- <tag><em>Save Buffer...</em></tag>
- <item>Opens a dialog that prompts the user for a file name to
- save the current Trace Window contents in.</item>
- <tag><em>Close</em></tag>
- <item>Stops tracing of the process, and closes the Trace Window.</item>
- </taglist>
- </section>
-
- <section>
- <title>The View Menu</title>
- <taglist>
- <tag><em>Clear Buffer</em></tag>
- <item>Clears the contents of the Trace Window.</item>
- <tag><em>Module Info</em></tag>
- <item>Opens a window showing information about the module
- the process is currently executing code from, as returned from
- <c>Module:module_info()</c>.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Trace Menu</title>
- <taglist>
- <tag><em>All Linked Processes</em></tag>
- <item>Opens a Trace Window for each of the processes linked to the
- process being traced in the current Trace Window.</item>
- <tag><em>Linked Process -></em></tag>
- <item>The Linked Process submenu has one entry for each process
- linked to the process being traced in the current Trace Window.
- Select one of the processes to open a new Trace Window for that
- process.</item>
- <tag><em>Kill</em></tag>
- <item>Terminates the process being traced in the current Trace
- Window by calling <c>exit(Pid,kill)</c>.</item>
- </taglist>
- </section>
-
- <section>
- <title>The Help Menu</title>
- <taglist>
- <tag><em>Help</em></tag>
- <item>Selecting Help from the Help menu will cause the HTML version
- of the Pman User's Guide (this document) to be displayed.
- Currently this function requires Netscape to be up and running.</item>
- </taglist>
- </section>
- </section>
-
- <section>
- <marker id="options_win"></marker>
- <title>The Options Window</title>
- <p>The Options Window allows the user to specify the amount of output,
- and the destination of output for traced processes.</p>
- <image file="options.gif">
- <icaption>The Options Window.</icaption>
- </image>
- <p>In the upper left corner of the Options Window, there are check
- buttons for determining what to output in the Trace Window:</p>
- <taglist>
- <tag><em>Trace send</em></tag>
- <item>Select this check button to display information about sent
- messages.</item>
- <tag><em>Trace receive</em></tag>
- <item>Select this check button to display information about received
- messages.</item>
- <tag><em>Trace functions</em></tag>
- <item>Select this check button to display information about
- function calls.</item>
- <tag><em>Trace events</em></tag>
- <item>Select this check button to display information about process
- events, such as spawn, link and exit.</item>
- </taglist>
- <p>In the upper right corner of the dialog, there are options for
- controlling the behaviour of spawned or linked processes:</p>
- <taglist>
- <tag><em>Inherit on spawn</em></tag>
- <item>
- <p>The user may select if spawned processes shall also be traced.
- And if so, if all spawned processes should be traced, or just
- the first spawned process.</p>
- <p>If a spawned process is traced, it will get the same trace
- options that are set for the spawning process. And the output
- will be shown in the same Trace Window as that of the spawning
- process.</p>
- <p>.</p>
- </item>
- <tag><em>Inherit on link</em></tag>
- <item>
- <p>The user may select if a process that is being linked to
- shall be traced. And if so, if all linked processes shall be
- traced, or just the first one linked to.</p>
- <p>If a linked process is traced, it will get the same trace
- options that are set for the linking process. And the output
- will be shown in the same Trace Window as that of the linked
- process.</p>
- </item>
- </taglist>
- <p>In the lower part of the Options Dialog, the user may select
- whether the trace information shall be output to a file, or appear in
- the trace window.</p>
- <p>Sending trace information to a file is more efficient than displaying
- it in the Trace Window. Furthermore, if the amount of trace data is
- large, it will not be lost if tracing to a file. The trace information
- in the Trace Window has an upper limit (approx. 10,000 lines), after
- which the output buffer will be cleared.</p>
- </section>
-</chapter>
-
diff --git a/lib/pman/doc/src/ref_man.xml b/lib/pman/doc/src/ref_man.xml
deleted file mode 100644
index 3b526d86ef..0000000000
--- a/lib/pman/doc/src/ref_man.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>1996</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Pman Reference Manual</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev></rev>
- </header>
- <description>
- <p>The process manager <em>Pman</em> is a graphical tool used to
- inspect the Erlang processes executing either locally or on remote
- nodes. It is also possible to trace events in the individual processes.</p>
- </description>
- <xi:include href="pman.xml"/>
-</application>
-
diff --git a/lib/pman/doc/src/toolbar.gif b/lib/pman/doc/src/toolbar.gif
deleted file mode 100644
index 116e32ace8..0000000000
--- a/lib/pman/doc/src/toolbar.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/doc/src/trace.gif b/lib/pman/doc/src/trace.gif
deleted file mode 100644
index 8b34ec7ea0..0000000000
--- a/lib/pman/doc/src/trace.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/doc/src/trace.ps b/lib/pman/doc/src/trace.ps
deleted file mode 100644
index 0828d4ade1..0000000000
--- a/lib/pman/doc/src/trace.ps
+++ /dev/null
@@ -1,1312 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./trace.tmp.eps)
-%%CreationDate: (Tue Jun 12 18:05:00 2001)
-%%BoundingBox: 0 17 377 309
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 17 377 309
-userdict begin
-%%BeginData:
-DisplayImage
-0 17
-377.000000 292.000000
-12
-562 436
-1
-0
-0
-8
-ffffff
-000000
-b24d7a
-dcadc2
-57253b
-d9d9d9
-c3c3c3
-828282
-03ff03ff034e040003ff03f40400031c04000301021a0400030002ff02f304000300021a
-04010301021a0400030002ff02f304000300021a04010301021a0400030002ff02f30400
-0300021a0401030102020418030004ff04f4030004170202040103010202040003ff03ff
-032602020401030102020400030002150400030002ff02db040003000215040003000215
-0400030002020401030102020400030002150400030002ff02db04000300021504000300
-02150400030002020401030102020400030002150400030002ff02db0400030002150400
-030002150400030002020401030102020400030002150400030002ff02db040003000215
-040003000202030f02020400030002020401030102020400030002150400030002ff0263
-000302730400030002150400030002020300020d04000202040003000202040103010202
-04000300021504000300021f000602020001020600010206000102060001020500000209
-0004020100010211000102020001025a0002020a000502040004020c0002022f00010205
-00000212000102110001021b0004020d000102080001023a040003000215040003000202
-0300020d0400020204000300020204010301020204000300021504000300021f00010202
-000202010002020400020205000202060002020400000207000202020000020100010211
-000102020001025800010202000102080000020200020203000002020001020900010202
-0001022d00020204000002120001021100010219000102040000020c000102080001023a
-0400030002150400030002020300020d0400020204000300020204010301020204000300
-021504000300021f00010203000102010002020400020205000002000001020500020204
-0000020700010206000102110001020200010258000102020001020d0001020800010208
-000102020001022d00020204000002120001021100010218000002070000020b00010245
-0400030002150400030002020300020d0400020204000300020204010301020204000300
-021504000300021f00010203000102010000020000000203000302050000020000010205
-000002000001020300000203000102010001020600010200000302050003020200010202
-000102080001020000020204000102000001020200040204000402030003020300040203
-0004020f00000201000102040001020c0001020800010207000102040001020000000211
-000402020001020000030209000002000001020300000204000402040002020000010204
-000302070004020200040204000402030000020300030201000002030004020100010200
-00030203000102010001020400000202000402030004021f040003000215040003000202
-0300020d04000202040003000202040103010202040003000202030f020204000300021f
-000102030001020100000200000102020000020000010204000102000001020500000200
-000202020000020300010201000302040002020200010203000102010001020100010202
-000102080002020100010203000202030001020200010202000102060001020100010201
-000102060001021100010202000102040001020b00010209000102070001020400010201
-0001020e0001020200010201000202020001020800000200000202020000020300010202
-000102020001020100020203000102010001020700010203000102020001020200010202
-000102020000020100010202000002010000020200010205000202020001020200010202
-000002040000020200000202000102010001022304000300020803030208040003000202
-0300020d040002020400030002020401030102020400030002020300020d040002020400
-0300021f0001020200010202000002000001020200000200000102040000020200010204
-000002010001020200000208000402020001020300010202000102030001020000010202
-000102080001020300010202000102030001020400010200000102060001020300010200
-000102060001020f0001020400010204000102080002020a000102080001020400010203
-0001020b0001020400010200000102030001020800000201000102020000020200010204
-000102000001020300010202000102030001020600010202000102040001020000010204
-000102000000020200000202000102010000020100010206000102030001020200010202
-000102020000020700010201000102230400030002080300020104000208040003000202
-0300020d040002020400030002020401030102020400030002020300020d040002020400
-0300021f0005020300000201000102000000020100010203000102020001020400000202
-000102010000020a00030201000102030001020200010203000102000001020200010208
-000102030001020200010203000102040001020000010206000102030001020000030204
-0003020a00020206000102040001020b0001020800000209000102040001020500020208
-000102040001020000010203000102080000020200010201000002020001020400010200
-000102030001020200010203000102060001020200010204000102000001020400010200
-000002010000020200010202000002010001020600010203000102020001020200010202
-00000207000102010003022104000300020803000201040002080400030002020300020d
-040002020400030002020401030102020400030002020300040e020204000300021f0001
-020700000201000102000000020100010203000102020002020300000202000202000000
-020c00020200000102030001020200070200000102020001020800010203000102020001
-020300010204000102000001020600070202000302040003020600020208000102040001
-020c000102060000020a0001020400010207000202060001020400010200000102030001
-020800000202000202000000020200010204000102000001020300010202000702060001
-020200010204000102000001020400010200000002010000020100020201000102010001
-02060001020300010202000102030000020100010204000402030003021f040003000208
-0300040202080400030002020300020d0400020204000300020204010301020204000300
-021504000300021f00010207000002010001020000000201000102030007020300000203
-000102000000020d00010200000102030001020200010206000102020001020800010203
-00010202000102030001020400010200000102060001020a000202050002020700020206
-000102040001020c000102050000020b0001020400010205000202080001020400010200
-000102030001020800000203000102000000020200010204000102000001020300010202
-0001020c0001020200010204000102000001020400010200000002010000020100000200
-000002010000020200010206000102030001020200010203000102000000020300020201
-000102050002021e0400030002150400030002020300020d040002020400030002020401
-0301020204000300021504000300021f0001020700000202000102020001020200010204
-00010203000002040002020d000102000001020300010202000102060001020200010208
-0001020300010202000102030001020400010200000102060001020b000102060001020a
-00010205000102020001020d000102040000020d00010202000102040001020b00010204
-000102000001020300010208000002040002020200010204000102000001020300010202
-0001020c0001020200010204000102000001020400010201000002000002020100020203
-00010206000102030001020200010203000102000000020300010202000102060001021e
-0400030002150400030002020300020d0400020204000300020204010301020204000300
-021504000300021f00010207000002020001020200010202000002060001020200000204
-000202030001020100000203000102010001020300010203000102030000020000010202
-000102080002020100010203000102040001020200010202000102020000020200010203
-000002000000020300010201000002030001020c00010203000102020001020300010202
-0000020200010204000102080001020200010202000102020001020e0001020200010201
-000102030001020800000204000202030001020200010202000102010002020300010203
-000002060001020300010202000102020001020200010202000102030000020700010202
-00000201000102030001020200010204000102040001020200010201000002030001021e
-0400030002150400030002020300020d0400020204000300020204010301020204000300
-021504000300021f00010207000002070001020100010206000102020000020500010203
-000102010005020200010203000102050004020000010202000102080001020000020204
-00010205000402040004020400040200000502020005020f000002040002020500010202
-000402050006020300010204000202030000021100040202000102030001020800000205
-000102040004020400020200000102050004020600010204000402040004020500030209
-000402010001020300010202000102040001020500030200000102000005021f04000300
-02150400030002020300020d040002020400030002020401030102020400030002150400
-03000282000102ff02560400030002150400030002020300020d04000202040003000202
-040103010202040003000215040003000282000102ff0256040003000215040003000202
-0300040e0202040003000202040103010202040003000215040003000282000102ff0256
-0400030002150400030002150400030002020401030102020400030002150400030002ff
-02db04000300021504000300021504000300020204010301020204000300021504000300
-02ff02db04000300021504000300021504000300020204010300040403000416030004ff
-04dc030004160300041603000404030500ff00ff00250304040003010202040000ff00ff
-00240700030002020401030102020400000105ff05ff0521070103000202040103010202
-0400000105ff05ff05210701030002020401030102020400000105ff05ff052107010300
-02020401030102020400000105ff05ff05210701030002020401030102020400000105ff
-05ff052107010300020204010301020204000001050b01040504010005030102051f0100
-05020100050401000526010405ff05860100050201000509010205130701030002020401
-0301020204000001050b0100050f0100051f010005020100052e010005ff058801000502
-0100050b0100051307010300020204010301020204000001050b01000506010205050100
-050301020518010005020100050201020503010205020100050201000519010005030100
-0500010105030102050301020503010205ff056b01000502010005020102050501000502
-010005000101050c07010300020204010301020204000001050b01000508010005050100
-050201000502010005180100050001000505010005020100050201000501010005020100
-051901000503010105010100050101000502010005010100050201000501010005020100
-05ff056a0100050201000501010005020100050401000502010105010100050b07010300
-020204010301020204000001050b01030505010005050100050201000502010005180100
-050001000505010005020100050201000501010005000100050001000519010005030100
-0509010005010100050501000502010005ff056a01040501010005020100050401000502
-010005020100050b07010300020204010301020204000001050b01000508010005050100
-050201040518010005000100050501000502010405010100050001000500010005190100
-0503010005060103050101000505010405ff056a01000502010005010104050401000502
-010005020100050b07010300020204010301020204000001050b01000508010005050100
-05020100051d010005060100050201000505010005000100050001000519010005030100
-0505010005020100050101000505010005ff056e01000502010005010100050801000502
-010005020100050b07010300020204010301020204000001050b01000508010005050100
-050201000502010005190100050601000502010005020100050101000500010005000100
-051901000503010005050100050201000501010005020100050101000502010005ff056a
-0100050201000501010005020100050401000502010105010100050b0701030002020401
-0301020204000001050b0100050801000505010005030102051a01000506010005030102
-0503010005000100051a01000503010005060103050201020503010205ff056b01000502
-010005020102050501000502010005000101050c07010300020204010301020204000001
-05ff05ff05100100050f07010300020204010301020204000001050a0106052a0106052a
-010605ff05840106050e0100050f07010300020204010301020204000001050a0106052a
-0106052a010605ff05840106050e0100050f0701030002020401030102020400000105ff
-05ff05210701030002020401030102020400000105ff05ff052107010300020204010301
-02020400000105ff05ff05210701030002020401030102020400000107ff07ff07230300
-02020401030102020400000007ff07ff072403000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525
-03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0515
-070f03000202040103010202040005ff05ff0515070f0300020204010301020204000504
-07ff07ff070e05010701060607000605030002020401030102020400050407ff07ff070d
-00000501070106050000070006050300020204010301020204000504070105ff05ff050a
-00010501070106050000070106040300020204010301020204000504070105cf010005ff
-053900010501070106040001070106040300020204010301020204000504070105030100
-050c01000504010005060100050a0102051801020503010205170100050d010205030102
-051f010205120100051501000502010205ff053300010501070106040001050007010603
-030002020401030102020400050407010517010005140100051a01000505010005170100
-050f010005050100052101000512010005140100050201000502010005ff053200010501
-070106030001050107010603030002020401030102020400050407010501010205020100
-050001010503010205020104050201020503010205050100050a01020503010205050100
-0505010005040101050a0102050201000500010105030102050501000505010005040101
-050301020502010005020100050201020505010005020100050201000502010205020104
-050201020502010005000101050501000506010005ff0532000105010701060300010502
-070106020300020204010301020204000504070105030100050201010501010005040100
-050401000506010005020100050201000504010005090100050201000501010005020100
-050401000505010005040101050901000502010005010101050101000501010005020100
-050401000505010005040101050201000502010005010100050201000501010005020100
-050401000502010005020100050101000502010005030100050301000502010005010101
-05010100050301000507010005ff05320001050107010602000105030701060203000202
-040103010202040005040701050301000502010005020100050401000504010005060100
-050601000504010005090100050901000504010005050100051001000505010005020100
-050101000502010005040100050501000509010005020100050101000502010005050100
-050401000502010005020100050501000503010005030100050201000501010005070100
-0505010105ff053300010501070106020001050407010601030002020401030102020400
-050407010503010005020100050201000504010005040100050601000503010305040100
-050901000506010305040100050501000511010205020100050201000501010405040100
-050501000509010405020100050001000503010305040100050201000502010005020103
-05030100050301000502010005010100050601000508010005ff05320001050107010601
-000105050701060103000202040103010202040005040701050301000502010005020100
-050401000504010005060100050201000502010005040100050901000505010005020100
-050401000505010005140100050101000502010005010100050801000505010005090100
-050601000500010005020100050201000504010005020100050201000501010005020100
-05030100050301000502010005010100050601000508010005ff05320001050107010601
-000105060701060003000202040103010202040005040701050301000502010005020100
-050401000504010005060100050201000502010005040100050901000502010005010100
-050201000504010005050100050401010509010005020100050101000502010005010100
-050201000504010005050100050401010502010005020100050301000503010005020100
-050401000502010005010101050101000502010005030100050301000502010005010100
-05050100050501000502010005ff05320001050107010600000105070701060003000202
-040103010202040005040701050301000502010005020100050401000505010105040100
-0503010305040100050a010205030103050401000505010005040101050a010205020100
-050201000502010205050100050501000504010105030102050401000504010305040100
-050301010500010005020103050401010502010205020100050501000506010205ff0533
-0001050107010600000105080701030002020401030102020400050407010530010505ff
-05d30001050107010001070b0300020204010301020204000504070105ff05ff050a0001
-050107010000070c0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701000d03000202
-04010301020204000504070105ff05ff050a000105010701000d03000202040103010202
-04000504070105ff05ff050a0001050107010001050a0700030002020401030102020400
-0504070105ff05ff050a0001050107010001050a07000300020204010301020204000504
-070105ff05ff050a0001050107010001050a070003000202040103010202040005040701
-05ff05ff050a0001050107010001050a07000300020204010301020204000504070105ff
-05ff050a0001050107010001050a07000300020204010301020204000504070105ff05ff
-050a0001050107010001050a07000300020204010301020204000504070105ff05ff050a
-0001050107010001050a07000300020204010301020204000504070105ff05ff050a0001
-050107010001050a07000300020204010301020204000504070105ff05ff050a00010501
-07010001050a07000300020204010301020204000504070105ff05ff050a000105010701
-0001050a07000300020204010301020204000504070105ff05ff050a0001050107010001
-070b0300020204010301020204000504070105ff05ff050a0001050107010000070c0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105eb010005ff051d000105010701060d030002020401030102020400
-05040701052c0100050d0101051801000506010005250100050d010205030102051f0102
-050a0102051b01000502010205ff0517000105010701060d030002020401030102020400
-05040701052c0100050c0100051a0100052d0100050f01000505010005210100050c0100
-051a0100050201000502010005ff0516000105010701060d030002020401030102020400
-050407010501010205020100050201000501010005000101050201000500010105030102
-050201000500010105020104050a01000503010005020100050101000500010105030102
-050201040502010205030102050201000500010105040101050a01020502010005000101
-050301020505010005050100050401010503010205020100050201000502010205050100
-050c010005030102050301020502010005000101050501000506010005ff051600010501
-0701060d0300020204010301020204000504070105000100050201000501010005020100
-050101010501010005010101050101000501010005020100050101010501010005030100
-050a01040501010005020100050101010501010005010100050201000503010005060100
-050201000502010005010101050101000503010105090100050201000501010105010100
-050101000502010005040100050501000504010105020100050201000501010005020100
-050101000502010005040100050c01000502010005020100050101000502010005010101
-05010100050301000507010005ff0516000105010701060d030002020401030102020400
-050407010500010005050100050201000501010005050100050501000502010005010100
-0502010005030100050c0100050301000502010005010100050201000501010005070100
-0506010005020100050201000501010005020100050f0100050501000502010005010100
-050201000504010005050100050901000502010005010100050201000505010005040100
-050c01000502010005020100050101000502010005010100050201000503010005060100
-05ff0517000105010701060d030002020401030102020400050407010500010005050100
-05020100050101000505010005050104050101000502010005030100050c010005030100
-050201000501010005020100050101000507010005060100050201000502010005010100
-050201000510010205020100050201000501010405040100050501000509010405020100
-050001000503010305040100050c01000502010005020100050101000502010005010100
-05020100050201000506010005ff0518000105010701060d030002020401030102020400
-050407010500010005050100050201000501010005050100050501000505010005020100
-05030100050c010005030100050201000501010005020100050101000507010005060100
-050201000502010005010100050201000513010005010100050201000501010005080100
-05050100050901000506010005000100050201000502010005040100050c010005020100
-0502010005010100050201000501010005020100050201000505010005ff051900010501
-0701060d0300020204010301020204000504070105000100050201000501010005010101
-05010100050501000505010005020100050101000502010005030100050c010005030100
-050101010501010005020100050101000502010005030100050601000502010005020100
-050101000502010005030101050901000502010005010100050201000501010005020100
-050401000505010005040101050201000502010005030100050301000502010005040100
-050c01000502010005020100050101000502010005010101050101000501010005050100
-05ff051a000105010701060d030002020401030102020400050407010501010205030101
-05000100050101000505010005060102050201000502010005040101050a010005040101
-050001000501010005020100050201020505010105040100050301020502010005020100
-05030101050a010205020100050201000502010205050100050501000504010105030102
-050401000504010305040100050c01000503010205030102050201000500010105020100
-0505010405ff0516000105010701060d0300020204010301020204000504070105300105
-058c01050516010005ff0528000105010701060d03000202040103010202040005040701
-05e0010005ff0528000105010701060d0300020204010301020204000504070105e00100
-05ff0528000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff
-05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff
-05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-0504070105000100052b0100051f01020503010205ff05b1000105010701060d03000202
-04010301020204000504070105000100054b010005020100050101000502010005ff05b0
-000105010701060d03000202040103010202040005040701050001000500010105030102
-050301020502010005000101050a01020503010205020104050201020504010105090100
-05020100050101000502010005ff05b0000105010701060d030002020401030102020400
-050407010500010105010100050101000502010005010100050201000501010105010100
-050801000502010005040100050601000501010005020100050301010509010005020100
-050101000502010005ff05b0000105010701060d03000202040103010202040005040701
-050001000502010005010100050201000505010005010100050201000508010005080100
-050501000502010005020100051001020503010305ff05b0000105010701060d03000202
-040103010202040005040701050001000502010005010104050201030501010005020100
-05090102050501000504010005030104050f0100050201000505010005ff05b000010501
-0701060d0300020204010301020204000504070105000100050201000501010005050100
-050201000501010005020100050c01000504010005030100050401000513010005020100
-0505010005ff05b0000105010701060d0300020204010301020204000504070105000100
-050201000501010005020100050101000502010005010101050101000508010005020100
-050401000502010005050100050201000503010105090100050201000501010005020100
-05ff05b0000105010701060d030002020401030102020400050407010500010005020100
-05020102050301030501010005000101050a010205050100050201040502010205040101
-050a01020503010205ff05b1000105010701060d03000202040103010202040005040701
-051501000504010505ff05e8000105010701060d03000202040103010202040005040701
-0515010005ff05f3000105010701060d0300020204010301020204000504070105150100
-05ff05f3000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff
-05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff
-05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105ff05ff050a000105010701060d030002020401030102020400
-05040701050901000511010005160100051e01040502010205ff05aa000105010701060d
-030002020401030102020400050407010509010005110100053601000505010005020100
-05ff05a9000105010701060d030002020401030102020400050407010501010205020104
-05020102050301020502010005010100050a010205030102050201040502010205040101
-050901000509010005ff05a9000105010701060d03000202040103010202040005040701
-050001000502010005030100050301000502010005010100050201000501010005000100
-050a01000502010005040100050601000501010005020100050301010509010305060100
-05ff05a9000105010701060d030002020401030102020400050407010500010005070100
-050701000501010005050101050b01000508010005050100050201000502010005130100
-0503010105ff05aa000105010701060d0300020204010301020204000504070105010102
-05040100050401030501010005050101050c010205050100050401000503010405130100
-0505010005ff05a9000105010701060d0300020204010301020204000504070105040100
-050301000503010005020100050101000505010005000100050e01000504010005030100
-0504010005130100050201000505010005ff05a9000105010701060d0300020204010301
-020204000504070105000100050201000503010005030100050201000501010005020100
-050101000501010005090100050201000504010005020100050501000502010005030101
-0509010005020100050101000502010005ff05a9000105010701060d0300020204010301
-020204000504070105010102050501010502010305020102050201000502010005090102
-05050100050201040502010205040101050a01020503010205ff05aa000105010701060d
-030002020401030102020400050407010522010505ff05e1000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-040103010202040005040701051201000511010005060100052601020503010205ff05aa
-000105010701060d030002020401030102020400050407010512010005110100052d0100
-05020100050101000502010005ff05a9000105010701060d030002020401030102020400
-050407010500010005000101050301020503010105000100050101000502010005020102
-05020104050201020503010205020100050001010503010205040101050d010005010100
-05ff05ad000105010701060d030002020401030102020400050407010500010105010100
-050101000502010005010100050101010501010005020100050101000502010005030100
-0506010005020100050201000501010105010100050101000502010005030101050d0100
-0501010005ff05ad000105010701060d0300020204010301020204000504070105000100
-050501000502010005010100050201000501010005020100050101000507010005060100
-0502010005020100050101000502010005010100051601000502010305ff05aa00010501
-0701060d0300020204010301020204000504070105000100050501040501010005020100
-050101000502010005010100050701000506010005020100050201000501010005020100
-0502010205120100050301000502010005ff05a9000105010701060d0300020204010301
-020204000504070105000100050501000505010005020100050101000502010005010100
-050701000506010005020100050201000501010005020100050501000510010005040100
-0502010005ff05a9000105010701060d0300020204010301020204000504070105000100
-050501000502010005010100050101010501010005010101050101000502010005030100
-050601000502010005020100050101000502010005010100050201000503010105090100
-050501000502010005ff05a9000105010701060d03000202040103010202040005040701
-050001000506010205030101050001000502010105000100050201020505010105040100
-0503010205020100050201000502010205040101050901040502010205ff05aa00010501
-0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff
-050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff
-050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff
-050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d030002020401030102020400050407010532010305ff05d3000105010701060d
-03000202040103010202040005040701050101020505010005090100051b010005ff05d6
-000105010701060d030002020401030102020400050407010503010005100100051b0100
-05ff05d6000105010701060d030002020401030102020400050407010503010005030102
-050201000500010105020100050101000503010205040101050a010005ff05d600010501
-0701060d0300020204010301020204000504070105030100050501000502010105010100
-0501010005000100050301000502010005030101050a010005ff05d6000105010701060d
-030002020401030102020400050407010503010005050100050201000502010005010101
-050401000514010005ff05d6000105010701060d03000202040103010202040005040701
-0503010005050100050201000502010005010101050501020511010005ff05d600010501
-0701060d0300020204010301020204000504070105030100050501000502010005020100
-0501010005000100050701000510010005ff05d6000105010701060d0300020204010301
-020204000504070105030100050501000502010005020100050101000501010005020100
-0502010005030101050a010005ff05d6000105010701060d030002020401030102020400
-050407010503010005050100050201000502010005010100050201000502010205040101
-050a010005ff05d6000105010701060d0300020204010301020204000504070105320103
-05ff05d3000105010701060d0300020204010301020204000504070105ff05ff050a0001
-05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d
-0300020204010301020204000504070105ff05ff050a000105010701060d030002020401
-0301020204000504070105120100052a01000506010305ff05bf000105010701060d0300
-02020401030102020400050407010511010005040101050a010205030102050b01010502
-01000508010005ff05bf000105010701060d030002020401030102020400050407010510
-010005040100050101000508010005020100050101000502010005090100050101000502
-01000507010005ff05bf000105010701060d03000202040103010202040005040701050f
-01000505010005010100050c0100050501000509010005010100050301000506010005ff
-05bf000105010701060d03000202040103010202040005040701050e0100050601000501
-0100050c0100050501000509010005010100050401000505010005ff05bf000105010701
-060d03000202040103010202040005040701050d01000507010005010100050b01000504
-0101050a010005010100050501000504010005ff05bf000105010701060d030002020401
-03010202040005040701050e01000506010005010100050a010005070100050901000501
-0100050401000505010005ff05bf000105010701060d0300020204010301020204000504
-0701050f0100050501000501010005090100050801000509010005010100050301000506
-010005ff05bf000105010701060d03000202040103010202040005040701051001000504
-010005010100050301010502010005050100050201000503010105030100050101000502
-01000507010005ff05bf000105010701060d030002020401030102020400050407010511
-0100050401010504010105020104050201020504010105040101050201000508010005ff
-05bf000105010701060d0300020204010301020204000504070105120100052a01000506
-010305ff05bf000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05ff050a000105010701
-060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701060d03000202040103010202040005040701
-05ff05ff050a000105010701060d03000202040103010202040005040701050201000530
-010005040100051401010509010205ff05aa000105010701060d03000202040103010202
-040005040701050201000536010005130100050d010005ff05aa000105010701060d0300
-020204010301020204000504070105000104050101000500010105030102050201000500
-0101050a01020502010005020100050201020502010405030101050b0100050401020505
-0100050301020503010205ff059c000105010701060d0300020204010301020204000504
-070105020100050301010501010005010100050201000501010105010100050801000502
-010005010100050201000504010005040100050501010509010405010100050201000504
-01000502010005020100050101000502010005ff059b000105010701060d030002020401
-030102020400050407010502010005030100050901000501010005020100050801000502
-010005020100050001000505010005040100051301000507010005040100050201000505
-01000502010005ff059b000105010701060d030002020401030102020400050407010502
-010005030100050601030501010005020100050801040503010005060100050401000513
-01000504010305040100050301020502010405ff059b000105010701060d030002020401
-030102020400050407010502010005030100050501000502010005010100050201000508
-010005060100050001000505010005040100051301000503010005020100050401000506
-01000501010005ff059f000105010701060d030002020401030102020400050407010502
-010005030100050501000502010005010101050101000508010005020100050101000502
-0100050401000504010005050101050b0100050301000502010005040100050201000502
-0100050101000502010005ff059b000105010701060d0300020204010301020204000504
-07010503010105010100050601030501010005000101050a010205020100050201000504
-01000505010105030101050b01000504010305040100050301020503010205ff059c0001
-05010701060d03000202040103010202040005040701051501000504010505ff05e80001
-05010701060d030002020401030102020400050407010515010005ff05f3000105010701
-060d030002020401030102020400050407010515010005ff05f3000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff
-050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff
-050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300
-020204010301020204000504070105ff05ff050a000105010701060d0300020204010301
-020204000504070105ff05ff050a000105010701060d0300020204010301020204000504
-0701057301010597010105350101053501010540010105190101050b0101050401010516
-000105010701060d0300020204010301020204000504070105040100052a010005400100
-05540100052a010005160100052e0103050301000536010005440100050b010305010103
-050401000503010305040100050501000515000105010701060d03000202040103010202
-0400050407010503010005040101050a010205030102050b010105020100053f0100050a
-0100050d010205030102051b01000512010005040101050a010205030102050b01010502
-0100051501000519010205110100050601000512010205030102050b0100050c0100050c
-0100051a0100050b0102050b0100050b0100050701000504010005060100050401000505
-01000515000105010701060d030002020401030102020400050407010502010005040100
-0501010005080100050201000501010005020100050901000501010005020100053e0100
-050a0100050f010005050100051b01000511010005040100050101000508010005020100
-050101000502010005090100050101000502010005140100051b01000511010005060100
-0514010005050100050a0101050c0100050c010005190101050d0100050b0100050b0100
-05070100050401000506010005040100050501000515000105010701060d030002020401
-03010202040005040701050101000505010005010100050c010005050100050901000501
-010005030100050501010509010005000101050301020503010205190100050401020502
-010005000101050301020505010005050100050a01020502010105000100050301010500
-0100051001000505010005010100050c0100050501000509010005010100050301000513
-010005040102050201000502010005020102050501000511010005060100050401020503
-010205050100050501000509010005000100050c01000504010205020104050201020502
-0101050001000509010005000100050d01000503010205040100050b0100050701000504
-01000506010005040100050501000515000105010701060d030002020401030102020400
-05040701050001000506010005010100050c010005050100050901000501010005040100
-050401010509010105010100050101000502010005010100050201000518010005030100
-050201000501010105010100050101000502010005040100050501000509010005020100
-0501010005000100050001000501010005010101050f01000506010005010100050c0100
-050501000509010005010100050401000512010005030100050201000501010005020100
-050101000502010005040100051101000506010005030100050201000501010005020100
-0504010005050100050b0100050c01000503010005020100050301000503010005020100
-050101000500010005000100050a0100050d0100050201000502010005030100050b0100
-05070100050401000506010005040100050501000515000105010701060d030002020401
-0301020204000504070101000507010005010100050a010105050100050a010005010100
-05050100050f0100050501000502010005010100051a0101050401000505010005020100
-050101000502010005040100050501000509010005050100050001000500010005010100
-05020100050e01000507010005010100050b010005040101050a01000501010005050100
-050f01010504010005020100050101000502010005050100050401000511010005040101
-05040100050901000504010005050100050b0100050a0101050801000503010005030100
-05020100050101000500010005000100050a0100050d0100050201000508010105090100
-05070100050501010504010005050101050401010513000105010701060d030002020401
-03010202040005040701050001000506010005010100050c010005030100050b01000501
-010005040100051001000505010405010100051c01000504010205020100050201000501
-01040504010005050100050901000505010005000100050001000501010005020100050f
-01000506010005010100050a010005070100050901000501010005040100051201000503
-010405020100050001000503010305040100051101000506010005030100050601030504
-010005050100050b0100050c010005040103050301000503010005020100050101000500
-010005000100050a0100050d01000503010205040100050b010005070100050401000506
-010005040100050501000515000105010701060d03000202040103010202040005040701
-050101000505010005010100050c010005020100050c0100050101000503010005110100
-0505010005050100051c0100050701000501010005020100050101000508010005050100
-050901000505010005000100050001000501010005020100051001000505010005010100
-050901000508010005090100050101000503010005130100050301000506010005000100
-050201000502010005040100051101000506010005030100050501000502010005040100
-05050100050b0100050c0100050301000502010005030100050301000502010005010100
-0500010005000100050a0100050d01000506010005030100050b01000507010005040100
-0506010005040100050501000515000105010701060d0300020204010301020204000504
-070105020100050401000501010005030101050201000502010005010100050701010503
-010005010100050201000506010105090100050501000502010005010100050201000518
-010005030100050201000501010005020100050101000502010005040100050501000509
-010005020100050101000500010005000100050101000501010105030101050b01000504
-010005010100050301010502010005050100050201000503010105030100050101000502
-010005060101050b01000503010005020100050301000503010005020100050401000504
-0101050a0100050601000503010005020100050101000502010005040100050501000504
-010105040100050501010504010005030100050201000503010005030100050201000501
-010005000100050001000503010105040100050501010505010005020100050201000503
-010005050101050301000507010005040100050601000504010005050100051500010501
-0701060d0300020204010301020204000504070105030100050401010504010105030102
-050201040503010105040101050201000507010105090100050601020503010205190100
-050401020502010005020100050201020505010005050100050a01020502010005000100
-05000100050201010500010005030101050c010005040101050401010502010405020102
-05040101050401010502010005070101050b010005040102050401000504010305040100
-05040101050a010005060100050401020503010305040100050501000504010105020104
-050301010504010005040103050401010502010205020100050001000500010005030101
-050201040503010105050100050301020504010005050101050301000507010005040100
-0506010005040100050501000515000105010701060d0300020204010301020204000504
-070105040100052a0100054001000525010505190100050d0100052a010005090100050b
-010005220100050a01030503010005220100050c01000504010005220100050c01000512
-010005060100050301030501010305040100050301030504010005050100051500010501
-0701060d03000202040103010202040005040701057301010541010105430101050d0101
-051e010105140101051e0101050b010105060101051e0101050b01010511010105050101
-05110101050b0101050401010516000105010701060d0300020204010301020204000504
-070105ff05ff050a000105010701060d0300020204010301020204000504070105ff0506
-0101055f010105630101051501010521000105010701060d030002020401030102020400
-0504070105040100052a0100051d010005b401000506010005040100053e010005120100
-05070100052a0100051501000501010005180100051301000523000105010701060d0300
-02020401030102020400050407010503010005040101050a010205030102050b01010502
-0100051c0100051f010405280100053f010005030100051f01000506010005030102052d
-01020503010205050100051201000506010005040101050a010205030102050b01010502
-0100051401000501010005010103050c010105030100051301000523000105010701060d
-030002020401030102020400050407010502010005040100050101000508010005020100
-0501010005020100050901000501010005020100051b010005210100052a0100053f0100
-05030100051f010005050100050301000500010005000100052e01000505010005040100
-051301000505010005040100050101000508010005020100050101000502010005090100
-050101000502010005130100050101000501010005020100050a01000505010005130100
-0523000105010701060d0300020204010301020204000504070105010100050501000501
-0100050c0100050501000509010005010100050301000505010105120100052101000504
-010205040101050a010205030102050301010500010005020102050a0102050301020502
-010005000101050201000502010005020102050201000500010105080101050101010502
-0102050301010500010005030101050b0100050401000504010005000100050401010500
-0100050201020502010005000101050a0102050301020505010005050100050301000514
-0100050401000505010005010100050c0100050501000509010005010100050301000511
-010505000100050201000502010205040100050501000513010005040102050201000500
-01010503010205020100050201000501010005000101000105010701060d030002020401
-03010202040005040701050001000506010005010100050c010005050100050901000501
-010005040100050401010512010005210100050301000502010005030101050901000502
-010005010100050201000501010005010101050101000502010005080100050201000501
-010005020100050101010501010005010100050201000501010005020100050101010501
-010005070101050101010501010005020100050101000501010105030101050b0100050a
-010005000100050301000501010105010100050201000501010105010100050801000502
-01000501010005020100050401000505010005190100050301000506010005010100050c
-010005050100050901000501010005040100051101000501010005010100050201000501
-010005020100050101040503010005130100050301000502010005010101050101000501
-0100050201000501010005020100050101010501000105010701060d0300020204010301
-020204000504070101000507010005010100050a010105050100050a0100050101000505
-010005180100052101000503010005020100050f01000505010005020100050101000502
-010005010100050201000508010005050100050201000501010005050100050201000501
-01000502010005010100050b01000500010105000100050101000505010005020100050f
-0101050c0102050201000502010005010100050201000501010005020100050801000509
-0100050401000505010005170101050301000507010005010100050a010105050100050a
-01000501010005050100050f010005010100050201030502010005020100050301000506
-0101050f0101050401000502010005010100050201000501010005050100050201000501
-01000502000105010701060d030002020401030102020400050407010500010005060100
-05010100050c010005030100050b01000501010005040100051901000521010005030100
-05020100050f010005050100050201000501010005020100050101040509010205020104
-0501010005060100050001000502010405010100050b0100050001010500010005020102
-050201000502010005110100050c01000500010005010100050201000501010405010100
-050201000508010005060103050401000505010005190100050301000506010005010100
-050c010005030100050b01000501010005040100050f0105050101000501010005020104
-050301000505010005130100050301040501010005020100050201020502010005020100
-050101000502000105010701060d03000202040103010202040005040701050101000505
-010005010100050c010005020100050c01000501010005030100053d0100050301000502
-0100050f0100050501000502010005010100050201000501010005100100050101000505
-010005060100050001000502010005050100050b01000503010005050100050101000502
-010005110100050c01000500010005010100050201000501010005050100050201000508
-01000505010005020100050401000505010005190100050401000505010005010100050c
-010005020100050c01000501010005030100051101000501010005020100050201000501
-010005070100050501000513010005030100050501000502010005050100050101000502
-0100050101000502000105010701060d0300020204010301020204000504070105020100
-050401000501010005030101050201000502010005010100050701010503010005010100
-050201000506010105350100050301000502010005030101050901000502010005010100
-050201000501010005010101050101000502010005080100050201000501010005020100
-0501010005070100050301000502010005010100050b0100050301000501010005020100
-050101000501010105030101050b0100050a010005000100050001000501010005010101
-050101000502010005010100050201000508010005020100050101000502010005040100
-05050100050b0101050b0100050501000504010005010100050301010502010005020100
-050101000507010105030100050101000502010005060101050901000501010005020100
-050201000501010005020100050301000505010005050101050b01000503010005020100
-050101000502010005010100050201000501010005010101050101000502000105010701
-060d03000202040103010202040005040701050301000504010105040101050301020502
-01040503010105040101050201000507010105120100052101000504010205040101050a
-010205030102050301010500010005020102050a01020503010205020100050701000504
-010205020100050b01000503010005020102050301010500010005030101050b0100050b
-010205030101050001000502010205020100050201000509010205030103050401000505
-0100050b0101050b01000506010005040101050401010503010205020104050301010504
-010105020100050701010509010005010100050201000502010005020102050401000505
-010005050101050b01000504010205020100050201000502010205030101050001000501
-01000502000105010701060d0300020204010301020204000504070105040100052a0100
-057501050544010005110100050c010005070100050e010505270100050b010005070100
-052a0100050901000527010005060100050b01000523000105010701060d030002020401
-0301020204000504070105ee01000502010005120101050f010005020100053a0101050d
-0101053a01010526010105050101050d01010521000105010701060d0300020204010301
-020204000504070105ef01020526010205ed000105010701060d03000202040103010202
-04000504070105730101052e0101058d01010504010105cc000105010701060d03000202
-04010301020204000504070105040100052a010005400100050401000501010005260100
-059101000505010005cb000105010701060d030002020401030102020400050407010503
-010005040101050a010205030102050b010105020100053f010005040100050101000501
-0103050c010105110100051501000509010205260102050c0100050b0100052001020504
-01000505010005cb000105010701060d0300020204010301020204000504070105020100
-050401000501010005080100050201000501010005020100050901000501010005020100
-053e010005040100050101000501010005020100050a01000513010005150100050b0100
-052801000519010005220100050401000505010005cb000105010701060d030002020401
-03010202040005040701050101000505010005010100050c010005050100050901000501
-010005030100050501010509010005000101050301020503010205190100050301050500
-010005020100050201020504010005130100050301010500010005030102050301010500
-01000501010005020100050401000503010205110102050201000500010105050100050a
-010205020100050001010502010405020102050201000500010105020100050001010503
-010205050100050401000505010005cb000105010701060d030002020401030102020400
-05040701050001000506010005010100050c010005050100050901000501010005040100
-050401010509010105010100050101000502010005010100050201000518010005040100
-050101000501010005020100050101000502010005010104051101000503010005000100
-050001000501010005020100050101000501010105010100050201000504010005020100
-05020100050f010005020100050101010501010005040100050c01000502010105010100
-050301000503010005020100050101010501010005010101050101000501010005020100
-05040100050401000505010005cb000105010701060d0300020204010301020204000504
-070101000507010005010100050a010105050100050a01000501010005050100050f0100
-050501000502010005010100051a01010504010005010100050201030502010005020100
-050301000511010105040100050001000500010005010100050201000501010005020100
-0501010005020100050401000502010005020100050f0100050201000501010005080100
-050c01000502010005020100050301000503010005020100050101000505010005020100
-0505010005040100050501010504010105c9000105010701060d03000202040103010202
-040005040701050001000506010005010100050c010005030100050b0100050101000504
-0100051001000505010405010100051c0100050201050501010005010100050201040503
-010005130100050301000500010005000100050101000502010005010100050201000501
-0100050201000504010005020104050f01040501010005080100050c0100050201000502
-010005030100050301040501010005050100050201000502010305040100050401000505
-010005cb000105010701060d030002020401030102020400050407010501010005050100
-05010100050c010005020100050c01000501010005030100051101000505010005050100
-051c01000503010005010100050201000502010005010100050701000513010005030100
-050001000500010005010100050201000501010005020100050101000502010005040100
-05020100051301000505010005080100050c010005020100050201000503010005030100
-050501000505010005020100050101000502010005040100050401000505010005cb0001
-05010701060d030002020401030102020400050407010502010005040100050101000503
-010105020100050201000501010005070101050301000501010005020100050601010509
-010005050100050201000501010005020100051801000503010005010100050201000502
-010005010100050201000503010005050101050b01000503010005000100050001000501
-010005020100050101000501010105010100050101010504010005020100050201000503
-010105090100050201000501010005080100050c01000502010005020100050301000503
-010005020100050101000505010005020100050101000502010005040100050401000505
-010005cb000105010701060d030002020401030102020400050407010503010005040101
-050401010503010205020104050301010504010105020100050701010509010005060102
-050301020519010005030100050101000502010005020100050201020504010005050101
-050b01000503010005000100050001000502010205030101050001000502010105000100
-050401000503010205040101050a01020502010005080100050c01000502010005020100
-050401010502010205020100050501000502010005020103050401000504010005050100
-05cb000105010701060d0300020204010301020204000504070105040100052a01000540
-010005220100050b010005300100051d0105053b01000505010005cb000105010701060d
-0300020204010301020204000504070105730101051e0101050d0101052c0101055e0101
-0504010105cc000105010701060d0300020204010301020204000504070105ff05ff050a
-000105010701060d0300020204010301020204000504070105ff05060101055f01010563
-0101051501010521000105010701060d0300020204010301020204000504070105040100
-052a0100051d010005b401000506010005040100053e01000512010005070100052a0100
-051501000501010005180100051301000523000105010701060d03000202040103010202
-0400050407010503010005040101050a010205030102050b010105020100051c0100051f
-010405280100053f010005030100051f01000506010005030102052d0102050301020505
-0100051201000506010005040101050a010205030102050b010105020100051401000501
-010005010103050c010105030100051301000523000105010701060d0300020204010301
-020204000504070105020100050401000501010005080100050201000501010005020100
-050901000501010005020100051b010005210100052a0100053f010005030100051f0100
-05050100050301000500010005000100052e010005050100050401000513010005050100
-050401000501010005080100050201000501010005020100050901000501010005020100
-05130100050101000501010005020100050a010005050100051301000523000105010701
-060d03000202040103010202040005040701050101000505010005010100050c01000505
-01000509010005010100050301000505010105120100052101000504010205040101050a
-010205030102050301010500010005020102050a01020503010205020100050001010502
-010005020100050201020502010005000101050801010501010105020102050301010500
-010005030101050b01000504010005040100050001000504010105000100050201020502
-010005000101050a01020503010205050100050501000503010005140100050401000505
-010005010100050c01000505010005090100050101000503010005110105050001000502
-010005020102050401000505010005130100050401020502010005000101050301020502
-0100050201000501010005000101000105010701060d0300020204010301020204000504
-0701050001000506010005010100050c0100050501000509010005010100050401000504
-010105120100052101000503010005020100050301010509010005020100050101000502
-010005010100050101010501010005020100050801000502010005010100050201000501
-010105010100050101000502010005010100050201000501010105010100050701010501
-01010501010005020100050101000501010105030101050b0100050a0100050001000503
-010005010101050101000502010005010101050101000508010005020100050101000502
-0100050401000505010005190100050301000506010005010100050c0100050501000509
-010005010100050401000511010005010100050101000502010005010100050201000501
-010405030100051301000503010005020100050101010501010005010100050201000501
-010005020100050101010501000105010701060d03000202040103010202040005040701
-01000507010005010100050a010105050100050a01000501010005050100051801000521
-01000503010005020100050f010005050100050201000501010005020100050101000502
-010005080100050501000502010005010100050501000502010005010100050201000501
-0100050b01000500010105000100050101000505010005020100050f0101050c01020502
-010005020100050101000502010005010100050201000508010005090100050401000505
-010005170101050301000507010005010100050a010105050100050a0100050101000505
-0100050f0100050101000502010305020100050201000503010005060101050f01010504
-010005020100050101000502010005010100050501000502010005010100050200010501
-0701060d03000202040103010202040005040701050001000506010005010100050c0100
-05030100050b0100050101000504010005190100052101000503010005020100050f0100
-050501000502010005010100050201000501010405090102050201040501010005060100
-050001000502010405010100050b01000500010105000100050201020502010005020100
-05110100050c010005000100050101000502010005010104050101000502010005080100
-05060103050401000505010005190100050301000506010005010100050c010005030100
-050b01000501010005040100050f01050501010005010100050201040503010005050100
-051301000503010405010100050201000502010205020100050201000501010005020001
-05010701060d03000202040103010202040005040701050101000505010005010100050c
-010005020100050c01000501010005030100053d01000503010005020100050f01000505
-010005020100050101000502010005010100051001000501010005050100050601000500
-01000502010005050100050b01000503010005050100050101000502010005110100050c
-010005000100050101000502010005010100050501000502010005080100050501000502
-0100050401000505010005190100050401000505010005010100050c010005020100050c
-010005010100050301000511010005010100050201000502010005010100050701000505
-010005130100050301000505010005020100050501000501010005020100050101000502
-000105010701060d03000202040103010202040005040701050201000504010005010100
-050301010502010005020100050101000507010105030100050101000502010005060101
-053501000503010005020100050301010509010005020100050101000502010005010100
-050101010501010005020100050801000502010005010100050201000501010005070100
-050301000502010005010100050b01000503010005010100050201000501010005010101
-05030101050b0100050a0100050001000500010005010100050101010501010005020100
-0501010005020100050801000502010005010100050201000504010005050100050b0101
-050b01000505010005040100050101000503010105020100050201000501010005070101
-050301000501010005020100050601010509010005010100050201000502010005010100
-05020100050301000505010005050101050b010005030100050201000501010005020100
-05010100050201000501010005010101050101000502000105010701060d030002020401
-030102020400050407010503010005040101050401010503010205020104050301010504
-0101050201000507010105120100052101000504010205040101050a0102050301020503
-01010500010005020102050a01020503010205020100050701000504010205020100050b
-01000503010005020102050301010500010005030101050b0100050b0102050301010500
-010005020102050201000502010005090102050301030504010005050100050b0101050b
-010005060100050401010504010105030102050201040503010105040101050201000507
-01010509010005010100050201000502010005020102050401000505010005050101050b
-010005040102050201000502010005020102050301010500010005010100050200010501
-0701060d0300020204010301020204000504070105040100052a01000575010505440100
-05110100050c010005070100050e010505270100050b010005070100052a010005090100
-0527010005060100050b01000523000105010701060d0300020204010301020204000504
-070105ee01000502010005120101050f010005020100053a0101050d0101053a01010526
-010105050101050d01010521000105010701060d03000202040103010202040005040701
-05ef01020526010205ed000105010701060d030002020401030102020400050407010573
-0101052e0101059401010504010105c5000105010701060d030002020401030102020400
-0504070105040100052a0100054001000504010005010100052601000598010005050100
-05c4000105010701060d030002020401030102020400050407010503010005040101050a
-010205030102050b010105020100053f0100050401000501010005010103050c01010511
-01000515010005090102051e0100050d010205030102050d0100050b0101051001020504
-0100050501000505010005c4000105010701060d03000202040103010202040005040701
-050201000504010005010100050801000502010005010100050201000509010005010100
-05020100053e010005040100050101000501010005020100050a01000513010005150100
-050b0100051e0100050f010005050100050d0100050a0100051401000504010005050100
-0505010005c4000105010701060d03000202040103010202040005040701050101000505
-010005010100050c01000505010005090100050101000503010005050101050901000500
-010105030102050301020519010005030105050001000502010005020102050401000513
-010005030101050001000503010205030101050001000501010005020100050401000503
-0102051101020502010005000101050301020505010005050100050a0101050001000502
-0102050401000504010205020100050201000504010005020104050301000505010005c4
-000105010701060d03000202040103010202040005040701050001000506010005010100
-050c01000505010005090100050101000504010005040101050901010501010005010100
-050201000501010005020100051801000504010005010100050101000502010005010100
-050201000501010405110100050301000500010005000100050101000502010005010100
-050101010501010005020100050401000502010005020100050f01000502010005010101
-050101000501010005020100050401000505010005090100050101010501010005020100
-050101040501010005020100050101000502010005040100050401000505010005050100
-05c4000105010701060d0300020204010301020204000504070101000507010005010100
-050a010105050100050a01000501010005050100050f0100050501000502010005010100
-051a01010504010005010100050201030502010005020100050301000511010105040100
-050001000500010005010100050201000501010005020100050101000502010005040100
-0502010005020100050f0100050501000502010005010100050201000504010005050100
-050901000502010005010100050201000503010005070100050101000502010005040100
-05040100050601010504010105c2000105010701060d0300020204010301020204000504
-0701050001000506010005010100050c010005030100050b010005010100050401000510
-01000505010405010100051c010005020105050101000501010005020104050301000513
-010005030100050001000500010005010100050201000501010005020100050101000502
-010005040100050201040510010205020100050201000501010405040100050501000509
-010005020100050101040503010005040103050101000502010005040100050401000505
-01000505010005c4000105010701060d0300020204010301020204000504070105010100
-0505010005010100050c010005020100050c010005010100050301000511010005050100
-05050100051c010005030100050101000502010005020100050101000507010005130100
-050301000500010005000100050101000502010005010100050201000501010005020100
-050401000502010005170100050101000502010005010100050801000505010005090100
-050201000501010005070100050301000502010005010100050201000504010005040100
-050501000505010005c4000105010701060d030002020401030102020400050407010502
-010005040100050101000503010105020100050201000501010005070101050301000501
-010005020100050601010509010005050100050201000501010005020100051801000503
-010005010100050201000502010005010100050201000503010005050101050b01000503
-010005000100050001000501010005020100050101000501010105010100050101010504
-010005020100050201000503010105090100050201000501010005020100050101000502
-010005040100050501000509010005010101050101000502010005030100050301000502
-010005010100050101010504010005040100050501000505010005c4000105010701060d
-030002020401030102020400050407010503010005040101050401010503010205020104
-050301010504010105020100050701010509010005060102050301020519010005030100
-050101000502010005020100050201020504010005050101050b01000503010005000100
-050001000502010205030101050001000502010105000100050401000503010205040101
-050a01020502010005020100050201020505010005050100050a01010500010005020102
-050401000504010305020101050001000504010005050101050301000505010005c40001
-05010701060d0300020204010301020204000504070105040100052a0100054001000522
-0100050b010005300100052b0105053401000505010005c4000105010701060d03000202
-04010301020204000504070105730101051e0101050d0101052c01010565010105040101
-05c5000105010701060d0300020204010301020204000504070105ff05ff050a00010501
-0701060d0300020204010301020204000504070105ff05060101055f0101056301010515
-01010521000105010701060d0300020204010301020204000504070105040100052a0100
-051d010005b401000506010005040100053e01000512010005070100052a010005150100
-0501010005180100051301000523000105010701060d0300020204010301020204000504
-07010503010005040101050a010205030102050b010105020100051c0100051f01040519
-010105040100050301020540010005030100051f01000506010005030102052d01020503
-010205050100051201000506010005040101050a010205030102050b0101050201000514
-01000501010005010103050c010105030100051301000504010205050100050b01000507
-000105010701060d03000202040103010202040005040701050201000504010005010100
-05080100050201000501010005020100050901000501010005020100051b010005210100
-051a0100050d01000540010005030100051f010005050100050301000500010005000100
-052e01000505010005040100051301000505010005040100050101000508010005020100
-050101000502010005090100050101000502010005130100050101000501010005020100
-050a0100050501000513010005060100051201000507000105010701060d030002020401
-03010202040005040701050101000505010005010100050c010005050100050901000501
-0100050301000505010105120100052101000504010205040101050b0100050401020505
-010005030102050a01020503010205020100050001010502010005020100050201020502
-010005000101050801010501010105020102050301010500010005030101050b01000504
-010005040100050001000504010105000100050201020502010005000101050a01020503
-010205050100050501000503010005140100050401000505010005010100050c01000505
-010005090100050101000503010005110105050001000502010005020102050401000505
-010005130100050601000503010205030102050201040505000105010701060d03000202
-040103010202040005040701050001000506010005010100050c01000505010005090100
-050101000504010005040101051201000521010005030100050201000503010105090104
-050401000505010005020100050201000508010005020100050101000502010005010101
-050101000501010005020100050101000502010005010101050101000507010105010101
-0501010005020100050101000501010105030101050b0100050a01000500010005030100
-050101010501010005020100050101010501010005080100050201000501010005020100
-050401000505010005190100050301000506010005010100050c01000505010005090100
-050101000504010005110100050101000501010005020100050101000502010005010104
-050301000513010005060100050501000502010005020100050301000507000105010701
-060d0300020204010301020204000504070101000507010005010100050a010105050100
-050a01000501010005050100051801000521010005030100050201000511010005060100
-050501000502010005020100050801000505010005020100050101000505010005020100
-050101000502010005010100050b01000500010105000100050101000505010005020100
-050f0101050c010205020100050201000501010005020100050101000502010005080100
-05090100050401000505010005170101050301000507010005010100050a010105050100
-050a01000501010005050100050f01000501010005020103050201000502010005030100
-05060101050f0101050701000505010005020100050701000507000105010701060d0300
-0202040103010202040005040701050001000506010005010100050c010005030100050b
-010005010100050401000519010005210100050301000502010005110100050601000505
-01000502010405090102050201040501010005060100050001000502010405010100050b
-0100050001010500010005020102050201000502010005110100050c0100050001000501
-010005020100050101040501010005020100050801000506010305040100050501000519
-0100050301000506010005010100050c010005030100050b01000501010005040100050f
-010505010100050101000502010405030100050501000513010005060100050501000503
-0102050401000507000105010701060d0300020204010301020204000504070105010100
-0505010005010100050c010005020100050c01000501010005030100053d010005030100
-050201000511010005060100050501000502010005100100050101000505010005060100
-050001000502010005050100050b01000503010005050100050101000502010005110100
-050c01000500010005010100050201000501010005050100050201000508010005050100
-05020100050401000505010005190100050401000505010005010100050c010005020100
-050c01000501010005030100051101000501010005020100050201000501010005070100
-0505010005130100050601000505010005060100050301000507000105010701060d0300
-020204010301020204000504070105020100050401000501010005030101050201000502
-010005010100050701010503010005010100050201000506010105350100050301000502
-010005030101050b01000506010005050100050201000502010005080100050201000501
-0100050201000501010005070100050301000502010005010100050b0100050301000501
-010005020100050101000501010105030101050b0100050a010005000100050001000501
-010005010101050101000502010005010100050201000508010005020100050101000502
-01000504010005050100050b0101050b0100050501000504010005010100050301010502
-010005020100050101000507010105030100050101000502010005060101050901000501
-010005020100050201000501010005020100050301000505010005050101050b01000506
-0100050501000502010005020100050301000507000105010701060d0300020204010301
-020204000504070105030100050401010504010105030102050201040503010105040101
-050201000507010105120100052101000504010205040101050b01000506010005050100
-05030102050a01020503010205020100050701000504010205020100050b010005030100
-05020102050301010500010005030101050b0100050b0102050301010500010005020102
-050201000502010005090102050301030504010005050100050b0101050b010005060100
-050401010504010105030102050201040503010105040101050201000507010105090100
-05010100050201000502010005020102050401000505010005050101050b010005060100
-0505010005030102050501010505000105010701060d0300020204010301020204000504
-070105040100052a0100057501050544010005110100050c010005070100050e01050527
-0100050b010005070100052a0100050901000527010005060100050b0100051e01040001
-05010701060d0300020204010301020204000504070105ee01000502010005120101050f
-010005020100053a0101050d0101053a01010526010105050101050d0101052100010501
-0701060d0300020204010301020204000504070105ef01020526010205ed000105010701
-060d0300020204010301020204000504070105730101052e010105ff0563000105010701
-060d0300020204010301020204000504070105040100052a010005400100050401000501
-010005260100052001030501010005010100058701000501010005ae000105010701060d
-030002020401030102020400050407010503010005040101050a010205030102050b0101
-05020100053f0100050401000501010005010103050c010105110100050a010005140100
-050401000501010005340102050401000503010405020102051001000508010005180100
-05010100050101000501010005ae000105010701060d0300020204010301020204000504
-070105020100050401000501010005080100050201000501010005020100050901000501
-010005020100053e010005040100050101000501010005020100050a010005130100050a
-010005140100050401000501010005330100050201000502010105030100050501000502
-0100050f0100052101000500010005000100050101000501010005ae000105010701060d
-03000202040103010202040005040701050101000505010005010100050c010005050100
-050901000501010005030100050501010509010005000101050301020503010205190100
-050301050500010005020100050201020504010005130100050401020502010005010100
-051101000504010005010100050a01020503010205020100050201000502010205030102
-050901000505010005000100050301000505010005020100050901020502010005000101
-050301020502010005020100050201020503010205020100050101000502010005010100
-05ae000105010701060d0300020204010301020204000504070105000100050601000501
-0100050c0100050501000509010005010100050401000504010105090101050101000501
-010005020100050101000502010005180100050401000501010005010100050201000501
-010005020100050101040511010005030100050201000501010005000100051201000512
-010005020100050101000502010005010100050201000501010005020100050101000502
-010005080100050701000503010305020100050201000508010005020100050101010501
-01000504010005020100050201000501010005020100050101000502010005bb00010501
-0701060d0300020204010301020204000504070101000507010005010100050a01010505
-0100050a01000501010005050100050f0100050501000502010005010100051a01010504
-010005010100050201030502010005020100050301000511010105040100050201000501
-010105130100051201000509010005010100050201000501010005020100050101000505
-010405010103050401000507010005020103050101040501010005050100050201000504
-01000502010005020100050501000501010005bf000105010701060d0300020204010301
-0202040005040701050001000506010005010100050c010005030100050b010005010100
-05040100051001000505010405010100051c010005020105050101000501010005020104
-050301000513010005030100050201000501010105130100051301020503010305020100
-050001000502010405020102050901000502010005030100050701000505010005080100
-0505010005020100050401000503010005000100050301030502010205bc000105010701
-060d03000202040103010202040005040701050101000505010005010100050c01000502
-0100050c01000501010005030100051101000505010005050100051c0100050301000501
-010005020100050201000501010005070100051301000503010005020100050101000500
-010005120100051601000501010005020100050201000500010005020100050901000508
-010005020100050301000503010005020100050501000508010005050100050201000504
-0100050301000500010005020100050201000505010005bb000105010701060d03000202
-040103010202040005040701050201000504010005010100050301010502010005020100
-050101000507010105030100050101000502010005060101050901000505010005020100
-050101000502010005180100050301000501010005020100050201000501010005020100
-0503010005050101050b01000503010005020100050101000501010005040101050a0100
-050d01010502010005020100050101000502010005030100050301000502010005010100
-050201000508010005020100050301000503010005020100050101000502010005080100
-050201000501010005020100050401000504010005030100050201000501010005020100
-0511010105a7000105010701060d03000202040103010202040005040701050301000504
-010105040101050301020502010405030101050401010502010005070101050901000506
-010205030102051901000503010005010100050201000502010005020102050401000505
-0101050b010005040102050201000502010005030101050a0100050d0101050301020503
-0103050301000504010205030102050a0102050201040502010205030102050a01020502
-010005020100050401000504010005040103050201020512010105a7000105010701060d
-0300020204010301020204000504070105040100052a01000540010005220100050b0100
-05140100050a01030597010005a7000105010701060d0300020204010301020204000504
-070105730101051e0101050d01010510010105a5010105a8000105010701060d03000202
-04010301020204000504070105ff05ff050a000105010701060d03000202040103010202
-04000504070105ff05ff050a000105010701000d03000202040103010202040005040701
-0507010005010100056401000501010005ff05950001050107010600000c030002020401
-03010202040005040701050701000501010005040100051201020521010105050100050b
-0100051001000501010005ff059500010501070106000001050807010300020204010301
-0202040005040701050701000501010005040100051401000520010005070100051d0100
-0501010005ff059500010501070106010001050707010300020204010301020204000504
-0701050701000501010005020104050201020503010205050100050a0101050001000502
-010205020100050001010504010005040101050001000509010205030102050201010500
-0100050201000501010005ff059500010501070106010001050607010600030002020401
-030102020400050407010510010005030100050201000501010005020100050401000509
-01000501010105010100050201000501010105010100050101040501010005010101050b
-0100050201000502010005010100050001000500010005ff059b00010501070106020001
-050507010600030002020401030102020400050407010510010005030100050201000501
-010005020100050401000509010005020100050101000502010005010100050201000503
-01000503010005020100050b01000506010005010100050001000500010005ff059b0001
-050107010602000105040701060103000202040103010202040005040701051001000503
-010005020100050101000502010005040100050901000502010005010104050101000502
-0100050301000503010005020100050b01000503010305010100050001000500010005ff
-059b00010501070106030001050307010601030002020401030102020400050407010510
-010005030100050201000501010005020100050401000509010005020100050101000505
-010005020100050301000503010005020100050b01000502010005020100050101000500
-01000500010005ff059b0001050107010603000105020701060203000202040103010202
-040005040701051001000503010005020100050101000502010005040100050901000501
-010105010100050201000501010005020100050301000503010005010101050301010505
-01000502010005020100050101000500010005000100050a010105ff058e000105010701
-060400010501070106020300020204010301020204000504070105110101050201020503
-010205050100050a01010500010005020102050201000502010005030100050401010500
-0100050301010505010005030103050101000500010005000100050a010105ff058e0001
-050107010604000105000701060303000202040103010202040005040701052901050505
-010005270100051a010005ff058e00010501070106050000070206030300020204010301
-0202040005040701053101000502010005240100050101000518010105ff058f00010501
-070106050000070106040300020204010301020204000504070100ff00ff000c05010701
-0606070106040300020204010301020204000504070000ff00ff000d0501070106060700
-060503000202040103010202040005ff05ff05150701000d030002020401030102020400
-05ff05ff05150700000e030002020401030102020400050207ff07ff0716050b03000202
-0401030102020400050207ff07ff07150000050b03000202040103010202040005020701
-060d0000060000ff0073067f0001060c0001050b03000202040103010202040005020701
-060b00010700060000ff00720700067f0003060a0001050b030002020401030102020400
-050207010609000207010600000105ff056f0701067f000506080001050b030002020401
-0301020204000502070106070003050007010600000105ff056f0701067f000105010003
-06060001050b030002020401030004040502070106050003050207010600000105ff056f
-0701067f00010503000306040001050b0300040403050502070106030003050407010600
-000105ff056f0701067f00010505000306020001050b0304040003010202040005020701
-06010003050607010600000105ff056f0701067f00010507000306000001050b03000202
-040103010202040005020705050807010600000105ff056f0701067f0001050807030001
-050b0300020204010301020204000502070106010703050607010600000105ff056f0701
-067f00010507070306000001050b03000202040103010202040005020701060307030504
-07010600000105ff056f0701067f00010505070306020001050b03000202040103010202
-04000502070106050703050207010600000105ff056f0701067f00010503070306040001
-050b0300020204010301020204000502070106070703050007010600000105ff056f0701
-067f00010501070306060001050b03000202040103010202040005020701060907040600
-000105ff056f0701067f0001070306080001050b03000202040103010202040005020701
-060b07020600000107ff0771067f00010701060a0001050b030002020401030102020400
-05020701060d07000600000007ff0772067f00000700060c0001050b0300020204010301
-020204000502070100ff00ff0014050b0300020204010301020204000502070000ff00ff
-0015050b03000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff
-05ff052503000202040103010202040003ff03ff0326020204010301021a0400030002ff
-02f304000300021a04010301021a0400030002ff02f304000300021a04010301021a0400
-030002ff02f304000300021a04010301041b030004ff04f40300041c030004ff04ff0430
-
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 17 377 309
-%%EOF
diff --git a/lib/pman/doc/src/warning.gif b/lib/pman/doc/src/warning.gif
deleted file mode 100644
index 96af52360e..0000000000
--- a/lib/pman/doc/src/warning.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/ebin/.gitignore b/lib/pman/ebin/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/pman/ebin/.gitignore
+++ /dev/null
diff --git a/lib/pman/info b/lib/pman/info
deleted file mode 100644
index 22003edcea..0000000000
--- a/lib/pman/info
+++ /dev/null
@@ -1,2 +0,0 @@
-group: tools
-short: A graphical process manager used to inspect Erlang processes.
diff --git a/lib/pman/priv/Makefile b/lib/pman/priv/Makefile
deleted file mode 100644
index a89278fd3a..0000000000
--- a/lib/pman/priv/Makefile
+++ /dev/null
@@ -1,58 +0,0 @@
-# ``The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved via the world wide web at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# The Initial Developer of the Original Code is Ericsson Utvecklings AB.
-# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
-# AB. All Rights Reserved.''
-#
-# $Id$
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-include ../vsn.mk
-VSN = $(PMAN_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/pman-$(VSN)
-
-#
-# Macros
-#
-TOOLBAR_FILES = \
- pman.tool \
- pman.gif
-
-#
-# Rules
-#
-
-debug opt:
-
-docs:
-
-clean:
-
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/priv"
- $(INSTALL_DATA) $(TOOLBAR_FILES) "$(RELSYSDIR)/priv"
-
-release_docs_spec:
-
-FORCE:
diff --git a/lib/pman/priv/pman.gif b/lib/pman/priv/pman.gif
deleted file mode 100644
index 4575a397d8..0000000000
--- a/lib/pman/priv/pman.gif
+++ /dev/null
Binary files differ
diff --git a/lib/pman/priv/pman.tool b/lib/pman/priv/pman.tool
deleted file mode 100644
index c04b7d00eb..0000000000
--- a/lib/pman/priv/pman.tool
+++ /dev/null
@@ -1,6 +0,0 @@
-{version,"0.1"}.
-{{tool,"Pman"},
- {start,{pman,start,[]}},
- {icon,"pman.gif"},
- {message,"Process Manager"},
- {html,"../doc/html/index.html"}}.
diff --git a/lib/pman/src/Makefile b/lib/pman/src/Makefile
deleted file mode 100644
index eb0413bdbc..0000000000
--- a/lib/pman/src/Makefile
+++ /dev/null
@@ -1,112 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../vsn.mk
-VSN=$(PMAN_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/pman-$(VSN)
-
-# ----------------------------------------------------
-# Common Macros
-# ----------------------------------------------------
-
-MODULES= \
- pman \
- pman_main \
- pman_shell \
- pman_relay \
- pman_relay_server \
- pman_module_info \
- pman_win \
- pman_buf \
- pman_buf_utils \
- pman_buf_buffer \
- pman_buf_converter \
- pman_buf_printer \
- pman_options \
- pman_process \
- pman_tool
-
-HRL_FILES= \
- assert.hrl \
- pman_buf.hrl \
- pman_options.hrl \
- pman_win.hrl
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET)
-
-APP_FILE = pman.app
-APP_SRC = $(APP_FILE).src
-APP_TARGET = $(EBIN)/$(APP_FILE)
-
-APPUP_FILE = pman.appup
-APPUP_SRC = $(APPUP_FILE).src
-APPUP_TARGET = $(EBIN)/$(APPUP_FILE)
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS += +warn_obsolete_guard
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt: $(TARGET_FILES)
-
-clean:
- rm -f $(TARGET_FILES)
- rm -f errs core *~
-
-$(APP_TARGET): $(APP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-docs:
-
-# ----------------------------------------------------
-# Special Targets
-# ----------------------------------------------------
-
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/src"
- $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) $(TOOLBOX_FILES) "$(RELSYSDIR)/src"
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) $(TARGET_TOOLBOX_FILES) "$(RELSYSDIR)/ebin"
-
-release_docs_spec:
-
diff --git a/lib/pman/src/assert.hrl b/lib/pman/src/assert.hrl
deleted file mode 100644
index ea3b68cd7c..0000000000
--- a/lib/pman/src/assert.hrl
+++ /dev/null
@@ -1,81 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%% Purpose : Assert macro
-
-
-%% ?ASSERT/2 - will simply return true if the first argument evaluates to true
-%% otherwise it will exit and output (via the error logger) the
-%% second string
-%%
-%% Arguments:
-%% Flag Expression that should evalueate to true or false
-%% String String to return as a part of the exit reason as well
-%% be to be sent to the error logger.
-%%
-%% Returns:
-%% true If the Flag expression evaluates to true
-%%
-%% Exits:
-%% {'EXIT', {assertion_failed, String}}
-%% If the Flag expression evaluates to something other than
-%% true.
-%%
-%% Usage notes:
-%% Please note that the Flag argument must be a valid expression that
-%% evaluates to true.
-%%
-%% Also, avoid any side effects in the Flag, as everything performed
-%% within the scope of the ?ASSERT macro will not be present when
-%% the code is not compiled with the debug_on flag.
-%%
-%% Side effects include the binding of a variable, sending of a
-%% message, etc.
-%%
-
--ifdef(debug_on).
--define(ASSERT(Flag, String),
- case Flag of
- true ->
- true;
- _ ->
- S2 =
- lists:flatten(
- io_lib:format(
- "=ASSERT====~nPid:~p, Module:~p, Line:~p~nTermination because assertion failed:~n~p",
- [self(),?MODULE, ?LINE,String])),
- error_logger:error_report(S2),
- exit({assertion_failed, String})
- end
- ).
-
--define(ALWAYS_ASSERT(String),
- S2 = lists:flatten(
- io_lib:format(
- "=ASSERT====~nPid:~p, Module:~p, Line:~p~nTermination because of unconditional assert:~n~p",
- [self(),?MODULE, ?LINE, String])),
- error_logger:error_report(S2),
- exit({always_assert, String})
- ).
--else.
--define(ASSERT(_Flag,_String), true).
--define(ALWAYS_ASSERT(_String), true).
--endif.
-
-
-
diff --git a/lib/pman/src/pman.app.src b/lib/pman/src/pman.app.src
deleted file mode 100644
index cc32a17296..0000000000
--- a/lib/pman/src/pman.app.src
+++ /dev/null
@@ -1,40 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-{application, pman,
- [{description, "pman The Process Manager"},
- {vsn, "%VSN%"},
- {modules, [
- pman,
- pman_buf,
- pman_buf_buffer,
- pman_buf_converter,
- pman_buf_printer,
- pman_buf_utils,
- pman_main,
- pman_module_info,
- pman_options,
- pman_process,
- pman_relay,
- pman_relay_server,
- pman_shell,
- pman_tool,
- pman_win
- ]},
- {registered, []},
- {applications, [kernel, stdlib]}]}.
diff --git a/lib/pman/src/pman.appup.src b/lib/pman/src/pman.appup.src
deleted file mode 100644
index 7a435e9b22..0000000000
--- a/lib/pman/src/pman.appup.src
+++ /dev/null
@@ -1,19 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-{"%VSN%",[],[]}.
diff --git a/lib/pman/src/pman.erl b/lib/pman/src/pman.erl
deleted file mode 100644
index c8ea34b6b7..0000000000
--- a/lib/pman/src/pman.erl
+++ /dev/null
@@ -1,132 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%----------------------------------------------------------------------
-%%% Purpose : Exported API to the Pman graphical tool
-%%----------------------------------------------------------------------
-
--module(pman).
-
-
-%% ---------------------------------------------------------------
-%% The user interface exports
-%% ---------------------------------------------------------------
--export([start/0,
- start_notimeout/0,
- start/1,
- start_notimeout/1,
- proc/1,
- proc/3]).
-
-%% ---------------------------------------------------------------
-
-%% Timeout for the startup function.
-%% If no {initialization_complete, Pid} message has been received
-%% from the spawned init-function within ?STARTUP_TIMEOUT ms
-%% the start-function will call exit(Reason).
--define(STARTUP_TIMEOUT, 20000).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start/0
-
-start() ->
- start([], ?STARTUP_TIMEOUT). %Start w/o excluded modules
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start_notimeout/0
-
-start_notimeout() ->
- start([],infinity). %Start w/o excluded modules
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start/1
-
-start(LIModuleExcluded) ->
- start(LIModuleExcluded, ?STARTUP_TIMEOUT).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start_notimeout/1
-
-start_notimeout(LIModuleExcluded) ->
- start(LIModuleExcluded, infinity).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start/2 - Spawns the main Pman process, that will supervise
-%% all processes except those running code from the modules
-%% specified in LIModuleExcluded
-%%
-
-start(LIModuleExcluded, Timeout) ->
-
- OSModuleExcluded = ordsets:from_list(LIModuleExcluded),
-
- PidInit = spawn(pman_main, init, [self(), OSModuleExcluded]),
-
- %% Wait for a initialization completion message from
- %% the spawned process before returning its Pid.
- %%
-
- receive
- {initialization_complete, PidInit} ->
- PidInit
-
- %% (Conditional) Failure to start within the time limit will
- %% result in termination
-
- after
- Timeout ->
- exit(PidInit, kill),
- exit({startup_timeout, ?MODULE})
- end.
-
-
-
-%% ---------------------------------------------------------------
-%% If we want to trace just one process, we can call proc, giving it
-%% either the Pid, or the registered name, (Global or local).
-%%
-%% (???)
-%% Note that this function must not be used internally to create a
-%% trace window, since it is assumed that it is started from any
-%% process (esp. the shell) it will not have any supervisor process
-%% that shall be notified about it's exit/death.
-%%
-%% Returns: Trace loop Pid|udefined
-
-%% ---------------------------------------------------------------
-
-
-proc(undefined) ->
- exit(undefined);
-
-proc({shell,P}) when is_pid(P) ->
- pman_shell:start({{shell,P},self()});
-
-proc(P) when is_atom(P) ->
- proc(whereis(P));
-
-proc({global, N}) ->
- proc(global:whereis_name(N));
-
-proc(P) when is_pid(P) ->
- pman_shell:start({P,self()}).
-
-proc(X,Y,Z) ->
- proc(c:pid(X,Y,Z)).
-
diff --git a/lib/pman/src/pman_buf.erl b/lib/pman/src/pman_buf.erl
deleted file mode 100644
index d56ce184fa..0000000000
--- a/lib/pman/src/pman_buf.erl
+++ /dev/null
@@ -1,117 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%%----------------------------------------------------------------------
-%%% Purpose : This module is the exported interface to the buffering mechanism
-%%% used in PMAN to prevent the trace output to congest
-%%% the system.
-%%%
-%%% This module depends on the modules (direct or indirectly):
-%%% pman_buf.hrl
-%%% pman_buf_utils.erl
-%%% pman_buf_buffer.erl
-%%% pman_buf_converter.erl
-%%% pman_buf_printer.erl
-%%%
-%%%----------------------------------------------------------------------
-
--module(pman_buf).
-
-%%-compile(export_all).
--export([start/2,clear/3]).
-
-
--include("pman_buf.hrl").
-
-
-%% The buffering mechanism consists of three processes that
-%% work in a chain to prevent the process monitor from congesting
-%% output mechanism.
-%%
-%% Messages are buffered in the CONVERTER process before they are sent to
-%% to the BUFFER process where they are formatted before they are finally
-%% sent to either a file or the PRINTER process. The printer process
-%% outputs the messages in the graphical user interface.
-%%
-%%
-%%
-%% --> CONVERTER --> BUFFER --> PRINTER --> gui
-%% |
-%% |
-%% |
-%% V
-%%
-%% file
-%%
-
-
-
-
-
-%% ----------------------------------------------------------------
-%% The amount of data produced by a trace message may be large, and
-%% cause the run time system to run out of memory. To avoid this,
-%% the task of storing, cutting buffers, formating data and printing
-%% it is performed by three processes: The buffer, the converter and
-%% the printer.
-%%
-%% The converter accepts the raw data, a list
-%% of {trace,Msg} tuples. Having max priority, it assures that the
-%% amount of raw data stored never excedes ?BUFF_SIZE messages.
-%% (With the exception of the last batch received, which assures that
-%% the last trace message printed is never a buffer cut message.)
-%% Whenever there is space available in the buffer process, (The
-%% Buffer process stores max. ?BUFF_SIZE converted messages),
-%% the buffer asks for more unconverted messages, and ?PRINT_LEN messages
-%% are sent. They are converted by the buffer, and added to the list
-%% of messages to be sent.
-
-%% The printer process requests formatted messages from the buffer,
-%% and in chuncs of ?MAX_OUTPUT sends them to the buffer. If traces
-%% are to be dumped on file, due to the max priority, such is handled
-%% in the converter, and buffers are not cut.
-%%
-
-
-%% ---------------------------------------------------------------
-%% Initializes the buffering mechanism, which consist of three
-%% processes, each involved with a phase of the formattation and
-%% output of data to the process windows.
-
-start(Editor, FileName) ->
- Buffer_Pid = spawn_link(pman_buf_buffer,init,[Editor]),
- Converter_Pid =
- spawn_link(pman_buf_converter,init,[Buffer_Pid, FileName]),
- Buffer_Pid!{converter_pid, Converter_Pid},
- #buffer{converter=Converter_Pid,buffer=Buffer_Pid}.
-
-
-
-%% ---------------------------------------------------------------
-%% Kills the converter and the clears the buffer with formated data
-%% starting a new converter.
-
-clear(Buff,String, FileName) ->
- exit(Buff#buffer.converter,win_killed),
- Converter_Pid=spawn_link(pman_buf_converter,init,[Buff#buffer.buffer,
- FileName]),
- Buff#buffer.buffer!{clear,String,Converter_Pid },
- Buff#buffer{converter = Converter_Pid}.
-
-
-
diff --git a/lib/pman/src/pman_buf.hrl b/lib/pman/src/pman_buf.hrl
deleted file mode 100644
index 3f25dcc5f0..0000000000
--- a/lib/pman/src/pman_buf.hrl
+++ /dev/null
@@ -1,29 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%-compile(export_all).
-%%-export([Function/Arity, ...]).
-
--define(BUFF_SIZE,1000).
--define(EDITOR_MAX,10000).
--define(PRINT_LEN,50).
--define(MAX_OUTPUT,5000).
-
-
--record(buffer,{buffer,converter}).
diff --git a/lib/pman/src/pman_buf_buffer.erl b/lib/pman/src/pman_buf_buffer.erl
deleted file mode 100644
index ad92eb1f3e..0000000000
--- a/lib/pman/src/pman_buf_buffer.erl
+++ /dev/null
@@ -1,102 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%%----------------------------------------------------------------------
-%%% Purpose : The purpouse of the buffer process is to take
-%%% care of the data that is received by the converter
-%%% process and pass it on to the printer process in chunks
-%%% that can be handled.
-%%%
-%%% This module is a part of the buffering system, and
-%%% should not be used except through the API defined
-%%% in the pman_buf module.
-%%%
-%%%----------------------------------------------------------------------
-
--module(pman_buf_buffer).
-
-%%-compile(export_all).
--export([init/1]).
-
--include("pman_buf.hrl").
-
-
-
-%%
-%% Initialization function for the buffer process.
-%% To be started with spawn from the calling process.
-%%
-
-init(Editor) ->
- Printer_pid = spawn_link(pman_buf_printer,init,[Editor,self()]),
- receive
- {converter_pid,Pid} ->
- Pid!{buffer,accept},
- buffer_loop([],0,0,Printer_pid,Pid)
- end.
-
-
-
-%%
-%% Receive loop for the buffer process.
-%%
-
-buffer_loop(Buffer,Size,Acc,Printer,Converter) ->
- receive
- {save_buffer,Name} ->
- Printer!{save_buffer,Name},
- buffer_loop(Buffer,Size,Acc,Printer,Converter);
- {raw,Raw,Length} -> %%output to editor
- New_Size = Size + Length,
- if New_Size < ?BUFF_SIZE ->
- Converter!{buffer,accept};
- true -> ok
- end,
- Print = lists:map(fun(X) -> pman_buf_utils:textformat(X) end, Raw),
- New_Buff = lists:append(Buffer,Print),
- buffer_loop(New_Buff,New_Size,Acc,Printer,Converter);
- {clear,Text,N_Converter} ->
- Converter!{buffer,accept},
- Printer!clear,
- buffer_loop([Text],1,1,Printer,N_Converter);
- {printer,send} when Buffer /= [] ->
- if
- Acc > ?EDITOR_MAX ->
- Printer!clear,
- Printer !{buffer,"Cleared Buffer due to Size\n\n"},
- buffer_loop(Buffer,Size,1,Printer,Converter);
- true ->
- {Length,Rest,Print} = pman_buf_utils:split(Buffer,
- ?PRINT_LEN,
- 0,
- []),
- Printer ! {buffer,Print},
- New_Size = Size - Length,
- if New_Size < ?BUFF_SIZE ->
- Converter!{buffer,accept};
- true -> ok
- end,
- buffer_loop(Rest,New_Size,Acc+Length,Printer,Converter)
- end;
- {converter,file} ->
- Converter!{buffer,Buffer},
- self()!{raw,[to_file],1},
- buffer_loop([],0,Acc,Printer,Converter)
- end.
-
-
diff --git a/lib/pman/src/pman_buf_converter.erl b/lib/pman/src/pman_buf_converter.erl
deleted file mode 100644
index c8b3fe37aa..0000000000
--- a/lib/pman/src/pman_buf_converter.erl
+++ /dev/null
@@ -1,190 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%----------------------------------------------------------------------
-%% Purpose : The purpouse of the converter process is to take
-%% care of the raw data that is received by the tracing
-%% process (a pman_shell process) and pass it on to
-%% the buffer process in chunks that can be handled.
-%%
-%% This module is a part of the buffering system, and
-%% should not be used except through the API defined
-%% in the pman_buf module.
-%%
-%%----------------------------------------------------------------------
-
--module(pman_buf_converter).
--compile([{nowarn_deprecated_function,{gs,start,0}}]).
-
-%%-compile(export_all).
--export([init/2]).
-
--include("pman_buf.hrl").
-
-
-%% ---------------------------------------------------------------
-%% Starts the process which received the raw data from the debugger,
-%% cuts and forwards it to the buffer in smaller chunks. High priority
-%% to avoid large message queues waiting to be processed.
-
-init(Buffer_Pid, FileName) ->
- process_flag(priority, max),
- converter_loop(Buffer_Pid,[],0,true,[], FileName).
-
-converter_loop(Buffer_Pid,Raw,Size,State,Last, FileName) ->
- receive
- {file,Shell} ->
- case init_file(lists:append(Raw,Last),
- FileName,
- Shell,
- Buffer_Pid) of
- true -> converter_loop(Buffer_Pid,
- [to_buffer],
- 1,
- State,
- [],
- FileName);
- false -> converter_loop(Buffer_Pid,
- Raw,
- Size,
- State,
- Last,
- FileName)
- end;
- {raw,Trace} ->
- {New_Raw,New_Size,New_State,New_Last} =
- converter_data(Trace, Buffer_Pid, Raw, Size, State, Last),
- converter_loop(Buffer_Pid,
- New_Raw,
- New_Size,
- New_State,
- New_Last,
- FileName);
- {buffer,accept} when Raw /= [] ->
- {Length,Rest,Print} = pman_buf_utils:split(Raw,?PRINT_LEN,0,[]),
- Buffer_Pid!{raw,Print,Length},
- converter_loop(Buffer_Pid,Rest,Size-Length,false,Last,FileName);
- {buffer,accept} when Last /= [] ->
- {New_Raw,New_Size,New_State,New_Last} =
- converter_data(Last,Buffer_Pid,Raw,Size,true,[]),
- converter_loop(Buffer_Pid,
- New_Raw,
- New_Size,
- New_State,
- New_Last,
- FileName);
- {buffer,accept} ->
- converter_loop(Buffer_Pid,Raw,Size,true,Last, FileName);
- {clear,Str} ->
- Buffer_Pid!{clear,Str},
- converter_loop(Buffer_Pid,[],0,State,Last,FileName)
- end.
-
-converter_data(Trace,Buffer_Pid,Raw,Size,State,Last) ->
- if
- ?BUFF_SIZE - Size > 0 ->
- {Len,Rest,New_Trace} = pman_buf_utils:split(Trace,
- ?BUFF_SIZE-Size,
- 0,[]),
- {New_Raw,New_Last} =
- case Rest of
- [] ->
- {lists:append(Raw,New_Trace),Last};
- [_|_] ->
- case Last of
- [] ->
- {lists:append(Raw,New_Trace),Rest};
- _ ->{lists:concat([Raw,New_Trace,[cut_buffer]]),
- Rest}
- end
- end,
- case State of true ->
- {Length,Cut_Raw,Print} = pman_buf_utils:split(New_Raw,
- ?PRINT_LEN,
- 0,[]),
- Buffer_Pid!{raw,Print,Length},
- {Cut_Raw,Size-Length,false,New_Last};
- _ ->
- {New_Raw,Size+Len,false,New_Last}
- end;
- true ->
- {Raw,Size,State,Trace}
- end.
-
-
-%% ---------------------------------------------------------------
-%% Initializes the environment for saving the trace to file. The
-%% actual saving is taken care of by the buffer process.
-
-init_file(Raw,FileName, Name,Buffer_Pid) ->
- case open_file(FileName, Name) of
- {false,T} ->
- pman_win:msg_win(T),
- false;
- {File,T} ->
- Buffer_Pid!{converter,file},
- pman_win:dialog_window(gs:start(),T),
- save_loop_init(File,Raw)
- end.
-
-open_file(FileName, _Shell) ->
-%% L = "pman_trace." ++ Shell,
- case file:open(FileName, [read,write]) of
- {error, _} ->
- Str = "ERROR: Could not create_file\n" ++ FileName,
- {false,Str};
- {ok,File} ->
- file:position(File, {eof, 0}),
- Str1 = " Appending trace log to file\n" ++ FileName,
- {File,Str1}
- end.
-
-
-save_loop_init(Fd,Raw) ->
- {Date, Time} = calendar:local_time(),
- {Year, Month, Day} = Date,
- {Hour, Minute, Second} = Time,
- io:format(Fd,"%%% ~n",[]),
- io:format(Fd,"%%% Trace output~n",[]),
- io:format(Fd,"%%% Started at ~4p-~2p-~2p ~2p:~2p:~2p~n",
- [Year, Month, Day,
- Hour, Minute, Second
- ]),
- io:format(Fd,"%%% ~n~n",[]),
-
- Print = lists:map(fun(X) -> pman_buf_utils:textformat(X) end, Raw),
- receive
- {buffer,Text} when is_list(Text) ->
- io:format(Fd,Text,[]),
- io:format(Fd,Print,[]),
- save_loop(Fd)
- end.
-
-save_loop(Fd) ->
- receive
- {raw,Raw} ->
- Print = lists:map(fun(X) -> pman_buf_utils:textformat(X) end, Raw),
- io:format(Fd,Print,[]),
- save_loop(Fd);
- buffer -> true
- end.
-
-
-
-
-
diff --git a/lib/pman/src/pman_buf_printer.erl b/lib/pman/src/pman_buf_printer.erl
deleted file mode 100644
index 3284c57559..0000000000
--- a/lib/pman/src/pman_buf_printer.erl
+++ /dev/null
@@ -1,91 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--module(pman_buf_printer).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,start,0}}]).
-
-%%-compile(export_all).
--export([init/2]).
-
-
--include("pman_buf.hrl").
-
-%% ---------------------------------------------------------------
-%% Starts the part of the buffer which regulates the flow of data to
-%% be printed in the pid editors
-
-
-init(Editor,Buffer_pid) ->
- Buffer_pid!{printer,send},
- printer_loop(Editor,Buffer_pid).
-
-printer_loop(Editor,Buffer_pid)->
- receive
- {save_buffer,Name} ->
- gs:config(Editor,{save,Name}),
- TT = "Buffer saved in file\n" ++ Name,
- pman_win:dialog_window(gs:start(),TT),
- printer_loop(Editor,Buffer_pid);
- {buffer,Trace} ->
- case lists:flatlength(Trace) of
- Len when Len > ?MAX_OUTPUT ->
- printer_long(lists:flatten(Trace),Editor),
- Buffer_pid!{printer,send},
- printer_loop(Editor,Buffer_pid);
- _ ->
- Buffer_pid!{printer,send},
- print_trace(Editor,Trace),
- printer_loop(Editor,Buffer_pid)
- end;
- clear ->
- pman_win:configeditor(Editor, [{enable, true}]),
- pman_win:configeditor(Editor,clear),
- pman_win:configeditor(Editor, [{enable, false}]),
- printer_loop(Editor,Buffer_pid);
- _Other ->
- printer_loop(Editor,Buffer_pid)
- end.
-
-printer_long([],_) -> ok;
-printer_long(Trace,Editor) ->
- receive
- clear ->
- pman_win:configeditor(Editor, [{enable, true}]),
- pman_win:configeditor(Editor,clear),
- pman_win:configeditor(Editor, [{enable, false}])
- after 0 ->
- {_Length,Rest,Print} = pman_buf_utils:split(Trace,
- ?MAX_OUTPUT,
- 0,
- []),
- print_trace(Editor,Print),
- printer_long(Rest,Editor)
- end.
-
-
-
-%% ---------------------------------------------------------------
-%% Function which print trace messages on the window
-%% ---------------------------------------------------------------
-
-print_trace(Editor,Elements) ->
- pman_win:configeditor(Editor, [{enable, true}]),
- pman_win:configeditor(Editor, [{insert, {'end',Elements}}]),
- pman_win:configeditor(Editor, [{enable, false}]).
diff --git a/lib/pman/src/pman_buf_utils.erl b/lib/pman/src/pman_buf_utils.erl
deleted file mode 100644
index af3982665e..0000000000
--- a/lib/pman/src/pman_buf_utils.erl
+++ /dev/null
@@ -1,106 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--module(pman_buf_utils).
-
-%%-compile(export_all).
--export([textformat/1, split/4]).
-
-
-%% ---------------------------------------------------------------
-%% Funtion which format the trace message
-%% ---------------------------------------------------------------
-
-textformat(died) ->
- "\n\nProcess died\n";
-textformat({died, Pid}) ->
- io_lib:format("~w Process died.~n",[Pid]);
-textformat({shell_died, Old, New}) ->
- io_lib:format("~w Shell Process died. Restarted as ~w~n~n",[Old,New]);
-
-
-textformat(to_buffer) ->
- "\nAppending trace log to Buffer\n\n";
-textformat(to_file) ->
- "\nAppending trace log to File\n\n";
-textformat(cut_buffer) ->
- "\nCUT BUFFER\n\n";
-textformat({trace, From, 'receive', Msg}) ->
- io_lib:format("~w: rec ~s~n", [From,
- tuple_space(Msg)]);
-textformat({trace, From, send, Msg, To}) ->
- io_lib:format("~w: ! To: ~w Msg: ~s~n", [From,
- To,
- tuple_space(Msg)]);
-textformat({trace, From, call, Func}) ->
- io_lib:format("~w: call ~s~n",[From, ffunc(Func)]);
-textformat({trace, From, spawn, Data}) ->
- io_lib:format("~w: spawn ~p~n", [From, Data]);
-textformat({trace, From, link, Data}) ->
- io_lib:format("~w: link ~p~n", [From, Data]);
-textformat({trace, From, unlink, Data}) ->
- io_lib:format("~w: U-lnk ~p~n", [From, Data]);
-
-textformat({trace, From, Op, Data}) ->
- io_lib:format("~w: ~w ~p~n", [From, Op, Data]);
-
-textformat({print, Format, Args}) ->
- io_lib:format(Format, Args);
-textformat(Other) ->
- io_lib:format("~p~n",[Other]).
-
-
-
-
-
-ffunc({M,F, Argl}) ->
- io_lib:format("~w:~w(~s)", [M, F, fargs(Argl)]);
-ffunc(X) -> tuple_space(X).
-fargs([]) -> [];
-fargs([A]) -> tuple_space(A); %% last arg
-fargs([A|Args]) -> [tuple_space(A),", "|fargs(Args)].
-
-
-tuple_space(X) when is_tuple(X) -> print(size(X), X, "}");
-tuple_space(X) -> io_lib:format("~p",[X]).
-
-print(0 , _X, Buff) -> ["{"|Buff];
-print(1 , X, Buff) ->
- Str = tuple_space(element(1, X)),
- ["{",Str|Buff];
-print(Num, X, Buff) ->
- Str = tuple_space(element(Num, X)),
- print(Num-1, X, [", ",Str|Buff]).
-
-
-
-%% ----------------------------------------------------------------
-%% splits the list at element Size, returns Size, and the 2 lists
-%% If the list is not long enough, it returns {size(List),[],List}
-
-
-split([],_,Length,Buff) ->
- {Length,[],lists:reverse(Buff)};
-split(Rest,0,Length,Buff) ->
- {Length,Rest,lists:reverse(Buff)};
-split([L|List],Size,Length,Buff) ->
- split(List,Size-1,Length+1,[L|Buff]).
-
-
-
diff --git a/lib/pman/src/pman_main.erl b/lib/pman/src/pman_main.erl
deleted file mode 100644
index 2f51284293..0000000000
--- a/lib/pman/src/pman_main.erl
+++ /dev/null
@@ -1,789 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(pman_main).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-%% Main process and window
-
--export([init/2]).
-
--record(state, {win, % GS top window
- frame, % GS top frame
- grid, % GS process info grid
-
- size, % int() No. of displayed procs
- w, % int() Window width
- h, % int() Window height
-
- hide_system=false, % bool() Auto-hide system procs
- hide_new=false, % bool() Auto-hide new processes
-
- hide_modules, % ordset() Excluded modules
-
- hide_all=[], % [{node(), bool()}] Hide all
- hide_pids=[], % [{node(), Ordset}] Processes
- % explicitly to hide, per node
- show_pids=[], % [{node(), Ordset}] Processes
- % explicitly to show, per node
-
- shown_pids=[], % [{node(), Ordset}] Processes
- % actually shown, per node
-
- node, % node() Current node
- nodes=[], % [node()] All known nodes
-
- focus=1, % int() Grid line with focus
- focus_pid=undefined, % pid() | undefined Proc in focus
-
- noshell, % bool() Noshell mode on
-
- options}). % term() Trace options settings
-
-
--include("pman_win.hrl").
-
--define(REFRESH_TIME,5000).
-
--define(REQUIRES_FOCUS, % List of menus that should
- ['Trace Process', % be disabled if no process
- 'Kill', % is in focus
- 'Hide Selected Process',
- 'Module']).
-
-%%--Process init and loop-----------------------------------------------
-
-init(PidCaller, OSModuleExcluded) ->
- process_flag(trap_exit, true),
-
- %% Monitor all nodes in a distributed system
- case is_alive() of
-
- %% We have a distributed system
- true -> net_kernel:monitor_nodes(true);
-
- %% No distribution
- false -> ignore
- end,
- Nodes = [node()|nodes()],
-
- %% Create the main window
- %% For some extremely strange reason, the frame must be resized
- %% or the grid won't be visible...
- GridSize = length(processes()) + 61,
- {Window, Grid, Frame, Visible, W, H} =
- pman_win:pman_window(GridSize, OSModuleExcluded, Nodes),
- gse:resize(Frame, ?WIN_WIDTH, ?WIN_HEIGHT-?MENU_HEIGHT),
-
- Noshell = case pman_shell:find_shell() of
- noshell -> true;
- _ -> false
- end,
-
- State1 = #state{win=Window, frame=Frame, grid=Grid,
- size=Visible,
- w=W, h=H,
- hide_modules=OSModuleExcluded,
- node=node(),
- noshell=Noshell},
-
- State2 = lists:foldl(fun(Node, State) -> add_node(Node, State) end,
- State1,
- Nodes),
-
- State3 = refresh(State2),
-
- %% Notify caller that the process appears
- %% to have been started.
- PidCaller ! {initialization_complete, self()},
-
- %% Initiate a 'catch all' trace pattern so call tracing works
- erlang:trace_pattern({'_', '_', '_'}, true, [local]),
-
- %% Read default options file
- Options = restore_options(State3),
-
- loop(State3#state{options=Options}).
-
-add_node(Node, State) ->
- pman_win:add_menu(node, [Node], "Show"),
- State#state{hide_all=nl_update(Node, false, State#state.hide_all),
- hide_pids=nl_update(Node, [], State#state.hide_pids),
- show_pids=nl_update(Node, [], State#state.show_pids),
- shown_pids=nl_update(Node, [], State#state.shown_pids),
- nodes=[Node|State#state.nodes]}.
-
-%% Restore saved options from default file
-restore_options(State)->
- File = options_file(),
- case pman_options:read_from_file(File) of
- {ok, Options} ->
- Options;
- {error, ReasonStr, DefOptions} ->
- Parent = State#state.win,
- Msg = io_lib:format(
- "Problems reading default option file~n~s:~n~s",
- [File, ReasonStr]),
- tool_utils:notify(Parent, Msg),
- DefOptions
- end.
-
-options_file() ->
- {ok, [[Home]]} = init:get_argument(home),
- filename:join([Home, ".erlang_tools", "pman.opts"]).
-
-loop(State) ->
- receive
- {nodeup, Node} ->
- case nl_exists(Node, State#state.hide_all) of
- true ->
- pman_win:add_menu(node, [Node], "Show"),
- loop(State#state{nodes=[Node|State#state.nodes]});
- false ->
- loop(add_node(Node, State))
- end;
-
- {nodedown, Node} ->
- pman_win:remove_menu([Node]),
-
- Msg = io_lib:format("Node~n~p~ndown.", [Node]),
- spawn_link(tool_utils, notify, [State#state.win, Msg]),
-
- %% We remove Node from the list of nodes but not from
- %% the other lists of State, in case Node reappears later
- Nodes = lists:delete(Node, State#state.nodes),
- State2 = State#state{nodes=Nodes},
-
- %% If it was the shown node that went down,
- %% change overview to this node
- if
- Node==State#state.node ->
- State3 = execute_cmd({node,node()}, State2, [], []),
- loop(State3);
- true ->
- loop(State2)
- end;
-
- %% Ignore EXIT signals from help processes
- {'EXIT', _Pid, _Reason} ->
- loop(State);
-
- %% GS events
- {gs, _Obj, _Event, _Data, _Args} = Cmd ->
- case gs_cmd(Cmd, State) of
- stop ->
- exit(topquit);
- State2 ->
- loop(State2)
- end
-
- after ?REFRESH_TIME ->
- State2 = refresh(State),
- loop(State2)
- end.
-
-%% gs_cmd(Event, State) -> stop | State'
-gs_cmd(Event, State) ->
- case Event of
-
- %% --- Window manager commands ---
-
- %% Window is moved or resized
- {gs, _, configure, _Data, Args} ->
- configure(Args, State);
-
- %% Window closed, stop Pman
- {gs, _, destroy, _, _} ->
- stop;
-
- %% --- Dynamic commands ---
-
- %% Click in any object where the GS Data field is a 2-tuple
- {gs, _, click, Data, Args} when is_tuple(Data), size(Data)==2 ->
- execute_cmd(Data, State, [], Args);
-
- %% Single click in the grid sets focus to selected process
- {gs, _, click, {pidfunc,_,_}, [_,Row|_]} when is_integer(Row) ->
- focus(Row, State);
-
- %% Double click in the grid starts tracing of selected process
- {gs, _, doubleclick, {pidfunc,_,_}, [_Col,Row| _]} when is_integer(Row) ->
- execute_cmd('Trace Process', State, [], []);
-
- %% Click in named GS objects
- {gs, Cmd, click, Data, Args} when is_atom(Cmd);
- is_atom(element(1, Cmd)) ->
- execute_cmd(Cmd, State, Data, Args);
-
- %% --- Keyboard accelerator commands ---
-
- %% Move focus up and down
- {gs, _, keypress, [], ['Up',_,0,0]} ->
- execute_cmd(focus_previous, State, [], []);
- {gs, _, keypress, [], ['Down',_,0,0]} ->
- execute_cmd(focus_next, State, [], []);
-
- %% Other keyboard shortcuts
- {gs, _, keypress, [], ['Return',_,0,0]} ->
- execute_cmd('Trace Process', State, [], []);
- {gs, _, keypress, [], [Key,_,0,1]} ->
- execute_cmd(shortcut(Key), State, [], []);
-
- %% Ignore all other GS events
- _Other ->
- State
- end.
-
-%% Keyboard shortcuts
-
-%% File menu
-shortcut(o) -> 'Default Options';
-shortcut(e) -> 'Exit';
-shortcut(z) -> 'Exit';
-
-%% View menu
-shortcut(i) -> 'Hide All';
-shortcut(u) -> 'Hide Modules';
-shortcut(d) -> 'Hide Selected Process';
-shortcut(m) -> 'Module';
-shortcut(r) -> 'Refresh';
-
-%% Trace menu
-shortcut(k) -> 'Kill';
-shortcut(t) -> 'Trace Process';
-shortcut(s) -> 'Trace Shell';
-
-%% Help menu
-shortcut(h) -> 'Help';
-
-%% Keyboard command only
-shortcut(l) -> 'All Links';
-
-%% Process grid traversal
-shortcut(p) -> focus_previous;
-shortcut(n) -> focus_next;
-shortcut(_) -> dummy.
-
-%% configure([W,H,X,Y|_], State) -> State'
-%% Window has been moved or resized
-configure([W,H|_], State) ->
- if
- W==State#state.w, H==State#state.h ->
- ignore;
-
- true ->
- gse:resize(State#state.frame, W, H-?MENU_HEIGHT),
-
- Grid = State#state.grid,
- case abs(W - gs:read(Grid,width) - 6) of
- 0 ->
- ok; %% Avoid refreshing width if possible
- _Anything ->
- Cols = pman_win:calc_columnwidths(W-6),
- gs:config(Grid, Cols)
- end,
- pman_win:configwin(Grid, W, H)
- end,
- State.
-
-%% focus(Row, State) -> State'
-%% Row = int() Grid row
-%% User has selected a row in the grid.
-%% Row==1 means header row.
-focus(Row, State) ->
-
- Pid = case get_pid_in_focus(Row, State#state.grid) of
- {true, {pidfunc,Pid0,_}} ->
- pman_win:change_colour(State#state.grid,
- State#state.focus, Row),
- enable_pid_actions(),
- Pid0;
- false ->
- disable_pid_actions(),
- undefined
- end,
-
- State#state{focus=Row, focus_pid=Pid}.
-
-%% get_pid_in_focus(Row, Grid) -> {true, Data} | false
-%% Data = {pidfunc, Pid, Func}
-%% Func = {Mod,Name,Arity} | term()
-%% Return the data associated with the process in focus if there is one,
-get_pid_in_focus(1, _Grid) ->
- false;
-get_pid_in_focus(Row, Grid) ->
- case gs:read(Grid, {obj_at_row,Row}) of
- undefined -> false;
- GridLine ->
- Data = gs:read(GridLine, data),
- {true, Data}
- end.
-
-%% execute_cmd(Cmd, State, Data, Args) -> stop | State'
-
-%% Checkbutton "Hide System Processes"
-execute_cmd('Hide System', State, _Data, Args) ->
- [_Text, _Group, Bool|_Rest] = Args,
- State2 = State#state{hide_system=Bool},
- refresh(State2);
-
-%% Checkbutton "Auto-Hide New"
-execute_cmd('Auto Hide New', State, _Data, Args ) ->
- [_Text, _Group, Bool|_Rest] = Args,
- refresh(State#state{hide_new=Bool});
-
-%% File->Options...
-execute_cmd('Default Options', State, _Data, _Args) ->
- OldOptions = State#state.options,
- NewOptions = pman_options:dialog(State#state.win,
- "Default Trace Options",
- OldOptions),
- case NewOptions of
- {error, _Reason} ->
- State;
- Options ->
- State#state{options=Options}
- end;
-
-%% File->Save Options
-%% Save the set default options to the user's option file
-execute_cmd('Save Options', State, _Data, _Args)->
- Options = State#state.options,
- File = options_file(),
- Parent = State#state.win,
-
- case pman_options:save_to_file(Options, File) of
- ok ->
- tool_utils:notify(Parent, "Options saved to\n" ++ File);
- {error, ReasonStr} ->
- Msg = io_lib:format("Could not save options to~n~s:~n~s",
- [File, ReasonStr]),
- tool_utils:notify(Parent, Msg)
- end,
- State;
-
-%% File->Exit
-%% Exit the application
-execute_cmd('Exit', _State, _Data, _Args) ->
- stop;
-
-%% View->Hide All Processes
-execute_cmd('Hide All', State, _Data, _Args) ->
- Node = State#state.node,
- HideAll = nl_update(Node, true, State#state.hide_all),
- ShowPids = nl_del_all(State#state.node, State#state.show_pids),
- State2 = State#state{hide_all=HideAll, show_pids=ShowPids},
- refresh(State2, true);
-
-%% View->Hide modules...
-%% Opens a dialog where the user can select from a list of
-%% the loaded modules.
-%% The selected module is added to the list of hidden modules.
-execute_cmd('Hide Modules', State, _Data, _Args) ->
-
- %% Get all loaded modules that are not already hidden
- AllModules = lists:map(fun({Module, _File}) -> Module end,
- code:all_loaded()),
- ModulesSet = ordsets:subtract(ordsets:from_list(AllModules),
- State#state.hide_modules),
-
- %% Let the user select which of the loaded modules to exclude from
- %% the process overview
- Title = "Module selection",
- case pman_tool:select(State#state.win, Title, ModulesSet) of
- Modules when is_list(Modules) ->
- HideModules = ordsets:union(State#state.hide_modules,
- ordsets:from_list(Modules)),
- refresh(State#state{hide_modules=HideModules});
- cancelled -> State
- end;
-
-%% View->Hide Selected Process
-%% The process in focus should explicitly be hidden
-execute_cmd('Hide Selected Process', State, _Data, _Args) ->
- case State#state.focus_pid of
- undefined -> State;
- Pid ->
- Node = State#state.node,
- HidePids = nl_add(Node, Pid, State#state.hide_pids),
- ShowPids = nl_del(Node, Pid, State#state.show_pids),
- refresh(State#state{hide_pids=HidePids, show_pids=ShowPids})
- end;
-
-%% View->Module Info...
-%% Open window with module information.
-execute_cmd('Module', State, _Data, _Args) ->
- case get_pid_in_focus(State#state.focus, State#state.grid) of
- {true, {pidfunc, _Pid, {Module,_Name,_Arity}}} ->
- pman_module_info:start(Module);
- _ -> % false | {true, {pidfunc, Pid, Other}}
- ignore
- end,
- State;
-
-%% View->Refresh
-%% Refresh the main window.
-%% (Called automatically every ?REFRESH_TIME millisecond)
-execute_cmd('Refresh', State, _Data, _Args) ->
- refresh(State);
-
-%% View->Show All Processes
-%% Makes all processes visible except system processes and new
-%% processes, if those buttons are checked.
-%% Note: Also un-hides all hidden modules!
-execute_cmd('Show All', State, _Data, _Args) ->
- Node = State#state.node,
- HideAll = nl_update(Node, false, State#state.hide_all),
- HidePids = nl_del_all(State#state.node, State#state.hide_pids),
- ShowPids = nl_del_all(State#state.node, State#state.show_pids),
- State2 = State#state{hide_modules=ordsets:new(), hide_all=HideAll,
- hide_pids=HidePids, show_pids=ShowPids},
- refresh(State2, true);
-
-%% View->Show Processes...
-%% Open a list of all hidden processes, if the user selects one this
-%% process should explicitly be shown
-execute_cmd('Show Selected', State, _Data, _Args) ->
- Node = State#state.node,
-
- All = pman_process:r_processes(Node),
- Hidden = case nl_lookup(Node, State#state.hide_all) of
- true ->
- All;
- false ->
- Shown = nl_lookup(Node, State#state.shown_pids),
- ordsets:subtract(All, Shown)
- end,
-
- %% Selection window
- Title = "Select Processes to Show",
- Tuples =
- lists:map(fun(Pid) ->
- {M,F,A} = pman_process:function_info(Pid),
- Str = case pman_process:get_name(Pid) of
- " " ->
- io_lib:format("~p:~p/~p",
- [M, F, A]);
- Name ->
- io_lib:format("[~p] ~p:~p/~p",
- [Name, M, F, A])
- end,
- {Pid, Str}
- end,
- Hidden),
- case pman_tool:select(State#state.win, Title, Tuples) of
- Pids when is_list(Pids) ->
- HidePids = nl_del(Node, Pids, State#state.hide_pids),
- ShowPids = nl_add(Node, Pids, State#state.show_pids),
- refresh(State#state{hide_pids=HidePids,show_pids=ShowPids});
- cancelled -> State
- end;
-
-%% Trace->Kill
-execute_cmd('Kill', State, _Data, _Args) ->
- case State#state.focus_pid of
- Pid when is_pid(Pid) ->
- exit(Pid, kill);
- undefined ->
- ignore
- end,
- State;
-
-%% Trace->Selected Process
-execute_cmd('Trace Process', State, _Data, _Args) ->
- case State#state.focus_pid of
- Pid when is_pid(Pid) ->
- pman_shell:start({Pid,self()}, State#state.options);
- undefined ->
- ignore
- end,
- State;
-
-%% Trace->Shell Process
-execute_cmd('Trace Shell', State, _Data, _Args) ->
- case pman_shell:find_shell() of
- noshell ->
- State;
- Shell ->
- pman_shell:start({{shell,Shell},self()},
- State#state.options),
- State#state{noshell=false}
- end;
-
-%% Nodes->Show <Node>
-%% Change shown node
-execute_cmd({node,Node}, State, _Data, _Args) ->
- gse:config(State#state.win,
- [{title,lists:concat(["Pman: Overview on ", Node])}]),
- gse:disable(Node),
- catch gse:enable(State#state.node), % Menu may not exist any more
- refresh(State#state{node=Node}, true);
-
-%% Help->Help
-execute_cmd('Help', State, _Data, _Args) ->
- Win = State#state.win,
- HelpFile =
- filename:join([code:lib_dir(pman),"doc","html","index.html"]),
- tool_utils:open_help(Win, HelpFile),
- State;
-
-%% Keyboard shortcut Ctrl-l
-execute_cmd('All Links', State, _Data, _Args) ->
- case State#state.focus_pid of
- Pid when is_pid(Pid) ->
- case process_info(Pid, links) of
- {links, Pids} ->
- pman_shell:start_list(Pids, self(),
- State#state.options);
- undefined ->
- ignore
- end;
- undefined -> ignore
- end,
- State;
-
-%% Keyboard shortcuts for process grid traversal
-execute_cmd(focus_previous, State, _Data, _Args) ->
- focus(previous_row(State), State);
-execute_cmd(focus_next, State, _Data, _Args) ->
- focus(next_row(State), State);
-
-%% Keyboard combinations that are not shortcuts
-execute_cmd(dummy, State, _Data, _Args) ->
- State.
-
-%% Convenience functions for disabling/enabling menu items that require
-%% that a process is selected.
-disable_pid_actions() ->
- lists:foreach(fun(X) -> gse:disable(X) end, ?REQUIRES_FOCUS).
-
-enable_pid_actions() ->
- lists:foreach(fun(X) -> gse:enable(X) end, ?REQUIRES_FOCUS).
-
-%% refresh(State) -> State'
-%% refresh(State, ForceP) -> State'
-%% Refreshes the main window.
-refresh(State) ->
- refresh(State, false).
-refresh(#state{node=Node} = State, ForceP) ->
-
- %% Update shown processes
-
- %% First, get an ordset of all processes running at the current node
- All = pman_process:r_processes(Node),
-
- Shown = nl_lookup(Node, State#state.shown_pids),
- ExpShown = nl_lookup(Node, State#state.show_pids),
-
- {Show, State2} =
- case nl_lookup(Node, State#state.hide_all) of
-
- %% If the user has selected "Hide All Processes", only
- %% explicitly selected processes which still exist should
- %% be shown
- true ->
- {ordsets:intersection(ExpShown, All), State};
-
- false ->
- %% Compute which processes should be hidden according
- %% to the flags/menu items selected
- Hidden = hidden_pids(All, State),
-
- NotHidden = ordsets:subtract(All, Hidden),
-
- Show0 = case State#state.hide_new of
- %% If the user has selected "Auto-Hide New",
- %% then only those processes in NotHidden
- %% which are already shown, should be shown,
- %% together with explicitly selected
- %% processes which still exist
- true ->
- ordsets:union(
- ordsets:intersection(NotHidden,Shown),
- ordsets:intersection(ExpShown, All));
-
- %% Otherwise, show all processes in
- %% NotHidden, together with explicitly
- %% selected processes which still exist
- false ->
- ordsets:union(
- NotHidden,
- ordsets:intersection(ExpShown, All))
- end,
-
- ShownPids = nl_update(Node, Show0,
- State#state.shown_pids),
- {Show0, State#state{shown_pids=ShownPids}}
- end,
-
- NoOfHidden = length(All) - length(Show),
-
- if
- Show==Shown, not ForceP ->
- pman_win:update(NoOfHidden),
- State;
-
- true ->
- ShowInfo = display_info(Show),
- pman_win:update(State#state.grid, ShowInfo, NoOfHidden),
-
- %% Set the focus appropriately
- State3 = case State2#state.focus_pid of
- undefined ->
- disable_pid_actions(),
- State2;
- Pid ->
- Row = get_row(Pid, Show),
- focus(Row, State2)
- end,
-
- trace_shell_possible(State3),
-
- Size = length(Show),
- case Size of
- 1 -> gse:disable('Hide All');
- _ -> gse:enable('Hide All')
- end,
-
- State3#state{size=Size}
- end.
-
-%% hidden_pids(All, State) -> Hidden
-hidden_pids(All, State) ->
-
- %% Processes hidden because they are system processes
- HideSys = case State#state.hide_system of
- true ->
- lists:filter(
- fun(Pid) ->
- pman_process:is_system_process(Pid)
- end,
- All);
- false ->
- []
- end,
-
- %% Process hidden because they are executing code in a hidden module
- Mods = State#state.hide_modules,
- HideMod =
- lists:filter(fun(Pid) ->
- pman_process:is_hidden_by_module(Pid, Mods)
- end,
- All),
-
- %% Explicitly hidden processes
- HideExp = nl_lookup(State#state.node, State#state.hide_pids),
-
- %% All hidden processes
- ordsets:union([HideSys, HideMod, HideExp]).
-
-display_info(Pids) ->
- lists:map(fun(Pid) ->
- Func = pman_process:function_info(Pid),
- Name = pman_process:get_name(Pid),
- Msgs = pman_process:msg(Pid),
- Reds = pman_process:reds(Pid),
- Size = pman_process:psize(Pid),
- {Pid, Func, Name, Msgs, Reds, Size}
- end,
- Pids).
-
-get_row(Pid, List) ->
- get_row(Pid, List, length(List)+1).
-
-get_row(Pid, [Pid | _], Row) ->
- Row;
-get_row(Pid, [_ | T], Row) ->
- get_row(Pid, T, Row-1);
-get_row(_Pid, [], _Row) ->
- 1.
-
-next_row(#state{size=Size, focus=Row}) ->
- check_row(Row+1, Size).
-
-previous_row(#state{size=Size, focus=Row}) ->
- check_row(Row-1, Size).
-
-check_row(1, Size) ->
- Size+1;
-check_row(Row, Size) when Row==Size+2 ->
- 2;
-check_row(Row, _Size) ->
- Row.
-
-%% Check if node is running in noshell mode and if so disable the
-%% 'Trace Shell' menu option.
-trace_shell_possible(#state{noshell=true}) ->
- gse:disable('Trace Shell');
-trace_shell_possible(_) ->
- ok.
-
-%% -- Functions for manipulating {Node, Data} lists --
-
-%% nl_add(Node, Elem|Elems, NList) -> NList'
-nl_add(Node, Elems, [{Node, Ordset} | T]) when is_list(Elems) ->
- [{Node, ordsets:union(Elems, Ordset)} | T];
-nl_add(Node, Elem, [{Node, Ordset} | T]) ->
- [{Node, ordsets:add_element(Elem, Ordset)} | T];
-nl_add(Node, Elem, [H | T]) ->
- [H | nl_add(Node, Elem, T)];
-nl_add(Node, Elems, []) when is_list(Elems) ->
- [{Node, Elems}];
-nl_add(Node, Elem, []) ->
- [{Node, ordsets:add_element(Elem, ordsets:new())}].
-
-%% nl_del(Node, Elem|Elems, NList) -> NList'
-nl_del(Node, Elems, [{Node, Ordset} | T]) when is_list(Elems) ->
- [{Node, ordsets:subtract(Ordset, Elems)} | T];
-nl_del(Node, Elem, [{Node, Ordset} | T]) ->
- [{Node, ordsets:del_element(Elem, Ordset)} | T];
-nl_del(Node, Elem, [H | T]) ->
- [H | nl_del(Node, Elem, T)];
-nl_del(_Node, _Elem, []) ->
- [].
-
-%% nl_del_all(Node, NList) -> NList'
-nl_del_all(Node, [{Node, _Ordset} | T]) ->
- [{Node, ordsets:new()} | T];
-nl_del_all(Node, [H | T]) ->
- [H | nl_del_all(Node, T)];
-nl_del_all(_Node, []) ->
- [].
-
-%% nl_update(Node, Val, NList) -> NList'
-nl_update(Node, Val, [{Node, _OldVal} | T]) ->
- [{Node, Val} | T];
-nl_update(Node, Val, [H | T]) ->
- [H | nl_update(Node, Val, T)];
-nl_update(Node, Val, []) ->
- [{Node, Val}].
-
-%% nl_lookup(Node, NList) -> Val
-nl_lookup(Node, NList) ->
- {value, {_Node,Val}} = lists:keysearch(Node, 1, NList),
- Val.
-
-%% nl_exists(Node, NList) -> bool()
-nl_exists(Node, NList) ->
- case lists:keysearch(Node, 1, NList) of
- {value, _Val} ->
- true;
- false ->
- false
- end.
diff --git a/lib/pman/src/pman_module_info.erl b/lib/pman/src/pman_module_info.erl
deleted file mode 100644
index 944fd4a462..0000000000
--- a/lib/pman/src/pman_module_info.erl
+++ /dev/null
@@ -1,133 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(pman_module_info).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,start,1}}]).
-
-%% Window with module information (View->Module Info...)
-
-%% External exports
--export([start/1]).
-
-%% Record for keeping the loop state for the
-%% module info process.
--record(state, {topwin, % GS identifier for top window
- editor, % GS identifier for editor
- module, % Name of the viewed module
- parent}). % Pid of the parent
-
-start(Module) ->
- Self = self(),
- spawn_link(fun() -> init(Module, Self) end).
-
-init(Module, Parent) ->
- process_flag(trap_exit, true),
-
- GS = gs:start([{kernel,true}]),
- Font = pman_win:font(GS),
-
- WinTitle = lists:flatten(io_lib:format("Pman - Module Info: ~p",
- [Module])),
- WinOptions = [{title,WinTitle}, {width,550}, {height, 400},
- {configure,true}, {keypress,true}, {destroy,true}],
- TopWindow = gse:window(GS, WinOptions),
-
- %% File menu
- MenuBar = gse:menubar(TopWindow, []),
- MBFile = gse:menubutton(MenuBar, [{label,{text," File "}},
- {font,Font}, {underline, 1}]),
- MenuFile = gse:menu(MBFile, []),
-
- gse:named_menuitem('Save buffer', MenuFile,
- [{label,{text,"Save buffer..."}},
- {font,Font}, {underline,0}]),
- gse:named_menuitem('Close', MenuFile,
- [{label,{text,"Close"}},
- {font,Font}, {underline,0}]),
-
- %% Output part of window
- Editor = gse:editor(TopWindow,
- [{font,Font},
- {x,3}, {y,40}, {width,546}, {height,348}]),
- gse:config(Editor, [{keypress,true},
- {insert,{'end',pman_win:module_data(Module)}}]),
- gse:config(Editor, [{enable,false},
- {vscroll,right}, {hscroll,bottom},
- {wrap,none}]),
- gse:map(TopWindow),
-
- State = #state{topwin=TopWindow, editor=Editor, module=Module,
- parent=Parent},
- loop(State).
-
-loop(State) ->
-
- receive
- %% Die if the parent dies
- {'EXIT', Pid, _Reason} when Pid==State#state.parent ->
- gse:destroy(State#state.topwin);
-
- %% Ignore other exit signals (from file dialog window)
- {'EXIT', _Pid, _Reason} ->
- loop(State);
-
- %% Window closed
- {gs, _TopWindow, destroy, [], []} ->
- ok;
-
- %% Window resized or moved
- {gs, _TopWindow, configure ,_Data, [W,H,_X,_Y|_]} ->
- gs:config(State#state.editor, [{width,W-3}, {height,H-40}]),
- loop(State);
-
- %% Close - destroy window and exit process
- {gs, 'Close', click, _Data, _Args} ->
- gse:destroy(State#state.topwin),
- ok;
-
- %% Save Buffer - make filename and save buffer to file
- {gs, 'Save buffer', click, _Data, _Args} ->
- save_buffer(State),
- loop(State);
-
- %% Keyboard accelerator commands
- {gs, _, keypress, [], [c,_,0,1]} -> % 'Close'
- gse:destroy(State#state.topwin),
- ok;
- {gs, _, keypress, [], [s,_,0,1]} -> % 'Save buffer'
- save_buffer(State),
- loop(State);
- {gs, _, keypress, _Data, _Args} ->
- loop(State)
- end.
-
-save_buffer(State) ->
- DefaultFile = atom_to_list(State#state.module) ++ ".module_info",
- Result = tool_utils:file_dialog([{type,save}, {file,DefaultFile}]),
- case Result of
- %% User selected a file, now save the result
- {ok, File, _Dir} ->
- gs:config(State#state.editor, {save,File}),
- Msg = "Module information saved in file\n" ++ File,
- tool_utils:notify(State#state.topwin, Msg);
-
- %% File dialog was cancelled in some way.
- {error, _Reason} ->
- ignore
- end.
diff --git a/lib/pman/src/pman_options.erl b/lib/pman/src/pman_options.erl
deleted file mode 100644
index 0765458fdc..0000000000
--- a/lib/pman/src/pman_options.erl
+++ /dev/null
@@ -1,395 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(pman_options).
-
-%% Window with trace options settings (File->Options...)
-
--export([dialog/3,
- read_from_file/1, save_to_file/2]).
-
--include("pman_options.hrl").
-
--define(WIN_WIDTH, 350).
--define(WIN_HEIGHT, 350).
-
--define(TOP_WINDOW, xx_pman_option_window_xx).
--define(TOP_FRAME, xx_pman_top_frame_xx).
-
--record(state, {resize_frame, % GS identifier for the main frame
- parent}). % Pid of parent
-
-%%--dialog/3------------------------------------------------------------
-%% Create a window, or return a value indicating that is is already
-%% created.
-
-dialog(ParentWin, Title, Options) ->
- Self = self(),
- Pid = spawn(fun() -> dialog(Self, ParentWin, Title, Options) end),
- receive
- {Pid, Value} ->
- Value % Options2 | {error,destroyed} | {error,cancelled}
- end.
-
-dialog(Parent, ParentWin, Title, Options) ->
-
- %% Check if the dialog has already been created, in that
- %% case, we can reuse it. Otherwise a new dialog is created.
- case gse:name_occupied(?TOP_WINDOW) of
- false -> make_window(ParentWin, Title);
- true -> ok
- end,
-
- %% Window has now been created or may be re-used
- update_window_from_options(Options),
-
- gse:resize(?TOP_FRAME, ?WIN_WIDTH, ?WIN_HEIGHT),
- gse:map(?TOP_WINDOW),
-
- loop(#state{resize_frame=?TOP_FRAME, parent=Parent}).
-
-loop(State) ->
- receive
- {gs, _Id, destroy, _Data, _Arg} ->
- State#state.parent ! {self(), {error,destroyed}};
-
- {gs, ?TOP_WINDOW, configure, _Data, [W, H |_]} ->
- gse:config(State#state.resize_frame,
- [{width,W},{height,H}]), % repack
- loop(State);
-
- {gs, ok_button, click, _Data, _Arg} ->
- Options = get_options_from_window(),
- gse:unmap(?TOP_WINDOW),
- State#state.parent ! {self(), Options};
-
- {gs, cancel_button, click, _Data, _Arg} ->
- gse:unmap(?TOP_WINDOW),
- State#state.parent ! {self(), {error,cancelled}};
-
- {gs, trace_spawn, click, _Data, [_Text,_,Value]} ->
- group_radio(Value, trace_spawn_all, [trace_spawn_all,
- trace_spawn_first]),
- loop(State);
-
- {gs, trace_link, click, _Data, [_Text,_,Value]} ->
- group_radio(Value, trace_link_all, [trace_link_all,
- trace_link_first]),
- loop(State);
-
- {gs, trace_in_window, click, _Data, _Arg} ->
- lists:foreach(fun(X) -> gse:disable(X) end,
- [trace_file, trace_file_browse]),
- loop(State);
-
- {gs, trace_to_file, click, _Data, [_Text,_,_Value]} ->
- lists:foreach(fun(X) -> gse:enable(X) end,
- [trace_file, trace_file_browse]),
- loop(State);
-
- {gs, trace_file_browse, click, _Data, _Arg} ->
- Result = tool_utils:file_dialog([{type,save},
- {file, "Untitled.log"}]),
- case Result of
- {error, _Reason} ->
- loop(State);
- {ok, Name,_State} ->
- gse:config(trace_file, [{text, Name}]),
- loop(State)
- end
- end.
-
--define(LBLOPTS, [{justify,left}, {align,w}]).
--define(BTNOPTS, [{justify,left}, {align,w}]).
-
-make_window(ParentWin, Title) ->
-
- Font = pman_win:font(),
-
- gse:named_window(?TOP_WINDOW, ParentWin, [{title,Title},
- {configure,true},
- {width, ?WIN_WIDTH},
- {height, ?WIN_HEIGHT}]),
-
- gse:named_frame(?TOP_FRAME, ?TOP_WINDOW,
- [{bw,3},
- {packer_x,[{stretch,1,175}, {stretch,1,175}]},
- {packer_y,[{stretch,3},{stretch,2},{stretch,1}]}]),
-
- F11 = gse:frame(?TOP_FRAME, [{bw,3},
- {pack_xy,{1,1}},
- {packer_x,[{stretch,1},
- {stretch,20},
- {stretch,2}]},
- {packer_y,[{stretch,2},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1}]}]),
-
- gse:label(F11,[{pack_xy,{2,1}},
- {label,{text,"Trace output options:"}},
- {font,Font} | ?LBLOPTS]),
-
- gse:named_checkbutton(trace_send, F11,
- [{pack_xy,{2,2}},
- {label,{text,"Trace send"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_checkbutton(trace_receive, F11,
- [{pack_xy,{2,3}},
- {label,{text, "Trace receive"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_checkbutton(trace_functions,F11,
- [{pack_xy,{2,4}},
- {label,{text, "Trace functions"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_checkbutton(trace_events,F11,
- [{pack_xy,{2,5}},
- {label,{text, "Trace events"}},
- {font,Font} | ?BTNOPTS]),
-
- F21 = gse:frame(?TOP_FRAME, [{bw,3},
- {pack_xy,{2,1}},
- {packer_x,[{stretch,1},
- {stretch,2},
- {stretch,2},
- {stretch,20},
- {stretch,1}]},
- {packer_y,[{stretch,2},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1},
- {stretch,1}]}]),
-
- gse:label(F21, [{pack_xy,{{2,4},1}},
- {label,{text,"Inheritance options:"}},
- {font,Font} | ?LBLOPTS]),
-
- gse:named_checkbutton(trace_spawn, F21,
- [{pack_xy,{{2,4},2}},
- {data,trace_send},
- {label,{text,"Inherit on spawn"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_radiobutton(trace_spawn_all, F21,
- [{pack_xy,{{3,4},3}},
- {group,spawn},
- {data,trace_receive},
- {label,{text, "All spawns"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_radiobutton(trace_spawn_first, F21,
- [{pack_xy,{{3,4},4}},
- {group,spawn},
- {data,trace_receive},
- {label,{text,"First spawn only"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_checkbutton(trace_link, F21,
- [{pack_xy,{{2,4},6}},
- {data,trace_send},
- {label,{text,"Inherit on link"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_radiobutton(trace_link_all, F21,
- [{pack_xy,{{3,4},7}},
- {group,link},
- {data,trace_receive},
- {label,{text,"All links"}},
- {font,Font} | ?BTNOPTS]),
-
- gse:named_radiobutton(trace_link_first, F21,
- [{pack_xy,{{3,4},8}},
- {group,link},
- {data,trace_receive},
- {label,{text,"First link only"}},
- {font,Font} | ?BTNOPTS]),
-
- F12 = gse:frame(?TOP_FRAME, [{bw,3},
- {pack_xy,{{1,2},2}},
- {packer_x,[{stretch,1},
- {stretch,5}, % Label
- {stretch,1},
- {stretch,10}, % Field
- {stretch,1},
- {stretch,5}, % Button
- {stretch,1}]},
- {packer_y,[{stretch,2},
- {stretch,1},
- {stretch,1},
- {stretch,1}]}]),
-
- gse:label(F12, [{pack_xy,{{2,6},1}},
- {label,{text,"Trace output options:"}},
- {font,Font} | ?LBLOPTS]),
- gse:named_radiobutton(trace_in_window, F12,
- [{pack_xy,{{2,6},2}},
- {group, trace_dest},
- {label,{text,"In window"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_radiobutton(trace_to_file, F12,
- [{pack_xy,{2,3}},
- {group, trace_dest},
- {label,{text,"To file"}},
- {font,Font} | ?BTNOPTS]),
- gse:named_entry(trace_file, F12, [{pack_xy,{4,3}}, {font,Font}]),
- gse:named_button(trace_file_browse, F12,
- [{pack_xy,{6,3}},
- {label,{text," Browse..."}},
- {font,Font} | ?BTNOPTS]),
-
- F13 = gse:frame(?TOP_FRAME, [{bw,3},
- {pack_xy,{{1,2},3}},
- {packer_x,[{stretch, 1},
- {fixed, 60},
- {stretch, 1},
- {fixed, 60},
- {stretch, 1}]},
- {packer_y,[{stretch,1},
- {fixed, 30},
- {stretch,1}]}]),
-
- gse:named_button(ok_button, F13, [{pack_xy,{2,2}},
- {label,{text,"OK"}},
- {font,Font}]),
- gse:named_button(cancel_button, F13, [{pack_xy,{4,2}},
- {label,{text,"Cancel"}},
- {font,Font}]).
-
-update_window_from_options(Options) ->
-
- %% Trace output
- gse:config(trace_send, [{select,Options#trace_options.send}]),
- gse:config(trace_receive,
- [{select,Options#trace_options.treceive}]),
- gse:config(trace_functions,
- [{select,Options#trace_options.functions}]),
- gse:config(trace_events, [{select,Options#trace_options.events}]),
-
- %% Trace inheritance
- case (Options#trace_options.inherit_on_all_spawn or
- Options#trace_options.inherit_on_1st_spawn) of
- true ->
- gse:select(trace_spawn),
- gse:config(trace_spawn_all,
- [{select,Options#trace_options.inherit_on_all_spawn}]),
- gse:config(trace_spawn_first,
- [{select,Options#trace_options.inherit_on_1st_spawn}]);
- false ->
- lists:foreach(fun(X) -> gse:disable(X) end,
- [trace_spawn_all,trace_spawn_first])
- end,
-
- case (Options#trace_options.inherit_on_all_link or
- Options#trace_options.inherit_on_1st_link) of
- true -> gse:select(trace_link),
- gse:config(trace_link_all,
- [{select,Options#trace_options.inherit_on_all_link}]),
- gse:config(trace_link_first,
- [{select, Options#trace_options.inherit_on_1st_link}]);
- false ->
- lists:foreach(fun(X) -> gse:disable(X) end,
- [trace_link_all,trace_link_first])
- end,
-
- %% Trace ouput destinations
- gse:config(trace_in_window,
- [{select,(not Options#trace_options.to_file)}]),
-
- gse:config(trace_to_file, [{select,Options#trace_options.to_file}]),
- gse:config(trace_file, [{text,Options#trace_options.file}]),
- case Options#trace_options.to_file of
- true ->
- ok;
- false ->
- lists:foreach(fun(X) -> gse:disable(X) end,
- [trace_file, trace_file_browse])
- end.
-
-get_options_from_window() ->
- #trace_options{send = gse:read(trace_send,select),
- treceive = gse:read(trace_receive,select),
- functions = gse:read(trace_functions,select),
- events = gse:read(trace_events,select),
- inherit_on_1st_spawn = gse:read(trace_spawn_first,select),
- inherit_on_all_spawn = gse:read(trace_spawn_all,select),
- inherit_on_1st_link = gse:read(trace_link_first,select),
- inherit_on_all_link = gse:read(trace_link_all,select),
- to_file = gse:read(trace_to_file,select),
- file = gse:read(trace_file,text)}.
-
-group_radio(Value, Default, GroupList) ->
- case Value of
- true ->
- gse:select(Default),
- lists:foreach(fun(X) -> gse:enable(X) end, GroupList);
- false ->
- lists:foreach(fun(X) -> gse:deselect(X) end, GroupList),
- lists:foreach(fun(X) -> gse:disable(X) end, GroupList)
- end.
-
-%%--read_from_file/(File)-----------------------------------------------
-%% Returns the options saved in File.
-%% If no options can be found, then the default options are
-%% returned.
-
-read_from_file(File) ->
- case file:consult(File) of
- {ok, [Term]} ->
- if
- is_record(Term, trace_options) ->
- {ok, Term};
- true ->
- {error, "unexpected contents", #trace_options{}}
- end;
- {ok, _Terms} ->
- {error, "unexpected contents", #trace_options{}};
- {error, Tuple} when is_tuple(Tuple) -> % {Line,Mod,Term}
- {error, "erroneous contents", #trace_options{}};
- {error, _Posix} ->
- %% The most probable reason is that the file does not
- %% exist, this is not an error so we simply return
- %% the default trace options instead
- {ok, #trace_options{}}
- end.
-
-%%--save_to_file(Options, File)-----------------------------------------
-
-save_to_file(Options, File) ->
- case file:open(File, [write]) of
- {ok, Fd} ->
- {{Year,Month,Day},{H,M,S}} = calendar:local_time(),
- io:format(Fd, "%%%~n", []),
- io:format(Fd, "%%% File: ~s~n", [File]),
- io:format(Fd, "%%% Date: ~w-~2..0w-~2..0w, ~2..0w:~2..0w:~2..0w~n",
- [Year,Month,Day,H,M,S]),
- io:format(Fd, "%%%~n", []),
- io:format(Fd, "%%% This file was created by Pman. ~n", []),
- io:format(Fd, "%%%~n", []),
- io:format(Fd, "%%% DO NOT EDIT! ~n", []),
- io:format(Fd, "%%%~n", []),
- io:format(Fd, "%%%~n", []),
- io:format(Fd, "~p.~n", [Options]),
- file:close(Fd),
- ok;
- {error, Posix} ->
- {error, file:format_error(Posix)}
- end.
diff --git a/lib/pman/src/pman_options.hrl b/lib/pman/src/pman_options.hrl
deleted file mode 100644
index 047b9866c3..0000000000
--- a/lib/pman/src/pman_options.hrl
+++ /dev/null
@@ -1,34 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-%% An options-record contains the return data from the option dialog.
-%%
-
--record(trace_options, {send=true,
- treceive=true,
- functions=true,
- events=true,
- to_file=false,
- file="",
- inherit_on_1st_spawn=false,
- inherit_on_all_spawn=true,
- inherit_on_1st_link=false,
- inherit_on_all_link=true}).
-
diff --git a/lib/pman/src/pman_process.erl b/lib/pman/src/pman_process.erl
deleted file mode 100644
index 276407a0f1..0000000000
--- a/lib/pman/src/pman_process.erl
+++ /dev/null
@@ -1,317 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%----------------------------------------------------------------------
-%% Purpose : A front-end to the erlang:process_info() functions, that
-%% can handle processes on different nodes in a transparent
-%% way.
-%% Also some convenience functions for process info, as well
-%% as some application specific functions for process
-%% classification.
-%%----------------------------------------------------------------------
-
--module(pman_process).
-
--export([pinfo/1, pinfo/2,
- r_processes/1,
- function_info/1,
- get_name/1, msg/1, reds/1, psize/1,
- is_running/1,
- is_pid_or_shell/1,
- get_pid/1,
- is_system_process/1,
- is_hidden_by_module/2
- ]).
-
-%% List of registered name that will make a prodcess a "SYSTEM"-process
--define(SYSTEM_REG_NAMES,
- [
- %% kernel
- application_controller,
- erl_reply,
- auth,
- boot_server,
- code_server,
- disk_log_server,
- disk_log_sup,
- erl_prim_loader,
- error_logger,
- file_server_2,
- fixtable_server,
- global_group,
- global_name_server,
- heart,
- inet_gethost_native,
- inet_gethost_native_sup,
- init,
- kernel_config,
- kernel_safe_sup,
- kernel_sup,
- net_kernel,
- net_sup,
- rex,
- user,
- os_server,
- ddll_server,
- erl_epmd,
- inet_db,
- pg2,
-
- %% stdlib
- timer_server,
- rsh_starter,
- take_over_monitor,
- pool_master,
- dets,
-
- %% sasl
- sasl_safe_sup, sasl_sup, alarm_handler, overload,
- release_handler,
-
- %% gs
- gs_frontend
- ]).
-
-%% List of module:function/arity calls that will make the caller a
-%% "SYSTEM"-process.
-%%
--define(SYSTEM_INIT_CALLS,
- [{application_master,init,4},
- {application_master,start_it,4},
- {inet_tcp_dist,accept_loop,2},
- {net_kernel,ticker,2},
- {supervisor_bridge,user_sup,1},
- {user_drv,server,2},
- {group,server,3},
- {kernel_config,init,1},
- {inet_tcp_dist,do_accept,6},
- {inet_tcp_dist,do_setup,6},
- {pman_main,init,2},
- {pman_buf_printer,init,2},
- {pman_buf_converter,init,2},
- {pman_buf_buffer,init,1},
- {gstk,init,1},
- {gstk_port_handler,init,2},
- {gstk,worker_init,1}
- ]).
-
-%% List of module:function/arity calls that will make the executing
-%% process a "SYSTEM"-process.
--define(SYSTEM_RUNNING_CALLS,
- [{file_io_server,server_loop,1},
- {global,loop_the_locker,1},
- {global,collect_deletions,2},
- {global,loop_the_registrar,0},
- {gs_frontend,request,2},
- {shell,get_command1,5},
- {shell,eval_loop,3},
- {io,wait_io_mon_reply,2},
- {pman_module_info,loop,1},
- {pman_options,dialog,3},
- {pman_options,loop,1},
- {pman_relay_server,loop,1},
- {pman_shell,monitor_loop,1},
- {pman_shell,safe_loop,2}
- ]).
-
-%% pinfo(Pid) -> [{Item, Info}] | undefined
-%% pinfo(Pid, Item) -> Info | undefined
-%% A version of process_info/1 that handles pid on remote nodes as well.
-pinfo({_, Pid}) -> % Handle internal process format
- pinfo(Pid);
-pinfo(Pid) when node(Pid)==node() ->
- process_info(Pid);
-pinfo(Pid) ->
- case rpc:call(node(Pid), erlang, process_info, [Pid]) of
- {badrpc, _} -> undefined;
- Res -> Res
- end.
-
-pinfo({_, Pid}, Item) -> % Handle internal process format
- pinfo(Pid, Item);
-pinfo(Pid, Item) when node(Pid)==node() ->
- case process_info(Pid, Item) of
- {Item, Info} -> Info;
- "" -> ""; % Item == registered_name
- undefined -> undefined
- end;
-pinfo(Pid, Item) ->
- case rpc:call(node(Pid), erlang, process_info, [Pid, Item]) of
- {badrpc, _} -> undefined;
- {Item, Info} -> Info;
- "" -> ""; % Item == registered_name
- undefined -> undefined
- end.
-
-%% function_info(Pid) -> {M, F, A}
-%% Returns the initial function for the specified process.
-function_info(Pid) ->
- case pinfo(Pid, current_function) of
- {Module, Function, Arity} ->
- {Module, Function, Arity};
- undefined ->
- {unknown, unknown, 0}
- end.
-
-%% r_processes(Node) -> Pids
-%% Return a list of all processes at Node.
-%%
-%% If there is a problem with getting information from a remote
-%% node, an empty list is returned.
-r_processes(Node) ->
- ordsets:from_list(r_processes1(Node)).
-
-r_processes1(Node) ->
- if
- Node==node() ->
- processes();
- true ->
- case rpc:block_call(Node, erlang, processes, []) of
- {badrpc, _} ->
- [];
- Pids -> Pids
- end
- end.
-
-%% is_running(Object) -> {true, {shell,Pid}} | {true, Pid} | false
-%% Object = {shell, Pid} | {link, Pid, ?} | Pid
-is_running({shell,Pid}) ->
- case is_running(Pid) of
- {true,Pid} ->
- {true,{shell,Pid}};
- false ->
- false
- end;
-is_running({link,Pid,_}) ->
- is_running(Pid);
-is_running(Pid) ->
- case is_pid_or_shell(Pid) of
- true ->
- case pinfo(Pid) of
- undefined -> false;
- _PInfo -> {true, Pid}
- end;
- false ->
- false
- end.
-
-%% is_pid_or_shell(Object) -> bool()
-%% Checks if the argument is an pid or a tuple {shell, Pid}.
-is_pid_or_shell({shell,Pid}) when is_pid(Pid) ->
- true;
-is_pid_or_shell(Pid) when is_pid(Pid) ->
- true;
-is_pid_or_shell(_) ->
- false.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% get_pid/1 - returns the Pid of the object provided that
-%% it is a proper process specifier.
-%%
-%% Arguments:
-%% Object A process specifier
-%%
-%% Returns:
-%% The Pid.
-
-get_pid({shell,Pid}) ->
- Pid;
-get_pid(Pid) when is_pid(Pid) ->
- Pid.
-
-%% is_system_process(Pid) -> bool()
-%% Returns true if Pid is a "system process".
-%% This is a prototype version, use file configuration later.
-is_system_process(Pid) ->
- catch is_system_process2(Pid).
-
-is_system_process2(Pid) ->
-
- %% Test if the registered name is a system registered name
- case pinfo(Pid, registered_name) of
- undefined -> ignore;
- "" -> ignore;
- Name ->
- case lists:member(Name, ?SYSTEM_REG_NAMES) of
- true -> throw(true);
- false -> ignore
- end
- end,
-
- %% Test if the start specification is a "system start function"
- MFAi = case pinfo(Pid, initial_call) of
- {proc_lib, init_p, 5} ->
- proc_lib:translate_initial_call(Pid); % {M,F,A} | Fun
- Res -> Res % {M,F,A} | undefined
- end,
- case lists:member(MFAi, ?SYSTEM_INIT_CALLS) of
- true -> throw(true);
- false -> ignore
- end,
-
- %% Test if the running specification is a "system running function"
- case pinfo(Pid, current_function) of
- undefined -> false;
- MFAc ->
- lists:member(MFAc, ?SYSTEM_RUNNING_CALLS)
- end.
-
-%% is_hidden_by_module(Pid, Modules) -> bool()
-%% Checks if Pid is to be hidden because it executes code from one
-%% of Modules
-is_hidden_by_module(Pid, Modules) ->
- case pinfo(Pid, current_function) of
- {Module, _Function, _Arity} ->
- lists:member(Module, Modules);
- undefined -> false
- end.
-
-%% get_name(Pid) -> Name | " "
-%% Returns the registered name of a process, if any, or " " otherwise.
-get_name(Pid) ->
- case pinfo(Pid, registered_name) of
- undefined -> " ";
- "" -> " ";
- Name -> Name
- end.
-
-%% msg(Pid) -> int()
-msg(Pid) ->
- case pinfo(Pid, messages) of
- undefined -> 0;
- Msgs -> length(Msgs)
- end.
-
-%% reds(Pid) -> int()
-reds(Pid) ->
- case pinfo(Pid, reductions) of
- undefined -> 0;
- Reds -> Reds
- end.
-
-%% psize(Pid) -> int()
-%% Returns the total process size (stack + heap).
-psize(Pid) ->
- Stack = pinfo(Pid, stack_size),
- Heap = pinfo(Pid, heap_size),
- case {Heap, Stack} of
- {undefined, undefined} -> 0;
- {undefined, Sz} -> Sz;
- {Sz, undefined} -> Sz;
- {Sz0, Sz1} -> Sz0 + Sz1
- end.
diff --git a/lib/pman/src/pman_relay.erl b/lib/pman/src/pman_relay.erl
deleted file mode 100644
index 289765492f..0000000000
--- a/lib/pman/src/pman_relay.erl
+++ /dev/null
@@ -1,127 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%----------------------------------------------------------------------
-%% Purpose : Interface function to relay calls (esp. trace calls)
-%% to processes on other nodes. Some of the calls
-%% are conditionally relayed.
-%%----------------------------------------------------------------------
-
--module(pman_relay).
-
-%%-compile(export_all).
--export([start/1,
- ok_to_trace/1,
- trac/3]).
-
-
--include("assert.hrl").
-
-%% --------------------------------------------------------------
-%% DISTRIBUTION
-%% --------------------------------------------------------------
-%% (???) Process dictionary alert!!!
-%%
-%% Since we are not allowed to do erlang:trace/3 on remote
-%% processe we create a help process at the remote node to
-%% do the job for us
-%% ---------------------------------------------------------------
-
-start(P) when is_pid(P), node(P)/=node() ->
-
- %% Remote supervision, relaying necessary
-
- put(relay, spawn_link(node(P), pman_relay_server, init, [self()]));
-
-
-start(_) ->
-
- %% Local supervision, no relaying
-
- ignore.
-
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% ok_to_trace/1 - Tests wheter we can actually start tracing
-%% a process.
-%%
-%% Arguments:
-%% Pid Pid of the process to trace (on local or remote node)
-%%
-%% Returns
-%% true If it is OK to trace the process
-%% false If the process is already traced, or some other
-%% condition prevents it from being traced.
-
-ok_to_trace(Pid) when node(Pid) == node()->
-
- %% Local trace, no relaying
-
- case catch erlang:trace(Pid, false, [send]) of
- 1 ->
- true;
- _Otherwise ->
- false
- end;
-ok_to_trace(Pid) ->
-
- %% Remote trace, relaying necessary
-
- PidRelay = get(relay),
- PidRelay ! {ok_to_trace, self(), Pid},
- receive
- {ok_to_trace, PidRelay} ->
- true;
- {not_ok_to_trace, PidRelay} ->
- false;
- _Otherwise ->
- ?ALWAYS_ASSERT("Unexpected message from relay process")
- after
- 5000 ->
- false
- end.
-
-
-
-
-
-
-%% ---------------------------------------------------------------
-%% Possibly send a request to do tracing to a remote node.
-%% ---------------------------------------------------------------
-
-trac(Pid, How, Flag) when node(Pid) == node() ->
-
- %% Local trace, no relaying necessary
-
-
- case catch erlang:trace(Pid, How, Flag) of
- 1 -> ok;
- _ -> pman_win:format("** Illegal trace request ** \n", [])
- end;
-
-trac(Pid, How, Flag) ->
-
-
-
- %% Remote trace, relaying necessary
-
- get(relay) ! {self(), erlang, trace, [Pid, How, Flag]}.
-
diff --git a/lib/pman/src/pman_relay_server.erl b/lib/pman/src/pman_relay_server.erl
deleted file mode 100644
index 2fcbb663bc..0000000000
--- a/lib/pman/src/pman_relay_server.erl
+++ /dev/null
@@ -1,57 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%%----------------------------------------------------------------------
-%%% Purpose : Relay server code.
-%%%----------------------------------------------------------------------
-
--module(pman_relay_server).
-
-%%-compile(export_all).
--export([init/1]).
-
-
-
-init(P) ->
- process_flag(trap_exit, true),
-
- loop(P).
-
-loop(P) ->
- receive
- {ok_to_trace, PidSender, PidToTrace} ->
- case catch erlang:trace(PidToTrace, false, [send]) of
- 1 ->
- PidSender ! {ok_to_trace, self()},
- loop(P);
- _Otherwise ->
- PidSender ! {not_ok_to_trace, self()}
- end;
-
- {P, M,F,A} ->
- case catch apply(M, F, A) of
- 1 -> ok;
- _Other -> P ! {print, "** Illegal trace request **\n", []}
- end,
- loop(P);
- {'EXIT', P, _Reason} ->
- exit(normal);
- Other -> %% Here is the normal case for trace i/o
- P ! Other,
- loop(P)
- end.
diff --git a/lib/pman/src/pman_shell.erl b/lib/pman/src/pman_shell.erl
deleted file mode 100644
index 2d2b8ce000..0000000000
--- a/lib/pman/src/pman_shell.erl
+++ /dev/null
@@ -1,827 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
-%% ---------------------------------------------------------------
-%% Purpose: Create a trace window with process
-%% information or a help window with information
-%% about pman.
-%%
-%% ---------------------------------------------------------------
-
--module(pman_shell).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,start,1}}]).
-
-%% ---------------------------------------------------------------
-%% The user interface exports
-%% ---------------------------------------------------------------
-
--export([start_list/3,
- start/2,
- start/1,
- find_shell/0]).
-
-%% ---------------------------------------------------------------
-%% Includes
-%% ---------------------------------------------------------------
--include("assert.hrl").
--include("pman_options.hrl").
--include("pman_buf.hrl").
-
-
-%% ---------------------------------------------------------------
-%% Internal record declarations
-%% ---------------------------------------------------------------
--record(pman_shell,{win,
- editor,
- pid,
- buffer,
- father,
- shell_flag, % boolean, true for shell
- trace_options, % Keeps trace options
- db}). % DB for trace windows
-
-
-%%
-%% Constants
-%%
-
--define (PMAN_DB, pman_db). % The pman db for trace windows
-
-
-
-%% ---------------------------------------------------------------
-%% start/1, start/2
-%%
-%% Starts a new trace shell process.
-%%
-%% start(Pid, DefaultOptions)
-%% Pid The Pid of the process to trace
-%% DefaultOptions The default trace options passed along from
-%% the calling process.
-%%
-%%
-%% start(Pid)
-%% Pid The Pid of the process to trace
-%%
-%% start(Pid) starts without using any default options except for those
-%% hardwired into the application. (See pman_options.hrl).
-%%
-%%
-%% Return: Both functions return a process id
-%% ---------------------------------------------------------------
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start_list/3 - Starts a trace window for each of the processes
-%% in the list
-
-start_list(LIPid, Father, Options) ->
- StartFun = fun(Pid) ->
- start({Pid,Father}, Options)
- end,
- lists:foreach(StartFun, LIPid).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% start/1 - Starts a trace window for the specified Pid.
-%%
-
-start(Pid) ->
- start(Pid, #trace_options{}).
-
-%%
-%% start/2
-%%
-
-start(Pid,DefaultOptions) when is_pid(Pid) ->
- start({Pid,self()}, DefaultOptions);
-
-start(Var,DefaultOptions) ->
- Db = db_start(),
- spawn_link(fun() -> internal(Var, DefaultOptions, Db) end).
-
-%% ---------------------------------------------------------------
-%% Initialize the enviroment for tracing/viewing Object
-%%
-%% Object can either be {shell,Shell} or a Pid.
-%% The main loop is then called, which handles trace and event
-%% requests. The window dies whenever Supervisor dies, while
-%% message windows die whenever their parent dies.
-%% ---------------------------------------------------------------
-
-internal({Object,Supervisor}, DefaultOptions, Db) ->
-
- %% (???) This call will cause minor problems when the window has been
- %% invoked with proc/1 from for instance the shell. The shell
- %% does not handle the exit-signals, so it will exit
- %% when the window is exited.
-
-
- %% First check that no other process is tracing the process we want
- %% to trace. There is no well defined way of doing this, so the
- %% code below is used instead. (???)
-
- pman_relay:start(Object), %(???) Uses proc. dict.
-
- Pid = pman_process:get_pid(Object),
-
- case pman_relay:ok_to_trace(Pid) of
-
- %% Tracing cannot be performed on the specified process
-
- false ->
- T = lists:flatten(io_lib:format("ERROR: Process ~p is already being~ntraced by some other process.~nOr there may be a problem communicating with it.",[Pid])),
- tool_utils:notify(gs:start(),T),
- exit(quit);
-
- %% Tracing can be performed, go ahead!
-
- true ->
-
- case db_insert_key (Db, Pid) of
- true ->
-
- link(Supervisor),
- process_flag(trap_exit, true),
-
- case catch pman_win:window(Object) of
- {'EXIT', badrpc} ->
- T = "ERROR: Could not access node",
- pman_win:dialog_window(gs:start(),T);
- {'EXIT', dead} ->
- T = "ERROR: The process is dead",
- pman_win:dialog_window(gs:start(),T);
- {'EXIT',_W} ->
- T = "ERROR: Untracable process \n(unexpected EXIT reason)",
- pman_win:dialog_window(gs:start(),T);
- {Win, Ed} ->
- init_monitor_loop(Win,
- Ed,
- Object,
- Supervisor,
- DefaultOptions,
- Db)
- end;
-
- false ->
- T = lists:flatten(io_lib:format("ERROR: Process ~p is already being~ntraced by some other process.",[Pid])),
- tool_utils:notify(gs:start(),T),
- exit(quit);
-
- Error ->
- Error
- end
-
- end.
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% init_monitor_loop/5
-
-init_monitor_loop(Win,Ed,Object,Supervisor, DefaultOptions, Db) ->
-
- process_flag(priority, max),
-
- %% Most default options come from the main window. Now we must set
- %% the default file name to something that is shows what process
- %% is being traced.
-
- %% Find out an appropriate file name to write the trace output
- %% to if the output should go to a file.
-
- FileName = case pman_process:is_pid_or_shell(Object) of
- true ->
- default_file_name(pman_process:get_pid(Object));
- false ->
- "NoName"
- end,
-
- Buff = pman_buf:start(Ed, FileName),
-
- case pman_process:is_running(Object) of
-
- %% We are tracing a shell process.
- {true,{shell,Pid}} ->
- safe_link(Pid),
- NewDefaultOptions =
- DefaultOptions#trace_options{file=FileName},
- perform_option_changes(Pid, NewDefaultOptions, Buff),
- monitor_loop(#pman_shell{win=Win, editor=Ed, pid=Pid, buffer=Buff,
- father = Supervisor,
- shell_flag = true,
- trace_options = NewDefaultOptions,
- db = Db});
-
- %% We are tracing an ordinary process.
- {true,Pid} ->
- safe_link(Pid),
- NewDefaultOptions =
- DefaultOptions#trace_options{file=FileName},
- perform_option_changes(Pid, NewDefaultOptions, Buff),
- monitor_loop(#pman_shell{win=Win, editor=Ed, pid=Pid, buffer=Buff,
- father = Supervisor,
- shell_flag = false,
- trace_options = NewDefaultOptions,
- db = Db});
-
- %% The process being traced is dead.
- false ->
- monitor_loop(#pman_shell{win=Win, editor=Ed, pid=nopid,
- buffer=Buff,
- father = Supervisor,
- shell_flag = false,
- trace_options= DefaultOptions,
- db = Db})
- end.
-
-%% ----------------------------------------------------------------
-%% What is the Pid of the shell on our node?
-%% ----------------------------------------------------------------
-
-find_shell() ->
- case shell:whereis_evaluator() of
- undefined -> % noshell
- noshell;
- Pid ->
- Pid
- end.
-
-%% ---------------------------------------------------------------
-%% Functions called in case of an exit message
-%% ---------------------------------------------------------------
-
-clean_up(Win, Buff,Pid) ->
-
- %% (???) Unlinks the traced process, but since we are using a safe link
- %% it is probably unnecessary.
-
- safe_unlink(Pid),
-
- %% Kill helper processes
-
- exit(Buff#buffer.converter, topquit),
- exit(Buff#buffer.buffer, topquit),
-
- gs:destroy(Win).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% exit_cmd/3 - Takes care of the necessary details when
-%% a linked process terminates.
-
-
-exit_cmd(Pid,_Reason, State) ->
- case State#pman_shell.shell_flag of
-
- %% This clause handles the case when a shell process dies.
- %% Since it is restarted and the intention is to continue tracing
- %% the restarted shell process, we need to handle it separately by
- %% finding the new shell process.
- true ->
-
- NewShell = find_shell(),
- safe_link(NewShell),
- pman_relay:start(NewShell),
-
- %% Update the window title with the new PID
- Title = pman_win:title({shell, NewShell}),
- Win = State#pman_shell.win,
- gse:config(Win,[{title,Title}]),
-
- pman_relay:trac(NewShell, true, flags()),
-
- B = State#pman_shell.buffer,
- B#buffer.converter!{raw,[{shell_died, Pid, NewShell}]},
-
-
-
- State#pman_shell{pid=NewShell};
-
- %% This clause handles the case when a traced process that is
- %% not a shell process dies.
- false ->
-
- B = State#pman_shell.buffer,
- B#buffer.converter!{raw,[{died, Pid}]},
-
- lists:foreach(fun(X) -> gse:disable(X) end,
- ['Options',
- 'Kill',
- 'LinksMenu']),
- State#pman_shell{pid=undefined}
- end.
-
-flags() ->
- [send, 'receive', call, procs,
- set_on_spawn, set_on_first_spawn, set_on_link, set_on_first_link].
-
-options_to_flaglists(Options) ->
- AssocList =
- [{Options#trace_options.send, send},
- {Options#trace_options.treceive, 'receive'},
- {Options#trace_options.inherit_on_1st_spawn, set_on_first_spawn},
- {Options#trace_options.inherit_on_all_spawn, set_on_spawn},
- {Options#trace_options.inherit_on_1st_link, set_on_first_link},
- {Options#trace_options.inherit_on_all_link, set_on_link},
- {Options#trace_options.events, procs},
- {Options#trace_options.functions,call}],
-
- TrueFun = fun ({Option,Flag}) ->
- case Option of
- true -> Flag;
- _Otherwise -> false
- end
- end,
- TrueFlags = mapfilter(TrueFun, AssocList),
-
- FalseFun = fun ({Option,Flag}) ->
- case Option of
- false -> Flag;
- _Otherwise -> false
- end
- end,
- FalseFlags = mapfilter(FalseFun, AssocList),
- {TrueFlags,FalseFlags}.
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% mapfilter/2 - Combines the functionality of lists:map and
-%% lists:filter. mapfilter applies the function argument to
-%% each element in the list. All returned values that are
-%% not false will occur in the resulting list.
-%%
-%% Arguments:
-%% Fun A fun that takes one argument
-%% List A list. Each element will become an argument to Fun.
-%%
-%% Returns:
-%% A list of all results from the map operation that are not false.
-%%
-
-mapfilter(Fun,[E|Es]) ->
- case apply(Fun,[E]) of
- false ->
- mapfilter(Fun,Es);
- Value -> [Value | mapfilter(Fun,Es)]
- end;
-mapfilter(_Fun, []) -> [].
-
-
-
-perform_option_changes(Pid,Options,Buffer) ->
-
- %% Notify the trace output functionality
- %% if the destination is supposed to go to a file...
-
- case Options#trace_options.to_file of
- true ->
- FName = Options#trace_options.file,
- Buffer#buffer.converter!{file,FName};
- false ->
- done
- end,
-
- %%...then set the trace flags of the traced process
-
- {OnFlags, OffFlags} = options_to_flaglists(Options),
- case catch begin
-
- %% (???) Note that the following calls cannot actually fail
- %% This may be a problem. And the catch appears unnecessary
- %% However, it may become necessary to let the
- %% pman_relay:trac/3 function retrun appropriate values.
- pman_relay:trac(Pid,true, OnFlags),
- pman_relay:trac(Pid,false, OffFlags)
- end of
- true ->
- ok;
- _ -> pman_win:format("** Illegal trace request ** \n", [])
- end.
-
-
-
-
-
-
-%% ---------------------------------------------------------------
-%% Take care of the command executed by the user.
-
-execute_cmd(Cmd,Shell_data) ->
- Window = Shell_data#pman_shell.win,
- Editor = Shell_data#pman_shell.editor,
- Shell = Shell_data#pman_shell.pid,
- Buffer = Shell_data#pman_shell.buffer,
- TraceOptions = Shell_data#pman_shell.trace_options,
-
- case Cmd of
- 'Close' ->
- db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid),
- clean_up(Window, Buffer, Shell),
- exit(quit);
- 'Destroy' ->
- db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid),
- exit(Buffer#buffer.buffer,topquit),
- safe_unlink(Shell),
- exit(Buffer#buffer.converter,topquit),
- exit(Buffer#buffer.buffer,topquit),
- exit(quit);
-
- 'Clear' when is_pid(Shell) ->
- New_buffer = pman_buf:clear(Buffer,pman_win:display(Shell),
- TraceOptions#trace_options.file),
- Shell_data#pman_shell{buffer = New_buffer};
- 'Save buffer' ->
- DefaultFile = "Pman_buffer." ++ default_file_name(Shell),
- Result = tool_utils:file_dialog([{type,save},
- {file,DefaultFile}]),
- case Result of
- {ok, UserFile, _State} ->
- Buffer#buffer.buffer!{save_buffer,UserFile};
- {error,_Reason} ->
- true
- end,
- Shell_data;
- 'Help' ->
- HelpFile = filename:join([code:lib_dir(pman), "doc", "html", "index.html"]),
- tool_utils:open_help(gs:start([{kernel, true}]), HelpFile),
- Shell_data;
- 'Kill' when is_pid(Shell) ->
- exit(Buffer#buffer.converter,killed),
- exit(Buffer#buffer.buffer,killed),
- lists:foreach(fun(X) -> gse:disable(X) end,
- ['TraceMenu',
- 'Clear']),
- catch exit(Shell, kill),
- Shell_data#pman_shell{pid = undefined};
- 'All Links' when is_pid(Shell) ->
- LIPid = pman_process:pinfo(Shell, links),
- ?ALWAYS_ASSERT("Just a brutal test"),
- start_list(LIPid,
- Shell_data#pman_shell.father,
- Shell_data#pman_shell.trace_options),
- Shell_data;
- 'Module' when is_pid(Shell) ->
- {ModuleName,_,_} = pman_process:function_info(Shell),
- pman_module_info:start(ModuleName),
- Shell_data;
- 'Options' when is_pid(Shell) ->
- case pman_options:dialog(Window,
- "Trace Options for Process",
- TraceOptions) of
- {error, _Reason} ->
- Shell_data;
- Options ->
- perform_option_changes(Shell, Options, Buffer),
- Shell_data#pman_shell{trace_options=Options}
- end;
-
- {trac,Choice,Bool} when is_pid(Shell) ->
- pman_relay:trac(Shell, Bool, [Choice]),
- Shell_data;
-
-
- {configure,{X,Y}} ->
- configure (Editor, X, Y),
- Shell_data;
-
- Pid when is_pid(Pid) ->
- pman_shell:start({Pid, Shell_data#pman_shell.father},
- Shell_data#pman_shell.trace_options),
- Shell_data;
- _Other ->
- ?ALWAYS_ASSERT("Received unexpected event"),
- Shell_data
- end.
-
-
-default_file_name(Shell) when is_pid(Shell) ->
- [A,B,C] = string:tokens(pid_to_list(Shell),[$.,$<,$>]),
- "pman_trace." ++ A ++ "_" ++ B ++ "_" ++ C;
-default_file_name(_OTHER) ->
- "shell".
-
-
-
-
-
-%% Key accellerators
-
-key(e) -> 'Clear';
-key(s) -> 'Save buffer';
-key(c) -> 'Close';
-key(a) -> 'All';
-key(r) -> 'Reset';
-key(m) -> 'Module';
-key(l) -> 'All Links';
-key(k) -> 'Kill';
-key(h) -> 'Help';
-key(z) -> 'Close';
-key(O) -> O.
-
-
-
-%% ---------------------------------------------------------------
-%% The main loop takes care of data coming in from the traces, as
-%% well as exit signals from proceses we are monitoring. Events
-%% caused by the user or window manager are also handled here.
-%% ---------------------------------------------------------------
-
-
-monitor_loop(Shell_data) ->
- receive
-
- %% WM destroy
- {gs,_Window,destroy,[],[]} -> %%Avoid links menus
- execute_cmd('Destroy', Shell_data);
-
-
- %% Handle EXIT signal from parent process
- {'EXIT', _Pid, topquit} ->
- clean_up(Shell_data#pman_shell.win,
- Shell_data#pman_shell.buffer,
- Shell_data#pman_shell.pid),
- exit(topquit);
-
- %% (???) Ignore "stray" EXIT signal from converter
- {'EXIT', _Pid, win_killed} ->
- monitor_loop(Shell_data);
-
-
- %% Handle EXIT signal from safely linked Pid
- %% This is received when a traced process dies.
- {'SAFE_EXIT', Pid, Reason} ->
- New_Shell_data = exit_cmd(Pid, Reason,Shell_data ),
- monitor_loop(New_Shell_data);
-
-
- %% Handle EXIT signal from processes where we expect
- %% some EXIT signals, such as the file_dialog opened, and possibly
- %% others.
-
- {'EXIT', _Pid, _Reason} ->
- monitor_loop(Shell_data);
-
- %% Handle incoming trace messages
- Message when is_tuple(Message) , element(1,Message) == trace->
- {L, Suspended} = collect_tracs([Message]),
- Buffer = Shell_data#pman_shell.buffer,
- Buffer#buffer.converter!{raw,L},
- lists:foreach(fun(P) -> erlang:resume_process(P) end, Suspended),
- monitor_loop(Shell_data);
-
-
- %% All other messages on the form {...,...,...}
- Message when is_tuple(Message) ->
- do_link_stuff(Shell_data),
-
- New_Shell_data = process_gs_event(Message,Shell_data),
- monitor_loop(New_Shell_data);
-
- %% Catch all for unexpected messages
- _Anything ->
- ?ALWAYS_ASSERT("Received unexpected event"),
- monitor_loop(Shell_data)
-
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% process_event/1 - Error handling wrapper for gs_cmd
-
-process_gs_event(Message, Shell_data) ->
- case catch gs_cmd(Message,Shell_data) of
-
- %%
- %% Error exits from gs_cmd
-
- {'EXIT', badrpc} ->
- Text = "\nERROR: Could not access node",
- pman_win:msg_win(Text),
- Shell_data;
- {'EXIT', dead} ->
- Text = "\nERROR: The process is dead",
- pman_win:msg_win(Text),
- Shell_data;
-
- %% A controlled application initiated termination
- {'EXIT', quit} ->
- db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid),
- exit(quit);
-
-
- {'EXIT',Reason} ->
- db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid),
- io:format("Debug info, Reason: ~p~n",[Reason]),
- ?ALWAYS_ASSERT("Unexpected EXIT reason"),
- exit({unexpected_EXIT_reason,Reason});
-
- %%
- %% "Proper" exits from gs_cmd
-
- New_Shell_data ->
- New_Shell_data
- end.
-
-
-
-gs_cmd(Cmd, Shell_data) ->
- case Cmd of
-
- %%User Command
- {gs, Command, click, _Data, _Args} ->
- execute_cmd(Command,Shell_data);
-
- %%Key accellerator
- {gs,_Window,keypress,_D,[Key,_,0,1]} ->
- execute_cmd(key(Key),Shell_data);
-
- %%Window Resize
- {gs,_Window,configure,_,[X,Y|_]} ->
- execute_cmd({configure,{X,Y}},Shell_data);
-
-
- {gs, _Object, _Event, _Data, _Args} ->
- ?ALWAYS_ASSERT("Unhandled gs event"),
- Shell_data
-
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% (???) do_link_stuff/1 - I have no clue.
-%%
-
-do_link_stuff(Shell_data) ->
-
- %% This appears to be code to execute for adding
- %% dynamic links menus.
-
- case Shell_data#pman_shell.pid of
- undefined ->
- ok;
- Pid ->
- case pman_process:pinfo(Pid, links) of
- Links when is_list(Links) ->
- pman_win:links_menus(Links);
- undefined ->
- ok
- end
- end.
-
-
-%% (???) Process dictionary used to safe Pid-Pid pairs.
-%%
-%% safe_link/1 - Spawns a process, that links to the Pid, and sends
-%% a message to the caller when the linked process dies.
-%%
-%% Since we (think we) need to link to the traced process, we want
-%% to do it in a way that has the smallest possible risk. The process
-%% that links to the Pid is small and simple, which is safer than if
-%% the calling process would link directly to the Pid.
-
-safe_link(Pid) when is_pid(Pid) ->
- Self = self(),
- PidSafe = spawn_link(fun() -> safe_init(Self, Pid) end),
- put(Pid, PidSafe).
-
-
-%% safe_unlink/1 - Removes a safe link
-%%
-
-safe_unlink(Pid) when is_pid(Pid) ->
- PidSafe = get(Pid),
- PidSafe ! {unlink, self(), Pid},
- erase(Pid);
-
-safe_unlink(_Anything)->
- true.
-
-%% safe_init/2 - Initialize a simple receive loop that controls safe linking
-%% to application processes.
-%%
-safe_init(Caller, Pid) ->
-
- process_flag(trap_exit, true),
- link(Pid),
-
- safe_loop(Caller, Pid).
-
-
-%% safe_loop/2 - Simply waits for an exit signal from the linked Pid,
-%% all other messages are disregarded.
-%%
-
-
-safe_loop(Caller, Pid) ->
- receive
- %% Linked process dies
- {'EXIT' , Pid, Reason} ->
- Caller ! {'SAFE_EXIT', Pid, Reason};
-
- %% Caller dies
- {'EXIT', Caller, _Reason} ->
- unlink(Pid);
-
-
- %% Unlink request
- {unlink, Caller, Pid} ->
- unlink(Pid);
-
- %% Ignore everything else
- _Anything ->
- safe_loop(Caller, Pid)
- end.
-
-
-
-configure (Editor, W, H) ->
- gs:config (Editor, [{width, W - 3},
- {height, H - 40}]).
-
-
-
-
-%%% The DB is used to avoid multiple trace windows
-%%% of the same process.
-
-%%% db_start /0
-%%%
-
-db_start() ->
- case ets:info(?PMAN_DB) of
- undefined -> ets:new(?PMAN_DB, [public, named_table]);
- _ -> ?PMAN_DB
- end.
-
-
-
-%%% db_insert_key /2
-%%%
-
-db_insert_key (Db, Pid) ->
- case ets:lookup (Db, Pid) of
- [] ->
- case catch ets:insert (Db, {Pid}) of
- true ->
- true;
-
- _Error ->
- error_insert_db
- end;
-
- _already_exists ->
- false
- end.
-
-
-
-%%% db_delete_key /2
-%%%
-
-db_delete_key (Db, Pid) ->
- ets:delete (Db, Pid).
-
-
-%% Function to collect all trace messages in the receive queue.
-%% Returns: {Messages,SuspendedProcesses}
-
-collect_tracs(Ack) -> collect_tracs(Ack, ordsets:new()).
-
-collect_tracs(Ack, Procs) ->
- receive
- Trac when is_tuple(Trac), element(1, Trac) == trace ->
- P = suspend(Trac, Procs),
- collect_tracs([Trac | Ack], P)
- after 0 ->
- {lists:reverse(Ack), ordsets:to_list(Procs)}
- end.
-
-suspend({trace,From,call,_Func}, Suspended) when node(From) == node() ->
- case ordsets:is_element(From, Suspended) of
- true -> Suspended;
- false ->
- case (catch erlang:suspend_process(From)) of
- true ->
- ordsets:add_element(From, Suspended);
- _ ->
- Suspended
- end
- end;
-suspend(_Other, Suspended) -> Suspended.
diff --git a/lib/pman/src/pman_tool.erl b/lib/pman/src/pman_tool.erl
deleted file mode 100644
index 36382745af..0000000000
--- a/lib/pman/src/pman_tool.erl
+++ /dev/null
@@ -1,146 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(pman_tool).
--compile([{nowarn_deprecated_function,{gs,read,2}}]).
-
-%% Listbox selection window
-
--export([select/3]).
-
--record(state, {topwin,
- frame,
- listbox}).
-
-%% Constants
--define(WIN_WIDTH, 350).
--define(WIN_HEIGHT, 350).
-
-select(Win, Title, Choices) ->
- Self = self(),
- Pid = spawn_link(fun() -> init(Self, Win, Title, Choices) end),
- receive
- {Pid, Result} ->
- Result
- end.
-
-init(Pid, Win, Title, Choices) ->
-
- %% Create window
- State = create_window(Win, Title, Choices),
-
- gse:map(State#state.topwin),
-
- %% enter event loop
- loop(Pid, Choices, State).
-
-loop(Pid, Choices, State) ->
- receive
- {gs, _, destroy, _Data, _Args} ->
- Pid ! {self(), cancelled};
- {gs, _, configure, _Data, [W, H|_]} ->
- gse:resize(State#state.frame, W, H),
- loop(Pid, Choices, State);
- {gs, _, click, ok, _Args} ->
- case gs:read(State#state.listbox, selection) of
- [] ->
- Pid ! {self(), cancelled};
- Indices ->
- Selection = selection(Indices, Choices),
- Pid ! {self(), Selection}
- end;
- {gs, _, click, cancel, _Args} ->
- Pid ! {self(), cancelled};
- {gs, Obj, doubleclick, _Data, _Args} ->
- self() ! {gs, Obj, click, ok, []},
- loop(Pid, Choices, State);
- _GSEvent ->
- loop(Pid, Choices, State)
- end.
-
-selection(Indices, Choices) ->
- selection(0, Indices, Choices).
-
-selection(I, [I|Is], [{Val,_Str}|Vals]) ->
- [Val | selection(I+1, Is, Vals)];
-selection(I, [I|Is], [Val|Vals]) ->
- [Val | selection(I+1, Is, Vals)];
-selection(_I, [], _Vals) ->
- [];
-selection(I, Is, [_Val|Vals]) ->
- selection(I+1, Is, Vals).
-
-create_window(Win, Title, Choices) ->
- Font = pman_win:font(Win),
-
- %% Top window and a frame that covers it entirely, to allow
- %% usage of the packer for geometry management.
- Topwin = gse:window(Win, [{width, ?WIN_WIDTH},
- {height,?WIN_HEIGHT},
- {configure, true},
- {title, Title}]),
- Frame = gse:frame(Topwin, [{packer_x,[{stretch,1},
- {stretch,1}]},
- {packer_y,[{stretch,1},
- {stretch,5},
- {stretch,1}]}]),
-
- %% Caption above the list of items
- CaptionTxt = "Select one or more of the following:",
- gse:label(Frame, [{pack_x,{1,2}},
- {pack_y,{1,1}},
- {label,{text,CaptionTxt}}, {font,Font}]),
-
- %% List of selectable items
- Listbox = gse:listbox(Frame, [{pack_x,{1,2}},
- {pack_y,{2,2}},
- {selectmode,multiple},
- {doubleclick, true},
- {font,Font},
- {items, str_choices(Choices)}]),
-
- %% OK and Cancel buttons in a separate frame.
- F13 = gse:frame(Frame, [{bw,1},
- {pack_xy,{{1,2},3}},
- {packer_x,[{stretch,1},
- {fixed, 60},
- {stretch,1},
- {fixed, 60},
- {stretch,1}]},
- {packer_y,[{stretch,1},
- {fixed, 30},
- {stretch,1}]}]),
-
- gse:button(F13, [{pack_xy,{2,2}},
- {label,{text,"OK"}}, {font,Font},
- {data,ok}]),
- gse:button(F13, [{pack_xy,{4,2}},
- {label,{text,"Cancel"}}, {font,Font},
- {data,cancel}]),
-
- gse:resize(Frame, ?WIN_WIDTH, ?WIN_HEIGHT),
- #state{topwin=Topwin, frame=Frame, listbox=Listbox}.
-
-str_choices(Choices) ->
- lists:map(
- fun({Val, Str}) ->
- lists:flatten(io_lib:format("~p: ~s", [Val, Str]));
- (Term) ->
- lists:flatten(io_lib:format("~p", [Term]))
- end,
- Choices).
diff --git a/lib/pman/src/pman_win.erl b/lib/pman/src/pman_win.erl
deleted file mode 100644
index aec7dc4412..0000000000
--- a/lib/pman/src/pman_win.erl
+++ /dev/null
@@ -1,677 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%% ------------------------------------------------------------
-%% Purpose: window management and the gs interface
-%% ------------------------------------------------------------
-
--module(pman_win).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,canvas,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,create,4}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,1}},
- {nowarn_deprecated_function,{gs,text,2}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-%% ---------------------------------------------------------------
-%% The user interface exports
-%% ---------------------------------------------------------------
-
--export([pman_window/3, window/1, module_data/1, display/1, format/2,
- dialog_window/2, configeditor/2, configwin/3,
- update/1, update/3,
- msg_win/1, title/1,
- remove_menu/1, add_menu/3,
- change_colour/3, links_menus/1, calc_columnwidths/1]).
--export([font/0, font/1]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Constants
-%%
--include("pman_win.hrl").
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% pman_window/3 - Create a GS window and components for the
-%% Pman overview window, the main window.
-%%
-%% Arguments:
-%% Size number of processes
-%% HiddenModules list of modules
-%% Nodes list of supervised nodes
-%%
-%% Return:
-%% {Win, Grid, Frame, Procnum, W, H} where
-%% Win The GS top window
-%% Grid The GS grid
-%% Procnum Number of displayed processes
-%%
-
-pman_window(Size, _HiddenModules, Nodes) ->
- GS = gs:start([{kernel,true}]),
- Font = font(GS),
- Win_Options = [{title, lists:concat(["Pman: Overview on ",node()])},
- {width, ?WIN_WIDTH}, {height, ?WIN_HEIGHT},
- {destroy, true},
- {keypress,true}],
- Win = gs:create(window, GS, Win_Options),
-
- %% Menu bar
- MenuBar = gs:create(menubar, Win, []),
- MBFile = gs:create(menubutton, MenuBar, [{label,{text," File "}},
- {font,Font},
- {underline,1}]),
- MBView = gs:create(menubutton, MenuBar, [{label,{text, " View "}},
- {font,Font},
- {underline,1}]),
- MBTrace = gs:create(menubutton, MenuBar, [{label,{text, " Trace "}},
- {font,Font},
- {underline,1}]),
- MBHelp = gs:create(menubutton, MenuBar, [{label, {text, " Help "}},
- {font,Font},
- {side,right},
- {underline,1}]),
-
- %% Addition of a menu for distribution
- add_node_menu(MenuBar, Nodes, Font),
-
- %% All menu buttons
- MenuFile = gs:create(menu, MBFile, []),
- MenuView = gs:create(menu, MBView, []),
- MenuTrace = gs:create(menu, MBTrace, []),
- MenuHelp = gs:create(menu, MBHelp, []),
-
- %% File menu
- gse:named_menuitem('Default Options', MenuFile,
- [{label,{text,"Options..."}}, {font,Font},
- {underline,0}]),
- gse:named_menuitem('Save Options',MenuFile,
- [{label,{text,"Save Options"}}, {font,Font}]),
- gse:named_menuitem('Exit', MenuFile,
- [{label,{text,"Exit"}}, {font,Font},
- {underline,0}]),
-
- %% View menu
- gse:named_menuitem('Hide All',MenuView,
- [{label, {text, "Hide All Processes"}},
- {font,Font},
- {underline,1}]),
-
- gse:named_menuitem('Hide Modules', MenuView,
- [{label, {text, "Hide Modules..."}},
- {font,Font},
- {underline,8}]),
-
- gse:named_menuitem('Hide Selected Process', MenuView,
- [{label, {text, "Hide Selected Process"}},
- {font,Font},
- {underline,2}]),
-
- gse:named_menuitem('Module',MenuView,
- [{label, {text, "Module Info..."}}, {font,Font},
- {underline,7}]),
-
- gse:named_menuitem('Refresh', MenuView,
- [{label, {text, "Refresh"}}, {font,Font},
- {underline,0}]),
-
- gse:named_menuitem('Show All',MenuView,
- [{label, {text, "Show All Processes"}},
- {font,Font}]),
-
- gse:named_menuitem('Show Selected',MenuView,
- [{label, {text, "Show Processes..."}},
- {font,Font}]),
-
- %% Trace menu
- gs:create(menuitem, 'Kill', MenuTrace, [{label,{text, "Kill"}},
- {font,Font},
- {underline,0}]),
-
- gs:create(menuitem, 'Trace Process', MenuTrace,
- [{label, {text, "Trace Selected Process"}}, {font,Font},
- {underline,0}]),
-
- gs:create(menuitem,'Trace Shell', MenuTrace,
- [{label, {text,"Shell Process"}}, {font,Font},
- {underline,0}]),
-
- %% Help menu
- gs:create(menuitem,'Help', MenuHelp, [{label, {text, "Help" }},
- {font,Font},
- {underline,0}]),
-
- %% Window contents
-
- %% Geometry managing frame
- Frame = gse:frame(Win, [{y,?MENU_HEIGHT},
- {packer_x,[{stretch, 1}]},
- {packer_y,[{stretch,10},
- {fixed,?CHECKBAR_HEIGHT}]}]),
-
-
-
- %% Grid
- Grid_Options = [
- {pack_x,1}, {pack_y,1},
- {fg,black},
- {vscroll,right},{hscroll,bottom},
- calc_columnwidths(739),
- {rows, {1,Size}}],
- Grid = gse:grid(Frame,Grid_Options),
-
-
- %% Checkbutton bar at the bottom of the window
-
- CheckBar = gse:frame(Frame, [{pack_x,1},
- {pack_y,2},
- {packer_x,[{stretch, 2, 100,300},
- {stretch, 2, 100,300},
- {stretch,1},
- {stretch, 2,100,300}]},
- {packer_y,[{stretch,1}]}]),
- gse:named_checkbutton('Hide System',CheckBar,
- [{pack_xy,{1,1}},
- {justify, left},
- {align,w},
- {width, 200},
- {font, Font},
- {label, {text, "Hide System Processes" }}]),
-
- gse:named_checkbutton('Auto Hide New',CheckBar,
- [{pack_xy,{2,1}},
- {width, 200},
- {justify, left},
- {align,w},
- {font, Font},
- {label, {text, "Auto-Hide New" }}]),
-
- gse:named_label('Number Hidden',CheckBar,
- [{pack_xy,{4,1}},
- {justify, left},
- {align,w},
- {width, 200},
- {font, Font},
- {label, {text, ?CPIDHIDDENTEXT }}]),
-
- %% Finalize it!
- gse:map(Win),
- gse:config(Win,[raise]),
- gse:config(Win,[{configure,true}]),
-
-
- {Win, Grid, Frame, length(processes())+1, ?WIN_WIDTH, ?WIN_HEIGHT}.
-
-
-%% Calculate columnwidths in respect to the size of the window.
-
-calc_columnwidths(Width) ->
- if
- Width =< 739 ->
- {columnwidths,[75,215,146,90,105,105]};
- true ->
- S = (Width - 75)/(215+146+90+105+105),
- {columnwidths,[75,round(215*S),round(146*S),round(90*S),
- round(105*S),round(105*S)]}
- end.
-
-%% ---------------------------------------------------------------
-%% Create a trace window
-%%
-%% Process, a process id or an atom
-%%
-%% Return: A window and a editor
-%% ---------------------------------------------------------------
-
-
-window(Process) ->
- GS = gs:start([{kernel,true}]),
- Font = font(GS),
- Win_Options = [{title,title(Process)}, {width,550}, {keypress,true},
- {configure,true},
- {destroy,true},{height, 400}],
- Win = gs:create(window,GS,Win_Options),
-
- MenuBar = gs:create(menubar, Win, []),
-
- %% File menu
- MBFile = gs:create(menubutton,MenuBar,[{label,{text," File "}},
- {font,Font},
- {underline, 1}]),
- MenuFile = gs:create(menu, MBFile, []),
- make_menus(pman_process:is_running(Process), MenuBar, MenuFile,
- Font),
-
- gse:named_menuitem('Save buffer',MenuFile,
- [{label,{text, "Save buffer..."}},
- {font,Font},
- {underline,0}]),
- gse:named_menuitem('Close',MenuFile,
- [{label, {text, "Close"}},
- {font,Font},
- {underline,0}]),
-
-
- Editor = gs:create(editor,Win,[{x,3}, {y,40},
- {width,546}, {height,348},
- {font,Font}]),
- gs:config(Editor, [{keypress, true},{insert, {'end', display(Process)}}]),
- gs:config(Editor, [{enable, false},{vscroll, right}, {hscroll, bottom},
- {wrap,none}]),
- gs:config(Win, [{map, true}]),
- {Win, Editor}.
-
-%% ---------------------------------------------------------------------
-%% Menu Help Fuctions
-%% ---------------------------------------------------------------------
-
-
-links_menus(Links) ->
- gs:destroy('Links'),
- gs:create(menu,'Links','LinksMenu',[]),
- Flag = case links_menus(Links,[]) of
- [] -> false;
- Pids ->
- add_menu('Links', Pids, "Trace"),
- true
- end,
- gse:config('LinksMenu',[{enable,Flag}]).
-
-links_menus([],Pids) -> Pids;
-links_menus([Pid|Links],Pids) when is_pid(Pid) ->
- links_menus(Links,[Pid|Pids]);
-links_menus([_Port|Links],Pids) ->
- links_menus(Links,Pids).
-
-
-%% Create the node menu.
-
-add_node_menu(MenuBar, Nodes, Font) ->
- MBNode = gs:create(menubutton, MenuBar, [{label,{text, " Nodes "}},
- {font,Font},
- {underline, 1}]),
- gs:create(menu, node, MBNode, []),
- add_menu(node, Nodes, "Show", Font),
- gse:disable(node()).
-
-
-%% ---------------------------------------------------------------------
-%% Add Menus in the list under Menu menuitem.
-
-add_menu(Menu, Names, Tag) ->
- add_menu(Menu, Names, Tag, font()).
-
-add_menu(_Menu, [], _Tag, _Font) -> ok;
-add_menu(Menu, [Name|Names], Tag, Font) ->
- Title = io_lib:format("~s ~p",[Tag, Name]),
- gs:create(menuitem,Name,Menu,[{label,{text,Title}},
- {font,Font},
- {data,{Menu,Name}}]),
- add_menu(Menu, Names, Tag, Font).
-
-%% ---------------------------------------------------------------------
-%% Remove a specific menu item, or a whole menu, or a list of both.
-%%
-
-remove_menu(List) when is_list(List)->
- lists:foreach(fun(X) -> gs:destroy(X) end, List);
-
-remove_menu(Object) ->
- gse:destroy(Object).
-
-
-%% ---------------------------------------------------------------------
-%% If the trace window opened is supposed to trace a real pid, let us
-%% add the trace menu, and other items specific to tracing. If not,
-%% the only menus available are the ones in the default defined in
-%% window(Pid).
-
-make_menus(false, _, _, _) -> ok;
-make_menus({true,Pid}, MenuBar, MenuFile, Font) ->
- MBView = gs:create(menubutton,'ViewMenu',MenuBar,
- [{underline,1},
- {label,{text," View "}}, {font,Font},
- {side,left}]),
- MenuView = gs:create(menu, MBView, []),
-
- MBTrace = gs:create(menubutton,'TraceMenu',MenuBar,
- [{underline,1},
- {label,{text," Trace "}}, {font,Font},
- {side,left}]),
- MenuTrace = gs:create(menu, MBTrace, []),
-
-
- MBHelp = gs:create(menubutton,'HelpMenu',MenuBar,
- [{underline,1},
- {label,{text," Help "}}, {font,Font},
- {side,right}]),
- MenuHelp = gs:create(menu, MBHelp, []),
-
- %% File menu
- gse:named_menuitem('Options', MenuFile,
- [{label, {text, "Options..."}}, {font,Font},
- {underline,0}]),
-
- %% Trace menu
- gse:named_menuitem('All Links', MenuTrace,
- [{label, {text, "All Linked Processes"}},
- {font,Font},
- {underline,0}]),
- gse:named_menuitem('LinksMenu', MenuTrace,
- [{underline,0},
- {label, {text, "Linked Process..."}},
- {font,Font},
- {itemtype, cascade},
- {enable,false}]),
- gs:create(menu,'Links','LinksMenu',[]),
- case pman_process:pinfo(Pid, links) of
- Links when is_list(Links) ->
- links_menus(Links);
- undefined ->
- lists:foreach(fun(X) -> gse:disable(X) end,['LinksMenu'])
- end,
- gse:named_menuitem('Kill', MenuTrace,
- [{label, {text, "Kill"}}, {font,Font},
- {underline,0}]),
-
- %% View menu
- gse:named_menuitem('Clear', MenuView,
- [{label, {text, "Clear buffer"}}, {font,Font},
- {underline,0}]),
-
- gse:named_menuitem('Module', MenuView,
- [{label, {text, "Module Info"}}, {font,Font},
- {underline,0}]),
-
- %% Help menu
- gse:named_menuitem('Help', MenuHelp,
- [{label, {text, "Help"}}, {font,Font},
- {underline,0}]).
-
-%% ---------------------------------------------------------------------
-%% Configurate the actual editor
-%%
-%% Editor, actual editor
-%% Options, actual options for the editor
-%%
-%% Return: A configurated editor with the actual options
-%% ---------------------------------------------------------------------
-
-configeditor(Editor, Options) ->
- gs:config(Editor, Options).
-
-%% ---------------------------------------------------------------------
-%% Configure the actual window after it has been resized.
-%% ---------------------------------------------------------------------
-
-configwin(Object, W, H) ->
- Dx = abs(W - gs:read(Object,width) - 4),
- Dy = abs(H - gs:read(Object,height) - 42),
- if
- Dx + Dy =/= 0 ->
- gs:config(Object,[{width,W - 4}]);
- true -> ok
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% update/1, 3
-update(NoOfHidden) ->
- Str = lists:flatten(io_lib:format(?CPIDHIDDENTEXT++"~w",
- [NoOfHidden])),
- gse:config('Number Hidden', [{label, {text,Str}}]).
-
-update(Grid, ShowInfoR, NoOfHidden) ->
-
- %% We reverse the list because we want the processes to appear with
- %% the newest (=highest) pid first in the list.
- ShowInfo = lists:reverse(ShowInfoR),
-
- %% Set the length of the grid
- CGridline = length(ShowInfo) + 1,
- gs:config(Grid, [{rows, {1,CGridline}}]),
-
- %% Add the header line
- add_gridline(Grid,
- 1,
- {'Pid','Current Function','Name','Msgs','Reds','Size'},
- []),
-
- update(NoOfHidden),
-
- %% Recurse through the ordset of pids
- update_r(Grid, ShowInfo, 2).
-
-update_r(Grid, [], Row) ->
- delete_gridlines(Grid, Row);
-update_r(Grid, [{Pid,Func,Name,Msgs,Reds,Psize}|ShowInfo], Row) ->
- {M, F, A} = Func,
- FuncText = lists:flatten(io_lib:format("~w:~w/~w", [M, F, A])),
- add_gridline(Grid,
- Row,
- {Pid, FuncText, Name, Msgs, Reds, Psize},
- [{data,{pidfunc,Pid,Func}}]),
- update_r(Grid, ShowInfo, Row+1).
-
-add_gridline(Grid, Row, Tuple, LIOptSpec) ->
- {Pid, FuncText, Name, Msgs, Reds, Psize} = Tuple,
- LIOpt = [{click,true},
- {doubleclick,true},
- {fg, colour(Row)},
- {text,{1,Pid}},
- {text,{2,FuncText}},
- {text,{3,Name}},
- {text,{4,Msgs}},
- {text,{5,Reds}},
- {text,{6,Psize}} |LIOptSpec],
- case gs:read(Grid, {obj_at_row, Row}) of
- undefined ->
- gse:gridline(Grid,[{row, Row}|LIOpt]);
- GridLine ->
- gs:config(GridLine,LIOpt)
- end.
-
-delete_gridlines(Grid, Row) ->
- case gs:read(Grid, {obj_at_row, Row}) of
- undefined ->
- ok;
- GridLine ->
- gs:destroy(GridLine),
- delete_gridlines(Grid, Row+1)
- end.
-
-colour(1) ->
- ?HEADER_COLOUR;
-colour(_Row) ->
- ?UNSELECTED_COLOUR.
-
-%% Interchange colours between two rows
-change_colour(Grid, Row, Row) ->
- Gitem = gs:read(Grid, {obj_at_row,Row}),
- gs:config(Gitem, {fg,?SELECTED_COLOUR});
-change_colour(Grid, From, To) ->
- Gitem_to = gs:read(Grid, {obj_at_row,To}),
- Gitem_fr = gs:read(Grid, {obj_at_row,From}),
- gs:config(Gitem_to, {fg,?SELECTED_COLOUR}),
- gs:config(Gitem_fr, {fg,colour(From)}).
-
-%% --------------------------------------------------------------
-%% Create a title for the window
-%% Return: the title
-%% --------------------------------------------------------------
-
-title({module, Mod}) ->
- lists:flatten([io_lib:format("Pman: Module info ~p", [Mod])]);
-
-title({shell, Sh} ) ->
- lists:flatten([io_lib:format("Pman: Shell process ~p on ~p",
- [Sh,node(Sh)])]);
-
-title(Sh) ->
- lists:flatten([io_lib:format("Pman: Process ~p on ~p",
- [Sh, node(Sh)]),name(Sh)]).
-name(Pid) ->
- case pman_process:pinfo(Pid, registered_name) of
- undefined -> "";
- Name ->
- lists:flatten([io_lib:format("[~p]", [Name])])
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% module_data/1 - %% Returns the module information for a
-%% module, on a format suitable to insert into a GS editor.
-%%
-%% Arguments:
-%% ModuleName The module
-%%
-%% Returns:
-%% A string with module information.
-%%
-
-module_data(ModuleName) ->
- vformat("", catch apply(ModuleName, module_info, [])).
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% display/1 -
-%%
-
-display({_,Pid,_}) -> display(Pid);
-display({_,Pid}) -> display(Pid);
-display(Pid) when is_pid(Pid) ->
- case pman_process:pinfo(Pid) of
- undefined ->
- format('Process is dead~n',[]);
- Other ->
- proc_format(Other)
- end.
-
-%% --------------------------------------------------------------
-%% Format functions for the shell and help window.
-%% --------------------------------------------------------------
-
-vformat(Pad, {M,F,A}) when is_atom(F) ->
- Pad2 = lists:append(Pad,mkpad(io_lib:format("~w:~w",[M,F]))),
- lists:flatten([format("~p:~p", [M,F]),argformat(Pad2, A)]);
-
-vformat(Pad, [H|T]) ->
- kvformat(Pad, [H|T],"[");
-
-vformat(_Pad, X) -> format("~p~n", [X]).
-
-format(Format) -> format(Format, []).
-
-format(Format, Args) ->
- io_lib:format(Format, Args).
-
-
-kvformat(S, [Item],Buff) ->
- lists:reverse([format("\n~s~p]\n",[S,Item])|Buff]);
-
-kvformat(S,[H|T],Buff) ->
- kvformat(S,T,[format("\n~s~p, ",[S,H])|Buff]);
-
-kvformat(_,[],Buff) ->
- lists:reverse(["]\n"|Buff]).
-
-argformat(_Pad,A) when is_integer(A) ->
- format("/~p\n", [A]);
-argformat(_,A) ->
- lists:flatten([format("/~p\n", [length(A)]),
- format("args: \n"),
- argformat2(" ", A)]).
-
-argformat2(Pad, Arglist) ->
- Chars = lists:flatten(io_lib:format("~p",[Arglist])),
- if
- length(Chars) < (70 - length(Pad)) ->
- format("~s~s\n", [Pad, Chars]);
- true ->
- argformat3(Pad, Arglist)
- end.
-
-argformat3(_,[]) -> format("\n");
-argformat3(Pad, [H|T]) ->
- Chars = truncate(65,io_lib:format("~s~p",[Pad, H])),
- format("~s,\n", [Chars]),
- argformat3(Pad, T).
-
-pformat(false) -> [];
-pformat({value,{_, 0}}) -> [];
-pformat({value,{_, []}}) -> [];
-pformat({value, {Key, Vals}}) ->
- Pad = mkpad(io_lib:format("~p ",[Key])),
- format(lists:flatten(["~p: " ,vformat(Pad, Vals), "~n"]), [Key]).
-
-truncate(0, _Chars) -> ".....";
-truncate(I, [H|T]) -> [H|truncate(I-1, T)];
-truncate(_I, []) -> [].
-
-mkpad([_|T]) -> [32|mkpad(T)];
-mkpad([]) -> [].
-
-proc_format(Pi) -> %% process_info struct
- X1 = pformat(lists:keysearch(initial_call, 1, Pi)),
- X2 = pformat(lists:keysearch(current_function, 1,Pi)),
- X3 = pformat(lists:keysearch(messages, 1,Pi)),
- X4 = pformat(lists:keysearch(dictionary,1, Pi)),
- X5 = pformat(lists:keysearch(heap_size, 1,Pi)),
- X6 = pformat(lists:keysearch(stack_size, 1,Pi)),
- X7 = pformat(lists:keysearch(reductions, 1,Pi)),
- X8 = pformat(lists:keysearch(links, 1,Pi)),
- X9 = pformat(lists:keysearch(trap_exit, 1,Pi)),
- lists:flatten([X1, X2, X3, X4, X5,X6,X7,X8,X9]).
-
-
-%% Using the tool_utils function for presenting messages.
-dialog_window(GSParent, Text) ->
- spawn_link(tool_utils, notify, [GSParent, Text]).
-
-%% Create a window with a dismiss button.
-msg_win(Text) ->
- spawn_link(fun() -> display_msg_win(Text) end).
-
-display_msg_win(Text) ->
- GS = gs:start([{kernel,true}]),
- Font = font(GS),
- Win = gs:window(GS, [{width,200}, {height,75}, {destroy,true},
- {title,"Pman Message"}]),
- Can = gs:canvas(Win, [{width,200}, {height, 75},{x,0},{y,0}]),
- gs:text(Can, [{text,Text}, {coords,[{10,0}]}, {justify,center}]),
- Btn = gs:button(Win, [{label,{text,"Dismiss"}}, {font,Font},
- {width,100}, {x,50}, {y,40}]),
- gs:config(Win, {map,true}),
- receive
- {gs, Btn, click, _, _} ->
- ok
- end.
-
-%% Choose default font
-font() ->
- font(gs:start([{kernel,true}])).
-
-font(GS) ->
- case gs:read(GS, {choose_font, {screen,[],12}}) of
- Font when element(1, Font)==screen ->
- Font;
- _ ->
- gs:read(GS, {choose_font, {courier,[],12}})
- end.
diff --git a/lib/pman/src/pman_win.hrl b/lib/pman/src/pman_win.hrl
deleted file mode 100644
index 8a2778d5b7..0000000000
--- a/lib/pman/src/pman_win.hrl
+++ /dev/null
@@ -1,39 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--define(WIN_HEIGHT, 390).
--define(WIN_WIDTH, 745).
-
--define(MENU_HEIGHT, 40).
--define(CHECKBAR_HEIGHT, 40).
-
--define(CPIDHIDDENTEXT, "# Hidden: ").
-
--define(HEADER_COLOUR, blue).
--define(UNSELECTED_COLOUR, black).
--define(SELECTED_COLOUR, white).
-
-
-
-
-
-
-
-
-
diff --git a/lib/pman/vsn.mk b/lib/pman/vsn.mk
deleted file mode 100644
index 92fb9df222..0000000000
--- a/lib/pman/vsn.mk
+++ /dev/null
@@ -1 +0,0 @@
-PMAN_VSN = 2.7.1.4
diff --git a/lib/sasl/test/release_handler_SUITE.erl b/lib/sasl/test/release_handler_SUITE.erl
index 5293381af0..a3db2b23db 100644
--- a/lib/sasl/test/release_handler_SUITE.erl
+++ b/lib/sasl/test/release_handler_SUITE.erl
@@ -1793,18 +1793,18 @@ no_dot_erlang(Conf) ->
case os:cmd(Erl ++ Args) of
"DOT_ERLANG_READ" ++ _ -> ok;
Other1 ->
- io:format("Failed: ~s~n",[Erl ++ Args]),
+ io:format("Failed: ~ts~n",[Erl ++ Args]),
io:format("Expected: ~s ++ _~n",["DOT_ERLANG_READ "]),
- io:format("Got: ~s~n",[Other1]),
+ io:format("Got: ~ts~n",[Other1]),
exit(failed_to_start, test_error)
end,
NO_DOT_ERL = " -boot no_dot_erlang",
case os:cmd(Erl ++ NO_DOT_ERL ++ Args) of
"TESTOK" ++ _ -> ok;
Other2 ->
- io:format("Failed: ~s~n",[Erl ++ Args]),
+ io:format("Failed: ~ts~n",[Erl ++ Args]),
io:format("Expected: ~s~n",["TESTOK"]),
- io:format("Got: ~s~n",[Other2]),
+ io:format("Got: ~ts~n",[Other2]),
exit(failed_to_start, no_dot_erlang)
end
after
diff --git a/lib/stdlib/examples/erl_id_trans.erl b/lib/stdlib/examples/erl_id_trans.erl
index 51def8c8e1..2c842fafc7 100644
--- a/lib/stdlib/examples/erl_id_trans.erl
+++ b/lib/stdlib/examples/erl_id_trans.erl
@@ -419,6 +419,8 @@ expr({'fun',Line,Body}) ->
A = expr(A0),
{'fun',Line,{function,M,F,A}}
end;
+expr({named_fun,Loc,Name,Cs}) ->
+ {named_fun,Loc,Name,fun_clauses(Cs)};
expr({call,Line,F0,As0}) ->
%% N.B. If F an atom then call to local function or BIF, if F a
%% remote structure (see below) then call to other module,
diff --git a/lib/stdlib/src/epp.erl b/lib/stdlib/src/epp.erl
index dd0512be4d..4fd302e612 100644
--- a/lib/stdlib/src/epp.erl
+++ b/lib/stdlib/src/epp.erl
@@ -1247,6 +1247,8 @@ macro_arg([{'case',Lc}|Toks], E, Arg) ->
macro_arg(Toks, ['end'|E], [{'case',Lc}|Arg]);
macro_arg([{'fun',Lc}|[{'(',_}|_]=Toks], E, Arg) ->
macro_arg(Toks, ['end'|E], [{'fun',Lc}|Arg]);
+macro_arg([{'fun',_}=Fun,{var,_,_}=Name|[{'(',_}|_]=Toks], E, Arg) ->
+ macro_arg(Toks, ['end'|E], [Name,Fun|Arg]);
macro_arg([{'receive',Lr}|Toks], E, Arg) ->
macro_arg(Toks, ['end'|E], [{'receive',Lr}|Arg]);
macro_arg([{'try',Lr}|Toks], E, Arg) ->
diff --git a/lib/stdlib/src/erl_eval.erl b/lib/stdlib/src/erl_eval.erl
index ca6a4b5c58..18d8148b15 100644
--- a/lib/stdlib/src/erl_eval.erl
+++ b/lib/stdlib/src/erl_eval.erl
@@ -179,8 +179,12 @@ check_command(Es, Bs) ->
fun_data(F) when is_function(F) ->
case erlang:fun_info(F, module) of
{module,erl_eval} ->
- {env, [FBs,_FEf,_FLf,FCs]} = erlang:fun_info(F, env),
- {fun_data,FBs,FCs};
+ case erlang:fun_info(F, env) of
+ {env,[{FBs,_FLf,_FEf,FCs}]} ->
+ {fun_data,FBs,FCs};
+ {env,[{FBs,_FLf,_FEf,FCs,FName}]} ->
+ {named_fun_data,FBs,FName,FCs}
+ end;
_ ->
false
end;
@@ -262,51 +266,99 @@ expr({'fun',Line,{clauses,Cs}} = Ex, Bs, Lf, Ef, RBs) ->
{Ex1, _} = hide_calls(Ex, 0),
{ok,Used} = erl_lint:used_vars([Ex1], Bs),
En = orddict:filter(fun(K,_V) -> member(K,Used) end, Bs),
+ Info = {En,Lf,Ef,Cs},
%% This is a really ugly hack!
F =
case length(element(3,hd(Cs))) of
- 0 -> fun () -> eval_fun(Cs, [], En, Lf, Ef) end;
- 1 -> fun (A) -> eval_fun(Cs, [A], En, Lf, Ef) end;
- 2 -> fun (A,B) -> eval_fun(Cs, [A,B], En, Lf, Ef) end;
- 3 -> fun (A,B,C) -> eval_fun(Cs, [A,B,C], En, Lf, Ef) end;
- 4 -> fun (A,B,C,D) -> eval_fun(Cs, [A,B,C,D], En, Lf, Ef) end;
- 5 -> fun (A,B,C,D,E) -> eval_fun(Cs, [A,B,C,D,E], En, Lf, Ef) end;
- 6 -> fun (A,B,C,D,E,F) -> eval_fun(Cs, [A,B,C,D,E,F], En, Lf, Ef) end;
- 7 -> fun (A,B,C,D,E,F,G) ->
- eval_fun(Cs, [A,B,C,D,E,F,G], En, Lf, Ef) end;
- 8 -> fun (A,B,C,D,E,F,G,H) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H], En, Lf, Ef) end;
- 9 -> fun (A,B,C,D,E,F,G,H,I) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I], En, Lf, Ef) end;
- 10 -> fun (A,B,C,D,E,F,G,H,I,J) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J], En, Lf, Ef) end;
- 11 -> fun (A,B,C,D,E,F,G,H,I,J,K) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K], En, Lf, Ef) end;
- 12 -> fun (A,B,C,D,E,F,G,H,I,J,K,L) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L], En, Lf, Ef) end;
- 13 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M], En, Lf, Ef) end;
- 14 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N], En, Lf, Ef) end;
- 15 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O], En, Lf, Ef) end;
- 16 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P], En, Lf, Ef) end;
- 17 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q], En, Lf, Ef) end;
- 18 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R], En, Lf, Ef) end;
- 19 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S],
- En, Lf, Ef) end;
- 20 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T) ->
- eval_fun(Cs, [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T],
- En, Lf, Ef) end;
+ 0 -> fun () -> eval_fun([], Info) end;
+ 1 -> fun (A) -> eval_fun([A], Info) end;
+ 2 -> fun (A,B) -> eval_fun([A,B], Info) end;
+ 3 -> fun (A,B,C) -> eval_fun([A,B,C], Info) end;
+ 4 -> fun (A,B,C,D) -> eval_fun([A,B,C,D], Info) end;
+ 5 -> fun (A,B,C,D,E) -> eval_fun([A,B,C,D,E], Info) end;
+ 6 -> fun (A,B,C,D,E,F) -> eval_fun([A,B,C,D,E,F], Info) end;
+ 7 -> fun (A,B,C,D,E,F,G) -> eval_fun([A,B,C,D,E,F,G], Info) end;
+ 8 -> fun (A,B,C,D,E,F,G,H) -> eval_fun([A,B,C,D,E,F,G,H], Info) end;
+ 9 -> fun (A,B,C,D,E,F,G,H,I) -> eval_fun([A,B,C,D,E,F,G,H,I], Info) end;
+ 10 -> fun (A,B,C,D,E,F,G,H,I,J) ->
+ eval_fun([A,B,C,D,E,F,G,H,I,J], Info) end;
+ 11 -> fun (A,B,C,D,E,F,G,H,I,J,K) ->
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K], Info) end;
+ 12 -> fun (A,B,C,D,E,F,G,H,I,J,K,L) ->
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L], Info) end;
+ 13 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M) ->
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M], Info) end;
+ 14 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N) ->
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N], Info) end;
+ 15 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O) ->
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O], Info) end;
+ 16 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P) ->
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P], Info) end;
+ 17 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q) ->
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q], Info) end;
+ 18 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R) ->
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R], Info) end;
+ 19 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S) ->
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S], Info) end;
+ 20 -> fun (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T) ->
+ eval_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T], Info) end;
_Other ->
erlang:raise(error, {'argument_limit',{'fun',Line,Cs}},
stacktrace())
end,
ret_expr(F, Bs, RBs);
+expr({named_fun,Line,Name,Cs} = Ex, Bs, Lf, Ef, RBs) ->
+ %% Save only used variables in the function environment.
+ %% {value,L,V} are hidden while lint finds used variables.
+ {Ex1, _} = hide_calls(Ex, 0),
+ {ok,Used} = erl_lint:used_vars([Ex1], Bs),
+ En = orddict:filter(fun(K,_V) -> member(K,Used) end, Bs),
+ Info = {En,Lf,Ef,Cs,Name},
+ %% This is a really ugly hack!
+ F =
+ case length(element(3,hd(Cs))) of
+ 0 -> fun RF() -> eval_named_fun([], RF, Info) end;
+ 1 -> fun RF(A) -> eval_named_fun([A], RF, Info) end;
+ 2 -> fun RF(A,B) -> eval_named_fun([A,B], RF, Info) end;
+ 3 -> fun RF(A,B,C) -> eval_named_fun([A,B,C], RF, Info) end;
+ 4 -> fun RF(A,B,C,D) -> eval_named_fun([A,B,C,D], RF, Info) end;
+ 5 -> fun RF(A,B,C,D,E) -> eval_named_fun([A,B,C,D,E], RF, Info) end;
+ 6 -> fun RF(A,B,C,D,E,F) -> eval_named_fun([A,B,C,D,E,F], RF, Info) end;
+ 7 -> fun RF(A,B,C,D,E,F,G) ->
+ eval_named_fun([A,B,C,D,E,F,G], RF, Info) end;
+ 8 -> fun RF(A,B,C,D,E,F,G,H) ->
+ eval_named_fun([A,B,C,D,E,F,G,H], RF, Info) end;
+ 9 -> fun RF(A,B,C,D,E,F,G,H,I) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I], RF, Info) end;
+ 10 -> fun RF(A,B,C,D,E,F,G,H,I,J) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J], RF, Info) end;
+ 11 -> fun RF(A,B,C,D,E,F,G,H,I,J,K) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K], RF, Info) end;
+ 12 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L], RF, Info) end;
+ 13 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M], RF, Info) end;
+ 14 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N], RF, Info) end;
+ 15 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O], RF, Info) end;
+ 16 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P], RF, Info) end;
+ 17 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q], RF, Info) end;
+ 18 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R], RF, Info) end;
+ 19 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S],
+ RF, Info) end;
+ 20 -> fun RF(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T) ->
+ eval_named_fun([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T],
+ RF, Info) end;
+ _Other ->
+ erlang:raise(error, {'argument_limit',{named_fun,Line,Name,Cs}},
+ stacktrace())
+ end,
+ ret_expr(F, Bs, RBs);
expr({call,_,{remote,_,{atom,_,qlc},{atom,_,q}},[{lc,_,_E,_Qs}=LC | As0]},
Bs0, Lf, Ef, RBs) when length(As0) =< 1 ->
%% No expansion or evaluation of module name or function name.
@@ -534,7 +586,7 @@ do_apply(Func, As, Bs0, Ef, RBs) ->
no_env
end,
case {Env,Ef} of
- {{env,[FBs, FEf, FLf, FCs]},_} ->
+ {{env,[{FBs,FLf,FEf,FCs}]},_} ->
%% If we are evaluting within another function body
%% (RBs =/= none), we return RBs when this function body
%% has been evalutated, otherwise we return Bs0, the
@@ -549,6 +601,17 @@ do_apply(Func, As, Bs0, Ef, RBs) ->
_ ->
erlang:raise(error, {badarity,{Func,As}},stacktrace())
end;
+ {{env,[{FBs,FLf,FEf,FCs,FName}]},_} ->
+ NRBs = if
+ RBs =:= none -> Bs0;
+ true -> RBs
+ end,
+ case {erlang:fun_info(Func, arity), length(As)} of
+ {{arity, Arity}, Arity} ->
+ eval_named_fun(FCs, As, FBs, FLf, FEf, FName, Func, NRBs);
+ _ ->
+ erlang:raise(error, {badarity,{Func,As}},stacktrace())
+ end;
{no_env,none} when RBs =:= value ->
%% Make tail recursive calls when possible.
apply(Func, As);
@@ -676,12 +739,12 @@ ret_expr(V, Bs, none) ->
ret_expr(V, _Bs, RBs) when is_list(RBs) ->
{value,V,RBs}.
-%% eval_fun(Clauses, Arguments, Bindings, LocalFunctionHandler,
-%% ExternalFunctionHandler) -> Value
+%% eval_fun(Arguments, {Bindings,LocalFunctionHandler,
+%% ExternalFunctionHandler,Clauses}) -> Value
%% This function is called when the fun is called from compiled code
%% or from apply.
-eval_fun(Cs, As, Bs0, Lf, Ef) ->
+eval_fun(As, {Bs0,Lf,Ef,Cs}) ->
eval_fun(Cs, As, Bs0, Lf, Ef, value).
eval_fun([{clause,_,H,G,B}|Cs], As, Bs0, Lf, Ef, RBs) ->
@@ -699,6 +762,27 @@ eval_fun([], As, _Bs, _Lf, _Ef, _RBs) ->
erlang:raise(error, function_clause,
[{?MODULE,'-inside-an-interpreted-fun-',As}|stacktrace()]).
+
+eval_named_fun(As, Fun, {Bs0,Lf,Ef,Cs,Name}) ->
+ eval_named_fun(Cs, As, Bs0, Lf, Ef, Name, Fun, value).
+
+eval_named_fun([{clause,_,H,G,B}|Cs], As, Bs0, Lf, Ef, Name, Fun, RBs) ->
+ Bs1 = add_binding(Name, Fun, Bs0),
+ case match_list(H, As, new_bindings(), Bs1) of
+ {match,Bsn} -> % The new bindings for the head
+ Bs2 = add_bindings(Bsn, Bs1), % which then shadow!
+ case guard(G, Bs2, Lf, Ef) of
+ true -> exprs(B, Bs2, Lf, Ef, RBs);
+ false -> eval_named_fun(Cs, As, Bs0, Lf, Ef, Name, Fun, RBs)
+ end;
+ nomatch ->
+ eval_named_fun(Cs, As, Bs0, Lf, Ef, Name, Fun, RBs)
+ end;
+eval_named_fun([], As, _Bs, _Lf, _Ef, _Name, _Fun, _RBs) ->
+ erlang:raise(error, function_clause,
+ [{?MODULE,'-inside-an-interpreted-fun-',As}|stacktrace()]).
+
+
%% expr_list(ExpressionList, Bindings)
%% expr_list(ExpressionList, Bindings, LocalFuncHandler)
%% expr_list(ExpressionList, Bindings, LocalFuncHandler, ExternalFuncHandler)
diff --git a/lib/stdlib/src/erl_expand_records.erl b/lib/stdlib/src/erl_expand_records.erl
index d05f630d8e..776b433613 100644
--- a/lib/stdlib/src/erl_expand_records.erl
+++ b/lib/stdlib/src/erl_expand_records.erl
@@ -344,6 +344,9 @@ expr({'fun',_,{function,_M,_F,_A}}=Fun, St) ->
expr({'fun',Line,{clauses,Cs0}}, St0) ->
{Cs,St1} = clauses(Cs0, St0),
{{'fun',Line,{clauses,Cs}},St1};
+expr({named_fun,Line,Name,Cs0}, St0) ->
+ {Cs,St1} = clauses(Cs0, St0),
+ {{named_fun,Line,Name,Cs},St1};
expr({call,Line,{atom,_,is_record},[A,{atom,_,Name}]}, St) ->
record_test(Line, A, Name, St);
expr({call,Line,{remote,_,{atom,_,erlang},{atom,_,is_record}},
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index bcf3ccef3b..cf01e1f8cf 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -2030,6 +2030,15 @@ expr({'fun',Line,Body}, Vt, St) ->
{Bvt, St1} = expr_list([M,F,A], Vt, St),
{vtupdate(Bvt, Vt),St1}
end;
+expr({named_fun,_,'_',Cs}, Vt, St) ->
+ fun_clauses(Cs, Vt, St);
+expr({named_fun,Line,Name,Cs}, Vt, St0) ->
+ Nvt0 = [{Name,{bound,unused,[Line]}}],
+ St1 = shadow_vars(Nvt0, Vt, 'named fun', St0),
+ Nvt1 = vtupdate(vtsubtract(Vt, Nvt0), Nvt0),
+ {Csvt,St2} = fun_clauses(Cs, Nvt1, St1),
+ {_,St3} = check_unused_vars(vtupdate(Csvt, Nvt0), [], St2),
+ {vtold(Csvt, Vt),St3};
expr({call,_Line,{atom,_Lr,is_record},[E,{atom,Ln,Name}]}, Vt, St0) ->
{Rvt,St1} = expr(E, Vt, St0),
{Rvt,exist_record(Ln, Name, St1)};
@@ -2182,6 +2191,7 @@ is_valid_record(Rec) ->
{lc, _, _, _} -> false;
{record_index, _, _, _} -> false;
{'fun', _, _} -> false;
+ {named_fun, _, _, _} -> false;
_ -> true
end.
diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl
index 7145b0858f..59a05a48ee 100644
--- a/lib/stdlib/src/erl_parse.yrl
+++ b/lib/stdlib/src/erl_parse.yrl
@@ -406,6 +406,9 @@ fun_clause -> argument_list clause_guard clause_body :
{Args,Pos} = '$1',
{clause,Pos,'fun',Args,'$2','$3'}.
+fun_clause -> var argument_list clause_guard clause_body :
+ {clause,element(2, '$1'),element(3, '$1'),element(1, '$2'),'$3','$4'}.
+
try_expr -> 'try' exprs 'of' cr_clauses try_catch :
build_try(?line('$1'),'$2','$4','$5').
try_expr -> 'try' exprs try_catch :
@@ -799,8 +802,15 @@ build_rule(Cs) ->
%% build_fun(Line, [Clause]) -> {'fun',Line,{clauses,[Clause]}}.
build_fun(Line, Cs) ->
+ Name = element(3, hd(Cs)),
Arity = length(element(4, hd(Cs))),
- {'fun',Line,{clauses,check_clauses(Cs, 'fun', Arity)}}.
+ CheckedCs = check_clauses(Cs, Name, Arity),
+ case Name of
+ 'fun' ->
+ {'fun',Line,{clauses,CheckedCs}};
+ Name ->
+ {named_fun,Line,Name,CheckedCs}
+ end.
check_clauses(Cs, Name, Arity) ->
mapl(fun ({clause,L,N,As,G,B}) when N =:= Name, length(As) =:= Arity ->
diff --git a/lib/stdlib/src/erl_pp.erl b/lib/stdlib/src/erl_pp.erl
index 657cb5d34c..8a1d8e0440 100644
--- a/lib/stdlib/src/erl_pp.erl
+++ b/lib/stdlib/src/erl_pp.erl
@@ -511,10 +511,17 @@ lexpr({'fun',_,{function,M,F,A}}, _Prec, Opts) ->
ArityItem = lexpr(A, Opts),
["fun ",NameItem,$:,CallItem,$/,ArityItem];
lexpr({'fun',_,{clauses,Cs}}, _Prec, Opts) ->
- {list,[{first,'fun',fun_clauses(Cs, Opts)},'end']};
+ {list,[{first,'fun',fun_clauses(Cs, Opts, unnamed)},'end']};
+lexpr({named_fun,_,Name,Cs}, _Prec, Opts) ->
+ {list,[{first,['fun', " "],fun_clauses(Cs, Opts, {named, Name})},'end']};
lexpr({'fun',_,{clauses,Cs},Extra}, _Prec, Opts) ->
{force_nl,fun_info(Extra),
- {list,[{first,'fun',fun_clauses(Cs, Opts)},'end']}};
+ {list,[{first,'fun',fun_clauses(Cs, Opts, unnamed)},'end']}};
+lexpr({named_fun,_,Name,Cs,Extra}, _Prec, Opts) ->
+ {force_nl,fun_info(Extra),
+ {list,[{first,['fun', " "],fun_clauses(Cs, Opts, {named, Name})},'end']}};
+lexpr({'query',_,Lc}, _Prec, Opts) ->
+ {list,[{step,leaf("query"),lexpr(Lc, 0, Opts)},'end']};
lexpr({call,_,{remote,_,{atom,_,M},{atom,_,F}=N}=Name,Args}, Prec, Opts) ->
case erl_internal:bif(M, F, length(Args)) of
true ->
@@ -729,8 +736,13 @@ stack_backtrace(S, El, Opts) ->
%% fun_clauses(Clauses, Opts) -> [Char].
%% Print 'fun' clauses.
-fun_clauses(Cs, Opts) ->
- nl_clauses(fun fun_clause/2, [$;], Opts, Cs).
+fun_clauses(Cs, Opts, unnamed) ->
+ nl_clauses(fun fun_clause/2, [$;], Opts, Cs);
+fun_clauses(Cs, Opts, {named, Name}) ->
+ nl_clauses(fun (C, H) ->
+ {step,Gl,Bl} = fun_clause(C, H),
+ {step,[atom_to_list(Name),Gl],Bl}
+ end, [$;], Opts, Cs).
fun_clause({clause,_,A,G,B}, Opts) ->
El = args(A, Opts),
diff --git a/lib/stdlib/src/ets.erl b/lib/stdlib/src/ets.erl
index f05bfd12a7..cc5e69f574 100644
--- a/lib/stdlib/src/ets.erl
+++ b/lib/stdlib/src/ets.erl
@@ -507,7 +507,7 @@ fun2ms(ShellFun) when is_function(ShellFun) ->
Else ->
Else
end;
- false ->
+ _ ->
exit({badarg,{?MODULE,fun2ms,
[function,called,with,real,'fun',
should,be,transformed,with,
diff --git a/lib/stdlib/src/ms_transform.erl b/lib/stdlib/src/ms_transform.erl
index 4e2ce39ec2..25b04fe45e 100644
--- a/lib/stdlib/src/ms_transform.erl
+++ b/lib/stdlib/src/ms_transform.erl
@@ -369,6 +369,13 @@ copy({var,_Line,Name} = VarDef,Bound) ->
copy({'fun',Line,{clauses,Clauses}},Bound) -> % Dont export bindings from funs
{NewClauses,_IgnoredBindings} = copy_list(Clauses,Bound),
{{'fun',Line,{clauses,NewClauses}},Bound};
+copy({named_fun,Line,Name,Clauses},Bound) -> % Dont export bindings from funs
+ Bound1 = case Name of
+ '_' -> Bound;
+ Name -> gb_sets:add(Name,Bound)
+ end,
+ {NewClauses,_IgnoredBindings} = copy_list(Clauses,Bound1),
+ {{named_fun,Line,Name,NewClauses},Bound};
copy({'case',Line,Of,ClausesList},Bound) -> % Dont export bindings from funs
{NewOf,NewBind0} = copy(Of,Bound),
{NewClausesList,NewBindings} = copy_case_clauses(ClausesList,NewBind0,[]),
diff --git a/lib/stdlib/src/orddict.erl b/lib/stdlib/src/orddict.erl
index da60fc1bb6..c98d78b34d 100644
--- a/lib/stdlib/src/orddict.erl
+++ b/lib/stdlib/src/orddict.erl
@@ -56,8 +56,10 @@ to_list(Dict) -> Dict.
List :: [{Key :: term(), Value :: term()}],
Orddict :: orddict().
+from_list([]) -> [];
+from_list([{_,_}]=Pair) -> Pair;
from_list(Pairs) ->
- lists:foldl(fun ({K,V}, D) -> store(K, V, D) end, [], Pairs).
+ lists:ukeysort(1, reverse_pairs(Pairs, [])).
-spec size(Orddict) -> non_neg_integer() when
Orddict :: orddict().
@@ -235,3 +237,7 @@ merge(F, [{K1,V1}|D1], [{_K2,V2}|D2]) -> %K1 == K2
[{K1,F(K1, V1, V2)}|merge(F, D1, D2)];
merge(F, [], D2) when is_function(F, 3) -> D2;
merge(F, D1, []) when is_function(F, 3) -> D1.
+
+reverse_pairs([{_,_}=H|T], Acc) ->
+ reverse_pairs(T, [H|Acc]);
+reverse_pairs([], Acc) -> Acc.
diff --git a/lib/stdlib/src/qlc.erl b/lib/stdlib/src/qlc.erl
index 48f6622565..002032d48d 100644
--- a/lib/stdlib/src/qlc.erl
+++ b/lib/stdlib/src/qlc.erl
@@ -1266,6 +1266,8 @@ abstr_term(Fun, Line) when is_function(Fun) ->
case erl_eval:fun_data(Fun) of
{fun_data, _Bs, Cs} ->
{'fun', Line, {clauses, Cs}};
+ {named_fun_data, _Bs, Name, Cs} ->
+ {named_fun, Line, Name, Cs};
false ->
{name, Name} = erlang:fun_info(Fun, name),
{arity, Arity} = erlang:fun_info(Fun, arity),
diff --git a/lib/stdlib/src/qlc_pt.erl b/lib/stdlib/src/qlc_pt.erl
index 26bc4d1bdf..c26764eb18 100644
--- a/lib/stdlib/src/qlc_pt.erl
+++ b/lib/stdlib/src/qlc_pt.erl
@@ -2540,6 +2540,19 @@ nos({'fun',L,{clauses,Cs}}, S) ->
{clause,Ln,H,G,B}
end || {clause,Ln,H0,G0,B0} <- Cs],
{{'fun',L,{clauses,NCs}}, S};
+nos({named_fun,Loc,Name,Cs}, S) ->
+ {{var,NLoc,NName}, S1} = case Name of
+ '_' ->
+ S;
+ Name ->
+ nos_pattern({var,Loc,Name}, S)
+ end,
+ NCs = [begin
+ {H, S2} = nos_pattern(H0, S1),
+ {[G, B], _} = nos([G0, B0], S2),
+ {clause,CLoc,H,G,B}
+ end || {clause,CLoc,H0,G0,B0} <- Cs],
+ {{named_fun,NLoc,NName,NCs}, S};
nos({lc,L,E0,Qs0}, S) ->
%% QLCs as well as LCs. It is OK to modify LCs as long as they
%% occur within QLCs--the warning messages have already been found
@@ -2713,6 +2726,9 @@ var2const(E) ->
var_map(F, {var, _, _}=V) ->
F(V);
+var_map(F, {named_fun,NLoc,NName,Cs}) ->
+ {var,Loc,Name} = F({var,NLoc,NName}),
+ {named_fun,Loc,Name,var_map(F, Cs)};
var_map(F, T) when is_tuple(T) ->
list_to_tuple(var_map(F, tuple_to_list(T)));
var_map(F, [E | Es]) ->
diff --git a/lib/stdlib/src/shell.erl b/lib/stdlib/src/shell.erl
index 0d2fc47d13..3b90542452 100644
--- a/lib/stdlib/src/shell.erl
+++ b/lib/stdlib/src/shell.erl
@@ -424,6 +424,8 @@ expand_expr({remote,L,M,F}, C) ->
{remote,L,expand_expr(M, C),expand_expr(F, C)};
expand_expr({'fun',L,{clauses,Cs}}, C) ->
{'fun',L,{clauses,expand_exprs(Cs, C)}};
+expand_expr({named_fun,L,Name,Cs}, C) ->
+ {named_fun,L,Name,expand_exprs(Cs, C)};
expand_expr({clause,L,H,G,B}, C) ->
%% Could expand H and G, but then erl_eval has to be changed as well.
{clause,L,H, G, expand_exprs(B, C)};
@@ -1313,6 +1315,11 @@ list_bindings([{Name,Val}|Bs], RT) ->
F = {'fun',0,{clauses,FCs}},
M = {match,0,{var,0,Name},F},
io:fwrite(<<"~ts\n">>, [erl_pp:expr(M, enc())]);
+ {named_fun_data,_FBs,FName,FCs0} ->
+ FCs = expand_value(FCs0), % looks nicer
+ F = {named_fun,0,FName,FCs},
+ M = {match,0,{var,0,Name},F},
+ io:fwrite(<<"~ts\n">>, [erl_pp:expr(M, enc())]);
false ->
Namel = io_lib:fwrite(<<"~s = ">>, [Name]),
Nl = iolist_size(Namel)+1,
diff --git a/lib/stdlib/test/erl_eval_SUITE.erl b/lib/stdlib/test/erl_eval_SUITE.erl
index 7ceef727f1..c4b6b35e72 100644
--- a/lib/stdlib/test/erl_eval_SUITE.erl
+++ b/lib/stdlib/test/erl_eval_SUITE.erl
@@ -41,7 +41,8 @@
funs/1,
try_catch/1,
eval_expr_5/1,
- zero_width/1]).
+ zero_width/1,
+ eep37/1]).
%%
%% Define to run outside of test server
@@ -80,7 +81,8 @@ all() ->
pattern_expr, match_bin, guard_3, guard_4, lc,
simple_cases, unary_plus, apply_atom, otp_5269,
otp_6539, otp_6543, otp_6787, otp_6977, otp_7550,
- otp_8133, otp_10622, funs, try_catch, eval_expr_5, zero_width].
+ otp_8133, otp_10622, funs, try_catch, eval_expr_5, zero_width,
+ eep37].
groups() ->
[].
@@ -1401,6 +1403,27 @@ zero_width(Config) when is_list(Config) ->
"ok end.", ok),
ok.
+eep37(Config) when is_list(Config) ->
+ check(fun () -> (fun _(X) -> X end)(42) end,
+ "(fun _(X) -> X end)(42).",
+ 42),
+ check(fun () -> (fun _Id(X) -> X end)(42) end,
+ "(fun _Id(X) -> X end)(42).", 42),
+ check(fun () -> is_function((fun Self() -> Self end)(), 0) end,
+ "is_function((fun Self() -> Self end)(), 0).",
+ true),
+ check(fun () ->
+ F = fun Fact(N) when N > 0 ->
+ N * Fact(N - 1);
+ Fact(0) ->
+ 1
+ end,
+ F(6)
+ end,
+ "(fun Fact(N) when N > 0 -> N * Fact(N - 1); Fact(0) -> 1 end)(6).",
+ 720),
+ ok.
+
%% Check the string in different contexts: as is; in fun; from compiled code.
check(F, String, Result) ->
check1(F, String, Result),
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index 6bf87adf14..a71d7f3018 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -575,7 +575,7 @@ unused_vars_warn_rec(Config) when is_list(Config) ->
ok.
unused_vars_warn_fun(doc) ->
- "Warnings for unused variables in records.";
+ "Warnings for unused variables in funs.";
unused_vars_warn_fun(suite) -> [];
unused_vars_warn_fun(Config) when is_list(Config) ->
Ts = [{fun1,
@@ -643,7 +643,60 @@ unused_vars_warn_fun(Config) when is_list(Config) ->
{22,erl_lint,{unused_var,'U'}},
{24,erl_lint,{unused_var,'U'}},
{26,erl_lint,{unused_var,'U'}},
- {26,erl_lint,{shadowed_var,'U','fun'}}]}}
+ {26,erl_lint,{shadowed_var,'U','fun'}}]}},
+ {named_fun,
+ <<"u() ->
+ fun U() -> foo end, % U unused.
+ U; % U unbound.
+ u() ->
+ case foo of
+ true ->
+ U = 2;
+ false ->
+ true
+ end,
+ fun U() -> foo end, % U unused.
+ U; % U unsafe.
+ u() ->
+ case foo of
+ true ->
+ U = 2;
+ false ->
+ U = 3
+ end,
+ fun U() -> foo end, % U shadowed. U unused.
+ U;
+ u() ->
+ case foo of
+ true ->
+ U = 2; % U unused.
+ false ->
+ U = 3 % U unused.
+ end,
+ fun U() -> foo end; % U shadowed. U unused.
+ u() ->
+ fun U(U) -> foo end; % U shadowed. U unused.
+ u() ->
+ fun U(1) -> U; U(U) -> foo end; % U shadowed. U unused.
+ u() ->
+ fun _(N) -> N + 1 end. % Cover handling of '_' name.
+ ">>,
+ [warn_unused_vars],
+ {error,[{3,erl_lint,{unbound_var,'U'}},
+ {12,erl_lint,{unsafe_var,'U',{'case',5}}}],
+ [{2,erl_lint,{unused_var,'U'}},
+ {11,erl_lint,{unused_var,'U'}},
+ {20,erl_lint,{unused_var,'U'}},
+ {20,erl_lint,{shadowed_var,'U','named fun'}},
+ {25,erl_lint,{unused_var,'U'}},
+ {27,erl_lint,{unused_var,'U'}},
+ {29,erl_lint,{unused_var,'U'}},
+ {29,erl_lint,{shadowed_var,'U','named fun'}},
+ {31,erl_lint,{unused_var,'U'}},
+ {31,erl_lint,{unused_var,'U'}},
+ {31,erl_lint,{shadowed_var,'U','fun'}},
+ {33,erl_lint,{unused_var,'U'}},
+ {33,erl_lint,{shadowed_var,'U','fun'}}]}}
],
?line [] = run(Config, Ts),
ok.
@@ -2201,7 +2254,8 @@ otp_5878(Config) when is_list(Config) ->
<<"-record(r1, {t = case foo of _ -> 3 end}).
-record(r2, {a = case foo of A -> A; _ -> 3 end}).
-record(r3, {a = case foo of A -> A end}).
- t() -> {#r1{},#r2{},#r3{}}.
+ -record(r4, {a = fun _AllowedFunName() -> allowed end}).
+ t() -> {#r1{},#r2{},#r3{},#r4{}}.
">>,
[warn_unused_record],
{errors,[{2,erl_lint,{variable_in_record_def,'A'}},
diff --git a/lib/stdlib/test/erl_pp_SUITE.erl b/lib/stdlib/test/erl_pp_SUITE.erl
index 70a9d70e5c..cc744ee76b 100644
--- a/lib/stdlib/test/erl_pp_SUITE.erl
+++ b/lib/stdlib/test/erl_pp_SUITE.erl
@@ -130,7 +130,27 @@ func(Config) when is_list(Config) ->
true
end)().">>},
{func_7,
- <<"t(M, F, A) -> fun M:F/A.">>}
+ <<"t(M, F, A) -> fun M:F/A.">>},
+ {func_8,
+ <<"-record(r1, {a,b}).
+ -record(r3, {a = fun Id(_) -> #r1{} end(1), b}).
+
+ t() ->
+ fun Id(A) when record(A#r3.a, r1) -> 7 end(#r3{}).
+ ">>},
+ {func_9,
+ <<"-record(r1, {a,b}).
+ -record(r3, {a = fun Id(_) -> #r1{} end(1), b}).
+
+ t() ->
+ fsdfsdfjsdfjkljf:sdlfjdsfjlf(
+ fun Id(sdfsd) -> {sdkjsdf,sdfjsdkljfsdl,sdfkjdklf} end).
+ ">>},
+ {func_10,
+ <<"t() ->
+ (fun True() ->
+ true
+ end)().">>}
],
?line compile(Config, Ts),
ok.
@@ -158,6 +178,7 @@ recs(Config) when is_list(Config) ->
-record(r1, {a,b}).
-record(r2, {a = #r1{},b,c=length([1,2,3])}).
-record(r3, {a = fun(_) -> #r1{} end(1), b}).
+ -record(r4, {a = fun R1(_) -> #r1{} end(1), b}).
t() ->
foo = fun(A) when A#r1.a > A#r1.b -> foo end(#r1{b = 2}),
@@ -741,6 +762,7 @@ neg_indent(Config) when is_list(Config) ->
?line ok = pp_expr(<<"{[a,b,c],[d,e|f]}">>),
?line ok = pp_expr(<<"f(a,b,c)">>),
?line ok = pp_expr(<<"fun() when a,b;c,d -> a end">>),
+ ?line ok = pp_expr(<<"fun A() when a,b;c,d -> a end">>),
?line ok = pp_expr(<<"<<34:32,17:32>>">>),
?line ok = pp_expr(<<"if a,b,c -> d; e,f,g -> h,i end">>),
?line ok = pp_expr(<<"if a -> d; c -> d end">>),
@@ -763,6 +785,9 @@ neg_indent(Config) when is_list(Config) ->
Fun2 = {'fun',2,{clauses,[{clause,2,[],[],[{atom,3,true}]}]},
{0,108059557,'-t/0-fun-0-'}},
?line "fun() -> true end" = flat_expr(Fun2),
+ Fun3 = {named_fun,3,'True',[{clause,3,[],[],[{atom,3,true}]}],
+ {0,424242424,'-t/0-True-0-'}},
+ ?line "fun True() -> true end" = flat_expr(Fun3),
ok.
diff --git a/lib/stdlib/test/ms_transform_SUITE.erl b/lib/stdlib/test/ms_transform_SUITE.erl
index a17307b07b..4ec13ed472 100644
--- a/lib/stdlib/test/ms_transform_SUITE.erl
+++ b/lib/stdlib/test/ms_transform_SUITE.erl
@@ -40,6 +40,7 @@
-export([action_function/1]).
-export([warnings/1]).
-export([no_warnings/1]).
+-export([eep37/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
init_per_testcase(_Func, Config) ->
@@ -57,7 +58,7 @@ all() ->
record_index, multipass, bitsyntax, record_defaults,
andalso_orelse, float_1_function, action_function,
warnings, no_warnings, top_match, old_guards, autoimported,
- semicolon].
+ semicolon, eep37].
groups() ->
[].
@@ -806,6 +807,14 @@ action_function(Config) when is_list(Config) ->
ok.
+eep37(Config) when is_list(Config) ->
+ setup(Config),
+ [{'$1',[],['$1']}] =
+ compile_and_run(<<"F = fun _Ms() ->\n"
+ " ets:fun2ms(fun (X) -> X end)\n"
+ " end,\n"
+ "F()">>).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/stdlib/test/qlc_SUITE.erl b/lib/stdlib/test/qlc_SUITE.erl
index 5f9244b479..2846657c09 100644
--- a/lib/stdlib/test/qlc_SUITE.erl
+++ b/lib/stdlib/test/qlc_SUITE.erl
@@ -76,7 +76,9 @@
manpage/1,
- backward/1, forward/1]).
+ backward/1, forward/1,
+
+ eep37/1]).
%% Internal exports.
-export([bad_table_throw/1, bad_table_exit/1, default_table/1, bad_table/1,
@@ -132,7 +134,7 @@ groups() ->
evaluator, string_to_handle, table, process_dies, sort,
keysort, filesort, cache, cache_list, filter, info,
nested_info, lookup1, lookup2, lookup_rec, indices,
- pre_fun, skip_filters]},
+ pre_fun, skip_filters, eep37]},
{table_impls, [], [ets, dets]},
{join, [],
[join_option, join_filter, join_lookup, join_merge,
@@ -7427,6 +7429,14 @@ forward(Config) when is_list(Config) ->
?line run(Config, Ts),
ok.
+eep37(Config) when is_list(Config) ->
+ Ts = [
+ <<"H = (fun _Handle() -> qlc:q([X || X <- []]) end)(),
+ [] = qlc:eval(H)">>
+ ],
+ run(Config, Ts),
+ ok.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bad_table_throw(Tab) ->
diff --git a/lib/syntax_tools/src/erl_syntax.erl b/lib/syntax_tools/src/erl_syntax.erl
index 409805e95f..5911502960 100644
--- a/lib/syntax_tools/src/erl_syntax.erl
+++ b/lib/syntax_tools/src/erl_syntax.erl
@@ -226,6 +226,10 @@
module_qualifier/2,
module_qualifier_argument/1,
module_qualifier_body/1,
+ named_fun_expr/2,
+ named_fun_expr_arity/1,
+ named_fun_expr_clauses/1,
+ named_fun_expr_name/1,
nil/0,
operator/1,
operator_literal/1,
@@ -442,28 +446,30 @@
%% <td>match_expr</td>
%% <td>module_qualifier</td>
%% </tr><tr>
+%% <td>named_fun_expr</td>
%% <td>nil</td>
%% <td>operator</td>
%% <td>parentheses</td>
-%% <td>prefix_expr</td>
%% </tr><tr>
+%% <td>prefix_expr</td>
%% <td>receive_expr</td>
%% <td>record_access</td>
-%% </tr><tr>
%% <td>record_expr</td>
+%% </tr><tr>
%% <td>record_field</td>
%% <td>record_index_expr</td>
%% <td>rule</td>
-%% </tr><tr>
%% <td>size_qualifier</td>
+%% </tr><tr>
%% <td>string</td>
%% <td>text</td>
%% <td>try_expr</td>
-%% </tr><tr>
%% <td>tuple</td>
+%% </tr><tr>
%% <td>underscore</td>
%% <td>variable</td>
%% <td>warning_marker</td>
+%% <td></td>
%% </tr>
%% </table></center>
%%
@@ -506,6 +512,7 @@
%% @see macro/2
%% @see match_expr/2
%% @see module_qualifier/2
+%% @see named_fun_expr/1
%% @see nil/0
%% @see operator/1
%% @see parentheses/1
@@ -554,6 +561,7 @@ type(Node) ->
{'catch', _, _} -> catch_expr;
{'cond', _, _} -> cond_expr;
{'fun', _, {clauses, _}} -> fun_expr;
+ {named_fun, _, _, _} -> named_fun_expr;
{'fun', _, {function, _, _}} -> implicit_fun;
{'fun', _, {function, _, _, _}} -> implicit_fun;
{'if', _, _} -> if_expr;
@@ -5616,6 +5624,110 @@ fun_expr_arity(Node) ->
%% =====================================================================
+%% @doc Creates an abstract named fun-expression. If `Clauses' is
+%% `[C1, ..., Cn]', the result represents "<code>fun
+%% <em>Name</em> <em>C1</em>; ...; <em>Name</em> <em>Cn</em> end</code>".
+%% More exactly, if each `Ci' represents
+%% "<code>(<em>Pi1</em>, ..., <em>Pim</em>) <em>Gi</em> -> <em>Bi</em></code>",
+%% then the result represents
+%% "<code>fun <em>Name</em>(<em>P11</em>, ..., <em>P1m</em>) <em>G1</em> ->
+%% <em>B1</em>; ...; <em>Name</em>(<em>Pn1</em>, ..., <em>Pnm</em>)
+%% <em>Gn</em> -> <em>Bn</em> end</code>".
+%%
+%% @see named_fun_expr_name/1
+%% @see named_fun_expr_clauses/1
+%% @see named_fun_expr_arity/1
+
+-record(named_fun_expr, {name :: syntaxTree(), clauses :: [syntaxTree()]}).
+
+%% type(Node) = named_fun_expr
+%% data(Node) = #named_fun_expr{name :: Name, clauses :: Clauses}
+%%
+%% Name = syntaxTree()
+%% Clauses = [syntaxTree()]
+%%
+%% (See `function' for notes; e.g. why the arity is not stored.)
+%%
+%% `erl_parse' representation:
+%%
+%% {named_fun, Pos, Name, Clauses}
+%%
+%% Clauses = [Clause] \ []
+%% Clause = {clause, ...}
+%%
+%% See `clause' for documentation on `erl_parse' clauses.
+
+-spec named_fun_expr(syntaxTree(), [syntaxTree()]) -> syntaxTree().
+
+named_fun_expr(Name, Clauses) ->
+ tree(fun_expr, #named_fun_expr{name = Name, clauses = Clauses}).
+
+revert_named_fun_expr(Node) ->
+ Pos = get_pos(Node),
+ Name = named_fun_expr_name(Node),
+ Clauses = [revert_clause(C) || C <- named_fun_expr_clauses(Node)],
+ case type(Name) of
+ var ->
+ {named_fun, Pos, concrete(Name), Clauses};
+ _ ->
+ Node
+ end.
+
+
+%% =====================================================================
+%% @doc Returns the name subtree of a `named_fun_expr' node.
+%%
+%% @see named_fun_expr/2
+
+-spec named_fun_expr_name(syntaxTree()) -> syntaxTree().
+
+named_fun_expr_name(Node) ->
+ case unwrap(Node) of
+ {named_fun, Pos, Name, _} ->
+ set_pos(atom(Name), Pos);
+ Node1 ->
+ (data(Node1))#named_fun_expr.name
+ end.
+
+
+%% =====================================================================
+%% @doc Returns the list of clause subtrees of a `named_fun_expr' node.
+%%
+%% @see named_fun_expr/1
+
+-spec named_fun_expr_clauses(syntaxTree()) -> [syntaxTree()].
+
+named_fun_expr_clauses(Node) ->
+ case unwrap(Node) of
+ {named_fun, _, _, Clauses} ->
+ Clauses;
+ Node1 ->
+ (data(Node1))#named_fun_expr.clauses
+ end.
+
+
+%% =====================================================================
+%% @doc Returns the arity of a `named_fun_expr' node. The result is
+%% the number of parameter patterns in the first clause of the
+%% named fun-expression; subsequent clauses are ignored.
+%%
+%% An exception is thrown if `named_fun_expr_clauses(Node)'
+%% returns an empty list, or if the first element of that list is not a
+%% syntax tree `C' of type `clause' such that
+%% `clause_patterns(C)' is a nonempty list.
+%%
+%% @see named_fun_expr/1
+%% @see named_fun_expr_clauses/1
+%% @see clause/3
+%% @see clause_patterns/1
+
+-spec named_fun_expr_arity(syntaxTree()) -> arity().
+
+named_fun_expr_arity(Node) ->
+ length(clause_patterns(hd(named_fun_expr_clauses(Node)))).
+
+
+%% =====================================================================
%% @doc Creates an abstract parenthesised expression. The result
%% represents "<code>(<em>Body</em>)</code>", independently of the
%% context.
@@ -5978,6 +6090,8 @@ revert_root(Node) ->
revert_match_expr(Node);
module_qualifier ->
revert_module_qualifier(Node);
+ named_fun_expr ->
+ revert_named_fun_expr(Node);
nil ->
revert_nil(Node);
parentheses ->
@@ -6219,6 +6333,9 @@ subtrees(T) ->
module_qualifier ->
[[module_qualifier_argument(T)],
[module_qualifier_body(T)]];
+ named_fun_expr ->
+ [[named_fun_expr_name(T)],
+ named_fun_expr_clauses(T)];
parentheses ->
[[parentheses_body(T)]];
prefix_expr ->
@@ -6349,6 +6466,7 @@ make_tree(list_comp, [[T], B]) -> list_comp(T, B);
make_tree(macro, [[N]]) -> macro(N);
make_tree(macro, [[N], A]) -> macro(N, A);
make_tree(match_expr, [[P], [E]]) -> match_expr(P, E);
+make_tree(named_fun_expr, [[N], C]) -> named_fun_expr(N, C);
make_tree(module_qualifier, [[M], [N]]) -> module_qualifier(M, N);
make_tree(parentheses, [[E]]) -> parentheses(E);
make_tree(prefix_expr, [[F], [A]]) -> prefix_expr(F, A);
diff --git a/lib/test_server/src/ts_lib.erl b/lib/test_server/src/ts_lib.erl
index 52bb346043..9f56f59fed 100644
--- a/lib/test_server/src/ts_lib.erl
+++ b/lib/test_server/src/ts_lib.erl
@@ -145,16 +145,13 @@ suite_order(sasl) -> 16;
suite_order(tools) -> 18;
suite_order(runtime_tools) -> 19;
suite_order(parsetools) -> 20;
-suite_order(pman) -> 21;
suite_order(debugger) -> 22;
-suite_order(toolbar) -> 23;
suite_order(ic) -> 24;
suite_order(orber) -> 26;
suite_order(inets) -> 28;
suite_order(asn1) -> 30;
suite_order(os_mon) -> 32;
suite_order(snmp) -> 38;
-suite_order(mnesia_session) -> 42;
suite_order(mnesia) -> 44;
suite_order(system) -> 999; %% IMPORTANT: system SHOULD always be last!
suite_order(_) -> 200.
diff --git a/lib/toolbar/AUTHORS b/lib/toolbar/AUTHORS
deleted file mode 100644
index c5a649d938..0000000000
--- a/lib/toolbar/AUTHORS
+++ /dev/null
@@ -1,3 +0,0 @@
-Original Authors and Contributors:
-
-Gunilla Arendt \ No newline at end of file
diff --git a/lib/toolbar/Makefile b/lib/toolbar/Makefile
deleted file mode 100644
index 5326457976..0000000000
--- a/lib/toolbar/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2009. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Common Macros
-# ----------------------------------------------------
-
-SUB_DIRECTORIES = src doc/src
-
-include vsn.mk
-VSN = $(TOOLBAR_VSN)
-
-SPECIAL_TARGETS =
-
-# ----------------------------------------------------
-# Default Subdir Targets
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_subdir.mk
diff --git a/lib/toolbar/doc/html/.gitignore b/lib/toolbar/doc/html/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/toolbar/doc/html/.gitignore
+++ /dev/null
diff --git a/lib/toolbar/doc/man3/.gitignore b/lib/toolbar/doc/man3/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/toolbar/doc/man3/.gitignore
+++ /dev/null
diff --git a/lib/toolbar/doc/pdf/.gitignore b/lib/toolbar/doc/pdf/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/toolbar/doc/pdf/.gitignore
+++ /dev/null
diff --git a/lib/toolbar/doc/src/Makefile b/lib/toolbar/doc/src/Makefile
deleted file mode 100644
index 2239421556..0000000000
--- a/lib/toolbar/doc/src/Makefile
+++ /dev/null
@@ -1,115 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../../vsn.mk
-VSN=$(TOOLBAR_VSN)
-APPLICATION=toolbar
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-XML_APPLICATION_FILES = ref_man.xml
-XML_REF3_FILES = toolbar.xml
-
-XML_PART_FILES = part.xml part_notes.xml
-XML_CHAPTER_FILES = toolbar_chapter.xml notes.xml
-
-BOOK_FILES = book.xml
-
-XML_FILES = \
- $(BOOK_FILES) $(XML_CHAPTER_FILES) \
- $(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES)
-
-GIF_FILES = \
- bar.gif \
- create_tool.gif \
- note.gif
-
-# ----------------------------------------------------
-
-HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
-
-INFO_FILE = ../../info
-
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-DVIPS_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-$(HTMLDIR)/%.gif: %.gif
- $(INSTALL_DATA) $< $@
-
-docs: pdf html man
-
-$(TOP_PDF_FILE): $(XML_FILES)
-
-pdf: $(TOP_PDF_FILE)
-
-html: gifs $(HTML_REF_MAN_FILE)
-
-man: $(MAN3_FILES)
-
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
-
-debug opt:
-
-clean clean_docs:
- rm -rf $(HTMLDIR)/*
- rm -f $(MAN3DIR)/*
- rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
- rm -f errs core *~
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_docs_spec: docs
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(HTMLDIR)/* \
- "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
- $(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
-
-release_spec:
-
diff --git a/lib/toolbar/doc/src/bar.gif b/lib/toolbar/doc/src/bar.gif
deleted file mode 100644
index c249d891dd..0000000000
--- a/lib/toolbar/doc/src/bar.gif
+++ /dev/null
Binary files differ
diff --git a/lib/toolbar/doc/src/bar.ps b/lib/toolbar/doc/src/bar.ps
deleted file mode 100644
index 850ebdbee5..0000000000
--- a/lib/toolbar/doc/src/bar.ps
+++ /dev/null
@@ -1,846 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: /home/kent/otp/toolbar/doc/bar.ps
-%%Creator: XV Version 3.10a Rev: 12/29/94 - by John Bradley
-%%BoundingBox: 165 346 447 446
-%%Pages: 1
-%%DocumentFonts:
-%%EndComments
-%%EndProlog
-
-%%Page: 1 1
-
-% remember original state
-/origstate save def
-
-% build a temporary dictionary
-20 dict begin
-
-% define string to hold a scanline's worth of data
-/pix 282 string def
-
-% define space for color conversions
-/grays 282 string def % space for gray scale line
-/npixls 0 def
-/rgbindx 0 def
-
-% lower left corner
-165 346 translate
-
-% size of image (on paper, in 1/72inch coords)
-282.02400 100.00800 scale
-
-282 100 8 % dimensions of data
-[282 0 0 -100 0 100] % mapping matrix
-{currentfile pix readhexstring pop}
-image
-
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c000
-c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-14141414141414141414141414141414141414141414141414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-14141414141414141414141414141414141414141414141414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffffffffffffffffffffffffffffff00ffffffffffffffffffffff
-ffffffff001414ffffffffffffffffffffffffffffff001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0
-c0c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141457575757571414141414141457141414141414ffffffffffff1414
-14141414ffff1414141414141414141414141414141414141414141414141414ffffffff
-ffffffff1414141414141414141414141414ffff14141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c00000000000000000
-00c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414575757575714141414145714141414141414ffff141414141414
-14141414ffff1414141414141414141414141414141414141414141414141414141414ff
-ff1414141414141414141414141414141414ffff14141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c00000000000000000
-00c0c073001414ffc0c0c00000c0c0c0c00000c0c073001414c0c0c07300
-c0ffc0c0c01414141414145757575757141414571414141414141414ffff1414141414ff
-ff14ffffffff1414ffffffff1414ffff14ffff141414ffff14ffff1414141414141414ff
-ff14141414ffffffff141414ffffffff1414ffff1414ffffffff14141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c0c00000c0c00000c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141457575757571457141414141414141414ffff1414141414ff
-ffffffffffff14ffff1414ffff14ffffff14ffff14ffff14ffffff1414141414141414ff
-ff141414ffff1414ffff14ffff1414ffff14ffff14ffff1414ffff141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c0c0c000000000c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414575757145714141414141414141414ffffffffffff14ff
-ffff1414ffff1414141414ffff14ffff1414ffff14ffff1414ffff1414141414141414ff
-ff141414ffff1414ffff14ffff1414ffff14ffff14ffffff141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c0c0c0c00000c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414145714575757141414141414141414ffff1414141414ff
-ff141414ffff1414ffffffffff14ffff1414ffff14ffff1414ffff1414141414141414ff
-ff141414ffff1414ffff14ffff1414ffff14ffff141414ffffff14141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c0c0c000000000c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414571457575757571414141414141414ffff1414141414ff
-ff141414ffff14ffff1414ffff14ffff1414ffff14ffff1414ffff1414141414141414ff
-ff141414ffff1414ffff14ffff1414ffff14ffff14141414ffffff141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c0c00000c0c00000c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141457141414575757575714141414141414ffff1414141414ff
-ff141414ffff14ffff1414ffff14ffff1414ffff14ffff14ffffff1414141414141414ff
-ff141414ffff1414ffff14ffff1414ffff14ffff14ffff1414ffff141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0000000000000c0c0c0c07300ffc0c000c0c0c0c0c0c0c0
-00c0c073001414ffc0c0c00000c0c0c0c00000c0c073001414c0c0c07300
-c0ffc0c0c01414141414145714141414145757575757141414141414ffffffffffff14ff
-ff141414ffff1414ffffff14ffffffff1414ffff1414ffff14ffff1414141414141414ff
-ff14141414ffffffff141414ffffffff1414ffff1414ffffffff14141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0000000000000c0c0c0c07300ffc0c00000000000000000
-00c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c014141414145714141414141414575757575714141414141414141414141414
-14141414141414141414141414141414141414141414141414ffff141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0
-c0c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414ffff1414ffff141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414ff737373737373737373737373737300ff73737373737373737373
-73737373001414ff7373737373737373737373737373001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-14141414141414141414141414141414141414141414ffffffff14141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414000000000000000000000000000000000000000000000000000000
-00000000001414000000000000000000000000000000001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-14141414141414141414141414141414141414141414141414c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffc0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffff82c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d90000000000d9d9d9d9d900d9d9d9d9000000d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9000000d9d9d9d9d9d900d9d9d9d90000
-00d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9000000d9d9d9d9000000d9d9d9d9d9d9
-00d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-000000d9d9d9d9d9d900d9d9d900d90000d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9
-d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-00d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900
-d9d9d900d9d9d9d9d900d9d9d90000d9d900d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900000000d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9
-d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-00d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d900
-d9d9d900d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9000000
-0000d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-00d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900
-00000000d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900
-d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9
-d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-00d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900
-d9d9d900d9d9d9d9d900d9d9d90000d9d900d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9d90000
-00d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9000000d9d9d9d9000000d9d9d9d9d9d9
-00d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-000000d9d9d9d9d9d900d9d9d900d90000d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282c0c0c07300
-c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffff57c0c0c07300
-c0ffc0c0c0ffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d957c0c0c07300
-c0ffc0c0c0ffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d957c0c0c07300
-c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9dbbdd0dbd9d9d9d9d9d9d9dec7a9ded9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d7d7d7474747474747474727272747474747474747474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d95757bebebebe
-bebebebebebebebebebebebebebebebebebebebebe5757d957c0c0c07300
-c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9dcd0a9dadad9dbdbd9d9dcd0a9d0dcd9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d7d747474747472727272727272727272747474747474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9575757bebebe
-bebebebebebebebebebebebebebebebebebebebe575757d957c0c0c07300
-c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9dad0c3bdb3dadcd4d5dbdbc7b3d0e1d5d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebe000000000000000000bebebebebebebebebebed9ffff
-d9d9bebebebebed7d7d7bebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d74747474727272727272727272777777727274747474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9be575757bebe
-bebebebebebebebebebebebebebebebebebebe57575757d957c0c0c07300
-c0ffc0c0c0ffd9d9bebebe000000000000000000000000000000000000007dbebebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9dcc79ce1bda9bd6f60a9bdbddbe5a9a9d0dad5d4d4d4d9
-ffffd9d9bebebebebebebebebebe007f7f7f7f7f7f7f00bebebebebebebebebebed9ffff
-d9d9bebebebed7d7d7d7d7bebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d747474727272727272727277779e769e777772727474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9bebe575757be
-bebebebebebebebebebebebebebebebebebe57575757bed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9dbd083bde5bd8f536f9cc3dedea96fa9bddcd5d4d4d4d9
-ffffd9d9bebebebebebebebebebe007f7f7f7f7f7f7f00bebebebebebebebebebed9ffff
-d9d9bebebed7d7d7d7d7d7d7bebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d7d
-7d747472727272727272727777779e9e7695897777727274747474d9ffffd9d9bebebebe
-000000000000bebebebebebebebebe000000000000bebebebed9ffffd9d9bebebe575757
-bebebebebe00000000000000bebebebebe57575757bebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00000000000000000000000000000000007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9e1b379ded6831f6083d0e58379deded9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebe000000000000000000bebebebebebebebebebed9ffff
-d9d9bebebed7d7d7d7d7d7d7bebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7d7472727272727272727777779e9e7697a6829e77777272747474d9ffffd9d9bebebebe
-002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebe5757
-57bebebe0000ffffffffff000000bebe57575757bebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9dcd03cc3d948531f3cdcda60c3ded9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebe00bebebebebebebebebebebebebebed9ffff
-d9d9bebebed7d7d7d7d7d7d7bebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7474727272727272727777777789899d00008d899e777272727474d9ffffd9d9bebebebe
-002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebebe57
-5757be0000ffffffffffffffff00be57575757bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9d9ea79a99c489c3c11a99c83e5d9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebe00bebebebebebebebebebebebebebed9ffff
-d9d9bebebebed7d7d7d7d7bebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7472727272727272777777897f8d7f7f40007f9782827772727274d9ffffd9d9bebebebe
-002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebebebe
-57575700ffffffffffffffffffff57575757bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9d9e1a9606f1f532a116f48bdded9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebe00000000000000000000000000000000bebebebebebebed9ffff
-d9d9bebebebebed7d7d7bebebebebebebebebebebebed7d7d7bebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7272727272727277779e9e897f005600000000007f959e72727274d9ffffd9d9bebebebe
-002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebebebe
-be575757ffff00ffffffff00ff57575700bebebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9d9d9ea9c3648362a1148d0ded9d9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebe00bebebebebebebebebebebebebebe00bebebebebebebed9ffff
-d9d9bebebebebebebe00bebebebebebebebebebebed7d7d7d7d7bebebebebed9ffffd9d9
-bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d74
-727272727272779e9e9e8976970000000000000000009e77727272d9ffffd9d9bebebebe
-000000000000bebebebe0000000000000000000000bebebebed9ffffd9d9bebebebebebe
-0000575757ffff00ffff00ff575757000000bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9dae5a9534883363c1f1fb3dedcd9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebe00bebebebebebebebebebebebebebe00bebebebebebebed9ffff
-d9d9bebebebebebebe00bebebebebebebebebebed7d7d7d7d7d7d7bebebebed9ffffd9d9
-bebebebe00515151510051ffff510051000051005151515100bebebebed9ffffd9d97d72
-727272779e8982828282827d000000000000000000008977727272d9ffffd9d9bebebebe
-007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebebe
-000000575757ffffffffff57575700000000bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9e59c36606083603c2a1f5379dbdbd9d9d9d5d4d4d4d9
-ffffd9d9bebe000000000000000000bebebebebebe000000000000000000bebebed9ffff
-d9d9bebebebebebebebe00bebebebebebebebebed7d7d7d7d7d7d7bebebebed9ffffd9d9
-bebebebe005151515100ffffffff0000000000005151515100bebebebed9ffffd9d97d72
-727777779e893197958d8d89000000000000000000008977727272d9ffffd9d9bebebebe
-007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebebe
-00ff0000575757000000575757000000ff00bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9d9e1a953bd79608f8348302ab34879dedad9d9d5d4d4d4d9
-ffffd9d9bebe005757575757575700bebebebebebe007f7f7f7f7f7f7f00bebebed9ffff
-d9d9bebebebebebebebe00bebebebebebebebebed7d7d7d7d7d7d7bebebebed9ffffd9d9
-bebebebe005151515100ffffffff0000000000005151515100bebebebed9ffffd9d97d72
-7777779e9e823800006e7f00000000000000000000008977727272d9ffffd9d9bebebebe
-007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebe00
-ffff00000057575700575757000000ffffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9dbdb53b3ea6f798f7930301fd4a92ad0dcd9d9d5d4d4d4d9
-ffffd9d9bebe005757575757575700bebebebebebe007f7f7f7f7f7f7f00bebebed9ffff
-d9d9bebebebebebebebebe00bebebebebebebebebed7d7d7d7d7bebebebebed9ffffd9d9
-bebebebe00515151510051ffff510051000051005151515100bebebebed9ffffd9d97d77
-77778989567f000000000000000000000000000000009e77727272d9ffffd9d9bebebebe
-007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebe00
-ffffff000000575757575700000000ffffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4d9e1a99cdee58f6f9c6f303c1fb3e560bde1d9d9d5d4d4d4d9
-ffffd9d9bebe000000000000000000bebebebebebe000000000000000000bebebed9ffff
-d9d9bebebebebebebebebe00bebebebebebebebebe00d7d7d7bebebebebebed9ffffd9d9
-bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d9e
-8282768d9500000000000000000000000000000000899e77777272d9ffffd9d9bebebebe
-000000000000000000000000000000000000000000bebebebed9ffffd9d9bebebebebe00
-ffffffff00000057575700000000ffffffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d4dbd06fd4e19c48608f532a3630bdeaa953d0ded9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebe00bebebebebebebed9ffff
-d9d9bebebebebebebebebebe00bebebebebebebe00bebebebebebebebebebed9ffffd9d9
-bebebebe005151515100510000510051ffff51005151515100bebebebed9ffffd9d97d9e
-8282768d9500000000000000000000000000000000899e77777272d9ffffd9d9bebebebe
-005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00
-ffffffffff0057575757570000ffffffffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d00000000000000000000000000000000007d007dbebebebe
-bed9ffffd9d9d4d4d4d4d5de6f79ea9c112a606f6f3c11116fc7ea606fdad9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebe00bebebebebebebed9ffff
-d9d9bebebebebebebebebebe00bebebebebebe00bebebebebebebebebebebed9ffffd9d9
-bebebebe0051515151000000000000ffffffff005151515100bebebebed9ffffd9d97d77
-77778989567f000000000000000000000000000000009e77727272d9ffffd9d9bebebebe
-005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00
-ffff00ffffff575700575757ffffff00ffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebe007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d007dbebebebe
-bed9ffffd9d9d4d4d4d4d6d053c7c71f1f3c484848361f034860a9d57983d9d6d4d4d4d9
-ffffd9d9bebebebebebebebebe00000000000000000000000000bebebebebebebed9ffff
-d9d9bebebebebebebebebebebe00bebebebebe00bebebebebebebebebebebed9ffffd9d9
-bebebebe0051515151000000000000ffffffff005151515100bebebebed9ffffd9d97d72
-7777779e9e823800006e7f00000000000000000000008977727272d9ffffd9d9bebebebe
-005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00
-ffff00ffff570057ffff575757ffff00ffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9bebebe000000000000000000000000000000000000007d7d7dbebebe
-bed9ffffd9d9d4d4d4d4d6d0a9da601130363648111f111160303cc7d09cd4d6d4d4d4d9
-ffffd9d9bebebebebebebebebe00bebebebebebebebebebebe00bebebebebebebed9ffff
-d9d9bebebebebebebebebebebe00be7f7f7f00bebebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100510000510051ffff51005151515100bebebebed9ffffd9d97d72
-727777779e893197958d8d89000000000000000000008977727272d9ffffd9d9bebebebe
-005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00
-ffff000057005700ffff005757570000ffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be00000000000000000000000000000000000000000000007dbebebe
-bed9ffffd9d9d4d4d4d4d4d9e5bd111f489c1f2a11030330bd79366fe5dedad5d4d4d4d9
-ffffd9d9bebebebebe000000000000000000bebebe000000000000000000bebebed9ffff
-d9d9bebebebebebebebebebebebe7f7f7f7f7fbebebebebebebebebebebebed9ffffd9d9
-bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d72
-727272779e8982828282827d000000000000000000008977727272d9ffffd9d9bebebebe
-000000000000000000000000000000000000000000bebebebed9ffffd9d9bebebebebebe
-00ffff570057ff0000000000575757ffffff00bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d007dbebe
-bed9ffffd9d9d4d4d4d4d4d9e58f0379d6d653111f11116fead41f83e5dad9d5d4d4d4d9
-ffffd9d9bebebebebe007f7f7f7f7f7f7f00bebebe005757575757575700bebebed9ffff
-d9d9bebebebebebebebebebebe7f7f7f7f7f7f7fbebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d74
-727272727272779e9e9e8976970000000000000000009e77727272d9ffffd9d9bebebebe
-00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebebe
-00ff5757570000000000000000575757ff00bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d7d007d007d007d007d007d007d007d007d007d7d007d7dbebe
-bed9ffffd9d9d4d4d4d4d4d9e57903c7e5e5831103032ac3ea8f48d0dcd9d9d5d4d4d4d9
-ffffd9d9bebebebebe007f7f7f7f7f7f7f00bebebe005757575757575700bebebed9ffff
-d9d9bebebebebebebebebebebe7f7f7f7f7f7f7fbebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7272727272727277779e9e897f005600000000007f959e72727274d9ffffd9d9bebebebe
-00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebebe
-be57575700000000000000000000575757bebebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d00be00be00be00be00be00be00be00be00be007d007d7dbebe
-bed9ffffd9d9d4d4d4d4d4d9debd2a60dee1d060112a9ceac3368fe5d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebe000000000000000000bebebe000000000000000000bebebed9ffff
-d9d9bebebebebebebebebebebe7f7f7f7f7f7f7fbebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7472727272727272777777897f8d7f7f40007f9782827772727274d9ffffd9d9bebebebe
-00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebebe
-57575700ff0000ff0000ff0000ffff575757bebebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d7d007d007d007d007d007d007d007d007d007d7d00007dbebe
-bed9ffffd9d9d4d4d4d4d4d9d9e1c34860d9e5d6a9c3e5c7481fd0ded9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebe7f7f7f7f7fbebebebebebebebebebebebed9ffffd9d9
-bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d
-7474727272727272727777777789899d00008d899e777272727474d9ffffd9d9bebebebe
-00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebe57
-5757be0000ffffffffffffffffff00be575757bebebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d0000bebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9e1d65360d4e1deded453308fe1d9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebe7f7f7fbebebebebebebebebebebebebed9ffffd9d9
-bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d7d
-7d7472727272727272727777779e9e7697a6829e77777272747474d9ffffd9d9bebebebe
-000000000000000000000000000000000000000000bebebebed9ffffd9d9bebebebe5757
-57bebebe00ffffffffffffff0000bebebe575757bebebed957c0c0c07300
-c0ffc0c0c0ffd9d9be007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d0000bebe
-bed9ffffd9d9d4d4d4d4d4d9d9d9d9dee13c60d9dbdebd7960d0dcd9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d747472727272727272727777779e9e7695897777727274747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9bebebe575757
-bebebebebe00000000000000bebebebebebe575757bebed957c0c0c07300
-c0ffc0c0c0ffd9d9be0000000000000000000000000000000000000000000000007dbebe
-bed9ffffd9d9d4d4d4d4d4d9d9dadee19c2a8fc7dcd9dcde83bde1d9d9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d747474727272727272727277779e769e777772727474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9bebe575757be
-bebebebebebebebebebebebebebebebebebebe575757bed957c0c0c07300
-c0ffc0c0c0ffd9d9bebebe7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7dbebe
-bed9ffffd9d9d4d4d4d4d4d9dad0bd9c9cb3dedbd9d9d9dbd083c3dcd9d9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d74747474727272727272727272777777727274747474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9be575757bebe
-bebebebebebebebebebebebebebebebebebebebe575757d957c0c0c07300
-c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe
-bed9ffffd9d9d4d4d4d4d4d9dbd09ca9e5e1dad9d9d9d9d9debda9d6dad9d9d5d4d4d4d9
-ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff
-d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9
-bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d
-7d7d7d747474747472727272727272727272747474747474747474d9ffffd9d9bebebebe
-bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9575757bebebe
-bebebebebebebebebebebebebebebebebebebebebe5757d957c0c0c07300
-c0ffc0c0c0ffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d957c0c0c07300
-c0ffc0c0c057575757575757575757575757575757575757575757575757575757575757
-5757ff575757575757575757575757575757575757575757575757575757575757575757
-ff575757575757575757575757575757575757575757575757575757575757575757ff57
-5757575757575757575757575757575757575757575757575757575757575757ff575757
-575757575757575757575757575757575757575757575757575757575757ff5757575757
-57575757575757575757575757575757575757575757575757575757ff57575757575757
-5757575757575757575757575757575757575757575757575757ff575757575757575757
-57575757575757575757575757575757575757575757575757c0c0c07300
-c0ffc0c0c0bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf
-bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfc0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300
-c07373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737300
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000
-
-showpage
-
-% stop using temporary dictionary
-end
-
-% restore original state
-origstate restore
-
-%%Trailer
diff --git a/lib/toolbar/doc/src/book.xml b/lib/toolbar/doc/src/book.xml
deleted file mode 100644
index e5584cf925..0000000000
--- a/lib/toolbar/doc/src/book.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE book SYSTEM "book.dtd">
-
-<book xmlns:xi="http://www.w3.org/2001/XInclude">>
- <header titlestyle="normal">
- <copyright>
- <year>1997</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Toolbar</title>
- <prepared>Joakim Greben&ouml;</prepared>
- <docno></docno>
- <date>1997-05-02</date>
- <rev>1.0.2</rev>
- <file>book.sgml</file>
- </header>
- <insidecover>
- </insidecover>
- <pagetext>Toolbar</pagetext>
- <preamble>
- <contents level="2"></contents>
- </preamble>
- <parts lift="no">
- <xi:include href="part.xml"/>
- </parts>
- <applications>
- <xi:include href="ref_man.xml"/>
- </applications>
- <releasenotes>
- <xi:include href="notes.xml"/>
- </releasenotes>
- <listofterms></listofterms>
- <index></index>
-</book>
-
diff --git a/lib/toolbar/doc/src/create_tool.gif b/lib/toolbar/doc/src/create_tool.gif
deleted file mode 100644
index b55bb809d3..0000000000
--- a/lib/toolbar/doc/src/create_tool.gif
+++ /dev/null
Binary files differ
diff --git a/lib/toolbar/doc/src/create_tool.ps b/lib/toolbar/doc/src/create_tool.ps
deleted file mode 100644
index 8d6961bb9f..0000000000
--- a/lib/toolbar/doc/src/create_tool.ps
+++ /dev/null
@@ -1,5050 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: /home/kent/otp/toolbar/doc/create_tool.ps
-%%Creator: XV Version 3.10a Rev: 12/29/94 - by John Bradley
-%%BoundingBox: 165 29 575 446
-%%Pages: 1
-%%DocumentFonts:
-%%EndComments
-%%EndProlog
-
-%%Page: 1 1
-
-% remember original state
-/origstate save def
-
-% build a temporary dictionary
-20 dict begin
-
-% define string to hold a scanline's worth of data
-/pix 410 string def
-
-% define space for color conversions
-/grays 410 string def % space for gray scale line
-/npixls 0 def
-/rgbindx 0 def
-
-% lower left corner
-165 29 translate
-
-% size of image (on paper, in 1/72inch coords)
-409.96800 417.02400 scale
-
-410 417 8 % dimensions of data
-[410 0 0 -417 0 417] % mapping matrix
-{currentfile pix readhexstring pop}
-image
-
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c000
-c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffff7300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffffffffffffff
-ffffffffffffffff00ffffffffffffffffffffffffffffff001414ffffffffffffffffff
-ffffffffffff001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414ffc0c0c0c0c0c0c0c0
-c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c014141414575757575714141414141414571414141414141414ffffffff1414
-14141414141414141414141414141414141414ffff14141414141414141414141414ffff
-ffffffffffff1414141414141414141414141414ffff141414141414ffffffffffffffff
-14ffff141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c0000000000000000000c0c073001414ffc0c0c0c0c0c0c0c0
-c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c0141414141457575757571414141414571414141414141414ffff1414ffff14
-14141414141414141414141414141414141414ffff141414141414141414141414141414
-14ffff1414141414141414141414141414141414ffff141414141414ffff141414141414
-14ffff141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c0000000000000000000c0c073001414ffc0c0c00000c0c0c0
-c00000c0c073001414c0c0c07300
-c0ffc0c0c01414141414145757575757141414571414141414141414ffff1414141414ff
-ff14ffff14ffffffff141414ffffffff1414ffffffff1414ffffffff1414141414141414
-14ffff14141414ffffffff141414ffffffff1414ffff141414141414ffff14141414ffff
-14ffff1414ffffffff141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c00000c0c0
-0000c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141457575757571457141414141414141414ffff1414141414ff
-ffffffffffff1414ffff14ffff1414ffff1414ffff1414ffff1414ffff14141414141414
-14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff
-14ffff14ffff1414ffff1414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c0c0000000
-00c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414575757145714141414141414141414ffff1414141414ff
-ffff1414ffff1414ffff1414141414ffff1414ffff1414ffff1414ffff14141414141414
-14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffffffffff14ffff
-14ffff14ffff1414ffff1414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c0c0c00000
-c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414145714575757141414141414141414ffff1414141414ff
-ff141414ffffffffffff1414ffffffffff1414ffff1414ffffffffffff14141414141414
-14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff
-14ffff14ffffffffffff1414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c0c0000000
-00c0c0c0c073001414c0c0c07300
-c0ffc0c0c01414141414141414571457575757571414141414141414ffff1414141414ff
-ff141414ffff1414141414ffff1414ffff1414ffff1414ffff1414141414141414141414
-14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff
-14ffff14ffff141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c00000c0c0
-0000c0c0c073001414c0c0c07300
-c0ffc0c0c0141414141414145714141457575757571414141414141414ffff1414ffffff
-ff141414ffff1414ffff14ffff1414ffff1414ffff14ffffff1414ffff14141414141414
-14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff
-14ffff14ffff1414ffff1414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0000000
-000000c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c00000c0c0c0
-c00000c0c073001414c0c0c07300
-c0ffc0c0c014141414141457141414141457575757571414141414141414ffffffff14ff
-ff14141414ffffffff141414ffffff14ffff1414ffff1414ffffffff1414141414141414
-14ffff14141414ffffffff141414ffffffff1414ffff141414141414ffff14141414ffff
-14ffff1414ffffffff141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0000000
-000000c0c0c0c07300ffc0c0000000000000000000c0c073001414ffc0c0c0c0c0c0c0c0
-c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c014141414145714141414141414575757575714141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0
-c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414ffc0c0c0c0c0c0c0c0
-c0c0c0c0c073001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-1414141414141414141414141414141414141414141414141414141414ff737373737373
-737373737373737300ff7373737373737373737373737373001414ff7373737373737373
-737373737373001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141400000000000000
-000000000000000000000000000000000000000000000000001414000000000000000000
-000000000000001414c0c0c07300
-c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414141414141414141414141414141414141414141414141414141414
-141414141414141414c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffc0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffff82c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282828282828282828282828282828282828282828282828282828282d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282ffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9
-d9d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-000000d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d900d90000d9d9d9d900
-0000d9d9d90000d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d9d9000000d9d9d900d90000d9d9d9
-d9000000d9d9d9d9d9d900d9d9d90000d900d9d9d900d9d9d900d9d90000000000d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d90000000000d9d9d900
-0000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d90000d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d900d9d9d9d900d9d9d900d9d90000d9d900d9d9
-00d9d9d900d9d9d9d900d9d9d9d900d900d900d9d900d9d9d900d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900000000d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d900d9d9d9d900d9d9d9d9d9d900d9d9d9d9d9d9
-00d9d9d9d9d9d9d9d900d9d9d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d90000000000d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-000000d9d900d900d900d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d900d9d9d9d9d9d9000000d9d9d900d9d9d9d9d9d9
-00d9d9d9d9d9d9d900d9d9d9d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d900d9d9d9d9d9d9d9d9d900d9d900d9d9d9d9d9d9
-00d9d9d9d9d9d9d900d9d9d9d9d900d900d900d9d9d9d900d900d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d900d9d9d9d9d9d900d9d9d900d9d900d9d9d9d9d9d9
-00d9d9d900d9d900d9d9d9d9d9d900d900d900d9d9d9d90000d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d90000d9d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-000000d9d900d900d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d900d9d9d9d9d9d9d9000000d9d9d900d9d9d9d9d9d9
-d9000000d9d9d900d9d9d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d90000d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d90000d9d9d9d9d9d90000d9d9d900
-0000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffc0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffff82c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282828282828282828282828282828282828282828282828282828282d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282ffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d90000d9d9d9d900
-0000d9d9d90000d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9
-d9000000d9d9d900d9d9d900d9d900d90000d9d9d9d9d9d9d9d9d9d90000000000d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d90000d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d90000d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9
-00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-000000d9d900d900d900d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9
-00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d900d900d9d9d9d9d9d9d9d9d9
-00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9
-d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9
-00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-000000d9d900d900d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9000000d9d9d9d900d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d90000d9d9d9
-000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282d9d9
-d9d982828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282ffd9d9
-d9d982828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282ffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d90000000000d9d9d900
-0000d9d9d900d90000d9d9d90000000000d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9000000d9d9d900d90000d9d9d90000000000d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d90000d900d9d9d900d9d9d900d9d90000000000d9d9d9000000d9d9d9d900
-0000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d900d9d9d9d900d9
-d9d900d9d90000d9d900d9d9d9d900d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d90000d9d900d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d900d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000d9d9d9d9d900d9d9d9d9d9d9
-d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d9d9d900
-000000d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d9d9d900d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9
-d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d9d9d90000d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d90000d9d9d900
-000000d9d900d9d9d9d9d9d9d9d9d90000d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d90000d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d900d900d900d9d9d9d9d900d9d9d9d9d9d90000d9d9d9000000d9d9d9d900
-0000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9
-d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9d9
-d9d98282ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9d9
-d9d982ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828200
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282ff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000d9d9d9d9
-d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-000000d9d9d9d9000000d9d9d900d90000d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d900
-0000d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d90000828200000000d900d9d9d900d9d9d900d9d90000000000d9d9
-d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d90000d900d9d9d9
-000000d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d90000d9d900d9d9d9d9d9d9d9d9d90000000000d9d9d9d9
-d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d900d9d9d900d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d90000d9d9d9
-d9d900d9d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d900d9d900d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d900d9d9d9d9d9d900d9d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d900d9d900d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d900d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d9d900d900d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900
-d9d9d900d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d9d90000d9d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d90000d9d9d900d9d90000d9d9d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9
-000000d9d9d9d9000000d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9
-d900d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d9d9d900d9d9d9d9d9d90000d9d9
-d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d90000d9d9d9d90000d900d9d9d9
-d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900008282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000082ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282828282828282828282828282828282828282828282828282828282d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282ffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d90000d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d90000d9d90000d9d9d9000000d9d9d9d9000000d9d9d9d9000000d9d9d9d900
-0000d9d9d9d90000d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9000000d9d9d900d90000d9d9d9d9000000d9d9d90000000000d9d9d9
-d9d9d9d9d9d90000000000d9d9d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d90000d9d90000d9d900d9d9d900d9d900d9d9d900d9d900d9d9d900d9d900d9
-d9d900d9d900d9d90000d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9
-0000000000d9d9d9d9d900d9d9d90000d9d900d9d900d9d9d900d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d90000d900d9d900d9d9d900d9d900d9d9d9d9d9d900d9d9d9d9d9d9d9d9
-d9d900d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d90000d900d9d90000000000d9d9d9000000d9d9d9d9000000d9d9d9d900
-000000d9d900d9d9d900d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9000000d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d900d9
-d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d900d900d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d9d900d9d900d9d9d900d9d900d9d9d900d9d900d9d9d900d9d900d9
-d9d900d9d900d9d90000d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d9d900d9d9d9000000d9d9d9d9000000d9d9d9d9000000d9d9d9d900
-000000d9d9d90000d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9000000d9d9d9d9d9d90000d9d9d9
-d9d9d9d9d9d9d9d9d90000d9d9d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9
-00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282828282828282828282828282828282828282828282828282828282d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282828282828282828282828282828282828282ffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d90000
-000000d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9
-d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d900d9d9d9d9d9d9d9
-d900d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d900d9d9d9d9d900d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9
-d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9
-d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9
-d900d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9
-d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d90000d9d90000d9d900d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9
-d90000d900d9d9d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d900d90000d9d9d900
-00000000d9d90000d900d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9d9000000d9d9d900d9
-0000d9d9d9d90000d900d9d9d9000000d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d900
-00d9d9d90000000000d9d90000d900d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d90000d9d90000d9d900d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-00d9d90000d9d900d9d9d900d9d900d9d9d900d9d9d9d900d9d9d9d90000d9d900d9d9d9
-d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d900d9d9d90000
-d9d900d9d900d9d90000d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d90000d9
-d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9d9
-00d9d9d900d90000d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d9d9
-d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d900d9d9d900d9
-d9d900d9d900d9d9d900d9d900d9d9d900d9d9d900d900d9d9d9d9d9d9d9d9d9d900d9d9
-d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d900d90000d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d900d9d9d9d9d900d9d9d900d9d9d9
-d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d900d9d9d900d9
-d9d900d9d900d9d9d900d9d90000000000d9d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9
-d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9
-00d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d900d9d9d9d9d900d9d9d900d9d9d9
-d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d900d9d9d900d9
-d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d900d9d9
-d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d90000d9d9d9d9d90000d9d9d900d9d9d9d9d9d9
-00d9d90000d9d900d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d900d9d9d900d9d9d9
-d900d9d9d9d900d900d900d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9
-d9d900d9d900d9d90000d9d900d9d9d900d9d900d9d9d900d9d9d9d90000d9d9d900d9d9
-d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9
-00d9d9d900d9d9d9d900d9d90000000000d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d90000d9d9d9d9d90000d9d9d900d9d9d9d9d9d9
-d90000d900d9d9d9000000d9d9d9d9000000d9d9d900d9d9d9d9d9d900d9d9d900d9d9d9
-d9d90000d9d900d900d900d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9
-d9d900d9d9d90000d900d9d9d9000000d9d9d900d9d9d900d9d9d9d90000d9d9d900d9d9
-d900d9d9d9d9d90000d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffc0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffff82c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffff82d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffff82d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff82d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9000000d9d9d9d9000000d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9000000d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d9d9000000d9
-d9d9d9000000d9d9d900d90000d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9000000d9d9d900d9d9d900d9d9d900
-0000d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d900d9d9d9d9d9d90000000000d9d9d9000000d9d9d900d90000d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-d9d900d9d9d900d9d90000d9d900d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d900d9d9d9d9d900d9d9d900d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d900d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d90000d9d900d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900
-d9d9d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d900d9d900d9d9d900d9d900d9
-d9d900d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d90000d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d90000000000
-d9d9d900000000d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900000000d9d9d900d900d9d9d90000
-000000d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d900d9d9d9d9
-d9d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d900d900d9d9d900d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d900d9d9d900
-d9d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d900d9d9d9d900d9
-d9d900d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d90000d9d900d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9000000d9
-d9d9d900000000d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9000000d9d9d9d900000000d9d9d9d900d9d9d9d9d900
-0000d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9000000d9d9d9d9d9d90000d9d9d9000000d9d9d900d90000d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ffff828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ffff8282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff82828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9ff82828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9ff828282828282828282828282828282828282828282828282828282828282828282
-82828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ff8282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-8282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffc0c0c07300
-c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffff82c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9
-d9d9d9d9d9d9d98282c0c0c07300
-c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282828282828282828282828282828282828282828282828282828282
-828282828282828282c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0
-c0c0c0c0c0c0c0c0c0c0c0c07300
-c07373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-737373737373737373737373737373737373737373737373737373737373737373737373
-7373737373737373737373737300
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000
-
-showpage
-
-% stop using temporary dictionary
-end
-
-% restore original state
-origstate restore
-
-%%Trailer
diff --git a/lib/toolbar/doc/src/fascicules.xml b/lib/toolbar/doc/src/fascicules.xml
deleted file mode 100644
index 37feca543f..0000000000
--- a/lib/toolbar/doc/src/fascicules.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE fascicules SYSTEM "fascicules.dtd">
-
-<fascicules>
- <fascicule file="part" href="part_frame.html" entry="no">
- User's Guide
- </fascicule>
- <fascicule file="ref_man" href="ref_man_frame.html" entry="yes">
- Reference Manual
- </fascicule>
- <fascicule file="part_notes" href="part_notes_frame.html" entry="no">
- Release Notes
- </fascicule>
- <fascicule file="" href="../../../../doc/print.html" entry="no">
- Off-Print
- </fascicule>
-</fascicules>
-
diff --git a/lib/toolbar/doc/src/note.gif b/lib/toolbar/doc/src/note.gif
deleted file mode 100644
index 6fffe30419..0000000000
--- a/lib/toolbar/doc/src/note.gif
+++ /dev/null
Binary files differ
diff --git a/lib/toolbar/doc/src/notes.xml b/lib/toolbar/doc/src/notes.xml
deleted file mode 100644
index aca9d59176..0000000000
--- a/lib/toolbar/doc/src/notes.xml
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Toolbar Release Notes</title>
- <prepared>otp_appnotes</prepared>
- <docno>nil</docno>
- <date>nil</date>
- <rev>nil</rev>
- <file>notes.xml</file>
- </header>
- <p>This document describes the changes made to the Toolbar
- application.</p>
-
-<section><title>Toolbar 1.4.2.3</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Misc build updates</p>
- <p>
- Own Id: OTP-10784</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Toolbar 1.4.2.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The GS applications is now deprecated and will be
- removed in the R16 release. The following GS-based
- applications have been superseded by the Observer
- application and will removed in R16: Appmon, Pman,
- Tv.</p>
- <p>
- *** POTENTIAL INCOMPATIBILITY ***</p>
- <p>
- Own Id: OTP-9907</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Toolbar 1.4.2.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Miscellaneous documentation build updates</p>
- <p>
- Own Id: OTP-9813</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Toolbar 1.4.2</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- Improve spelling throughout documentation, code comments
- and error messages</p>
- <p>
- Own Id: OTP-9555</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Toolbar 1.4.1</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The documentation is now built with open source tools
- (xsltproc and fop) that exists on most platforms. One
- visible change is that the frames are removed.</p>
- <p>
- Own Id: OTP-8201</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>Toolbar 1.4</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The copyright notices have been updated.</p>
- <p>
- Own Id: OTP-7851</p>
- </item>
- </list>
- </section>
-
-</section>
-
- <section>
- <title>Toolbar 1.3.0.1</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Minor Makefile changes.</p>
- <p>Own Id: OTP-6689</p>
- </item>
- <item>
- <p>Obsolete guard tests (such as list()) have been replaced
- with the modern guard tests (such as is_list()).</p>
- <p>Own Id: OTP-6725</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Toolbar 1.3</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Notification windows are now centered over a parent
- window.</p>
- <p>Own Id: OTP-6013 Aux Id: OTP-5987 </p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>Toolbar 1.2.1</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>The graphic applications now search for HTML
- documentation in the correct place.</p>
- <p>Own Id: OTP-5381</p>
- </item>
- </list>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/toolbar/doc/src/part.xml b/lib/toolbar/doc/src/part.xml
deleted file mode 100644
index 907b645764..0000000000
--- a/lib/toolbar/doc/src/part.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">>
- <header>
- <copyright>
- <year>1996</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Toolbar User's Guide</title>
- <prepared>Gunilla Hugosson</prepared>
- <docno></docno>
- <date>1997-04-19</date>
- <rev>1.0.2</rev>
- <file>part.sgml</file>
- </header>
- <description>
- <p>The <em>Toolbar</em> application simplifies access to
- the Erlang/OTP tools. It consists of a number of power buttons, one
- for each available tool.</p>
- </description>
- <xi:include href="toolbar_chapter.xml"/>
-</part>
-
diff --git a/lib/toolbar/doc/src/part_notes.xml b/lib/toolbar/doc/src/part_notes.xml
deleted file mode 100644
index 72a488a9d5..0000000000
--- a/lib/toolbar/doc/src/part_notes.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">>
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Toolbar Release Notes</title>
- <prepared></prepared>
- <docno></docno>
- <date>2004-09-07</date>
- <rev>1.0</rev>
- <file>part_notes.sgml</file>
- </header>
- <description>
- <p>The <em>Toolbar</em> application simplifies access to
- the Erlang/OTP tools. It consists of a number of power buttons,
- one for each available tool.</p>
- </description>
- <xi:include href="notes.xml"/>
-</part>
-
diff --git a/lib/toolbar/doc/src/ref_man.xml b/lib/toolbar/doc/src/ref_man.xml
deleted file mode 100644
index 16ba54b9ef..0000000000
--- a/lib/toolbar/doc/src/ref_man.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">>
- <header>
- <copyright>
- <year>1996</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Toolbar Reference Manual</title>
- <prepared>Gunilla Hugosson</prepared>
- <docno></docno>
- <date>1997-04-15</date>
- <rev>1.0.2</rev>
- <file>application.sgml</file>
- </header>
- <description>
- <p>The <em>Toolbar</em> application simplifies access to
- the Erlang/OTP tools. It consists of a number of power buttons, one
- for each available tool.</p>
- </description>
- <xi:include href="toolbar.xml"/>
-</application>
-
diff --git a/lib/toolbar/doc/src/toolbar.xml b/lib/toolbar/doc/src/toolbar.xml
deleted file mode 100644
index ac62cb7b68..0000000000
--- a/lib/toolbar/doc/src/toolbar.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>1996</year>
- <year>2013</year>
- <holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- The Initial Developer of the Original Code is Ericsson AB.
- </legalnotice>
-
- <title>toolbar</title>
- <prepared>Gunilla Hugosson</prepared>
- <docno></docno>
- <date>1997-04-21</date>
- <rev>A</rev>
- <file>toolbar.sgml</file>
- </header>
- <module>toolbar</module>
- <modulesummary>GUI for Starting Tools and User Contributions</modulesummary>
- <description>
- <warning>
- <p>
- The Toolbar application is deprecated and will be removed in R16.
- </p>
- </warning>
- <p>Toolbar makes it easier to use
- the different Erlang tools - and the user contributions - which are provided.
- It has a graphical user interface with an icon for each tool.
- Clicking the icon activates the corresponding tool.
- </p>
- <p>All tools to be included on Toolbar must
- have a configuration file containing information about the tool,
- for example its start function and help information location.
- Configuration files must have the <c>.tool</c> suffix.
- </p>
- <p>When started, Toolbar automatically checks for <c>*.tool</c>
- files in the current path and adds the corresponding tools. For
- each <c>ebin</c> directory found in the path, it will also look
- in a <c>priv</c> directory next to it. This is a feature of the Erlang
- file structure.</p>
- </description>
- <funcs>
- <func>
- <name>start() -> ok | already_started</name>
- <fsummary>Start Toolbar</fsummary>
- <desc>
- <p>Creates a window containing tool icons.</p>
- </desc>
- </func>
- <func>
- <name>version() -> string()</name>
- <fsummary>Return current version number</fsummary>
- <desc>
- <p>Returns the current version number of Toolbar.</p>
- </desc>
- </func>
- <func>
- <name>update() -> ok | {error,not_started}</name>
- <fsummary>Update Toolbar</fsummary>
- <desc>
- <p>Makes a search for new tool files in the current path and
- adds the corresponding tools to Toolbar window.</p>
- </desc>
- </func>
- <func>
- <name>quit() -> ok | {error,not_started}</name>
- <fsummary>Quit Toolbar.</fsummary>
- </func>
- <func>
- <name>create_tool_file() -> ok | {error,not_started}</name>
- <fsummary>Create tool files</fsummary>
- <desc>
- <p>Starts the GUI used for creating and editing tool files.</p>
- </desc>
- </func>
- <func>
- <name>add_gs_contribs() -> ok | {error,not_started}</name>
- <fsummary>Add GS contributions</fsummary>
- <desc>
- <p>Adds the path to the directory where the GS contributions are
- situated and add the tools found there, if any.</p>
- </desc>
- </func>
- </funcs>
-</erlref>
-
diff --git a/lib/toolbar/doc/src/toolbar_chapter.xml b/lib/toolbar/doc/src/toolbar_chapter.xml
deleted file mode 100644
index bec2bff062..0000000000
--- a/lib/toolbar/doc/src/toolbar_chapter.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>1996</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Toolbar</title>
- <prepared>Gunilla Hugosson, Kenneth Lundin</prepared>
- <docno></docno>
- <date>1997-04-21</date>
- <rev>A</rev>
- <file>toolbar_chapter.xml</file>
- </header>
- <warning>
- <p>
- The Toolbar application is deprecated and will be removed in R16.
- </p>
- </warning>
- <p>Toolbar provides an interface to the various Erlang tools which are available. Toolbar can also provide access to user supplied tools which are included with the Erlang software release. These tools are called GS Contributions.</p>
- <p>All tools included in Toolbar must have a configuration file which contains information about the tool, such as its start function and the location of help information. The name of a configuration file must include the suffix <c>.tool</c>.
- </p>
- <p>Start the Toolbar application with one of the following commands:
- </p>
- <list type="bulleted">
- <item>enter the command <c>toolbar:start().</c> from the command line after Erlang has been started.</item>
- <item>start Erlang with the command <c>erl -s toolbar</c>.</item>
- </list>
- <p>When started, Toolbar automatically checks for <c>*.tool</c> files in the current path and adds the corresponding tools. For each <c>ebin</c> directory found in the path, it will also look in a <c>priv</c> directory next to it. This is a function of the Erlang file structure.
- </p>
- <p>You can update Toolbar with menu commands on Toolbar window. Refer to the File Menu and Tools Menu sections below for details.
- </p>
-
- <section>
- <title>Toolbar Window</title>
- <p>The following illustration shows <seealso marker="#fig_1">The Toolbar Window</seealso>.
- </p>
- <marker id="fig_1"></marker>
- <image file="bar.gif">
- <icaption>The Toolbar Window</icaption>
- </image>
- <p>Each icon on Toolbar represents a separate tool, which is started by clicking on the icon. You can also display place the mouse pointer over an icon to display the name of the tool at the bottom of Toolbar window.
- </p>
- <p>The Toolbar window also has a menu which includes the following menu items:
- </p>
- <list type="bulleted">
- <item>File menu</item>
- <item>Tools menu</item>
- <item>Help menu</item>
- </list>
- <p>These menu are described in the following sections.
- </p>
-
- <section>
- <marker id="file_menu"></marker>
- <title>The File menu</title>
- <p>The File menu has the following two menu items:
- </p>
- <taglist>
- <tag>Update Toolbar</tag>
- <item>Select this menu item to search for new tool files in the current path and add the corresponding tools to the Toolbar window. This action is performed automatically every the Toolbar application is started.</item>
- <tag>Quit</tag>
- <item>Select this menu item to exit the oolbar application.</item>
- </taglist>
- </section>
-
- <section>
- <marker id="tools_menu"></marker>
- <title>The Tools menu</title>
- <p>The Tool menu has the following menu items:
- </p>
- <taglist>
- <tag>Create Tool File</tag>
- <item>Choose this menu item to display the Create Tools File Window, where you create a new tools file, or edit an existing tools file. This window is described in detail below.</item>
- <tag>Add GS Contributions</tag>
- <item>Choose this menu item to add GS contributions by entering the path to the directory where these tools are situated. GS contributions are user supplied tools which are included with the Erlang software release. These tools are not supported by Erlang/OTP.</item>
- </taglist>
-
- <section>
- <title>The Create Tool File Window</title>
- <p>This window is displayed when you select <em>Create Tool File</em> from the <em>Tools</em> menu. The following illustration shows <seealso marker="#fig_2">The Create Tool File Window</seealso>.
- </p>
- <marker id="fig_2"></marker>
- <image file="create_tool.gif">
- <icaption>The Create Tool File Window</icaption>
- </image>
- <p>Follow these steps to create a new tool file, or to edit an existing tool file:</p>
- <list type="bulleted">
- <item>To edit an existing tools file, enter the file name of the tools file into the field <em>File name</em> and press <em>Enter</em>. The contents of the tool file are displayed in the information fields. Edit the information in the following fields as required.</item>
- <item>To create a new tools file, enter information into the following fields.</item>
- <item>When finished, select <em>Update Toolbar</em> from the <em>File</em> menu.</item>
- </list>
- <list type="ordered">
- <item><em>File name</em>. Enter the name of the tools file. The application will add the <c>.tool</c> suffix if omitted.</item>
- <item><em>Tool name</em>. Enter the name of the tool. This field defaults to the name entered into the File name field. For example, if you enter <c>mytool.tool</c> as a file name, this field defaults to <c>mytool</c>.</item>
- <item><em>Start function</em>. Enter a module name and a function name into the fields titled module and function respectively. The function must exist and take zero arguments.</item>
- <item><em>Icon file</em>. Enter the file name of the icon to be displayed in the Toolbar. The file must be a bitmap file or a GIF image with the file extension <c>.xbm</c> or <c>.gif</c> respectively. If no path name is entered, the system assumes that the file is located in the same directory as the tools file. This field is optional.</item>
- <item><em>Message</em>. Enter a descriptive string of maximum 30 characters for the tool. This field is optional. The information entered here is displayed at the bottom of the Toolbar window when the mouse pointer is placed on the Toolbar icon.</item>
- <item><em>HTML</em>. Enter an URL, a HTML file name, or a plain text file name, which points to the help text file for the tool. An URL should be given in the form <c>http://...</c>. If no path is given, the system assumes that the file is located in the same directory as the tool file. For an HTML file name ending with <c>.html</c>, it is possible to add an index which points to a specific location in the file. This is written as <c>.html#index</c>. This field is optional.</item>
- </list>
- <p>The window has the following command buttons:
- </p>
- <list type="bulleted">
- <item><em>Clear</em>. Click on this button to clear the information fields.</item>
- <item><em>Save</em>. Click on this button to save the information. A new tool file can be saved only when mandatory information such as file name, tool name and start function has been entered.</item>
- <item><em>Stop</em>. Click on this button to quit the Create Tool File window.</item>
- </list>
- <note>
- <p>No error check is performed on the information entered.</p>
- <p>You must select <em>Update Toolbar</em> from the <em>File</em> menu to update the configuration and make the tool visible on the Toolbar.</p>
- </note>
- </section>
- </section>
-
- <section>
- <marker id="help_menu"></marker>
- <title>The Help menu</title>
- <p>The Help Menu has the following two menu items, plus additional help menu items for those tools which have a help system.
- </p>
- <taglist>
- <tag>About</tag>
- <item>This menu item displays a short message about accessing the help information.</item>
- <tag>Toolbar</tag>
- <item>This menu item provides access to the Toolbar documentation.</item>
- </taglist>
- </section>
- </section>
-</chapter>
-
diff --git a/lib/toolbar/doc/src/warning.gif b/lib/toolbar/doc/src/warning.gif
deleted file mode 100644
index 96af52360e..0000000000
--- a/lib/toolbar/doc/src/warning.gif
+++ /dev/null
Binary files differ
diff --git a/lib/toolbar/ebin/.gitignore b/lib/toolbar/ebin/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/toolbar/ebin/.gitignore
+++ /dev/null
diff --git a/lib/toolbar/info b/lib/toolbar/info
deleted file mode 100644
index 706cbdfdf2..0000000000
--- a/lib/toolbar/info
+++ /dev/null
@@ -1,2 +0,0 @@
-group: tools
-short: A tool bar simplifying access to the Erlang tools
diff --git a/lib/toolbar/src/Makefile b/lib/toolbar/src/Makefile
deleted file mode 100644
index a24846976b..0000000000
--- a/lib/toolbar/src/Makefile
+++ /dev/null
@@ -1,93 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1996-2012. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-#
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../vsn.mk
-VSN=$(TOOLBAR_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/toolbar-$(VSN)
-
-# ----------------------------------------------------
-# Common Macros
-# ----------------------------------------------------
-
-MODULES= \
- canvasbutton \
- toolbar \
- toolbar_graphics \
- toolbar_lib \
- toolbar_toolconfig
-
-HRL_FILES= toolbar.hrl
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET)
-
-APP_FILE = toolbar.app
-APP_SRC = $(APP_FILE).src
-APP_TARGET = $(EBIN)/$(APP_FILE)
-
-APPUP_FILE = toolbar.appup
-APPUP_SRC = $(APPUP_FILE).src
-APPUP_TARGET = $(EBIN)/$(APPUP_FILE)
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS += +warn_obsolete_guard
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt: $(TARGET_FILES)
-
-clean:
- rm -f $(TARGET_FILES)
- rm -f errs core *~
-
-$(APP_TARGET): $(APP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-docs:
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/src"
- $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) "$(RELSYSDIR)/src"
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
-
-release_docs_spec:
-
diff --git a/lib/toolbar/src/canvasbutton.erl b/lib/toolbar/src/canvasbutton.erl
deleted file mode 100644
index 81e0ed43bb..0000000000
--- a/lib/toolbar/src/canvasbutton.erl
+++ /dev/null
@@ -1,239 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(canvasbutton).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Extension to GS used to imitate buttons but instead using images drawn
-% on a canvas. Enables usage of .gif files as button images and not only
-% .xbm (bitmap) files.
-%
-%%% Constants %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--define(gray,{87,87,87}).
-%
-%%% Internal data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% canvasbutton()
--record(canvasbutton,{image,rect,ul,ll}).
-%
-% cboptions()
--record(cboptions,
- {imagefile=nofile, % nofile |
- % string() Name of image file
- x=0, % integer() X coordinate relative the canvas
- y=0, % integer() Y coordinate relative the canvas
- width=10, % integer() Button width
- height=10, % integer() Button heigth
- fg=black, % atom() Foreground color
- data=[]}). % term() Data associated with button events
-%
-%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--export([create/1,create/2,read/2,press/1,release/1]).
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% create(Canvas) => create(Canvas,[])
-% create(Canvas,OptionList) => canvasbutton()
-% Canvas - GS canvas object
-% OptionList - [{Option,Value}]
-% Option, Value - see below
-% Create a canvasbutton with the given image on Canvas
-%
-% Option Value Default Comment
-% ----------------------------------------------------------------
-% image nofile | nofile Name of image file. Must be a bitmap
-% string() file (.xbm) or a GIF file (.gif).
-% x integer() 0 X coordinate relative to Canvas
-% y integer() 0 Y coordinate relative to Canvas
-% width integer() 10 Button width
-% height integer() 10 Button height
-% fg atom() black Foreground color, bitmaps only
-% data term() [] Data associated with button events
-%
-% The process calling this function will receive the following events:
-% {gs,GsObj,enter,{canvasbutton,Canvasbutton,Data},Args}
-% {gs,GsObj,leave,{canvasbutton,Canvasbutton,Data},Args}
-% {gs,GsObj,buttonpress,{canvasbutton,Canvasbutton,Data},Args}
-% {gs,GsObj,buttonrelease,{canvasbutton,Canvasbutton,Data},Args}
-% where GsObj and Args are a GS object and its Args field, respectively.
-%
-% Note that press/1 and release/1 has to be called explicitly to create
-% the illusion of the button being pressed or released.
-%----------------------------------------
-create(Canvas) ->
- create(Canvas,[]).
-create(Canvas,OptionList) ->
- Options = sort_out_options(OptionList),
- X = Options#cboptions.x,
- Y = Options#cboptions.y,
- W = Options#cboptions.width,
- H = Options#cboptions.height,
-
- %% Buttons should have the same background color as the canvas
- Bg = gs:read(Canvas,bc),
-
- %% Draw image
- Image = create_image(Options#cboptions.imagefile,Canvas,Bg,
- Options#cboptions.fg,X,Y,W,H),
-
- %% Draw upper left corner line
- Ul = gs:create(line,Canvas,[{coords,[{X,Y+H},{X,Y},{X+W,Y}]},
- {fg,white},{width,2}]),
-
- %% Draw lower right corner line
- Ll = gs:create(line,Canvas,[{coords,[{X,Y+H},{X+W,Y+H},{X+W,Y}]},
- {fg,?gray},{width,2}]),
-
-
- %% Draw a rectangle around all (for event catching when width and
- %% height of button is larger than image)
- Rect = gs:create(rectangle,Canvas,[{coords,[{X,Y},{X+W,Y+H}]},
- {fill,Bg},
- {buttonpress,true},
- {buttonrelease,true},
- {enter,true},{leave,true}]),
-
- %% Now the canvas button is created
- Canvasbutton = #canvasbutton{image=Image,rect=Rect,ul=Ul,ll=Ll},
-
- Data = Options#cboptions.data,
- gs:config(Rect,{data,{canvasbutton,Canvasbutton,Data}}),
- gs:config(Image,{data,{canvasbutton,Canvasbutton,Data}}),
- gs:config(Rect,lower),
- gs:config(Image,raise),
-
- Canvasbutton.
-
-%----------------------------------------
-% read(Canvasbutton,coords) => [{L,T},{R,B}]
-% Canvasbutton - canvasbutton()
-% Read a Canvasbutton's coordinates
-%----------------------------------------
-read(Canvasbutton,coords) ->
- gs:read(Canvasbutton#canvasbutton.rect,coords).
-
-%----------------------------------------
-% press(Canvasbutton)
-% Canvasbutton - canvasbutton()
-% Create the illusion that Canvasbutton is pressed
-%----------------------------------------
-press(Canvasbutton) ->
- gs:config(Canvasbutton#canvasbutton.ul,{fg,?gray}),
- gs:config(Canvasbutton#canvasbutton.ll,{fg,white}),
- case Canvasbutton#canvasbutton.image of
- noimage ->
- ignore;
- Image ->
- gs:config(Image,{move,{-1,-1}})
- end.
-
-%----------------------------------------
-% release(Canvasbutton)
-% Canvasbutton - canvasbutton()
-% Create the illusion that Canvasbutton is released
-%----------------------------------------
-release(Canvasbutton) ->
- gs:config(Canvasbutton#canvasbutton.ul,{fg,white}),
- gs:config(Canvasbutton#canvasbutton.ll,{fg,?gray}),
- case Canvasbutton#canvasbutton.image of
- noimage ->
- ignore;
- Image ->
- gs:config(Image,{move,{1,1}})
- end.
-
-
-%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% create_image(ImageFile,Canvas,Bg,Fg,X,Y,W,H) => Image
-% ImageFile - string() Image file, must exist and be a bitmap file ending
-% with .xbm or a GIF file ending with .gif.
-% Canvas - GS canvas object
-% Bg - atom() Background color (bitmaps only)
-% Fg - atom() Foreground color (bitmaps only)
-% X, Y - int() X and Y coordinates for Image relative to Canvas
-% W, H - int() Width and height of Image
-% Image - GS canvas image object
-%----------------------------------------
-create_image(nofile,_,_,_,_,_,_,_) ->
- noimage;
-create_image(ImageFile,Canvas,Bg,Fg,X,Y,W,H) ->
- case lists:last(string:tokens(ImageFile,".")) of
- "xbm" ->
- gs:create(image,Canvas,
- [{bitmap,ImageFile},
- {bg,Bg},{fg,Fg},
- {anchor,c},
- {coords,[{X+1+W/2,Y+1+H/2}]},
- {buttonpress,true},
- {buttonrelease,true},
- {enter,true},{leave,true}]);
- "gif" ->
- gs:create(image,Canvas,
- [{load_gif,ImageFile},
- {anchor,c},
- {coords,[{X+W/2,Y+H/2}]},
- {buttonpress,true},
- {buttonrelease,true},
- {enter,true},{leave,true}])
- end.
-
-%----------------------------------------
-% sort_out_options(OptionList) => cboptions()
-% OptionList - see create/2
-% Insert members of option list into a cboptions record.
-%----------------------------------------
-sort_out_options(OptionList) ->
- sort_out_options(OptionList,#cboptions{}).
-
-%----------------------------------------
-% sort_out_options(OptionList,Options) => cboptions()
-% OptionList - see create/2
-% Options - cboptions()
-% Called by sort_out_options/1.
-%----------------------------------------
-sort_out_options([{image,Image}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{imagefile=Image});
-sort_out_options([{x,X}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{x=X});
-sort_out_options([{y,Y}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{y=Y});
-sort_out_options([{width,Width}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{width=Width});
-sort_out_options([{height,Height}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{height=Height});
-sort_out_options([{fg,Fg}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{fg=Fg});
-sort_out_options([{data,Data}|Rest],Options) ->
- sort_out_options(Rest,Options#cboptions{data=Data});
-sort_out_options([],Options) ->
- Options.
diff --git a/lib/toolbar/src/toolbar.app.src b/lib/toolbar/src/toolbar.app.src
deleted file mode 100644
index 16f03c497d..0000000000
--- a/lib/toolbar/src/toolbar.app.src
+++ /dev/null
@@ -1,30 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-{application, toolbar,
- [{description, "Toolbar"},
- {vsn, "%VSN%"},
- {modules, [
- toolbar,
- toolbar_graphics,
- toolbar_lib,
- toolbar_toolconfig,
- canvasbutton
- ]},
- {registered,[toolbar]},
- {applications, [kernel, stdlib, gs]}]}.
diff --git a/lib/toolbar/src/toolbar.appup.src b/lib/toolbar/src/toolbar.appup.src
deleted file mode 100644
index 7a435e9b22..0000000000
--- a/lib/toolbar/src/toolbar.appup.src
+++ /dev/null
@@ -1,19 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-{"%VSN%",[],[]}.
diff --git a/lib/toolbar/src/toolbar.erl b/lib/toolbar/src/toolbar.erl
deleted file mode 100644
index b37c323008..0000000000
--- a/lib/toolbar/src/toolbar.erl
+++ /dev/null
@@ -1,579 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(toolbar).
--compile([{nowarn_deprecated_function,{gs,start,1}}]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Main module
-%
-%%% Includes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--include("toolbar.hrl").
-%
-%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--export([start/0,version/0]).
--export([update/0,quit/0]).
--export([create_tool_file/0,add_gs_contribs/0]).
-
-%
--define (STARTUP_TIMEOUT, 20000).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% start() => ok | already_started
-%----------------------------------------
-start() ->
- case whereis(toolbar) of
- undefined ->
- Self = self(),
- PidInit = spawn(fun() -> init(Self) end),
- init_ok (PidInit);
-
- _Pid ->
- already_started
- end.
-
-
-
-%%% init_ok /1
-%%%
-%%% init_ok returns the pid from this process given from
-%%% init/1 after its initialization, or else it timeouts.
-%%%
-
-init_ok (PidInit) ->
- %% Wait for a initialization completion message from
- %% the spawned process before returning its Pid.
- %%
-
- receive
- {initialization_complete, PidInit} ->
- PidInit
-
- %% (Conditional) Failure to start within the time limit will
- %% result in termination
-
- after
- ?STARTUP_TIMEOUT ->
- exit(PidInit, kill),
- exit({startup_timeout, ?MODULE})
- end.
-
-
-
-%----------------------------------------
-% version() -> string()
-% Returns the version number.
-%----------------------------------------
-version() ->
- "1.1".
-
-%----------------------------------------
-% update() => ok | {error,not_started}
-% Make a search for new tools (*.tool files) in the current path.
-%----------------------------------------
-update() ->
- call(update_toolbar).
-
-%----------------------------------------
-% quit() => ok | {error,not_started}
-% Quit the Toolbar.
-%----------------------------------------
-quit() ->
- call(quit).
-
-%----------------------------------------
-% create_tool_file() => ok | {error,not_started}
-% Start the GUI for creating .tool files.
-%----------------------------------------
-create_tool_file() ->
- call(create_tool_file).
-
-%----------------------------------------
-% add_gs_contribs() => ok | {error,not_started}
-% Add GS contributions.
-%----------------------------------------
-add_gs_contribs() ->
- call(add_gs_contribs).
-
-
-%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%=============================================================================
-% Main loop
-%=============================================================================
-
-%----------------------------------------
-% init()
-%----------------------------------------
-init(PidCaller) ->
- register (toolbar, self ()),
-
- %% Start GS
- S = gs:start([{kernel,true}]),
-
- %% Draw main window
- Window = toolbar_graphics:draw_window(S),
-
- %% Add system defined Tool icons to main window
- toolbar_graphics:cursor(Window,busy),
- NewWindow = add_tools(Window,code:get_path()),
- toolbar_graphics:cursor(Window,arrow),
-
- %% Listen to configure events from the window
- toolbar_graphics:listen_configure(NewWindow),
-
- %% Notify caller that the process appears
- %% to have been started.
- PidCaller ! {initialization_complete, self()},
-
- loop(S,NewWindow,null,undefined).
-
-%----------------------------------------
-% loop(S,Window,LoopData,TimerRef)
-% S - pid() GS
-% Window - tbwindow record (see toolbar_graphics.erl)
-% LoopData - term()
-% TimerRef - undefined | timer_ref()
-%----------------------------------------
-loop(S,Window,LoopData,TimerRef) ->
- receive
- %% test events
- {ping, Pid} ->
- Pid ! {toolbar, alive},
- loop (S, Window, LoopData, TimerRef);
-
- {stop, Pid} ->
- Pid ! {toolbar, stopped},
- finished;
-
- %% ----- GS events ----- %%
-
- {gs,_Object,Event,Data,Args} ->
- case toolbar_graphics:event(LoopData,Event,Data,Args) of
-
- noevent ->
- loop(S,Window,LoopData,TimerRef);
-
- %% Display short information message
- {display,Msg} ->
-
- {ok,Ref} = timer:apply_after(500,toolbar_graphics,
- display_show,[Window,Msg]),
- loop(S,Window,LoopData,Ref);
-
- %% Clear display area
- display_clear ->
- timer:cancel(TimerRef),
- toolbar_graphics:display_clear(Window),
- loop(S,Window,LoopData,undefined);
-
- %% New LoopData
- {newData,NewLoopData} ->
- loop(S,Window,NewLoopData,TimerRef);
-
- %% Icon button clicked, start corresponding tool/uc
- {start,Start} ->
- WinObj = toolbar_graphics:get_window(Window),
- start_tool(Start,WinObj),
- loop(S,Window,LoopData,TimerRef);
-
- %% Update Toolbar
- update_toolbar ->
- toolbar_graphics:cursor(Window,busy),
- NewWindow = add_tools(Window,code:get_path()),
- toolbar_graphics:cursor(Window,arrow),
- loop(S,NewWindow,LoopData,TimerRef);
-
- %% Start Tool Configuration tool
- create_tool_file ->
- toolbar_toolconfig:start(),
- loop(S,Window,LoopData,TimerRef);
-
- %% Add GS contributions
- add_gs_contribs ->
- toolbar_graphics:cursor(Window,busy),
- GsDir = toolbar_lib:gs_contribs_dir(),
- code:add_path(GsDir),
- NewWindow = add_tools(Window,[GsDir]),
- toolbar_graphics:cursor(Window,arrow),
- loop(S,NewWindow,LoopData,TimerRef);
-
- %% Help
- {help,Html} ->
- toolbar_graphics:cursor(Window,busy),
- WinObj = toolbar_graphics:get_window(Window),
- tool_utils:open_help(WinObj, Html),
- toolbar_graphics:cursor(Window,arrow),
- loop(S,Window,LoopData,TimerRef);
-
- %% About help
- about_help ->
- WinObj = toolbar_graphics:get_window(Window),
- Text = ["Help text is on HTML format",
- "Requires Netscape to be up and running"],
- tool_utils:notify(WinObj, Text),
- loop(S,Window,LoopData,TimerRef);
-
- %% Window has been resized, redraw it
- {redraw,Size} ->
- NewWindow = toolbar_graphics:redraw_window(Window,Size),
- loop(S,NewWindow,LoopData,TimerRef);
-
- %% Quit
- quit ->
- finished
- end;
-
- %% ----- Events from user ----- %%
-
- %% Update Toolbar
- update_toolbar ->
- toolbar_graphics:cursor(Window,busy),
- NewWindow = add_tools(Window,code:get_path()),
- toolbar_graphics:cursor(Window,arrow),
- loop(S,NewWindow,LoopData,TimerRef);
-
- %% Quit
- quit ->
- finished;
-
- %% Start Tool Configuration tool
- create_tool_file ->
- toolbar_toolconfig:start(),
- loop(S,Window,LoopData,TimerRef);
-
- %% Add GS contributions
- add_gs_contribs ->
- toolbar_graphics:cursor(Window,busy),
- GsDir = toolbar_lib:gs_contribs_dir(),
- code:add_path(GsDir),
- NewWindow = add_tools(Window,[GsDir]),
- toolbar_graphics:cursor(Window,arrow),
- loop(S,NewWindow,LoopData,TimerRef);
-
- Other ->
- io:format("toolbar: unexp msg ~p~n",[Other]),
- loop(S,Window,LoopData,TimerRef)
- end.
-
-%----------------------------------------
-% call(Msg) => ok | {error,not_started}
-% Msg - term()
-% Send message to toolbar if it is started, otherwise return an error
-%----------------------------------------
-call(Msg) ->
- case whereis(toolbar) of
- undefined ->
- {error,not_started};
- _ ->
- toolbar ! Msg,
- ok
- end.
-
-
-%=============================================================================
-% Addition of new tools
-%=============================================================================
-%----------------------------------------
-% add_tools(Window,Dirs) => NewWindow
-% Window, NewWindow - tbwindow record (see toolbar_graphics.erl)
-% Dirs - [string()] Directory names
-% Calls add_tools2/2 recursively for a number of directories
-%----------------------------------------
-add_tools(Window,[Dir|Rest]) when is_list(Dir) ->
-
- %% Add all tools in the directory Dir
- NewWindow = add_tools2(Window,tool_files(Dir)),
-
- case filename:basename(Dir) of
- %% Dir is an 'ebin' directory, check in '../priv' as well
- "ebin" ->
- NewerWindow =
- add_tools2(NewWindow,
- tool_files(filename:join(filename:dirname(Dir),
- "priv"))),
- add_tools(NewerWindow,Rest);
- _ ->
- add_tools(NewWindow,Rest)
- end;
-add_tools(Window,[]) ->
- Window.
-
-%----------------------------------------
-% add_tools2(Window,ToolFiles) => NewWindow
-% Window, NewWindow - tbwindow record (see toolbar_graphics.erl)
-% ToolFiles - [string()] *.tool file names
-% Calls add_tool/2 recursively for a number of .tool files in a directory
-%----------------------------------------
-add_tools2(Window,[ToolFile|Rest]) ->
- case add_tool(Window,ToolFile) of
- {ok,NewWindow} ->
- add_tools2(NewWindow,Rest);
- {error,_Reason} ->
- add_tools2(Window,Rest)
- end;
-add_tools2(Window,[]) ->
- Window.
-
-%----------------------------------------
-% add_tool(Window,ToolFile) => {ok,NewWindow} | {error,Reason}
-% Window, NewWindow - tbwindow record (see toolbar_graphics.erl)
-% ToolFile - string() A .tool file
-% Reason - noname | nostart | version | format | read | open
-% Reads tool information from a .tool file and adds it to the toolbar
-% Returns the new window information
-%----------------------------------------
-add_tool(Window,ToolFile) ->
- case tool_info(ToolFile) of
- {ok,ToolInfo} ->
- case toolbar_graphics:already_added(Window,ToolInfo) of
- true ->
- {ok,Window};
- false ->
- NewWindow = toolbar_graphics:add_icon(Window,ToolInfo),
- {ok,NewWindow}
- end;
- {error,Reason} ->
- %% Log
- {error,Reason}
- end.
-
-
-%=============================================================================
-% Functions for getting *.tool configuration files
-%=============================================================================
-
-%----------------------------------------
-% tool_files(Dir) => ToolFiles
-% Dir - string() Directory name
-% ToolFiles - [string()]
-% Return the list of all files in Dir ending with .tool (appended to Dir)
-%----------------------------------------
-tool_files(Dir) ->
- case file:list_dir(Dir) of
- {ok,Files} ->
- filter_tool_files(Dir,Files);
- {error,_Reason} ->
- []
- end.
-
-%----------------------------------------
-% filter_tool_files(Dir,Files) => ToolFiles
-% Dir - string() Directory name
-% Files, ToolFiles - [string()] File names
-% Filters out the files in Files ending with .tool and append them to Dir
-%----------------------------------------
-filter_tool_files(_Dir,[]) ->
- [];
-filter_tool_files(Dir,[File|Rest]) ->
- case filename:extension(File) of
- ".tool" ->
- [filename:join(Dir,File)|filter_tool_files(Dir,Rest)];
- _ ->
- filter_tool_files(Dir,Rest)
- end.
-
-
-%=============================================================================
-% Functions for retrieving tool information from *.tool files
-%=============================================================================
-
-%----------------------------------------
-% tool_info(ToolFile) => {ok,ToolInfo} | {error,Reason}
-% ToolFile - string() .tool file
-% ToolInfo - toolinfo record
-% Reason - nofile | format | noname | nostart
-% Retreives tool information from ToolFile
-%----------------------------------------
-tool_info(ToolFile) ->
- case file:consult(ToolFile) of
- {error,open} ->
- {error,nofile};
- {error,read} ->
- {error,format};
- {ok,[{version,Vsn},InfoTuple]} when is_tuple(InfoTuple)->
- case toolbar_lib:tool_info_syntax(Vsn,InfoTuple) of
-
- %% Syntax check ok, start additional checks
- {ok,InfoList} ->
-
- tool_info2(filename:dirname(ToolFile),
- InfoList,#toolinfo{});
-
- %% Syntax error
- Error ->
- Error
- end;
- {ok,[{version,Vsn},ToolInfo]} when is_list(ToolInfo)->
- case toolbar_lib:tool_info_syntax(Vsn,ToolInfo) of
-
- %% Syntax check ok, start additional checks
- {ok,InfoList} ->
- tool_info2(filename:dirname(ToolFile),
- InfoList,#toolinfo{});
-
- %% Syntax error
- Error ->
- Error
- end;
- {ok,_Other} ->
- {error,format}
- end.
-
-%----------------------------------------
-% tool_info2(Dir,Info,ToolInfo) => {ok,ToolInfo}
-% Dir - string() Directory where this .tool file is situated
-% Info - [{Key,Val}] List of tuples in the .tool file
-% ToolInfo - toolinfo record being filled in
-% Used by tool_info2/1
-%----------------------------------------
-%%% Tool name
-tool_info2(Dir,[{tool,Name}|Rest],TI) ->
- tool_info2(Dir,Rest,TI#toolinfo{tool=Name});
-
-%%% Start function
-tool_info2(Dir,[{start,{M,F,A}}|Rest],TI) ->
- tool_info2(Dir,Rest,TI#toolinfo{start={M,F,A}});
-
-%%% Icon file
-%%% It must exist since the icon is drawn immediately after this .tool
-%%% file has been successfully read
-%%% It must also end with a .gif or .xbm suffix
-%%% Otherwise the icon is ignored!
-%%% Uses absolute path: If a relative path is given, it is assumed to be
-%%% relative to the directory of the .tool file
-tool_info2(Dir,[{icon,Icon}|Rest],TI) ->
-
- %% Check that the image file ends with .xbm or .gif
- case image_suffix(Icon) of
- true ->
-
- %% Add absolute path (if necessary)
- File = absolute_path(Dir,Icon),
-
- case toolbar_lib:legal_file(File) of
- ok ->
- tool_info2(Dir,Rest,TI#toolinfo{icon=File});
- _Error ->
- %% LOG File does not exist or cannot be read
- tool_info2(Dir,Rest,TI)
- end;
-
- false ->
- %% LOG Illegal icon file name
- tool_info2(Dir,Rest,TI)
- end;
-
-%%% Message string
-tool_info2(Dir,[{message,Msg}|Rest],TI) ->
- tool_info2(Dir,Rest,TI#toolinfo{message=Msg});
-
-%%% Html file is found
-%%% Check if file exists at "view-time", not now!
-%%% Uses absolute path: If a relative path is given, it is assumed to be
-%%% relative to the directory of the .tool file
-tool_info2(Dir,[{html,Html}|Rest],TI) ->
-
- %% Check if the HTML file is a remote URL or a local file
- case Html of
-
- %% http://... Remote URL, save as is
- [$h,$t,$t,$p,$:,$/,$/|_] ->
- tool_info2(Dir,Rest,TI#toolinfo{html=Html});
-
- %% file:... Local file, save file with absolute path
- [$f,$i,$l,$e,$:|File] ->
- tool_info2(Dir,Rest,TI#toolinfo{html=absolute_path(Dir,File)});
-
- %% Everything else is assumed to be a file name
- %% Save file with absolute path
- _ ->
- tool_info2(Dir,Rest,TI#toolinfo{html=absolute_path(Dir,Html)})
- end;
-
-%%% Info has been traversed
-tool_info2(_Dir,[],ToolInfo) ->
- {ok,ToolInfo}.
-
-%----------------------------------------
-% image_suffix(File) => true | false
-% File - string() File name
-% Returns true if File end with an image suffix: gif or xbm
-%----------------------------------------
-image_suffix(File) ->
- case filename:extension(File) of
- ".gif" ->
- true;
- ".xbm" ->
- true;
- _ ->
- false
- end.
-
-%----------------------------------------
-% absolute_path(Dir,File) => string()
-% Dir, File - string()
-% Given a directory and a file name, return the appended result if the file
-% name does not already contain an absolute path.
-% Dir is supposed to be an absolute path, if it is '.', it is replaced
-% with the current working directory.
-%----------------------------------------
-absolute_path(".",File) ->
- {ok,Cwd} = file:get_cwd(),
- absolute_path(Cwd,File);
-absolute_path(Dir,File) ->
- filename:join(Dir,File).
-
-
-%=============================================================================
-% Start of a tool
-%=============================================================================
-
-%----------------------------------------
-% start_tool({Module,Function,Arguments}, GSobj)
-% Module - atom() Module name
-% Function - atom() Function name
-% Argument - [term()] Function arguments
-% GSobj - gs_obj()
-% Applies the given function in order to start a tool.
-%----------------------------------------
-start_tool({M,F,A}, GSobj) ->
- spawn(fun() -> start_tool(M, F, A, GSobj) end).
-
-start_tool(M,F,A,GSobj) ->
- case catch apply(M,F,A) of
- {'EXIT',Reason} ->
- String1 = io_lib:format("Failed to call apply(~p,~p,~p)",
- [M,F,A]),
- String2 = io_lib:format("Reason: ~p",[Reason]),
- tool_utils:notify(GSobj,[String1,String2]),
- false;
- _ ->
- true
- end.
diff --git a/lib/toolbar/src/toolbar.hrl b/lib/toolbar/src/toolbar.hrl
deleted file mode 100644
index 1793cd1833..0000000000
--- a/lib/toolbar/src/toolbar.hrl
+++ /dev/null
@@ -1,34 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Common data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Tool configuration information
--record(toolinfo,
- {tool,
- start,
- icon=nofile,
- message="",
- html=nofile}).
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/toolbar/src/toolbar_graphics.erl b/lib/toolbar/src/toolbar_graphics.erl
deleted file mode 100644
index c4c4273c63..0000000000
--- a/lib/toolbar/src/toolbar_graphics.erl
+++ /dev/null
@@ -1,404 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(toolbar_graphics).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Toolbar graphics.
-% The Toolbar window looks something like this:
-%
-% |-----------------------------|
-% | File Tools Help |
-% |-----------------------------|
-% | |-----| |-----| |-----| |
-% | | | | | | | |
-% | |Icon1| |Icon2|...|IconN| |
-% | |-----| |-----| |-----| |
-% |-----------------------------|
-% | Help text area |
-% |-----------------------------|
-%
-%%% Includes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--include("toolbar.hrl").
-%
-%%% Internal data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Toolbar window record
--record(tbwindow,
- {window,menubar,canvas,labelframe,
- label,helpmenu,
- no_of_buttons,
- min_height,min_width,cur_height,icons}).
-%
-%%% Constants %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Window width
--define(width,215).
-%
-% Icon width and height
--define(icon,34).
-%
-% Margin around icons
--define(pad,0).
-%
-% Default label width and height
--define(wlabel,50).
--define(hlabel,15).
-%
-% Default button width and height
--define(wbutton,50).
--define(hbutton,30).
-%
-%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--export([event/4]).
--export([draw_window/1,redraw_window/2,already_added/2,add_icon/2]).
--export([get_window/1]).
--export([cursor/2]).
--export([listen_configure/1]).
--export([display_show/2,display_clear/1]).
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% event(Data,GsEvent,Data,Args) => Event
-% Data - term()
-% GsEvent - GS event
-% Data, Args - Data and Arg fields associated with the GS event
-% Event - {display,String} | display_clear | noevent | {start,{M,F,A}} |
-% update_toolbar | create_tool_file | add_gs_contribs |
-% {help,Html} | about_help | {redraw,{Width,Height}} | quit |
-% {newData,NewData}
-% String - string()
-% M, F - atom() Module and function name
-% A - [term()] Function argument
-% Html - string() HTML file | nofile
-% Width, Height - integer()
-% NewData - term()
-% Tries to convert a GS event to an internal toolbar event. The separation
-% is intented to keep the implementation details of the graphics hidden
-% for toolbar.erl. Pure graphical events triggered by the GS event will
-% be executed by this function.
-% The Data field is used for saving information between different events
-% (without having to use put/get or ets). Right now it is only used to save
-% the coordinates of the last canvasbutton pressed, making it possible to
-% check if the canvasbutton is released with the mouse moved outside the
-% button (= no action) or with the mouse still inside the button (= action).
-%----------------------------------------
-%%% Mouse enters a icon, display short help message
-event(_LoopData,enter,{canvasbutton,_Cbtn,{_Start,{message,String}}},_Args) ->
- {display,String};
-
-%% Mouse leaves a icon, clear display area
-event(_LoopData,leave,{canvasbutton,_Cbtn,_Data},_Args) ->
- display_clear;
-
-%% An icon is pressed, create graphical illusion of this
-event(_LoopData,buttonpress,{canvasbutton,Canvasbutton,_},_Args) ->
- canvasbutton:press(Canvasbutton),
- {newData,canvasbutton:read(Canvasbutton,coords)};
-
-%% An icon is released, create graphical illusion of this
-event(LoopData,buttonrelease,{canvasbutton,Cbtn,{{start,Start},_Msg}},
- [_,X,Y|_]) ->
- canvasbutton:release(Cbtn),
- case within(X,Y,LoopData) of
- true ->
- {start,Start};
- false ->
- noevent
- end;
-
-%%% Update Toolbar button pressed
-event(_LoopData,click,_Data,["Update Toolbar"|_]) ->
- update_toolbar;
-
-%%% Tool configuration button pressed
-event(_LoopData,click,_Data,["Create Tool File..."|_]) ->
- create_tool_file;
-
-%%% Add GS contribution button pressed
-event(_LoopData,click,_Data,["Add GS Contributions"|_]) ->
- add_gs_contribs;
-
-%%% Help menu button selected
-event(_LoopData,click,{help,Html},_Args) ->
- {help,Html};
-
-%%% About Help menu button selected
-event(_LoopData,click,about_help,_Args) ->
- about_help;
-
-%% Window resized, redraw it
-event(_LoopData,configure,_Data,[Width,Height|_]) ->
- {redraw,{Width,Height}};
-
-%%% Quit button pressed
-event(_LoopData,click,_Data,["Quit"|_]) ->
- quit;
-
-%%% Window closed
-event(_LoopData,destroy,_Data,_Args) ->
- quit;
-
-event(_LoopData,_GsEvent,_Data,_Args) ->
- noevent.
-
-%=============================================================================
-% Main window functions
-%=============================================================================
-
-%----------------------------------------
-% draw_window(S) => Window
-% S - pid() GS
-% Window - tbwindow record
-% This functions create the main window, initially without any tool icons
-%----------------------------------------
-draw_window(S) ->
-
- Norm = ?icon + 2*?pad,
-
- %% Main window
- Win = gs:create(window,S,[{title,"Erlang Tools"},{width,?width}]),
-
- %% Menu bar with menu buttons
- Menubar = gs:create(menubar,Win,[]),
-
- %% File menu
- File = gs:create(menubutton,Menubar,[{label,{text,"File"}},{side,left}]),
- FileM = gs:create(menu,File,[]),
- gs:create(menuitem,FileM,[{label,{text,"Update Toolbar"}}]),
- gs:create(menuitem,FileM,[{label,{text,"Quit"}}]),
-
- %% Tools menu
- Tool = gs:create(menubutton,Menubar,[{label,{text,"Tools"}},{side,left}]),
- ToolM = gs:create(menu,Tool,[]),
- gs:create(menuitem,ToolM,[{label,{text,"Create Tool File..."}}]),
- gs:create(menuitem,ToolM,[{label,{text,"Add GS Contributions"}}]),
-
- %% Help menu
- Help = gs:create(menubutton,Menubar,[{label,{text,"Help"}},{side,right}]),
- HelpM = gs:create(menu,Help,[]),
- gs:create(menuitem,HelpM,[{label,{text,"About..."}},
- {data,about_help}]),
- gs:create(menuitem,HelpM,[{label,{text,"Toolbar"}},
- {data,{help,toolbar_lib:help_file()}}]),
- gs:create(menuitem,HelpM,[{label,{text,"OTP"}},
- {data,{help,toolbar_lib:otp_file()}}]),
- gs:create(menuitem,HelpM,[{itemtype,separator}]),
-
- %% Check height of menu bar
- H = gs:read(Menubar,height),
-
- %% Now the height of the window can be computed
- Height = H+Norm+?hlabel+2*?pad,
- gs:config(Win,{height,Height}),
-
- %% Canvas, here will the Tool canvasbuttons be inserted
- Canvas = gs:create(canvas,Win,[{width,?width},{height,Norm},{x,0},{y,H}]),
-
- %% Label for displaying help messages and the frame containing it
- LabelF = gs:create(frame,Win,[{bg,green},{bw,1},
- {width,?width},{height,?hlabel+2*?pad},
- {x,0},{y,H+Norm}]),
- Label = gs:create(label,LabelF,[{align,w},{height,?hlabel},
- {width,?width},{x,?pad},{y,?pad},
- {label,{text,string:copies(" ",30)}}]),
-
- gs:config(Win,{map,true}),
-
- #tbwindow{window=Win,
- menubar=Menubar,canvas=Canvas,labelframe=LabelF,
- label=Label,helpmenu=HelpM,
- no_of_buttons=0,
- min_height=Height,min_width=?width,cur_height=Height,
- icons=[]}.
-
-%----------------------------------------
-% redraw_window(Window,{NewWidth,NewHeight}) => NewWindow
-% Window, NewWindow - tbwindow record
-% NewWidth, NewHeight - integer()
-% Redraw main window contents according to a new size
-%----------------------------------------
-redraw_window(Window,{NewWidth,NewHeight}) ->
-
- MinWidth = Window#tbwindow.min_width,
- if
- NewWidth=<MinWidth ->
- true;
- true ->
- gs:config(Window#tbwindow.canvas,{width,NewWidth}),
- gs:config(Window#tbwindow.labelframe,{width,NewWidth}),
- gs:config(Window#tbwindow.label,{width,NewWidth-2*?pad})
- end,
-
- MinHeight = Window#tbwindow.min_height,
- if
- NewHeight=<MinHeight ->
- Window;
- true ->
-
- %% Compute size difference
- Diff = NewHeight - Window#tbwindow.cur_height,
-
- %% Resize button frame
- Canvas = Window#tbwindow.canvas,
- gs:config(Canvas,{height,gs:read(Canvas,height)+Diff}),
-
- %% Move label frame accordingly
- LabelF = Window#tbwindow.labelframe,
- gs:config(LabelF,{y,gs:read(LabelF,y)+Diff}),
-
- %% Return updated tbwindow record
- Window#tbwindow{cur_height=NewHeight}
- end.
-
-%----------------------------------------
-% already_added(Window,ToolInfo) => true | false
-% Window - tbwindow record
-% ToolInfo - toolinfo record
-% Returns true if ToolInfo contains information about a tool that
-% is already included in Window
-%----------------------------------------
-already_added(Window,ToolInfo) ->
- already_added2(Window#tbwindow.icons,ToolInfo#toolinfo.tool).
-
-%----------------------------------------
-% already_added2(ToolInfos,Tool) => true | false
-% ToolInfos - [toolinfo record]
-% Tool - atom() Tool name
-%----------------------------------------
-already_added2([#toolinfo{tool=Tool}|_Rest],Tool) ->
- true;
-already_added2([_|Rest],Tool) ->
- already_added2(Rest,Tool);
-already_added2([],_ToolInfo) ->
- false.
-
-%----------------------------------------
-% add_icon(Window,ToolInfo) => NewWindow
-% Window, NewWindow - tbwindow record
-% ToolInfo - toolinfo record
-% Add an icon to the main window
-%----------------------------------------
-add_icon(Window,ToolInfo) ->
- Norm = ?icon + 2*?pad,
-
- %% Extend window if necessary
- N = Window#tbwindow.no_of_buttons,
- ReqWidth = N*Norm+Norm,
- CurWidth = gs:read(Window#tbwindow.window,width),
- if
- ReqWidth>CurWidth ->
- gs:config(Window#tbwindow.window,{width,ReqWidth}),
- gs:config(Window#tbwindow.canvas,{width,ReqWidth}),
- gs:config(Window#tbwindow.labelframe,{width,ReqWidth}),
- gs:config(Window#tbwindow.label,{width,ReqWidth-2*?pad});
- true ->
- true
- end,
-
- %% Insert icon into button frame
- canvasbutton:create(Window#tbwindow.canvas,
- [{image,ToolInfo#toolinfo.icon},
- {x,N*Norm+?pad},{y,?pad},
- {width,?icon},{height,?icon},
- {data,{{start,ToolInfo#toolinfo.start},
- {message,ToolInfo#toolinfo.message}}}]),
-
- %% Insert tool name into help menu (if there is any help available)
- case ToolInfo#toolinfo.html of
- nofile ->
- true;
- Html ->
- gs:create(menuitem,Window#tbwindow.helpmenu,
- [{label,{text,ToolInfo#toolinfo.tool}},
- {data,{help,Html}}])
- end,
-
- MinWidth = gs:read(Window#tbwindow.window,width),
- Window#tbwindow{no_of_buttons=N+1,min_width=MinWidth,
- icons=[ToolInfo|Window#tbwindow.icons]}.
-
-%----------------------------------------
-% get_window(Window) -> gs_obj()
-% Window - tbwindow record
-%----------------------------------------
-get_window(Window) ->
- Window#tbwindow.window.
-
-%----------------------------------------
-% cursor(Window,Cursor)
-% Window - tbwindow record
-% Cursor - arrow | busy
-%----------------------------------------
-cursor(Window,Cursor) ->
- gs:config(Window#tbwindow.window,{cursor,Cursor}).
-
-%----------------------------------------
-% listen_configure(Window)
-% Window - tbwindow record
-% Configure Window to listen for configure events
-%----------------------------------------
-listen_configure(Window) ->
- gs:config(Window#tbwindow.window,{configure,true}).
-
-%----------------------------------------
-% display_show(Window,Text)
-% Window - tbwindow record
-% Text - string()
-% Display text in the help text area
-%----------------------------------------
-display_show(Window,Text) ->
- gs:config(Window#tbwindow.label,{label,{text,Text}}).
-
-%----------------------------------------
-% display_clear(Window)
-% Window - tbwindow record
-% Clear the help text area
-%----------------------------------------
-display_clear(Window) ->
- display_show(Window,"").
-
-%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% within(X,Y,[{Left,Top},{Right,Bot}]) => true | false
-% Return true if {X,Y} is within the given rectangle.
-%----------------------------------------
-within(X,Y,[{L,T},{R,B}]) ->
- if
- X>=L,
- X=<R,
- Y>=T,
- Y=<B ->
- true;
- true ->
- false
- end.
diff --git a/lib/toolbar/src/toolbar_lib.erl b/lib/toolbar/src/toolbar_lib.erl
deleted file mode 100644
index 9d3b9fdeb5..0000000000
--- a/lib/toolbar/src/toolbar_lib.erl
+++ /dev/null
@@ -1,223 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(toolbar_lib).
--include_lib("kernel/include/file.hrl").
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Library functions
-%
-%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--export([gs_contribs_dir/0,help_file/0,otp_file/0]).
--export([error_string/1]).
--export([legal_file/1]).
--export([insert_newlines/1]).
--export([tool_info_syntax/2]).
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% gs_contribs_dir() => string()
-% Return the directory of the GS contributions
-%----------------------------------------
-gs_contribs_dir() ->
- filename:join(code:lib_dir(gs),"contribs/ebin/").
-
-%----------------------------------------
-% help_file() => string()
-% Returns the address to the toolbar help file
-%----------------------------------------
-help_file() ->
- filename:join([code:lib_dir(toolbar),"doc", "html", "index.html"]).
-
-%----------------------------------------
-% otp_file() => string()
-% Returns the address to the OTP documentation
-%----------------------------------------
-otp_file() ->
- filename:join([code:root_dir(),"doc", "index.html"]).
-
-%----------------------------------------
-% error_string(Reason) => string()
-% Reason - nofile | format | noname | nostart | illegal | raccess | waccess
-% Given Reason, returns a short "explanation string"
-%----------------------------------------
-error_string(nofile) -> "File does not exist";
-error_string(format) -> "File on wrong format";
-
-error_string(noname) -> "No tool name is specified";
-error_string(nostart) -> "No start function is specified";
-
-error_string(illegal) -> "Illegal file name";
-
-error_string(raccess) -> "File is not readable";
-error_string(waccess) -> "File is not writeable".
-
-%----------------------------------------
-% legal_file(File) => ok | directory | {error,nofile} | {error,raccess}
-% File - string() File name
-% Checks if File is an existing and readable file.
-%----------------------------------------
-legal_file(File) ->
- case file:read_file_info(File) of
-
- %% File exists...
- {ok,#file_info{type=regular,access=Access}} ->
- if
-
- %% ...but is read protected
- Access/=read,
- Access/=read_write ->
- {error,raccess};
-
- %% ...and is possible to read
- true ->
- ok
- end;
-
- {ok,#file_info{type=directory}} ->
- directory;
-
- %% File does not exist
- _Error ->
- {error,nofile}
- end.
-
-%----------------------------------------
-% insert_newlines(Strings) => string()
-% Strings - string() | [string()]
-% If Strings is a list of strings, return a string where all these strings
-% are concatenated with newlines in between, otherwise return Strings.
-%----------------------------------------
-insert_newlines([String|Rest]) when is_list(String), Rest/=[]->
- String ++ "\n" ++ insert_newlines(Rest);
-insert_newlines([Last]) ->
- [Last];
-insert_newlines(Other) ->
- Other.
-
-%----------------------------------------
-% tool_info_syntax(Version,ToolInfo) => {ok,CorrToolInfo} | {error,Reason}
-% Version - string()
-% ToolInfo - tuple()
-% CorrToolInfo - list()
-% Reason - version | format | noname | nostart
-% Return a corrected (blanks removed etc) version of ToolInfo
-% if the syntax of ToolInfo is correct (ie contains all
-% mandatory elements and all values are of the specified type).
-%
-% Currently accepted versions:
-% "0.1" (which should be "1.0")
-% "1.1" (same as "0.1")
-%----------------------------------------
-tool_info_syntax("1.1",ToolInfo) ->
- tool_info_syntax("0.1",ToolInfo);
-tool_info_syntax("0.1",ToolInfo) when is_tuple(ToolInfo) ->
- syntax01(tuple_to_list(ToolInfo),false,false,[]);
-tool_info_syntax("0.1",_) ->
- {error,format};
-tool_info_syntax("1.2",ToolInfo) when is_list(ToolInfo)->
- syntax01(ToolInfo,false,false,[]);
-tool_info_syntax(_Vsn,_) ->
- {error,version}.
-
-
-%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% syntax01(List,NameF,StartF,Res) => {ok,Res} | {error,Reason}
-% List - [tuple()]
-% NameF, StartF - boolean()
-% Res - [tuple()]
-% Reason - format | noname | nostart
-% Version 0.1 syntax check of .tool file.
-%----------------------------------------
-syntax01([{tool,Str}|Rest],false,StartF,Res) when is_list(Str) ->
- case string:strip(Str) of
- [] ->
- {error,format};
- Tool ->
- syntax01(Rest,true,StartF,[{tool,Tool}|Res])
- end;
-syntax01([{start,{M,F,A}}|Rest],NameF,false,Res) when is_atom(M),
- is_atom(F),
- is_list(A) ->
- syntax01(Rest,NameF,true,[{start,{M,F,A}}|Res]);
-syntax01([{icon,Str}|Rest],NameF,StartF,Res) when is_list(Str) ->
- case string:strip(Str) of
- [] ->
- syntax01(Rest,NameF,StartF,Res);
- Icon ->
- syntax01(Rest,NameF,StartF,[{icon,Icon}|Res])
- end;
-syntax01([{message,Str}|Rest],NameF,StartF,Res) when is_list(Str) ->
- case string:strip(Str) of
- [] ->
- syntax01(Rest,NameF,StartF,Res);
- Message ->
- syntax01(Rest,NameF,StartF,
- [{message,lists:sublist(Message,1,30)}|Res])
- end;
-syntax01([{html,Str}|Rest],NameF,StartF,Res) when is_list(Str) ->
- case string:strip(Str) of
- [] ->
- syntax01(Rest,NameF,StartF,Res);
- Html ->
- syntax01(Rest,NameF,StartF,[{html,Html}|Res])
- end;
-%%The fields used by webtool must be removed
-syntax01([_|Rest],NameF,StartF,Res) ->
- syntax01(Rest,NameF,StartF,Res);
-
-syntax01([],true,true,Res) ->
- {ok,Res};
-syntax01([],false,_,_) ->
- {error,noname};
-syntax01([],_,false,_) ->
- {error,nostart};
-syntax01(_,_,_,_) ->
- {error,format}.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/toolbar/src/toolbar_toolconfig.erl b/lib/toolbar/src/toolbar_toolconfig.erl
deleted file mode 100644
index 479033fa22..0000000000
--- a/lib/toolbar/src/toolbar_toolconfig.erl
+++ /dev/null
@@ -1,549 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(toolbar_toolconfig).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}}]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Erlang Toolbar
-%
-%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Tool configuration tool, edit and creates .tool files
-% This tool works separately from the toolbar.
-%
-%%% External data types %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% toolinfo() -- Tool configuration information
--include("toolbar.hrl").
-%
-%%% Internal data types %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% tfwindow() -- Toolfile configuration window
--record(tfwindow,
- {window,
- fileentry,
- toolentry,moduleentry,functionentry,
- iconentry,messageentry,htmlentry,
- label}).
-%
-%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
--export([start/0]).
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
--export([init/0]). % spawn
-
-
-%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%----------------------------------------
-% start() => pid()
-%----------------------------------------
-start() ->
- spawn(toolbar_toolconfig,init,[]).
-
-
-%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%=============================================================================
-% Main loop
-%=============================================================================
-
-%----------------------------------------
-% init()
-%----------------------------------------
-init() ->
-
- %% Start GS (or get the pid if it is already running)
- S = gs:start(),
-
- %% Draw the window
- Window = draw_window(S),
-
- loop(S,Window).
-
-%----------------------------------------
-% loop(S,Window)
-% S - pid() GS
-% Window - tfwindow()
-%----------------------------------------
-loop(S,Window) ->
- receive
-
- %% 'Return' pressed in the 'File' entry
- {gs,_Obj,keypress,file,['Return'|_]} ->
-
- %% Check if a file name is specified
- case string:strip(gs:read(Window#tfwindow.fileentry,text)) of
-
- %% No file name specified, move focus to next entry
- "" ->
- move_focus(Window,file);
-
- %% A name is specified
- String ->
-
- %% Add a .tool suffix to the file name if necessary
- FileName = tool_file(String),
-
- %% Write the complete file name to the file entry
- gs:config(Window#tfwindow.fileentry,{text,FileName}),
-
- %% Try to open the file
- case file:consult(FileName) of
-
- %% File exists and seems ok
- {ok,[{version,Vsn},T]} ->
-
- %% Check the syntax of the file contents
- %% (All mandatory information specified,
- %% correct types, etc)
- case toolbar_lib:tool_info_syntax(Vsn,T) of
-
- %% Ok -- Show the file contents in the window
- %% and move focus to the next entry
- {ok,Info} ->
- display(Window,"File: "++FileName++
- " opened"),
- clear_info(Window),
- show_info(Window,Info),
- move_focus(Window,file);
-
- %% Erroneous version number -- Notify user
- {error,version} ->
- Win = Window#tfwindow.window,
- tool_utils:notify(Win,[FileName,
- "File has wrong version number"]);
-
- %% Other error -- Notify user
- _Error ->
- Win = Window#tfwindow.window,
- tool_utils:notify(Win,[FileName,
- "File is in erroneous format"])
- end;
-
- %% The file can not be read, show default values
- %% according to the file name in the window and
- %% move focus to the next entry
- _ ->
- display(Window,"File: "++FileName ++
- " could not be read, new file"),
- Tool = filename:basename(FileName,".tool"),
- clear_info(Window),
- show_info(Window,[{tool,Tool},
- {start,{list_to_atom(Tool),
- start,[]}},
- {icon,Tool++".gif"},
- {html,Tool++".html"}]),
- move_focus(Window,file)
- end
- end,
- loop(S,Window);
-
- %% 'Return' pressed in another entry, move focus to next entry
- {gs,_Obj,keypress,Focus,['Return'|_]} ->
- move_focus(Window,Focus),
- loop(S,Window);
-
- %% Any oher keypress, clear the display
- {gs,_Obj,keypress,_Data,_Args} ->
- display_clear(Window),
- loop(S,Window);
-
- %% 'Clear' button pressed, clear the window
- {gs,_Obj,click,_Data,["Clear"|_]} ->
- clear_info(Window),
- loop(S,Window);
-
- %% 'Save' button pressed, save the given information to file
- {gs,_Obj,click,_Data,["Save"|_]} ->
-
- %% Check if a file name is specified
- case string:strip(gs:read(Window#tfwindow.fileentry,text)) of
-
- %% No file name specified, notify user
- "" ->
- Win = Window#tfwindow.window,
- tool_utils:notify(Win,
- "A file name must be specified");
-
- %% A name is specified
- String ->
-
- %% Add a .tool suffix to the file name if necessary
- FileName = tool_file(String),
-
- %% Write the complete file name to the file entry
- gs:config(Window#tfwindow.fileentry,{text,FileName}),
-
- %% Check the other information given
- case check_info(Window) of
-
- %% If given info is correct, try to save
- %% it to the file
- {ok,ToolInfo} ->
- Win = Window#tfwindow.window,
- case save_info(Win,FileName,ToolInfo) of
-
- %% Ok, display confirmation
- ok ->
- display(Window,
- "Tool information saved to "++
- FileName);
-
- %% Cancel, do nothing
- cancel ->
- ignore;
-
- %% Error, display error message
- {error,Reason} ->
- display(Window,
- toolbar_lib:error_string(Reason)++
- FileName)
- end;
-
- %% Given info incorrect, notify user
- {error,Reason} ->
- Win = Window#tfwindow.window,
- Str = toolbar_lib:error_string(Reason),
- tool_utils:notify(Win,Str)
- end
- end,
- loop(S,Window);
-
- %% 'Stop' button, close window and exit
- {gs,_Obj,click,_Data,["Stop"|_]} ->
- gs:destroy(Window#tfwindow.window),
- finished;
-
- %% Window closed, exit
- {gs,_Obj,destroy,_Data,_Args} ->
- finished;
-
- Other ->
- io:format("toolbar_toolconfig: unexp msg: ~p~n",[Other]),
- loop(S,Window)
- end.
-
-
-%=============================================================================
-% Graphics
-%=============================================================================
-
-%----------------------------------------
-% draw_window(S)
-% S - pid() GS
-% Draw the main window.
-%----------------------------------------
-draw_window(S) ->
-
- %% ----- Open a new window -----
- Win = gs:create(window,S,[{width,400},{height,390},
- {title,"Create Tool File"}]),
-
- %% ----- Top frame containing a 'File name' label and entry -----
- Top = gs:create(frame,Win,[{x,0},{y,0},{width,400},{height,60},{bw,2},
- {keypress,true}]),
-
- %% File name
- gs:create(label,Top,[{x,10},{y,10},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"File name:"}}]),
- File = gs:create(entry,Top,[{x,110},{y,10},{width,280},{height,30},
- {keypress,true},{data,file}]),
-
- %% ----- Middle frame containing other labels and entries -----
- Mid = gs:create(frame,Win,[{x,0},{y,60},{width,400},{height,250},{bw,2},
- {keypress,true}]),
-
- %% Tool name
- gs:create(label,Mid,[{x,10},{y,10},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"Tool name:"}}]),
- Tool = gs:create(entry,Mid,[{x,110},{y,10},{width,280},{height,30},
- {keypress,true},{data,tool}]),
-
- %% Start function
- gs:create(label,Mid,[{x,10},{y,60},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"Start:"}}]),
- Mod = gs:create(entry,Mid,[{x,110},{y,60},{width,135},{height,30},
- {keypress,true},{data,module}]),
- Fun = gs:create(entry,Mid,[{x,245},{y,60},{width,135},{height,30},
- {keypress,true},{data,function}]),
-
- %% Icon file
- gs:create(label,Mid,[{x,10},{y,110},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"Icon file:"}}]),
- Icon = gs:create(entry,Mid,[{x,110},{y,110},{width,280},{height,30},
- {keypress,true},{data,icon}]),
-
- %% Message
- gs:create(label,Mid,[{x,10},{y,160},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"Message:"}}]),
- Msg = gs:create(entry,Mid,[{x,110},{y,160},{width,280},{height,30},
- {keypress,true},{data,message}]),
-
- %% HTML file
- gs:create(label,Mid,[{x,10},{y,210},{width,80},{height,30},{align,e},
- {keypress,true},
- {label,{text,"HTML:"}}]),
- Html = gs:create(entry,Mid,[{x,110},{y,210},{width,280},{height,30},
- {keypress,true},{data,html}]),
-
- %% ----- Bottom frame containing the buttons -----
- Bot = gs:create(frame,Win,[{x,0},{y,310},{width,400},{height,50},
- {bw,2},{keypress,true}]),
-
- gs:create(button,Bot,[{x,75},{y,10},{width,50},{height,30},
- {keypress,true},
- {label,{text,"Clear"}}]),
- gs:create(button,Bot,[{x,175},{y,10},{width,50},{height,30},
- {keypress,true},
- {label,{text,"Save"}}]),
- gs:create(button,Bot,[{x,275},{y,10},{width,50},{height,30},
- {keypress,true},
- {label,{text,"Stop"}}]),
-
- %% ----- Label for displaying help messages -----
- Lbl = gs:create(label,Win,[{x,0},{y,360},{width,400},{height,30},{bw,2},
- {relief,raised},
- {keypress,true},
- {align,c},{label,{text,""}}]),
-
- gs:config(Win,{map,true}),
- gs:config(File,{setfocus,true}),
-
- #tfwindow{window=Win,
- fileentry=File,
- toolentry=Tool,
- moduleentry=Mod,
- functionentry=Fun,
- iconentry=Icon,
- messageentry=Msg,
- htmlentry=Html,
- label=Lbl}.
-
-%----------------------------------------
-% move_focus(Window,Focus)
-% Window - tfwindow()
-% Focus - file | tool | module | function | icon | message | html | none
-% Move the input focus to the entry following Focus
-%----------------------------------------
-move_focus(Window,file) ->
- gs:config(Window#tfwindow.toolentry,{setfocus,true});
-move_focus(Window,tool) ->
- gs:config(Window#tfwindow.moduleentry,{setfocus,true});
-move_focus(Window,module) ->
- gs:config(Window#tfwindow.functionentry,{setfocus,true});
-move_focus(Window,function) ->
- gs:config(Window#tfwindow.iconentry,{setfocus,true});
-move_focus(Window,icon) ->
- gs:config(Window#tfwindow.messageentry,{setfocus,true});
-move_focus(Window,message) ->
- gs:config(Window#tfwindow.htmlentry,{setfocus,true});
-move_focus(Window,html) ->
- gs:config(Window#tfwindow.htmlentry,{setfocus,false});
-move_focus(_Window,none) ->
- true.
-
-%----------------------------------------
-% display(Window,Text)
-% Window - tfwindow()
-% Text - string()
-% Display a help message in the window
-%----------------------------------------
-display(Window,Text) ->
- gs:config(Window#tfwindow.label,{label,{text,Text}}).
-
-%----------------------------------------
-% display_clear(Window)
-% Window - tfwindow()
-% Clear the help message display
-%----------------------------------------
-display_clear(Window) ->
- display(Window,"").
-
-%----------------------------------------
-% clear_info(Window)
-% Window - tfwindow()
-% Clear the entries of Window (except the file entry)
-%----------------------------------------
-clear_info(Window) ->
- gs:config(Window#tfwindow.toolentry,{text,""}),
- gs:config(Window#tfwindow.moduleentry,{text,""}),
- gs:config(Window#tfwindow.functionentry,{text,""}),
- gs:config(Window#tfwindow.iconentry,{text,""}),
- gs:config(Window#tfwindow.messageentry,{text,""}),
- gs:config(Window#tfwindow.htmlentry,{text,""}).
-
-%----------------------------------------
-% show_info(Window,List)
-% Window - tfwindow()
-% List - [{Key,Val}]
-% Key - tool, Val - string()
-% Key - start, Val - {atom(),atom(),_}
-% Key - icon, Val - string()
-% Key - message, Val - string()
-% Key - html, Val - string()
-% Display the different Val's in the appropriate entries of Window
-%----------------------------------------
-show_info(_Window,[]) ->
- ok;
-show_info(Window,[{tool,Tool}|Rest]) ->
- gs:config(Window#tfwindow.toolentry,{text,Tool}),
- show_info(Window,Rest);
-show_info(Window,[{start,{M,F,_}}|Rest]) ->
- gs:config(Window#tfwindow.moduleentry,{text,M}),
- gs:config(Window#tfwindow.functionentry,{text,F}),
- show_info(Window,Rest);
-show_info(Window,[{icon,Icon}|Rest]) ->
- gs:config(Window#tfwindow.iconentry,{text,Icon}),
- show_info(Window,Rest);
-show_info(Window,[{message,Message}|Rest]) ->
- gs:config(Window#tfwindow.messageentry,{text,Message}),
- show_info(Window,Rest);
-show_info(Window,[{html,Html}|Rest]) ->
- gs:config(Window#tfwindow.htmlentry,{text,Html}),
- show_info(Window,Rest).
-
-
-%=============================================================================
-% Retrieve user specified information
-%=============================================================================
-
-%----------------------------------------
-% check_info(Window) => {ok,ToolInfo} | {error,Reason}
-% Window - tfwindow()
-% ToolInfo - toolinfo()
-% Reason - noname | nostart
-% Check the information given in the entries and insert it into ToolInfo
-% if all mandatory information is given.
-%----------------------------------------
-check_info(Window) ->
-
- %% First check mandatory elements: name and start function
- Tool = gs:read(Window#tfwindow.toolentry,text),
- M = gs:read(Window#tfwindow.moduleentry,text),
- F = gs:read(Window#tfwindow.functionentry,text),
-
- if
- Tool/="",M/="",F/="" ->
- ToolInfo =
- #toolinfo{tool=Tool,
- start={list_to_atom(M),list_to_atom(F),[]},
- icon=gs:read(Window#tfwindow.iconentry,text),
- message=gs:read(Window#tfwindow.messageentry,text),
- html=gs:read(Window#tfwindow.htmlentry,text)},
- {ok,ToolInfo};
-
- Tool=="" ->
- {error,noname};
-
- true ->
- {error,nostart}
- end.
-
-
-%=============================================================================
-% Save information to file
-%=============================================================================
-
-%----------------------------------------
-% save_info(Win,File,ToolInfo) => ok | cancel | {error,waccess}
-% Win - GS object
-% File - string()
-% ToolInfo - toolinfo()
-% Saves the information in ToolInfo to File on a predefined format.
-%----------------------------------------
-save_info(Win,File,ToolInfo) ->
-
- %% First check if file already exists
- case file:read_file_info(File) of
- {ok,_FileInfo} ->
-
- %% Request the user to confirm that the file should
- %% be overwritten
- case tool_utils:confirm(Win,[File,
- "exists, will be overwritten"]) of
- ok ->
- save_info2(File,ToolInfo);
- cancel ->
- cancel
- end;
-
- {error,_Reason} -> % _Reason = "No such file or directory"
- save_info2(File,ToolInfo)
- end.
-
-%----------------------------------------
-% save_info2(File,ToolInfo) => ok | {error,waccess}
-% File - string() File name
-% ToolInfo - toolinfo record
-% Called by save_info/3
-%----------------------------------------
-save_info2(File,ToolInfo) ->
- case file:open(File, [write]) of
- {ok,Fd} ->
- io:format(Fd,"{version,\"~s\"}.~n",[toolbar:version()]),
- io:format(Fd,"{{tool,\"~s\"},~n",[ToolInfo#toolinfo.tool]),
- io:format(Fd," {start,~w}",[ToolInfo#toolinfo.start]),
- case ToolInfo#toolinfo.icon of
- "" -> ignore;
- Icon -> io:format(Fd,",~n {icon,\"~s\"}",[Icon])
- end,
- case ToolInfo#toolinfo.message of
- "" -> ignore;
- Message -> io:format(Fd,",~n {message,\"~s\"}",[Message])
- end,
- case ToolInfo#toolinfo.html of
- "" -> ignore;
- Html -> io:format(Fd,",~n {html,\"~s\"}",[Html])
- end,
- io:format(Fd,"}.~n",[]),
- file:close(Fd),
- ok;
- _Error ->
- {error,waccess}
- end.
-
-
-%=============================================================================
-% Auxiliary functions
-%=============================================================================
-
-%----------------------------------------
-% tool_file(File) => string()
-% File - string()
-% Return a file name consisting of File with the suffix .tool added,
-% if File does not already have this suffix.
-%----------------------------------------
-tool_file(File) ->
- case filename:extension(File) of
- ".tool" -> File;
- _ -> File ++ ".tool"
- end.
diff --git a/lib/toolbar/vsn.mk b/lib/toolbar/vsn.mk
deleted file mode 100644
index e84fb4e37b..0000000000
--- a/lib/toolbar/vsn.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-TOOLBAR_VSN = 1.4.2.3
-
-
-
-
-
-
-
-
-
diff --git a/lib/tools/emacs/erlang.el b/lib/tools/emacs/erlang.el
index c395d22356..c1e9bec6ae 100644
--- a/lib/tools/emacs/erlang.el
+++ b/lib/tools/emacs/erlang.el
@@ -2600,6 +2600,12 @@ Value is list (stack token-start token-type in-what)."
(if (save-excursion
(goto-char (match-end 1))
(erlang-skip-blank to)
+ ;; Use erlang-variable-regexp here to look for an
+ ;; optional variable name to match EEP37 named funs.
+ (if (looking-at erlang-variable-regexp)
+ (progn
+ (goto-char (match-end 0))
+ (erlang-skip-blank to)))
(eq (following-char) ?\())
(erlang-push (list 'fun token (current-column)) stack)))
((looking-at "\\(begin\\|query\\)[^_a-zA-Z0-9]")
diff --git a/lib/tools/emacs/test.erl.indented b/lib/tools/emacs/test.erl.indented
index 7e61bcc45b..0de626125c 100644
--- a/lib/tools/emacs/test.erl.indented
+++ b/lib/tools/emacs/test.erl.indented
@@ -483,6 +483,19 @@ indent_fun() ->
Y = true andalso
kalle
end),
+ %% check EEP37 named funs
+ Fn1 = fun Fact(N) when N > 0 ->
+ F = Fact(N-1),
+ N * F;
+ Fact(0) ->
+ 1
+ end,
+ %% check anonymous funs too
+ Fn2 = fun(0) ->
+ 1;
+ (N) ->
+ N
+ end,
ok.
indent_try_catch() ->
diff --git a/lib/tools/emacs/test.erl.orig b/lib/tools/emacs/test.erl.orig
index 932758997d..57263d573b 100644
--- a/lib/tools/emacs/test.erl.orig
+++ b/lib/tools/emacs/test.erl.orig
@@ -483,6 +483,19 @@ Var = spawn(fun(X)
Y = true andalso
kalle
end),
+%% check EEP37 named funs
+Fn1 = fun Fact(N) when N > 0 ->
+ F = Fact(N-1),
+ N * F;
+Fact(0) ->
+ 1
+ end,
+%% check anonymous funs too
+ Fn2 = fun(0) ->
+1;
+ (N) ->
+ N
+ end,
ok.
indent_try_catch() ->
diff --git a/lib/tools/src/cover.erl b/lib/tools/src/cover.erl
index 13d9aefb0c..6aeb251ac2 100644
--- a/lib/tools/src/cover.erl
+++ b/lib/tools/src/cover.erl
@@ -1883,6 +1883,13 @@ munge_expr({'fun',Line,{clauses,Clauses}}, Vars) ->
%% Only for Vsn=raw_abstract_v1
{MungedClauses,Vars2}=munge_clauses(Clauses, Vars),
{{'fun',Line,{clauses,MungedClauses}}, Vars2};
+munge_expr({named_fun,Line,Name,Clauses,_Extra}, Vars) ->
+ {MungedClauses,Vars2}=munge_clauses(Clauses, Vars),
+ {{named_fun,Line,Name,MungedClauses}, Vars2};
+munge_expr({named_fun,Line,Name,Clauses}, Vars) ->
+ %% Only for Vsn=raw_abstract_v1
+ {MungedClauses,Vars2}=munge_clauses(Clauses, Vars),
+ {{named_fun,Line,Name,MungedClauses}, Vars2};
munge_expr({bin,Line,BinElements}, Vars) ->
{MungedBinElements,Vars2} = munge_exprs(BinElements, Vars, []),
{{bin,Line,MungedBinElements}, Vars2};
diff --git a/lib/tools/src/xref_reader.erl b/lib/tools/src/xref_reader.erl
index d3601c6ea0..142d28ebe6 100644
--- a/lib/tools/src/xref_reader.erl
+++ b/lib/tools/src/xref_reader.erl
@@ -171,6 +171,11 @@ expr({'fun', Line, {function, Name, Arity}, _Extra}, S) ->
handle_call(local, S#xrefr.module, Name, Arity, Line, S);
expr({'fun', _Line, {clauses, Cs}, _Extra}, S) ->
clauses(Cs, S);
+expr({named_fun, _Line, '_', Cs, _Extra}, S) ->
+ clauses(Cs, S);
+expr({named_fun, _Line, Name, Cs, _Extra}, S) ->
+ S1 = S#xrefr{funvars = [Name | S#xrefr.funvars]},
+ clauses(Cs, S1);
expr({call, Line, {atom, _, Name}, As}, S) ->
S1 = handle_call(local, S#xrefr.module, Name, length(As), Line, S),
expr(As, S1);
@@ -186,6 +191,9 @@ expr({match, _Line, {var,_,Var}, {'fun', _, {clauses, Cs}, _Extra}}, S) ->
%% that are passed around by the "expansion" of list comprehension.
S1 = S#xrefr{funvars = [Var | S#xrefr.funvars]},
clauses(Cs, S1);
+expr({match, _Line, {var,_,Var}, {named_fun, _, _, _, _} = Fun}, S) ->
+ S1 = S#xrefr{funvars = [Var | S#xrefr.funvars]},
+ expr(Fun, S1);
expr({match, _Line, {var,_,Var}, E}, S) ->
%% Used for resolving code like
%% Args = [A,B], apply(m, f, Args)
@@ -288,6 +296,8 @@ funarg({'fun', _, _Clauses, _Extra}, _S) -> true;
funarg({'fun', _, {function,_,_,_}}, _S) ->
%% New abstract format for fun M:F/A in R15.
true;
+funarg({named_fun, _, _, _, _}, _S) ->
+ true;
funarg({var, _, Var}, S) -> member(Var, S#xrefr.funvars);
funarg(_, _S) -> false.
diff --git a/lib/tools/test/cover_SUITE.erl b/lib/tools/test/cover_SUITE.erl
index 29b26c7a76..bd71218474 100644
--- a/lib/tools/test/cover_SUITE.erl
+++ b/lib/tools/test/cover_SUITE.erl
@@ -28,7 +28,7 @@
export_import/1,
otp_5031/1, eif/1, otp_5305/1, otp_5418/1, otp_6115/1, otp_7095/1,
otp_8188/1, otp_8270/1, otp_8273/1, otp_8340/1,
- otp_10979_hanging_node/1, compile_beam_opts/1]).
+ otp_10979_hanging_node/1, compile_beam_opts/1, eep37/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -53,7 +53,7 @@ all() ->
dont_reconnect_after_stop, stop_node_after_disconnect,
export_import, otp_5031, eif, otp_5305, otp_5418,
otp_6115, otp_7095, otp_8188, otp_8270, otp_8273,
- otp_8340, otp_10979_hanging_node, compile_beam_opts];
+ otp_8340, otp_10979_hanging_node, compile_beam_opts, eep37];
_pid ->
{skip,
"It looks like the test server is running "
@@ -1382,6 +1382,20 @@ comprehension_8188(Cf) ->
ok.
+eep37(Config) when is_list(Config) ->
+ [{{t,1},1},{{t,2},1},{{t,4},6},{{t,6},1},{{t,8},1}] =
+ analyse_expr(<<"begin\n" % 1
+ " F =\n" % 1
+ " fun Fact(N) when N > 0 ->\n"
+ " N * Fact(N - 1);\n" % 6
+ " Fact(0) ->\n"
+ " 1\n" % 1
+ " end,\n"
+ " F(6)\n" % 1
+ "end\n">>,
+ Config),
+ ok.
+
otp_10979_hanging_node(_Config) ->
P1 = processes(),
diff --git a/lib/tools/test/xref_SUITE.erl b/lib/tools/test/xref_SUITE.erl
index 31b0b13b7b..353275ae3b 100644
--- a/lib/tools/test/xref_SUITE.erl
+++ b/lib/tools/test/xref_SUITE.erl
@@ -1047,7 +1047,7 @@ read_expected(Version) ->
POS1 = 28, POS2 = POS1+10, POS3 = POS2+6, POS4 = POS3+6, POS5 = POS4+10,
POS6 = POS5+5, POS7 = POS6+6, POS8 = POS7+6, POS9 = POS8+8,
POS10 = POS9+10, POS11 = POS10+7, POS12 = POS11+8, POS13 = POS12+10,
- POS14 = POS13+18, % POS15 = POS14+23,
+ POS14 = POS13+18, POS15 = POS14+23,
FF = {read,funfuns,0},
U = [{POS1+5,{FF,{dist,'$F_EXPR',0}}},
@@ -1098,6 +1098,7 @@ read_expected(Version) ->
{POS1+1,{FF,{mod17,fun17,0}}},
{POS1+2,{FF,{erlang,spawn,1}}},
{POS1+2,{FF,{read,local,0}}},
+ {POS1+3,{FF,{erlang,binary_to_term,1}}},
{POS1+3,{FF,{erlang,spawn,1}}},
{POS1+4,{FF,{dist,func,0}}},
{POS1+4,{FF,{erlang,spawn,1}}},
@@ -1196,11 +1197,6 @@ read_expected(Version) ->
{0,{FF,{modul,'$F_EXPR',179}}}]
++ O1;
_ ->
-% [{POS15+2,{{read,bi,0},{foo,t,0}}},
-% {POS15+3,{{read,bi,0},{bar,t,0}}},
-% {POS15+6,{{read,bi,0},{read,local,0}}},
-% {POS15+8,{{read,bi,0},{foo,t,0}}},
-% {POS15+10,{{read,bi,0},{bar,t,0}}}] ++
[{16,{FF,{read,'$F_EXPR',178}}},
{17,{FF,{modul,'$F_EXPR',179}}}]
++
@@ -1211,7 +1207,6 @@ read_expected(Version) ->
OKB1 = [{POS13+1,{FF,{erts_debug,apply,4}}},
{POS13+2,{FF,{erts_debug,apply,4}}},
{POS13+3,{FF,{erts_debug,apply,4}}},
- {POS1+3, {FF,{erlang,binary_to_term,1}}},
{POS3+1, {FF,{erlang,spawn,3}}},
{POS3+2, {FF,{erlang,spawn,3}}},
{POS3+3, {FF,{erlang,spawn_link,3}}},
@@ -1227,7 +1222,11 @@ read_expected(Version) ->
_ ->
[{POS13+16, {{read,bi,0},{erlang,'!',2}}},
{POS13+16, {{read,bi,0},{erlang,'-',1}}},
- {POS13+16, {{read,bi,0},{erlang,self,0}}}]
+ {POS13+16, {{read,bi,0},{erlang,self,0}}},
+ {POS15+1, {{read,bi,0},{erlang,'>',2}}},
+ {POS15+2, {{read,bi,0},{erlang,'-',2}}},
+ {POS15+2, {{read,bi,0},{erlang,'*',2}}},
+ {POS15+8, {{read,bi,0},{erlang,'/',2}}}]
end
++ [{POS14+19, {{read,bi,0},{erlang,'+',2}}},
{POS14+21, {{read,bi,0},{erlang,'+',2}}},
diff --git a/lib/tools/test/xref_SUITE_data/read/read.erl b/lib/tools/test/xref_SUITE_data/read/read.erl
index 19694c9e25..5f388194b0 100644
--- a/lib/tools/test/xref_SUITE_data/read/read.erl
+++ b/lib/tools/test/xref_SUITE_data/read/read.erl
@@ -156,20 +156,19 @@ bi() ->
<<D:16, E, F/binary>> = Bin3,
X = 9, <<(X+1):8>>,
_Fyy = <<X:4/little-signed-integer-unit:8>>,
- D + E + F.
-%bi() ->
-% %% POS15=POS14+13
-% try
-% foo:t(),
-% bar:t()
-% of
-% {v,1} ->
-% local();
-% {v,2} ->
-% foo:t()
-% catch
-% {'EXIT',_} -> bar:t()
-% end.
+ D + E + F;
+bi() ->
+ %% EEP37. POS15=POS14+23
+ F = fun Fact(N) when N > 0 ->
+ N * Fact(N - 1);
+ Fact(0) ->
+ 1
+ end,
+ F(6),
+ G = fun _(foo) -> bar;
+ _(X) -> X / 3
+ end,
+ G(foo).
local() ->
true.
diff --git a/lib/tv/AUTHORS b/lib/tv/AUTHORS
deleted file mode 100644
index 7736a75b2f..0000000000
--- a/lib/tv/AUTHORS
+++ /dev/null
@@ -1,5 +0,0 @@
-Original Authors and Contributors:
-
-Fredrik Gustafson
-
-
diff --git a/lib/tv/Makefile b/lib/tv/Makefile
deleted file mode 100644
index 1c6d4b54f6..0000000000
--- a/lib/tv/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2009. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Common Macros
-# ----------------------------------------------------
-
-SUB_DIRECTORIES = src priv doc/src
-
-include vsn.mk
-VSN = $(TV_VSN)
-
-SPECIAL_TARGETS =
-
-# ----------------------------------------------------
-# Default Subdir Targets
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_subdir.mk
diff --git a/lib/tv/doc/html/.gitignore b/lib/tv/doc/html/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/tv/doc/html/.gitignore
+++ /dev/null
diff --git a/lib/tv/doc/man3/.gitignore b/lib/tv/doc/man3/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/tv/doc/man3/.gitignore
+++ /dev/null
diff --git a/lib/tv/doc/pdf/.gitignore b/lib/tv/doc/pdf/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/tv/doc/pdf/.gitignore
+++ /dev/null
diff --git a/lib/tv/doc/src/Makefile b/lib/tv/doc/src/Makefile
deleted file mode 100644
index 413eb8f634..0000000000
--- a/lib/tv/doc/src/Makefile
+++ /dev/null
@@ -1,138 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../../vsn.mk
-VSN=$(TV_VSN)
-APPLICATION=tv
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
-
-# ----------------------------------------------------
-# Target Specs
-# ----------------------------------------------------
-XML_APPLICATION_FILES = ref_man.xml
-XML_REF3_FILES = tv.xml
-
-XML_PART_FILES = \
- part.xml \
- part_notes.xml
-
-XML_CHAPTER_FILES = \
- table_visualizer_chapter.xml \
- notes.xml
-
-BOOK_FILES = book.xml
-
-XML_FILES = \
- $(BOOK_FILES) $(XML_CHAPTER_FILES) \
- $(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES)
-
-GIF_FILES = tv_start.gif \
- tv_start_mnesia.gif \
- tv_start_system.gif \
- tv_start_system_unreadable.gif \
- tv_start_pid_sorted.gif \
- tv_start_other_node.gif \
- tv_table_browser.gif \
- tv_table_browser_updated.gif \
- set_poll_int.gif \
- tv_record_editor_mnesia.gif \
- tv_search_window.gif \
- tv_search_result.gif \
- tv_row_marked.gif \
- tv_row_marked_popup.gif \
- info_window.gif \
- tv_create_table.gif
-
-# ----------------------------------------------------
-
-HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html)
-
-INFO_FILE = ../../info
-EXTRA_FILES = \
- $(DEFAULT_GIF_FILES) \
- $(DEFAULT_HTML_FILES) \
- $(XML_REF3_FILES:%.xml=$(HTMLDIR)/%.html) \
- $(XML_CHAPTER_FILES:%.xml=$(HTMLDIR)/%.html)
-
-MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
-
-HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
-
-TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
-
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-XML_FLAGS +=
-DVIPS_FLAGS +=
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-$(HTMLDIR)/%.gif: %.gif
- $(INSTALL_DATA) $< $@
-
-docs: pdf html man
-
-$(TOP_PDF_FILE): $(XML_FILES)
-
-pdf: $(TOP_PDF_FILE)
-
-html: gifs $(HTML_REF_MAN_FILE)
-
-
-clean clean_docs:
- rm -rf $(HTMLDIR)/*
- rm -f $(MAN3DIR)/*
- rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
- rm -f errs core *~
-
-man: $(MAN3_FILES)
-
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
-
-debug opt:
-
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_docs_spec: docs
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf"
- $(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(HTMLDIR)/* \
- "$(RELSYSDIR)/doc/html"
- $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
- $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
- $(INSTALL_DATA) $(MAN3_FILES) "$(RELEASE_PATH)/man/man3"
-
-release_spec:
-
diff --git a/lib/tv/doc/src/book.xml b/lib/tv/doc/src/book.xml
deleted file mode 100644
index b0d05d290b..0000000000
--- a/lib/tv/doc/src/book.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE book SYSTEM "book.dtd">
-
-<book xmlns:xi="http://www.w3.org/2001/XInclude">
- <header titlestyle="normal">
- <copyright>
- <year>1997</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Table Visualizer (TV)</title>
- <prepared></prepared>
- <docno></docno>
- <date></date>
- <rev>2.0.3</rev>
- </header>
- <insidecover>
- </insidecover>
- <pagetext>Table Visualizer (TV)</pagetext>
- <preamble>
- </preamble>
- <parts lift="no">
- <xi:include href="part.xml"/>
- </parts>
- <applications>
- <xi:include href="ref_man.xml"/>
- </applications>
- <releasenotes>
- <xi:include href="notes.xml"/>
- </releasenotes>
- <listofterms></listofterms>
- <index></index>
-</book>
-
-
diff --git a/lib/tv/doc/src/fascicules.xml b/lib/tv/doc/src/fascicules.xml
deleted file mode 100644
index c075478967..0000000000
--- a/lib/tv/doc/src/fascicules.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE fascicules SYSTEM "fascicules.dtd">
-
-<fascicules>
- <fascicule file="part" href="part_frame.html" entry="no">
- User's Guide
- </fascicule>
- <fascicule file="ref_man" href="ref_man_frame.html" entry="yes">
- Reference Manual
- </fascicule>
- <fascicule file="part_notes" href="part_notes_frame.html" entry="no">
- Release Notes
- </fascicule>
- <fascicule file="" href="../../../../doc/print.html" entry="no">
- Off-Print
- </fascicule>
-</fascicules>
-
-
diff --git a/lib/tv/doc/src/info_window.gif b/lib/tv/doc/src/info_window.gif
deleted file mode 100644
index 7913fc4230..0000000000
--- a/lib/tv/doc/src/info_window.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/info_window.ps b/lib/tv/doc/src/info_window.ps
deleted file mode 100644
index b459523d0f..0000000000
--- a/lib/tv/doc/src/info_window.ps
+++ /dev/null
@@ -1,814 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./info_window.tmp.eps)
-%%CreationDate: (Tue Jun 12 16:12:33 2001)
-%%BoundingBox: 0 60 377 354
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 60 377 354
-userdict begin
-%%BeginData:
-DisplayImage
-0 60
-377.000000 294.000000
-12
-590 460
-1
-0
-0
-8
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-828282
-000a01ff01ff0137000b0208040001ff01ff013700000208040000000208040002ff02ff
-0237000002080400000002080400020000ff00ff00340400020000000208040000000202
-04060200000004ff04ff0434020000000405020204000000020204000209000d02ff02ff
-022b00000202040000000202040002080000020d040002ea010102060101021d01020229
-010102e700000202040000000202040002080000020d040002d801070209010102060101
-020e0101020b0101022601000203010102e700000202040000000202040002080000020d
-040002db0101020c010102060101020e0101020b01010225010102ed0000020204000000
-0202040002080000020204060203040002db010102040103020301010200010102030101
-020201030207010102020101020001010202010402010103020201010200010102010101
-020001010201010102030103020101040201010102020103020301010200010102d70000
-02020400000004030208000002020400030400000203040002db01010203010102010101
-020201020200010102020101020101010201010102060101020201020200010102020101
-020201010201010102010101020001010201010202000102020001010201010102010101
-02010101020301010201010102010101020201020200010102d6000004030101020b0000
-02030400030200000204040002db01010207010102020101020101010202010102010101
-020101010206010102020101020101010202010102020101020101010201010202030101
-020101010201010102050101020101010203010102010101020101010202010102010101
-02d90103020b000002030400030200000204040002db0101020401040202010102010101
-020201010201010502060101020201010201010102020101020201010201010102010101
-020401010201010102010101020201040201010102030101020101010201010102020101
-0201010102d90103020b000002040400030000000205040002db01010203010102010101
-02020101020101010202010102010101020a010102020101020101010202010102020101
-020101010201010102040101020101010201010102010101020101010201010102030101
-0201010102010101020201010201010102d90103020b0000020404000300000002050400
-02db01010203010102010101020201010201010102020101020101010202010002060101
-020201010201010102020101020201010201010102010101020401010201010102010101
-020101010201010102010101020301010201010102010101020201010201010102d90103
-020b0000020500000206040002db01010204010202000101020101040203010102020103
-020701010202010102010101020201010203010302020101020401010201010102010101
-0202010202000101020101020201010102020103020301010201010102d90103020b0000
-020d040002ff02ff022d0103020b0000020d040002ff02ff022d0103020b0000020d0400
-02ff02ff022d0103020c040d02ff02ff022e010302ff02ff0249010302ff02ff02490103
-020200ff00ff00420400020201030202000004ff04ff04420202010302ff02ff02490103
-020200ff00ff004302020103020200ff00ff00420700020201030202000105ff05ff053f
-0701020201030202000105ff05ff053f0701020201030202000105ff05ff053f07010202
-01030202000105ff05ff053f0701020201030202000105ff05ff053f0701020201030202
-0001050b0604050406000503060205ff05ff052107010202010302020001050b0600050f
-060005ff05ff052107010202010302020001050b060005060602050506000503060205ff
-05ff051a07010202010302020001050b06000508060005050600050206000502060005ff
-05ff051907010202010302020001050b06030505060005050600050206000502060005ff
-05ff051907010202010302020001050b060005080600050506000502060405ff05ff0519
-07010202010302020001050b060005080600050506000502060005ff05ff051d07010202
-010302020001050b06000508060005050600050206000502060005ff05ff051907010202
-010302020001050b060005080600050506000503060205ff05ff051a0701020201030202
-000105ff05ff053f07010202010302020001050a060605ff05ff052d0701020201030202
-0001050a060605ff05ff052d0701020201030202000105ff05ff053f0701020201030202
-000105ff05ff053f0701020201030202000105ff05ff053f0701020201030202000107ff
-07ff0741020201030202000007ff07ff074202020103020205ff05ff0543020201030202
-05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202
-05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202
-05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202
-05ff05ff0543020201030202050400770501007705010077050100770558020201030202
-050400760700050100760700050100760700050100760700055802020103020205040001
-057307010501000105730701050100010573070105010001057307010558020201030202
-050400010573070105010001057307010501000105730701050100010573070105580202
-010302020504000105730701050100010573070105010001057307010501000105730701
-055802020103020205040001057307010501000105730701050100010573070105010001
-057307010558020201030202050400010573070105010001057307010501000105730701
-050100010573070105580202010302020504000105730701050100010573070105010001
-057307010501000105730701055802020103020205040001057307010501000105730701
-050100010573070105010001057307010558020201030202050400010573070105010001
-057307010501000105730701050100010573070105580202010302020504000105730701
-050100010573070105010001057307010501000105730701055802020103020205040001
-057307010501000105730701050100010573070105010001057307010558020201030202
-05040001051d010405080100050601020510010405050100051f07010501000105080102
-0514010005110102050b010005050100050601000520070105010001052c010205050100
-053c070105010001052101020504010005480701055802020103020205040001051f0100
-050a0100050801000512010005070100051f070105010001050801000501010005250100
-05020100050a0100050501000528070105010001052b0100050201000542070105010001
-05200100050201000503010005480701055802020103020205040001051f010005040102
-05020100050001010505010005030102050b01000504010105000100051f070105010001
-050801000501010005030102050301020503010205030102050901000506010205020104
-05010104050201020502010005000101050301010500010005020102050b070105010001
-052b0100050601020502010405020102052e070105010001052001000505010405020102
-050201000500010105030102050301010500010005020102052407010558020201030202
-05040001051f010005030100050201000501010105010100050401000502010005020100
-050a01000503010005010101051f07010501000105080100050101000502010005020100
-050101000502010005040100050201000502010005090100050401000502010005030100
-0505010005060100050201010501010005010100050101010501010005020100050a0701
-05010001052c010005070100050601000501010005020100052d07010501000105210100
-050601000503010005020100050101010501010005010100050201000501010005010101
-050101000502010005230701055802020103020205040001051f01000507010005010100
-05020100050401000502010005020100050a01000503010005020100051f070105010001
-0508010305060100050101000508010005020100050e0101050201000502010005030100
-05050100050601000502010005020100050101000502010005010100050e070105010001
-052d010105050100050501000502010005020100052d0701050100010522010105040100
-050301000502010005010100050901000501010005020100050101000502010005230701
-055802020103020205040001051f01000504010305010100050201000504010005020104
-050a01000503010005020100051f07010501000105080100050201000502010305020102
-050501000502010005100100050101040503010005050100050601000502010005020100
-050101000502010005020102050b070105010001052f0100050401000504010005030104
-052d07010501000105240100050301000503010005020100050101000506010305010100
-050201000501010405230701055802020103020205040001051f01000503010005020100
-05010100050201000504010005020100050e01000503010005020100051f070105010001
-05080100050201000501010005020100050501000504010005020100050c010005020100
-050101000507010005050100050601000502010005020100050101000502010005050100
-050a070105010001052b0100050201000504010005030100050401000531070105010001
-052001000502010005030100050301000502010005010100050501000502010005010100
-050201000501010005270701055802020103020205040001051f01000503010005020100
-0501010105010100050401000502010005020100050a01000503010005010101051f0701
-050100010508010005020100050101000502010005010100050201000504010005020100
-050201000508010005020100050101000502010005030100050501000506010005020100
-0502010005010100050101010501010005020100050a070105010001052b010005020100
-05040100050201000505010005020100052d070105010001052001000502010005030100
-050301000502010005010100050501000502010005010100050101010501010005020100
-05230701055802020103020205040001051f010005040103050101000500010105050100
-05030102050901040502010105000100051f070105010001050801030503010305020102
-0505010005030102050a0102050301020505010105040101050401000502010005020100
-050201010500010005020102050b070105010001052c0102050501000502010405020102
-052e07010501000105210102050501010502010205020100050601030502010105000100
-050201020524070105580202010302020504000105730701050100010560010005110701
-05010001057307010501000105470100052a070105580202010302020504000105730701
-05010001055c010005020100051107010501000105730701050100010543010005020100
-052a07010558020201030202050400010573070105010001055d01020512070105010001
-057307010501000105440102052b07010558020201030202050400010573070105010001
-057307010501000105730701050100010573070105580202010302020504000105730701
-050100010573070105010001057307010501000105730701055802020103020205040001
-057307010501000105730701050100010573070105010001057307010558020201030202
-050400010573070105010001057307010501000105730701050100010573070105580202
-010302020504000105730701050100010573070105010001057307010501000105730701
-055802020103020205040001057307010501000105730701050100010573070105010001
-05730701055802020103020205040001057400ff00c20504020201030202050400010574
-00ff00c1070005040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105d101ff0158050a0701
-05040202010302020504000105d1010000ff00560100050a070105040202010302020504
-000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056
-0100050a070105040202010302020504000105d1010000ff00560100050a070105040202
-010302020504000105d1010000ff00560100050a070105040202010302020504000105d1
-010000ff00560100050a0701050402020103020205040001050a01040508010005060102
-05100104059701000010010000ff00440100050a0701050402020103020205040001050c
-0100050a01000508010005120100059901000010010000ff00440100050a070105040202
-0103020205040001050c01000504010205020100050001010505010005030102050b0100
-050301000502010005010100050001010503010205040101057c01000008010200020104
-0002010200ff003c0100050a0701050402020103020205040001050c0100050301000502
-01000501010105010100050401000502010005020100050a010005030100050201000501
-010105010100050101000502010005030101057c01000007010000020100000301000003
-01000002010000ff003b0100050a0701050402020103020205040001050c010005070100
-0501010005020100050401000502010005020100050a0100050401000501010005010100
-050201000501010005020100058201000007010000020100000301000003010000ff003f
-0100050a0701050402020103020205040001050c01000504010305010100050201000504
-010005020104050a01000504010005010100050101000502010005010104058201000007
-0104000301000004010200ff003c0100050a0701050402020103020205040001050c0100
-050301000502010005010100050201000504010005020100050e01000505010005000100
-0501010005020100050101000586010000070100000701000007010000ff003b0100050a
-0701050402020103020205040001050c0100050301000502010005010101050101000504
-01000502010005020100050a010005050101050201010501010005010100050201000503
-0101057c0100000701000002010000030100000301000002010000ff003b0100050a0701
-050402020103020205040001050c01000504010305010100050001010505010005030102
-050b01000506010005020100050001010503010205040101057c01000008010200050101
-0002010200ff003c0100050a0701050402020103020205040001053e010005020100058d
-010000ff00560100050a0701050402020103020205040001053b01000500010005030100
-058d010000ff00560100050a0701050402020103020205040001053c010005040100058d
-010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a
-070105040202010302020504000105d1010000ff00560100050a07010504020201030202
-0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff
-00560100050a070105040202010302020504000105d101ff0158050a0701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105d101ff0158050a070105040202010302020504000105d10100
-00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701
-05040202010302020504000105d1010000ff00560100050a070105040202010302020504
-000105d1010000ff00560100050a070105040202010302020504000105d10100000a0101
-00a2010100a40100050a070105040202010302020504000105d101000009010000700100
-002a01000008010000a30100050a0701050402020103020205040001050a010405080100
-050601020510010405050100059001000009010000040102001901000006010000190100
-000a0100000601020013010000040101000a010200040100000c01010002010000070100
-00a30100050a0701050402020103020205040001050c0100050a01000508010005120100
-050701000590010000090100000601000019010000210100000a01000008010000120100
-0004010000010100000801000002010000020101000b0100000101000002010000060100
-00a30100050a0701050402020103020205040001050c0100050401020502010005000101
-0505010005030102050b0100050401010500010005030101058a01000009010000060100
-000301020003010200030102000201040002010200030102000201000000010100090104
-0002010200020100000001010005010000030102000a01000005010000010100000c0100
-0001010000000100000b010000010100000301000005010000a30100050a070105040202
-0103020205040001050c0100050301000502010005010101050101000504010005020100
-05020100050a0100050301000501010105030101058a0100000901000006010000020100
-000201000001010000020100000101000002010000030100000601000002010000020100
-0001010100010100000a0100000301000002010000010101000101000004010000020100
-00020100000801000006010000010100000c010000030100000b01000001010000040100
-0004010000a30100050a0701050402020103020205040001050c01000507010005010100
-05020100050401000502010005020100050a010005030100050201000590010000070101
-000701000002010000020100000101000009010000030100000601000002010000020100
-0001010000020100000a0100000701000001010000020100000401000002010000020100
-000701000007010000010100000a010100040100000b0100000101000005010000040101
-00a10100050a0701050402020103020205040001050c0100050401030501010005020100
-0504010005020104050a0100050301000502010005900100000901000006010000020100
-000201000001010000060103000301000006010000020100000201000001010000020100
-000a01000004010300010100000201000004010000020104000801000006010000010100
-000c010000030100000b010000010100000401000004010000a30100050a070105040202
-0103020205040001050c0100050301000502010005010100050201000504010005020100
-050e01000503010005020100059001000009010000060100000201000002010000010100
-0005010000020100000301000006010000020100000201000001010000020100000a0100
-000301000002010000010100000201000004010000020100000d01000005010000010100
-000c010000030100000b010000010100000301000005010000a30100050a070105040202
-0103020205040001050c0100050301000502010005010101050101000504010005020100
-05020100050a0100050301000501010105030101058a0100000901000006010000020100
-000201000001010000020100000101000002010000030100000601000002010000020100
-0001010000020100000a0100000301000002010000010101000101000004010000020100
-000201000003010100040100000401000001010000030101000201000002010000030100
-000501010003010000010100000201000006010000a30100050a07010504020201030202
-05040001050c010005040103050101000500010105050100050301020509010405020101
-0500010005030101058a0100000901000006010000030102000301020003010300040101
-00040100000301020002010000020100000b010100020103000101000000010100050100
-000301020004010100050100000401010004010100030102000201040003010100040101
-000201000007010000a30100050a070105040202010302020504000105d1010000090100
-003a01050027010000060100002a01000008010000a30100050a07010504020201030202
-0504000105d10100000a010100640101003b010100a40100050a07010504020201030202
-0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff
-00560100050a070105040202010302020504000105d1010000ff00560100050a07010504
-0202010302020504000105d1010000ff00560100050a0701050402020103020205040001
-05d1010000ff00560100050a070105040202010302020504000105d101ff0158050a0701
-05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff
-0535070105040202010302020504000105ff05ff05350701050402020103020205040001
-05ff05ff0535070105040202010302020504000105ff05ff053507010504020201030202
-0504000105ff05ff0535070105040202010302020504000105ff05ff0535070105040202
-010302020504000105ff05ff0535070105040202010302020504000105ff05ff05350701
-05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff
-0535070105040202010302020504000105ff05ff05350701050402020103020205040001
-05ff05ff0535070105040202010302020504000105ff05ff053507010504020201030202
-0504000105ff05ff0535070105040202010302020504000105ff05ff0535070105040202
-010302020504000105ff05ff0535070105040202010302020504000105ff05ff05350701
-05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff
-0535070105040202010302020504000105d101ff0158050a070105040202010302020504
-000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056
-0100050a070105040202010302020504000105d1010000ff00560100050a070105040202
-010302020504000105d1010000ff00560100050a070105040202010302020504000105d1
-010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a
-0701050402020103020205040001050a0104050801000506010205100100050201000597
-010000080102001901000006010000190100000a01000006010200f60100050a07010504
-02020103020205040001050c0100050a010005080100051001010501010005970100000a
-01000019010000210100000a01000008010000f60100050a070105040202010302020504
-0001050c0100050401020502010005000101050501000503010205090101050101000502
-010205020101050001000503010205040101057c0100000a010000030102000301020003
-010200020104000201020003010200020100000001010009010400020102000201000000
-0101000501000003010200ef0100050a0701050402020103020205040001050c01000503
-010005020100050101010501010005040100050201000502010005080100050001000500
-01000501010005020100050101000500010005000100050101000502010005030101057c
-0100000a0100000201000002010000010100000201000001010000020100000301000006
-010000020100000201000001010100010100000a01000003010000020100000101010001
-010000040100000201000002010000ee0100050a0701050402020103020205040001050c
-010005070100050101000502010005040100050201000502010005080100050001000500
-010005050100050101000500010005000100050101000502010005820100000a01000002
-010000020100000101000009010000030100000601000002010000020100000101000002
-0100000a010000070100000101000002010000040100000201000002010000ee0100050a
-0701050402020103020205040001050c0100050401030501010005020100050401000502
-01040508010005010101050201030501010005000100050001000501010405820100000a
-010000020100000201000001010000060103000301000006010000020100000201000001
-010000020100000a0100000401030001010000020100000401000002010400ee0100050a
-0701050402020103020205040001050c0100050301000502010005010100050201000504
-010005020100050c01000501010105010100050201000501010005000100050001000501
-010005860100000a01000002010000020100000101000005010000020100000301000006
-010000020100000201000001010000020100000a01000003010000020100000101000002
-0100000401000002010000f20100050a0701050402020103020205040001050c01000503
-010005020100050101010501010005040100050201000502010005080100050201000501
-010005020100050101000500010005000100050101000502010005030101057c0100000a
-010000020100000201000001010000020100000101000002010000030100000601000002
-0100000201000001010000020100000a0100000301000002010000010101000101000004
-0100000201000002010000ee0100050a0701050402020103020205040001050c01000504
-010305010100050001010505010005030102050901000502010005020103050101000500
-0100050001000502010205040101057c0100000a01000003010200030102000301030004
-010100040100000301020002010000020100000b01010002010300010100000001010005
-01000003010200ef0100050a070105040202010302020504000105d10100003e010500ff
-00110100050a070105040202010302020504000105d1010000ff00560100050a07010504
-0202010302020504000105d1010000ff00560100050a0701050402020103020205040001
-05d1010000ff00560100050a070105040202010302020504000105d1010000ff00560100
-050a070105040202010302020504000105d1010000ff00560100050a0701050402020103
-02020504000105d1010000ff00560100050a070105040202010302020504000105d101ff
-0158050a070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105d101ff0158050a070105040202
-010302020504000105d1010000ff00560100050a070105040202010302020504000105d1
-010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a
-070105040202010302020504000105d1010000ff00560100050a07010504020201030202
-0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff
-00560100050a0701050402020103020205040001050a0104050801000506010205100100
-05020100051d010305130100050b0100051c0100053501000009010000ff004b0100050a
-0701050402020103020205040001050c0100050a0100050801000510010105010100051d
-010005020100051f0100051c0100053501000009010000ff004b0100050a070105040202
-0103020205040001050c0100050401020502010005000101050501000503010205090101
-050101000502010205020101050001000503010205090100050201000502010205030101
-050001000502010205030102050201040502010205020100050001010503010205030101
-0500010005030101052f0100000701040001010000000101000201000002010000020102
-00ff00350100050a0701050402020103020205040001050c010005030100050201000501
-010105010100050401000502010005020100050801000500010005000100050101000502
-010005010100050001000500010005010100050201000508010005020100050101000502
-010005010100050101010504010005020100050201000503010005030100050201000501
-0101050101000501010005020100050101000501010105030101052f0100000901000003
-0101000101000001010000020100000101000002010000ff00340100050a070105040202
-0103020205040001050c0100050701000501010005020100050401000502010005020100
-050801000500010005000100050501000501010005000100050001000501010005020100
-050801030502010005020100050101000502010005040100050201000507010005030100
-050201000501010005050100050201000501010005020100053501000009010000030100
-0005010000020100000101000002010000ff00340100050a070105040202010302020504
-0001050c0100050401030501010005020100050401000502010405080100050101010502
-010305010100050001000500010005010104050801000501010005020104050101000502
-010005040100050301020504010005030104050101000505010405010100050201000535
-0100000901000003010000050100000201000001010400ff00340100050a070105040202
-0103020205040001050c0100050301000502010005010100050201000504010005020100
-050c010005010101050101000502010005010100050001000500010005010100050c0100
-050201000501010005050100050201000504010005060100050301000503010005050100
-050501000505010005020100053501000009010000030100000501000002010000010100
-00ff00380100050a0701050402020103020205040001050c010005030100050201000501
-010105010100050401000502010005020100050801000502010005010100050201000501
-010005000100050001000501010005020100050801000502010005010100050201000501
-010005010101050401000502010005020100050301000503010005020100050101000505
-010005020100050101000501010105030101052f01000009010000030100000501000001
-0101000101000002010000ff00340100050a0701050402020103020205040001050c0100
-050401030501010005000101050501000503010205090100050201000502010305010100
-050001000500010005020102050901000502010005020102050301010500010005040100
-0503010205050101050201020502010005060102050301010500010005030101052f0100
-000a01010001010000060101000001000002010200ff00350100050a0701050402020103
-020205040001056901000566010000ff00560100050a0701050402020103020205040001
-05650100050201000566010000ff00560100050a07010504020201030202050400010566
-01020567010000ff00560100050a070105040202010302020504000105d1010000ff0056
-0100050a070105040202010302020504000105d1010000ff00560100050a070105040202
-010302020504000105d1010000ff00560100050a070105040202010302020504000105d1
-010000ff00560100050a070105040202010302020504000105d101ff0158050a07010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105d101ff0158050a0701050402020103020205040001
-05d1010000ff00560100050a070105040202010302020504000105d1010000ff00560100
-050a070105040202010302020504000105d1010000ff00560100050a0701050402020103
-02020504000105d1010000ff00560100050a070105040202010302020504000105d10100
-00ff00560100050a070105040202010302020504000105d10100000b0100002a010000ff
-001d0100050a0701050402020103020205040001050a0103053401020513010005190100
-0503010005130104050801000506010205280100000a010000040101000a010200040100
-000c01010002010000ff001c0100050a0701050402020103020205040001050a01000502
-01000532010005020100052d01000503010005150100050a010005080100052801000009
-01000004010000010100000801000002010000020101000b0100000101000002010000ff
-001b0100050a0701050402020103020205040001050a0100050201000501010005000101
-050301020503010205030102050301020503010205090100050201000501010005020100
-050101000500010105030102050201000500010105030101050001000508010405010100
-0500010105030102050b0100050401020502010005000101050501000503010205040101
-051a0100000801000005010000010100000c01000001010000000100000b010000010100
-0003010000ff001a0100050a0701050402020103020205040001050a0100050201000501
-010105010100050101000502010005010100050201000501010005020100050101000502
-010005010100050201000508010005020100050101000502010005010101050101000504
-010005020101050101000501010005010101050a01000503010105010100050101000502
-0100050a0100050301000502010005010101050101000504010005020100050201000503
-0101051a0100000701000006010000010100000c010000030100000b0100000101000004
-010000ff00190100050a0701050402020103020205040001050a01030502010005050100
-050201000501010005050100050201000501010005050100050c01000502010005010100
-050001000500010005010100050201000504010005020100050201000501010005020100
-050a010005030100050201000501010005020100050a0100050701000501010005020100
-05040100050201000502010005200100000601000007010000010100000a010100040100
-000b0100000101000005010000ff00180100050a0701050402020103020205040001050a
-010005050100050501000502010005010100050501040502010205030102050901000502
-010005010100050001000500010005010100050201000504010005020100050201000501
-010005020100050a0100050301000502010005010104050a010005040103050101000502
-0100050401000502010405200100000701000006010000010100000c010000030100000b
-0100000101000004010000ff00190100050a0701050402020103020205040001050a0100
-050501000505010005020100050101000505010005090100050501000508010005020100
-050101000500010005000100050101000502010005040100050201000502010005010100
-05020100050a0100050301000502010005010100050e0100050301000502010005010100
-05020100050401000502010005240100000801000005010000010100000c010000030100
-000b0100000101000003010000ff001a0100050a0701050402020103020205040001050a
-010005050100050501000502010005010100050201000501010005020100050101000502
-010005010100050201000508010005020100050101000500010005000100050101000502
-01000504010005020100050201000501010005010101050a010005030100050201000501
-010005020100050a01000503010005020100050101010501010005040100050201000502
-010005030101051a01000009010000040100000101000003010100020100000201000003
-01000005010100030100000101000002010000ff001b0100050a07010504020201030202
-05040001050a0100050501000506010205030102050301020503010205030102050a0102
-050301000500010005020100050201000504010005020100050201000502010105000100
-050b0101050101000502010005020102050b010005040103050101000500010105050100
-0503010205040101051a0100000a01000004010100040101000301020002010400030101
-000401010002010000ff001c0100050a0701050402020103020205040001056901000566
-0100000b0100002a010000ff001d0100050a070105040202010302020504000105650100
-050201000566010000ff00560100050a0701050402020103020205040001056601020567
-010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a
-070105040202010302020504000105d1010000ff00560100050a07010504020201030202
-0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff
-00560100050a070105040202010302020504000105d101ff0158050a0701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105d101ff0158050a070105040202010302020504000105d10100
-00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701
-05040202010302020504000105d1010000ff00560100050a070105040202010302020504
-000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056
-0100050a070105040202010302020504000105d1010000ff00560100050a070105040202
-0103020205040001050a0100050201000527010105090102051301000517010305590100
-00ff00560100050a0701050402020103020205040001050a01010501010005260100050a
-010005020100052b0100050201000558010000ff00560100050a07010504020201030202
-05040001050a01010501010005020102050201010500010005030102050a010205040100
-050a01000502010005010100050201000501010005000101050301020502010005000101
-050301010500010005080100050201000501010005000101050301020503010205030102
-0503010205030102050401010528010000ff00560100050a070105040202010302020504
-0001050a0100050001000500010005010100050201000501010005000100050001000501
-010005020100050801000502010005010104050801000502010005010100050201000501
-010105010100050401000502010105010100050101000501010105080100050201000501
-010105010100050101000502010005010100050201000501010005020100050101000502
-01000501010005020100050301010528010000ff00560100050a07010504020201030202
-05040001050a010005000100050001000505010005010100050001000500010005010100
-05020100050801000502010005030100050a010005020100050101000500010005000100
-050101000502010005040100050201000502010005010100050201000508010305020100
-050501000502010005010100050501000502010005010100050501000532010000ff0056
-0100050a0701050402020103020205040001050a01000501010105020103050101000500
-01000500010005010104050801000502010005030100050a010005020100050101000500
-010005000100050101000502010005040100050201000502010005010100050201000508
-010005050100050501000502010005010100050501040502010205030102052f010000ff
-00560100050a0701050402020103020205040001050a0100050101010501010005020100
-05010100050001000500010005010100050c01000502010005030100050a010005020100
-050101000500010005000100050101000502010005040100050201000502010005010100
-050201000508010005050100050501000502010005010100050501000509010005050100
-052e010000ff00560100050a0701050402020103020205040001050a0100050201000501
-010005020100050101000500010005000100050101000502010005080100050201000503
-0100050a0100050201000501010005000100050001000501010005020100050401000502
-010005020100050101000501010105080100050501000505010005020100050101000502
-0100050101000502010005010100050201000501010005020100050301010528010000ff
-00560100050a0701050402020103020205040001050a0100050201000502010305010100
-050001000500010005020102050a010205040100050b0102050301000500010005020100
-050201000504010005020100050201000502010105000100050801000505010005060102
-05030102050301020503010205030102050401010528010000ff00560100050a07010504
-02020103020205040001056901000566010000ff00560100050a07010504020201030202
-0504000105650100050201000566010000ff00560100050a070105040202010302020504
-0001056601020567010000ff00560100050a070105040202010302020504000105d10100
-00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701
-05040202010302020504000105d1010000ff00560100050a070105040202010302020504
-000105d1010000ff00560100050a070105040202010302020504000105d101ff0158050a
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000105ff05ff0535070105040202010302020504000105ff
-05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504
-000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103
-02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504
-0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535
-070105040202010302020504000107ff07ff073705040202010100040504000007ff07ff
-0738050400050202040005ff05ff054300000202040000000202040005ff05ff05430000
-0202040000000202040005ff05ff054300000202040000000202040005ff05ff05430000
-0202040000000202040005ff05ff0543000002020400000002020400000502ff02ff0237
-00060202040000000208040002ff02ff023700000208040000000208040002ff02ff0237
-00000208040000000208040001ff01ff01370000020804000000040901ff01ff01370000
-0409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 60 377 354
-%%EOF
diff --git a/lib/tv/doc/src/note.gif b/lib/tv/doc/src/note.gif
deleted file mode 100644
index 6fffe30419..0000000000
--- a/lib/tv/doc/src/note.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/notes.xml b/lib/tv/doc/src/notes.xml
deleted file mode 100644
index 4f066e5c70..0000000000
--- a/lib/tv/doc/src/notes.xml
+++ /dev/null
@@ -1,288 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>TV Release Notes</title>
- <prepared>otp_appnotes</prepared>
- <docno>nil</docno>
- <date>nil</date>
- <rev>nil</rev>
- <file>notes.xml</file>
- </header>
- <p>This document describes the changes made to the TV application.</p>
-
-<section><title>TV 2.1.4.10</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Misc build updates</p>
- <p>
- Own Id: OTP-10784</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.9</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>The GS applications is now deprecated and will be
- removed in the R16 release. The following GS-based
- applications have been superseded by the Observer
- application and will removed in R16: Appmon, Pman,
- Tv.</p>
- <p>
- *** POTENTIAL INCOMPATIBILITY ***</p>
- <p>
- Own Id: OTP-9907</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.8</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Eliminate use of deprecated regexp module</p>
- <p>
- Own Id: OTP-9810</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.7</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- tv: Allow table viewer to display refs, ports and small
- binaries</p>
- <p>
- Table viewer displayed #Port, #Ref, or #Bin as place
- holders for their respective object types in ets and
- mnesia tables. This can make table viewer difficult to
- use when viewing tables containing those data types. It
- doesn't make sense to render large binaries so #Bin will
- still be used for binaries that exceed 100 bytes. (Thanks
- to Blaine whittle)</p>
- <p>
- Own Id: OTP-9153</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.6</title>
-
- <section><title>Fixed Bugs and Malfunctions</title>
- <list>
- <item>
- <p>
- With some window managers (e.g. stumpwm), <c>tv</c> would
- constantly restart while trying to open a table. (Thanks
- to Dmitriy Budashny.)</p>
- <p>
- Own Id: OTP-8751</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.5</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Warnings due to new autoimported BIFs removed</p>
- <p>
- Own Id: OTP-8674 Aux Id: OTP-8579 </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.4</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- The documentation is now built with open source tools
- (xsltproc and fop) that exists on most platforms. One
- visible change is that the frames are removed.</p>
- <p>
- Own Id: OTP-8201</p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.3</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Updated the application with new tags for automatic updates
- of copyright notices.
- </p>
- <p>
- Own Id: OTP-7851
- </p>
- </item>
- </list>
- </section>
-
-</section>
-
-<section><title>TV 2.1.4.2</title>
-
- <section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Minor updates.</p>
- <p>
- Own Id: OTP-7261</p>
- </item>
- </list>
- </section>
-
-</section>
-
- <section>
- <title>TV 2.1.4.1</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Minor Makefile changes.</p>
- <p>Own Id: OTP-6689</p>
- </item>
- <item>
- <p>Obsolete guard tests (such as list()) have been replaced
- with the modern guard tests (such as is_list()).</p>
- <p>Own Id: OTP-6728</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>TV 2.1.4</title>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Removed some dead code from
- <c>tv_pg_gridfcns:mark_cell_and_notify/4</c>
- and <c>tv_nodewin:handle_error/1</c>.</p>
- <p>Own Id: OTP-6455</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>TV 2.1.3</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>A compiler warning has been fixed.</p>
- <p>Own Id: OTP-6016</p>
- </item>
- </list>
- </section>
-
- <section>
- <title>Improvements and New Features</title>
- <list type="bulleted">
- <item>
- <p>Notification windows are now centered over a parent
- window.</p>
- <p>Own Id: OTP-6014 Aux Id: OTP-5987</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>TV 2.1.2</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>Some dead code reported by Dialyzer was eliminated. </p>
- <p>A
- bug in 'dbg' when tracing to wrap trace files has been
- corrected. It failed to delete any already existing wrap
- trace files with the same names when starting a new wrap
- trace.</p>
- <p>Own Id: OTP-5329</p>
- </item>
- <item>
- <p>The graphic applications now search for HTML
- documentation in the correct place.</p>
- <p>Own Id: OTP-5381</p>
- </item>
- </list>
- </section>
- </section>
-
- <section>
- <title>TV 2.1.1</title>
-
- <section>
- <title>Fixed Bugs and Malfunctions</title>
- <list type="bulleted">
- <item>
- <p>TV no longer crashes on Mac OS X. (Thanks to Sean Hinde.)</p>
- <p>Own Id: OTP-5219</p>
- </item>
- </list>
- </section>
- </section>
-</chapter>
-
-
diff --git a/lib/tv/doc/src/part.xml b/lib/tv/doc/src/part.xml
deleted file mode 100644
index b82c66b05a..0000000000
--- a/lib/tv/doc/src/part.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>1997</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>TV User's Guide</title>
- <prepared>Fredrik Gustafson</prepared>
- <docno></docno>
- <date>1997-06-04</date>
- <rev>1.0.1</rev>
- <file>part.xml</file>
- </header>
- <description>
- <p>The Table Visualizer application, <em>TV</em>, enables the user
- to examine ETS and Mnesia tables. Once a certain table has been
- opened in the tool, the content may be viewed in various levels
- of detail.</p>
- </description>
- <xi:include href="table_visualizer_chapter.xml"/>
-</part>
-
-
diff --git a/lib/tv/doc/src/part_notes.xml b/lib/tv/doc/src/part_notes.xml
deleted file mode 100644
index 6fdf2ba2dd..0000000000
--- a/lib/tv/doc/src/part_notes.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE part SYSTEM "part.dtd">
-
-<part xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>2004</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>TV Release Notes</title>
- <prepared></prepared>
- <docno></docno>
- <date>2004-09-07</date>
- <rev>1.0</rev>
- <file>part_notes.sgml</file>
- </header>
- <description>
- <p>The Table Visualizer application, <em>TV</em>, enables the user
- to examine ETS and Mnesia tables. Once a certain table has been
- opened in the tool, the content may be viewed in various levels
- of detail.</p>
- </description>
- <xi:include href="notes.xml"/>
-</part>
-
-
diff --git a/lib/tv/doc/src/ref_man.xml b/lib/tv/doc/src/ref_man.xml
deleted file mode 100644
index 26cc0371b0..0000000000
--- a/lib/tv/doc/src/ref_man.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE application SYSTEM "application.dtd">
-
-<application xmlns:xi="http://www.w3.org/2001/XInclude">
- <header>
- <copyright>
- <year>1997</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>TV Reference Manual</title>
- <prepared>Fredrik Gustafson</prepared>
- <docno></docno>
- <date>1997-06-04</date>
- <rev>1.0.1</rev>
- <file>application.sgml</file>
- </header>
- <description>
- <p>The TV application enables the user
- to examine ETS and Mnesia tables. Once a certain table has been
- opened in the tool, the content may be viewed in various levels
- of detail.</p>
- </description>
- <xi:include href="tv.xml"/>
-</application>
-
-
diff --git a/lib/tv/doc/src/set_poll_int.gif b/lib/tv/doc/src/set_poll_int.gif
deleted file mode 100644
index c09c84322f..0000000000
--- a/lib/tv/doc/src/set_poll_int.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/set_poll_int.ps b/lib/tv/doc/src/set_poll_int.ps
deleted file mode 100644
index cceb30486f..0000000000
--- a/lib/tv/doc/src/set_poll_int.ps
+++ /dev/null
@@ -1,483 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./set_poll_int.tmp.eps)
-%%CreationDate: (Tue Jun 12 16:08:39 2001)
-%%BoundingBox: 0 17 200 154
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 17 200 154
-userdict begin
-%%BeginData:
-DisplayImage
-0 17
-200.000000 137.000000
-12
-315 215
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-828282
-aa2455
-c3c3c3
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-000a01ff0124000b0208040001ff012400000208040000000208040002ff022400000208
-0400000002080400020000ff0021040002000000020804000000020204060200000004ff
-0421020000000405020204000000020204000209000d02ff021800000202040000000202
-040002080000020d04000281010102020101023701010254000002020400000002020400
-02080000020d040002580103020b010002070104020a01010202010102060101020b0100
-02210101025400000202040000000202040002080000020d040002570101020101010209
-01010207010102010101020901010202010102060101020a010102210101025400000202
-040000000202040002080000020204060203040002570101020601030201010402050101
-020101010201010302030101020201010206010102020101020001010201010402010103
-020201010200010102000101020101010202010302030101025400000202040000000403
-020800000202040003040000020304000257010202040101020101010201010102070101
-020101010200010102010101020201010202010102060101020201020200010102010101
-020201010201010102010101020001010200010102010101020101010201010102020101
-0254000004030101020b0000020304000302000002040400025801030202010102010101
-020101010207010102010100020101010201010102020101020201010206010102020101
-020101010201010102020101020101010201010202020101020101010205010102020101
-02570103020b0000020304000302000002040400025a0102020101050201010102070103
-020201010201010102020101020201010206010102020101020101010201010102020105
-020101010204010102000100020301040202010102570103020b00000204040003000000
-02050400025b010102010101020501010207010102040101020101010202010102020101
-020601010202010102010101020101010202010102050101020401010200010002020101
-020101010202010102570103020b00000204040003000000020504000257010102010101
-020101010202010002010101020701010204010102010101020201010202010102060101
-020201010201010102010101020201010202010002010101020501010203010102010101
-0202010102570103020b0000020500000206040002580103020301030203010202050101
-020501030203010102020101020601010202010102010101020201020201010302020101
-0205010102040102020001010201010102570103020b0000020d040002ff021a0103020b
-0000020d040002ff021a0103020b0000020d040002ff021a0103020c040d02ff021b0103
-02ff0236010302ff02360103020200ff002f0400020201030202000004ff042f02020103
-02ff02360103020205ff053002020103020205ff053002020103020205ff053002020103
-020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530
-02020103020205ff053002020103020205ff053002020103020205ff0530020201030202
-05e5003b050e02020103020205e5003a0600050e02020103020205e5000105370601050e
-02020103020205e5000105370601050e02020103020205e5000105370601050e02020103
-020205e5000105370601050e02020103020205e5000105370601050e02020103020205e5
-000105370601050e02020103020205e5000105370601050e020201030202051b000105c7
-000105150102050201000502010005160601050e020201030202051a0003050b01000503
-0100051e010205090103050a010205030102050501000568000105140100050201000501
-01000501010005170601050e02020103020205190005050a010005030100052001000509
-010005020100050b010005050100056f0001051401000502010005010100050001000518
-0601050e0202010302020518000205010002050901010501010105020102050201000500
-010105020100050201000502010205050100050901000502010005020102050501000505
-010005030102050201000500010105030101050001000559000105140100050201000501
-010105190601050e02020103020205170002050300020508010105010101050101000502
-010005010101050101000501010005020100050101000502010005040100050901000502
-010005010100050201000504010005050100050501000502010105010100050101000501
-0101055900010514010005020100050101000500010005180601050e0202010302020516
-000205050002050701000500010105000100050501000501010005020100050101000502
-010005050100050401000509010305020100050201000504010005050100050501000502
-010005020100050101000502010005590001051401000502010005010100050101000517
-0601050e0202010302020515060205070602050601000500010105000100050201030501
-010005020100050101000502010005020103050401000509010005050100050201000504
-010005050100050501000502010005020100050101000502010005590001051401000502
-0100050101000501010005170601050e0202010302020516060205050602050701000503
-010005010100050201000501010005020100050101000502010005010100050201000504
-010005090100050501000502010005040100050501000505010005020100050201000501
-010005020100055900010514010005020100050101000502010005160601050e02020103
-020205170602050306020508010005030100050101000502010005010100050201000501
-010005010101050101000502010005040100050901000505010005020100050401000505
-010005050100050201000502010005010100050101010559000105150102050201000502
-010005160601050e02020103020205180602050106020509010005030100050201030501
-010005020100050201010500010005020103050401000509010005060102050501000505
-010005050100050201000502010005020101050001000559000105370601050e02020103
-020205190605056a01000559000105370601050e020201030202051a0603056701000502
-01000559000105370601050e020201030202051b060105690102055a000105370601050e
-02020103020205e5000105370601050e02020103020205e5000105370601050e02020103
-020205e5000105370601050e02020103020205e5000105370601050e02020103020205e5
-000105370601050e02020103020205e5000105370601050e02020103020205e500010639
-050e02020103020205e50000063a050e02020103020205ff053002020103020205ff0530
-02020103020205ff053002020103020205ff053002020103020205ff0530020201030202
-05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202
-0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff
-053002020103020205ff053002020103020205ff053002020103020205ff053002020103
-020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530
-02020103020205e5003b050e02020103020205e5003a0600050e02020103020205e50001
-05370601050e02020103020205e5000105370601050e02020103020205e5000105370601
-050e02020103020205e5000105370601050e02020103020205e5000105370601050e0202
-0103020205e5000105370601050e02020103020205e5000105370601050e020201030202
-051a060105c8000105070102051f010205090601050e02020103020205190603050e0100
-050c0100051a01000506010005100103050a010205030102050501000554000105060100
-050201000520010005090601050e02020103020205180605050d0100050c0100051a0100
-0518010005020100050b010005050100055b000105060100050201000502010205020100
-0500010105030102050301020505010005090601050e0202010302020517060207010602
-050b01000500010005020100050201000501010405020102050201010500010005030102
-050201040502010205030102050901000502010005020102050501000505010005030102
-050201000500010105030101050001000545000105060100050501000502010005010101
-05010100050101000502010005010100050201000504010005090601050e020201030202
-0516060207030602050a0100050001000502010005020100050301000503010005020100
-050101000500010005000100050101000502010005030100050601000502010005020100
-050801000502010005010100050201000504010005050100050501000502010105010100
-050101000501010105450001050601000509010005010100050201000501010005050100
-050201000504010005090601050e02020103020205150602070506020509010005000100
-050201000502010005030100050301000502010005010100050001000500010005050100
-050301000506010005020100050c01030502010005020100050401000505010005050100
-050201000502010005010100050201000545000105060100050601030501010005020100
-05010100050501040504010005090601050e020201030202051400020707000205070100
-050201000501010005020100050301000503010005020100050101000500010005000100
-05020103050301000506010005020100050c010005050100050201000504010005050100
-050501000502010005020100050101000502010005450001050601000502010005010100
-05020100050101000502010005010100050501000508010005090601050e020201030202
-051500020705000205080104050101000502010005030100050301000502010005010100
-05000100050001000501010005020100050301000506010005020100050c010005050100
-050201000504010005050100050501000502010005020100050101000502010005450001
-050601000502010005010100050201000501010005020100050101000502010005010100
-050201000504010005090601050e02020103020205160002070300020509010005020100
-050101000501010105030100050301000502010005010100050001000500010005010100
-050201000503010005060100050201000502010005080100050501000502010005040100
-050501000505010005020100050201000501010005010101054500010507010205030103
-050101000502010005020102050301020505010005090601050e02020103020205170002
-07010002050a010005020100050201010500010005040101050201020502010005000100
-050001000502010305040101050401000503010205090100050601020505010005050100
-05050100050201000502010005020101050001000545000105370601050e020201030202
-05180005057f01000545000105370601050e02020103020205190003057c010005020100
-0545000105370601050e020201030202051a0001057e01020546000105370601050e0202
-0103020205e5000105370601050e02020103020205e5000105370601050e020201030202
-05e5000105370601050e02020103020205e5000105370601050e02020103020205e50001
-05370601050e02020103020205e5000105370601050e02020103020205e500010639050e
-02020103020205e50000063a050e02020103020205ff053002020103020205ff05300202
-0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff
-053002020103020205ff053002020103020205ff053002020103020205ff053002020103
-020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530
-02020103020205ff053002020103020205ff053002020103020205ff0530020201030202
-05ff053002020103020205ff053002020103020205ff0530020201030202057601000534
-0100058202020103020205110103050a01020503010205090104050a010005200102050b
-0100052a0100050a010005810202010302020511010005020100050b010005050100050b
-0100050c010005220100050b0100052a0100050a01000581020201030202051101000502
-0100050201020505010005050100050b0100050301000500010105020104050201020502
-01000500010105020100050201000502010205050100050a010005050102050301020503
-010205030102050201000500010105030101050001000502010205050100050401010579
-020201030202051101000502010005010100050201000504010005050100050b01000503
-010105010100050301000503010005020100050101010501010005010100050201000501
-01000502010005040100050a010005040100050201000501010005020100050101000502
-010005010100050201000501010105010100050101000501010105010100050201000504
-01000504010105790202010302020511010305020100050201000504010005050100050b
-010005030100050201000503010005030100050201000501010005050100050201000505
-010005040100050a01000504010005050100050201000501010005050100050201000501
-010005020100050101000502010005010100050801000580020201030202051101000505
-0100050201000504010005050100050b0100050301000502010005030100050301040501
-010005060100050001000503010305040100050a01000505010205020104050101000505
-010005020100050101000502010005010100050201000502010205050100058002020103
-02020511010005050100050201000504010005050100050b010005030100050201000503
-010005030100050501000506010005000100050201000502010005040100050a01000508
-010005010100050501000505010005020100050101000502010005010100050201000505
-01000504010005800202010302020511010005050100050201000504010005050100050b
-010005030100050201000503010005030100050201000501010005070100050301000502
-010005040100050b01000503010005020100050101000502010005010100050201000501
-010005020100050101000502010005010100050101010501010005020100050301000505
-010105790202010302020511010005060102050501000505010005090104050101000502
-0100050401010502010205020100050701000504010305040100050b0100050401020503
-010205030102050301020502010005020100050201010500010005020102050401000505
-010105790202010302020576010005340100058202020103020205ff0530020201030202
-05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202
-0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff
-053002020103020205ff053002020103020205ff053002020103020205ff053002020103
-020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530
-02020103020205ff053002020103020205ff0530020201030202056f0100050401020504
-010105b0020201030202056e01010503010005020100050201000501010005af02020103
-0202056d01000500010005070100050201000501010005af020201030202056f01000507
-0100050201000501010005af020201030202056f010005060100050301000501010005af
-020201030202056f010005050100050401000501010005af020201030202056f01000504
-0100050501000501010005af020201030202056f010005030100050601000501010005af
-020201030202056d0104050101040503010105b002020103020205ff0530020201030202
-05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202
-01030202050d06ff0614050d020201030202050d06ff06130000050d020201030202050d
-06010856001d089b0001050d020201030202050d06010856001c0600089b0001050d0202
-01030202050d060108560001050b06000000050b0601089b0001050d020201030202050d
-060108560001050b06000000050b0601089b0001050d020201030202050d060108560001
-050b06000000050b0601089b0001050d020201030202050d060108560001050b06000000
-050b0601089b0001050d020201030202050d060108560001050b06000000050b0601089b
-0001050d020201030202050d060108560001050b06000000050b0601089b0001050d0202
-01030202050d060108560001050b06000000050b0601089b0001050d020201030202050d
-060108560001050b06000000050b0601089b0001050d020201030202050d060108560001
-050b06000000050b0601089b0001050d020201030202050d060108560001050b06000000
-050b0601089b0001050d020201030202050d060108560001050b06000000050b0601089b
-0001050d020201030202050d060108560001060c0000060d089b0001050d020201030202
-050d060108560000061c089b0001050d020201030202050d060100ff0012050d02020103
-0202050d060000ff0013050d02020103020205ff053002020103020205ff053002020103
-020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530
-02020103020205ff053002020103020205ff053002020101000405ff0530000502020400
-05ff053000000202040000000202040005ff053000000202040000000202040005ff0530
-00000202040000000202040005ff053000000202040000000202040005ff053000000202
-0400000002020400000502ff022400060202040000000208040002ff0224000002080400
-00000208040002ff022400000208040000000208040001ff012400000208040000000409
-01ff012400000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 17 200 154
-%%EOF
diff --git a/lib/tv/doc/src/table_visualizer_chapter.xml b/lib/tv/doc/src/table_visualizer_chapter.xml
deleted file mode 100644
index 13757dff59..0000000000
--- a/lib/tv/doc/src/table_visualizer_chapter.xml
+++ /dev/null
@@ -1,658 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>1997</year><year>2013</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>The Table Visualizer</title>
- <prepared>EPK/TK Fredrik Gustafson</prepared>
- <responsible></responsible>
- <docno></docno>
- <approved>EPK/TK (Fredrik Gustafson)</approved>
- <checked></checked>
- <date>1998-01-19</date>
- <rev>C</rev>
- <file>table_visualizer.xml</file>
- </header>
- <warning>
- <p>
- The TV application has been superseded by the Observer application.
- TV will be removed in R16.
- </p>
- </warning>
- <p>The TV, TV, is a tool that enables the user to examine
- ETS and Mnesia tables on any (connected) node in the currently running Erlang
- system. Once a certain table has been opened in the tool, the content may be
- viewed in various levels of detail. The content may also be edited, as well as
- sorted, using any element as key. It is also possible to search for a specified object or
- element. The table may be polled anytime, either regularly, at specified
- intervals, or manually. New and deleted objects, as well as those altered, are
- marked with characteristic colours.</p>
- <p>Information about the table itself (permissions, storage type, and so on) may
- also be obtained.
- </p>
-
- <section>
- <title>Terminology and Background</title>
- <p>To avoid confusion, we have to distinguish between the <em>actual table</em>, i.e.,
- the data stored in ETS or Mnesia, and the <em>image of the table</em>, i.e., the
- data shown in the TV. The <em>image of the table</em> is simply a copy
- of the <em>actual table</em>, and can be manipulated in a number of ways, for example
- sorted. It follows that these manipulations in no way affects the <em>actual table</em>!</p>
- <p>The expression <em>poll the table</em> is used for the operation of scanning through the
- content of the actual table (in order to keep the image of the table consistent with the
- actual table).</p>
- <p>The ETS and Mnesia modules provides the user with the ability to store vast quantities
- of data in, the data organized as dynamic, unordered tables. The ETS
- facility stores <em>tuples</em>, while Mnesia stores <em>records</em>.
- Each tuple consists of one or more <em>elements</em>; each record consists of one or
- more <em>fields</em>. It should be noted that, since records are implemented as tuples,
- with the record name as the first element, the first field of a record becomes the second
- element in the corresponding tuple!
- <br></br>
-
- In the following, all table objects are mainly referred to as tuples, regardless of the
- table type.</p>
- <p>For further information about ETS and Mnesia, please see the manual pages and Mnesia User's Guide.</p>
- </section>
-
- <section>
- <title>Starting the TV</title>
- <p>The TV tool is started by giving the command</p>
- <pre>
- tv:start().
- </pre>
- <p>The window that appears, is hereafter referred to as <em>the TV main window</em>. It consists of:</p>
- <list type="bulleted">
- <item>
- <p>a <em>menubar</em>.</p>
- </item>
- <item>
- <p>a <em>grid</em>, i.e., a multicolumnar array, where tables existing on
- the current node is shown. Each square in the grid is called a <em>cell</em>.</p>
- </item>
- </list>
- <image file="tv_start.gif">
- <icaption>The TV Main Window at startup.</icaption>
- </image>
- <p>For each table, the following information is shown, in order:
- </p>
- <list type="bulleted">
- <item>
- <p>the <em>table name</em>. If the table is accessible through this name, as is the
- case with Mnesia tables and named ETS tables, the table name is shown in
- black, otherwise in medium grey.</p>
- </item>
- <item>
- <p>the <em>table identifier</em>, if there is one; since Mnesia tables are accessed
- solely through the table name, this cell will in those cases be blank.</p>
- </item>
- <item>
- <p>the <em>process identifier (PID) of the process owning the table</em>.</p>
- </item>
- <item>
- <p>the <em>name of the process owning the table</em>, provided the process
- is registered.</p>
- </item>
- <item>
- <p>the <em>table size</em>, i.e., the number of objects currently stored in
- the table.</p>
- </item>
- </list>
- </section>
-
- <section>
- <title>Changing View</title>
- <p>The TV will by default show currently existing ETS tables,
- but the user may easily switch to a Mnesia table view, by choosing the
- <em>Mnesia Tables</em> option in the <em>View</em> menu:
- </p>
- <image file="tv_start_mnesia.gif">
- <icaption>The TV Main Window, showing Mnesia tables.</icaption>
- </image>
- <p>Normally, system tables (i.e., tables used by system applications) and unreadable
- tables are not shown. The menu option <em>System Tables</em>, in the <em>Options</em>
- menu, makes the system tables visible:
- </p>
- <image file="tv_start_system.gif">
- <icaption>The TV Main Window, showing readable user and system tables.</icaption>
- </image>
- <p>Still unreadable tables are hidden, but the menu option <em>Unreadable Tables</em>,
- also in the <em>Options</em> menu, makes even those tables visible. It shall be noted
- that rows containing unreadable tables are shaded, using a grey colour:
- </p>
- <image file="tv_start_system_unreadable.gif">
- <icaption>The TV Main Window, showing both readable and unreadable user and system tables.</icaption>
- </image>
- <p>Once a table view has been opened, the user may choose how to view it: it may be sorted
- by the table names, by the table identifiers, by the process identifiers of the owner
- processes, or by the names of the owning processes. These sorting options are found in the
- <em>Options</em> menu.
- </p>
- <image file="tv_start_pid_sorted.gif">
- <icaption>The TV Main Window, tables sorted by owner PID.</icaption>
- </image>
- </section>
-
- <section>
- <title>Changing the Current Node</title>
- <p>By default, the Table Vizualizer will show tables residing on the node
- it was started from. However, the user may easily view tables on other nodes.
- By choosing the <em>Nodes</em> option, in the <em>File</em> menu, a window showing
- all connected nodes will appear. Clicking on any of the nodes in the list will cause
- the main window to immediately show the tables residing on the specified node:
- </p>
- <image file="tv_start_other_node.gif">
- <icaption>The Connected Nodes window, and the TV Main Window, showing tables on the selected node.</icaption>
- </image>
- </section>
-
- <section>
- <title>Opening a Table in the Table Browser</title>
- <p>Whenever a table shall be opened, the first step is to choose the corresponding
- <em>Table Name</em> or <em>Table ID</em> cell. Secondly, the <em>Open Table</em>
- menu item, in the <em>File</em> menu, has to be chosen. (Or, one may directly
- double-click on a <em>Table Name</em> or <em>Table Id</em> cell.)</p>
- <p>If the table selected table is readable, a window will appear after a short delay. This new
- window is hereafter denoted the <em>Table Browser</em> window. Should the table be
- unreadable, the Table Information window will appear instead (see further description
- below).
- </p>
-
- <section>
- <title>The Table Browser Window</title>
- <p>The Table Browser window consists of:</p>
- <list type="bulleted">
- <item>
- <p>a <em>menubar</em>.</p>
- </item>
- <item>
- <p>a <em>toolbar</em> with buttons providing shortcuts to the menubar options. If the
- cursor rests on any button, a so-called toolbar tip, explaining the button,
- will appear. <br></br>
-
- (In the picture below, the cursor has lingered on the <em>Open Table</em>
- button for a while.)</p>
- </item>
- <item>
- <p>a <em>content and edit field</em>, showing the content of a specified row or cell.
- Through this field the row, or cell, may also be edited (see below for a detailed
- description).</p>
- </item>
- <item>
- <p>a <em>grid</em>, i.e., a multicolumnar array, where the content of the
- opened table will be shown. (As above, each square in the grid is called a cell.</p>
- </item>
- </list>
- <image file="tv_table_browser.gif">
- <icaption>The Table Browser Window.</icaption>
- </image>
- <p>The successful appearance of the Table Browser window means that an image of
- the selected table has been created in the TV. It is this image
- that is shown in the Table Browser.
- </p>
-
- <section>
- <title>How Table Data Is Presented</title>
- <p>Each object in the table is presented on a row of its own in the grid.
- Each element in the object is presented in a cell of its own. <br></br>
-
- The colours on the <em>vertical</em> buttons to the left of the grid show the status
- of the object on that very row: a bright red colour indicates that the object just
- has been inserted (when the table is opened, all objects are regarded as being
- just inserted), while a bright green colour indicates that the object has been
- changed. The colour fades away, shade by shade, every time the actual table is polled,
- until the normal background colour is encountered. <br></br>
-
- When an object has been deleted, the colour of the corresponding
- <em>vertical button</em> turns to black. The next time the table is polled, the
- object will be removed from the grid.</p>
- <image file="tv_table_browser_updated.gif">
- <icaption>The Table Browser Window, with new, changed, and deleted objects.</icaption>
- </image>
- <p>Normally, new objects are placed at the end of the grid, while all other objects
- maintain their positions between successive polls. However, when sorting mode has
- been ordered, all objects, even new ones, are placed at the correct position
- according to the sorting ordered (see also below).</p>
- <p>Immediately above the <em>horizontal buttons</em>, one or more <em>keys</em> may
- appear. These keys indicates which elements that are used as indices in the
- ETS/Mnesia table, i.e., which fields that are used by ETS/Mnesia as search keys when
- looking up data.</p>
- <p>The grid columns may be resized, by clicking and dragging on the small black <em>resize areas</em> between any two horizontal buttons.</p>
- <p>The rows are enumerated, as a help when navigating through the table. Note: it shall
- not be assumed that these numbers correspond to the placement of the objects in the
- <em>actual table</em>! The row numbers, as presented in the TV, are
- only temporary, and only valid within the TV!
- <br></br>
-
- The number on the <em>vertical scrollbar</em> corresponds to the number the
- uppermost row has (or will have).</p>
- <p>The number shown on the horizontal scrollbar relates to the leftmost column shown.</p>
- </section>
-
- <section>
- <title>How to Poll the Table</title>
- <p>The table is polled whenever the <em>Poll Table</em> option in the <em>Options</em>
- menu is chosen (or the <em>Poll Table</em> toolbar button is pressed). <br></br>
-
- The user may also choose to let the TV poll the table at regular
- intervals. This is done via the <em>Set Poll Interval...</em> option in the
- <em>Options</em> menu, which causes the <em>Set Poll Interval window</em> to appear. </p>
- <p>In the Set Poll Interval window the user selects whether manual or automatic
- polling shall be used, and, in the automatic polling case, the poll interval.</p>
- <image file="set_poll_int.gif">
- <icaption>The Set Poll Interval Window.</icaption>
- </image>
- <p>It shall be noted that, in the case of a large table (or a slow computer/operating
- system), a short poll interval may cause the TV to be flooded, i.e., the
- data resulting from one poll has not been fully treated and presented when the data from
- the next poll arrives. The user is therefore kindly requested to use the automatic
- polling facility with care!</p>
- </section>
-
- <section>
- <title>How to Edit Objects in the Table</title>
- <p>Provided that the table is writable for other processes than the owning process,
- the user may insert, change and delete objects.</p>
- <p>To <em>delete</em> an object, the corresponding row, or a single cell in the
- corresponding row, has to be chosen, by clicking either on the vertical button
- to the left of the row, or on a cell. Thereafter the <em>Delete Object</em>
- option in the <em>Edit Menu</em>
- is chosen. (Should the user regret the delete operation, the row may once again
- be selected, whereupon the <em>Return</em> button simply is pressed.)</p>
- <p>To <em>insert</em> an object, the user may use the <em>Record Editor</em>, or simply
- enter the object in the content and edit field, and then press the <em>Return</em>
- button. <br></br>
-
- The <em>Record Editor</em> is started via the <em>Edit Object</em> option in the
- <em>Edit</em> menu, or via the <em>Edit Object</em> toolbar button. The editor that
- appears looks different depending on the kind of table: for Mnesia tables,
- a writable field is shown for each record entry, as well as the name of the entry.
- For ETS tables, only a writable field is shown; this is due to the fact that the
- size of the tuples inserted in ETS tables may vary, whereas the size of the records
- inserted in a Mnesia table (more or less) is fixed.
- One may select the next field in the record editor by pressing
- the 'Tab' (or 'Arrow Down') button, and select the previous field by pressing
- 'Shift'+'Tab' (or 'Arrow Up'). <br></br>
-
- When the editing is finished, the <em>OK</em> button may be clicked, or
- 'Return' pressed. The TV will then try to insert the new object.
- </p>
- <image file="tv_record_editor_mnesia.gif">
- <icaption>The Record Editor (shown for a Mnesia table).</icaption>
- </image>
- <p>To <em>change</em> an already existing object, the corresponding row, or a single cell
- in the corresponding row, has to be selected first (see below). Then one may edit the
- whole object (or the selected field in the object), either using the record editor
- or the content and edit field, whereupon 'Return' may be pressed (or the 'OK' button
- clicked).
- </p>
- <p>It shall be noted that it is hard to edit objects containing
- <em>process identifiers</em>, <em>references</em>, <em>binaries</em> and <em>ports</em>,
- since it is only a textual representation of these terms that is shown on the screen.
- It is in the general case impossible for the TV to correctly
- convert this textual representation back to the original term. As a courtesy to
- the user, an attempt to do this will nevertheless be done if the edited field
- consists of a single process identifier; however, this conversion will only be
- correct provided
- that the process identifier originates from the current Erlang session. (On
- the other hand, why on earth should any user want to store old process identifiers?)
- </p>
- <p>It shall also be noted that it may be more or less confusing to edit the table,
- depending on whether the table type is <em>set</em>, <em>bag</em>, or
- <em>duplicate_bag</em>, i.e., depending on whether or not objects having the
- same key (or even duplicate objects) are allowed. Please study the ETS or Mnesia
- manual pages, should confusion arise!
- </p>
- </section>
-
- <section>
- <title>How to Search For Objects</title>
- <p>One may search for an object, by choosing the <em>Search Object</em>
- option in the <em>Options</em> menu (or by pressing the <em>Search Object</em>
- toolbar button). In the <em>Search Object window</em> that appears, any valid
- Erlang term or regular expression may be entered, whereupon all objects
- containing (or consisting of) this term, or matching the regular expression,
- will be shown.</p>
- <image file="tv_search_window.gif">
- <icaption>The Search Object Window.</icaption>
- </image>
- <p>In the search result list, by clicking on any object, the Table Browser will
- immediately scroll to the corresponding row in the table shown. This enables
- the user to in a very powerful way quickly find the objects he's interested in.</p>
- <image file="tv_search_result.gif">
- <icaption>The Search Object Window interworking with the Table Browser.</icaption>
- </image>
- </section>
-
- <section>
- <title>How to Mark Table Data</title>
- <p>One may mark a row or a column by clicking on the buttons to the left and above
- the grid, respectively. A single cell is marked by clicking on it. Even empty
- rows and columns may be marked; an empty cell cannot be marked - on the contrary,
- by clicking on an empty cell, all marks are removed.</p>
- <p>Marks are indicated by a cyan blue colour.</p>
- <image file="tv_row_marked.gif">
- <icaption>The TV Main Window: a row has been marked.</icaption>
- </image>
- <p>When a row or a cell has been marked, the content will be shown in the content field,
- together with an indication of the row (and column when applicable) the marked area
- corresponds to. Should the object be very big, only a fraction of it may be shown in
- this field. By clicking on the down-arrow button to the right of the content and
- edit field, a pop-up content field will be shown, where the whole marked object
- may be viewed. The content of this pop-up field may be marked and copied to
- other windows; however, this field cannot be edited.</p>
- <image file="tv_row_marked_popup.gif">
- <icaption>The Table Browser: the pop-up content field.</icaption>
- </image>
- <p>It shall be noted that the user may choose whether lists shall be shown as
- strings or lists; this is done via the <em>View</em> menu.
- </p>
- <p>A marked column may be subject to sorting, see below. When sorting is ordered,
- marks are removed at each polling of the table (because of the difficulties to
- keep track of a certain object, or element, in this case).</p>
- </section>
-
- <section>
- <title>How to Sort Table Data</title>
- <p>The image of the table may be sorted in rising or falling order, using any element as
- sorting key. The element desired is chosen by marking the corresponding column, and
- then choose (either via the <em>Options</em> menu, or via the toolbar buttons) any
- of the sorting options available, i.e., sorting in ascending or descending order.
- The colour of the column button will then change to gold, to indicate that this
- column is the basis for the sorting currently chosen.</p>
- <p>Should no column have been marked, when sorting is ordered, the first element in each
- object (i.e, tuple) will be used as sorting key if the table is an ETS table; the
- second element (i.e., the first field in the record) will be used if the table is a
- Mnesia table.</p>
- <p>Even columns with no elements in them may be subject to sorting. In this case the
- whole object is used as the sorting key.</p>
- <p>When sorting is ordered, new elements will be inserted according to the current
- sorting mode. When the sorting is interrupted (via the <em>No Sorting</em> option),
- the current image of the table keep the current order, but new elements will from
- now on once again be inserted at the end of the image of the table.</p>
- </section>
-
- <section>
- <title>How to Obtain Table Information</title>
- <p>Information about the actual table is obtained via the <em>File</em> menu (or via the
- <em>Table Info</em> toolbar button). The information is printed in a separate window,
- with similar pieces of information grouped together on "flap cards" of their own.
- By clicking on a flap, the information on the corresponding card is made visible.</p>
- <image file="info_window.gif">
- <icaption>The Table Information Window, showing information about a Mnesia table.</icaption>
- </image>
- <p>The Table Information window may also be opened from the TV Main
- Window, by selecting a table and then choose the <em>Table Info</em> option
- in the <em>File</em> menu (or by double-clicking on the <em>Table Size</em>
- field.</p>
- <p>Note: The Table Information window will automatically be opened if the user tries
- to open an unreadable table, since this is the only information available in this
- case.</p>
- </section>
- </section>
-
- <section>
- <title>The Table Browser Menus</title>
- <p>The Table Browser offers the following menus:</p>
- <p></p>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Table Info</em></tag>
- <item>
- <p>Opens the Table Information window, which shows the available information
- about the current table. </p>
- </item>
- <tag><em>Close</em></tag>
- <item>
- <p>Closes the Table Browser window.</p>
- </item>
- </taglist>
- </section>
-
- <section>
- <title>The Edit Menu</title>
- <taglist>
- <tag><em>Edit Object...</em></tag>
- <item>
- <p>Opens the Record Editor. If an object is marked, it will be shown in
- the Record Editor.</p>
- </item>
- <tag><em>Delete Object</em></tag>
- <item>
- <p>Deletes a marked object.</p>
- </item>
- </taglist>
- </section>
-
- <section>
- <title>The View Menu</title>
- <taglist>
- <tag><em>Lists As Lists</em></tag>
- <item>
- <p>Causes lists in the table to be shown as lists.</p>
- </item>
- <tag><em>Lists As Strings</em></tag>
- <item>
- <p>Causes lists in the table to be shown as strings.</p>
- </item>
- </taglist>
- </section>
-
- <section>
- <title>The Options Menu</title>
- <taglist>
- <tag><em>Poll Table</em></tag>
- <item>
- <p>An explicit order to poll the table, i.e., to scan the content.</p>
- </item>
- <tag><em>Poll Interval...</em></tag>
- <item>
- <p>Choose between manual and automatic polling. In the case of automatic
- polling, the user gets the opportunity to choose the polling interval.</p>
- </item>
- <tag><em>Search Object</em></tag>
- <item>
- <p>Enables search for objects containing (or consisting of) a specified
- Erlang term, or matching a regular pattern. The search result may be used
- for quick navigation in the table.</p>
- </item>
- <tag><em>Sort Ascending Order</em></tag>
- <item>
- <p>Shows the table content sorted in ascending (i.e., rising) order.
- New objects will be shown with correct placement as long the as the sorting
- is going on. <br></br>
-
- Please note that it is only the image of the table that is affected,
- <em>not</em> the table itself!</p>
- </item>
- <tag><em>Sort Descending Order</em></tag>
- <item>
- <p>Shows the table content sorted in descending (i.e., falling) order.
- New objects will be shown with correct placement as long the as the
- sorting is going on.</p>
- </item>
- <tag><em>No Sorting</em></tag>
- <item>
- <p>Sorting mode is left. New objects will be shown last in the
- table. However, older objects will remain in the position they had when
- the sorting mode was left, i.e., their placement will not reflect their
- actual placement in the ETS/Mnesia table.</p>
- </item>
- </taglist>
- </section>
-
- <section>
- <title>The Help Menu</title>
- <taglist>
- <tag><em>Help</em></tag>
- <item>
- <p>Shows the help (about TV usage) that is available.
- (The help will be shown in the Netscape Internet browser, if available.)</p>
- </item>
- <tag><em>OTP Documentation</em></tag>
- <item>
- <p>Shows the Documentation about all OTP components that is available
- in the local installation of OTP.</p>
- </item>
- </taglist>
- </section>
- </section>
- </section>
-
- <section>
- <title>Tracing the Owner Process</title>
- <p>The process owning the table may easily be traced, by selecting either
- the <em>Owner Pid</em> or the <em>Owner Name</em> field, and then choosing
- the <em>Trace Process</em> option in the <em>File</em> menu. <br></br>
-
- (It is also possible to double-click on any of these fields.)</p>
- </section>
-
- <section>
- <title>Creating a New Table</title>
- <p>A new table may easily be created using the <em>New Table window</em>.
- Currently only ETS tables may be created. Since ETS tables
- dies together with the parent process, a special process, registered
- as <em>tv_table_owner</em>, will be the owner of tables created this way.
- This process will not be affected by any termination of the TV,
- i.e., the ETS tables created will live on until they are explicitly killed.
- </p>
- <image file="tv_create_table.gif">
- <icaption>The New Table Window, enabling easy creation of ETS tables.</icaption>
- </image>
- <p>Note: the <em>tv_table_owner</em> is local to each node, meaning
- that the creation of a table on a new node also will start such a process
- on that node. This way only the tables on a specific node dies, should that
- specific node crash.</p>
- </section>
-
- <section>
- <title>The TV Main Window Menus</title>
- <p>The Main Window offers the following menus:</p>
- <p></p>
-
- <section>
- <title>The File Menu</title>
- <taglist>
- <tag><em>Open Table</em></tag>
- <item>
- <p>Open a selected table in a new Table Browser.</p>
- </item>
- <tag><em>New Table</em></tag>
- <item>
- <p>Open the New Table window, enabling easy creation of ETS tables.</p>
- </item>
- <tag><em>Table Info</em></tag>
- <item>
- <p>Opens the Table Information window, showing the available
- information about a selected table. </p>
- </item>
- <tag><em>Nodes...</em></tag>
- <item>
- <p>Open the Connected Nodes window, enabling the user to view
- tables residing on remote nodes.</p>
- </item>
- <tag><em>Trace Process</em></tag>
- <item>Opens a trace window, where the process owning a selected table can
- be traced.</item>
- <tag><em>Exit</em></tag>
- <item>
- <p>Terminates the TV.</p>
- </item>
- </taglist>
- </section>
-
- <section>
- <title>The View Menu</title>
- <taglist>
- <tag><em>ETS Tables</em></tag>
- <item>
- <p>Shows ETS tables on the current node.</p>
- </item>
- <tag><em>Mnesia tables</em></tag>
- <item>
- <p>Shows Mnesia tables on the current node.</p>
- </item>
- </taglist>
- </section>
-
- <section>
- <title>The Options Menu</title>
- <taglist>
- <tag><em>Refresh</em></tag>
- <item>
- <p>An explicit order to once again check the current node for existing
- tables, and list them.</p>
- </item>
- <tag><em>Unreadable Tables</em></tag>
- <item>
- <p>Option to choose whether or not unreadable tables shall be shown.</p>
- </item>
- <tag><em>System Tables</em></tag>
- <item>
- <p>Option to choose whether or not system tables shall be shown.</p>
- </item>
- <tag><em>Sort by Name</em></tag>
- <item>
- <p>Shows the tables sorted by their names.</p>
- </item>
- <tag><em>Sort by Id</em></tag>
- <item>
- <p>Shows the tables sorted by their table identifiers.</p>
- </item>
- <tag><em>Sort by Owner PID</em></tag>
- <item>
- <p>Shows the tables sorted by the process identifiers of the owning
- processes.</p>
- </item>
- <tag><em>Sort by Owner Name</em></tag>
- <item>
- <p>Shows the tables sorted by the registered names of the owning processes.</p>
- </item>
- <tag><em>Error Messages in Haiku</em></tag>
- <item>
- <p>Option to choose whether or not error messages shall be shown
- in the Japanes poetry style called <em>Haiku</em>.</p>
- </item>
- </taglist>
- </section>
-
- <section>
- <title>The Help Menu</title>
- <taglist>
- <tag><em>Help</em></tag>
- <item>
- <p>Shows the help (about TV usage) that is available.
- (The help will be shown in the Netscape Internet browser, if available.)</p>
- </item>
- <tag><em>OTP Documentation</em></tag>
- <item>
- <p>Shows the Documentation about all OTP components that is available
- in the local installation of OTP.</p>
- </item>
- </taglist>
- </section>
- </section>
-</chapter>
-
-
diff --git a/lib/tv/doc/src/tv.gif b/lib/tv/doc/src/tv.gif
deleted file mode 100644
index d78cf7d8ed..0000000000
--- a/lib/tv/doc/src/tv.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv.xml b/lib/tv/doc/src/tv.xml
deleted file mode 100644
index 4a46003a71..0000000000
--- a/lib/tv/doc/src/tv.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
- <header>
- <copyright>
- <year>1997</year>
- <year>2013</year>
- <holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- The Initial Developer of the Original Code is Ericsson AB.
- </legalnotice>
-
- <title>tv</title>
- <prepared>Fredrik Gustafson</prepared>
- <responsible></responsible>
- <docno></docno>
- <approved></approved>
- <checked></checked>
- <date>1997-11-17</date>
- <rev>1.0</rev>
- <file>table_visualizer.sgml</file>
- </header>
- <module>tv</module>
- <modulesummary>TV graphically examines ETS and Mnesia tables. </modulesummary>
- <description>
- <warning>
- <p>
- The TV application has been superseded by the Observer application.
- TV will be removed in R16.
- </p>
- </warning>
- <p>TV enables the user to examine ETS and Mnesia tables. Once
- a certain table has been opened in the tool, the content may be viewed at
- various levels of detail. The content viewed may also be sorted, using any
- element as key. The table may be polled anytime; either regularly at
- specified intervals, or manually. New and deleted objects, as well as those
- altered, are marked with characteristic colors. </p>
- </description>
- <funcs>
- <func>
- <name>start() -> Pid</name>
- <fsummary>Start TV.</fsummary>
- <type>
- <v>Pid = pid() </v>
- </type>
- <desc>
- <p><c>start/0</c> starts the TV. </p>
- </desc>
- </func>
- </funcs>
-
- <section>
- <title>See Also</title>
- <p>For a complete description of the TV, please
- see the TV User's Guide. </p>
- </section>
-</erlref>
-
-
diff --git a/lib/tv/doc/src/tv_create_table.gif b/lib/tv/doc/src/tv_create_table.gif
deleted file mode 100644
index 7fae7f30cf..0000000000
--- a/lib/tv/doc/src/tv_create_table.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_create_table.ps b/lib/tv/doc/src/tv_create_table.ps
deleted file mode 100644
index 0a3b24bcf5..0000000000
--- a/lib/tv/doc/src/tv_create_table.ps
+++ /dev/null
@@ -1,1120 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./tv_create_table.tmp.eps)
-%%CreationDate: (Tue Jun 12 16:14:11 2001)
-%%BoundingBox: 0 114 250 471
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 114 250 471
-userdict begin
-%%BeginData:
-DisplayImage
-0 114
-250.000000 357.000000
-12
-410 585
-1
-0
-0
-8
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-aa2455
-999999
-000a01ff0183000b0208040001ff018300000208040000000208040002ff028300000208
-0400000002080400020000ff0080040002000000020804000000020204060200000004ff
-0480020000000405020204000000020204000209000d02ff027700000202040000000202
-040002080000020d0400025e010302110103028d01010206010102640000020204000000
-0202040002080000020d0400025e01010202010702000101020301010201010102100103
-02180100020f010202020100021901050200010702010103020601070209010102060101
-026400000202040000000202040002080000020d0400025e010102050101020301010203
-010102010101020f01010201010102160101020f01020202010002190101020701010203
-01010201010102080101020c010102060101026400000202040000000202040002080000
-0202040602030400025e010102050101020301010203010102010101020e010102050101
-020001010201010302030103020101040201010302070100020001010201010002020103
-0202010102050101020501010207010102030101020c0101020401030203010102000101
-0203010102020103025d0000020204000000040302080000020204000304000002030400
-025e010102050101020401010202010002020101020e0101020501010200010102000101
-020101010201010102010101020101010202010102010101020601000200010102010100
-0201010102010101020101010201010102010101020501010207010102030102020b0101
-02030101020101010202010202000101020201010201010102010101025c000004030101
-020b0000020304000302000002040400025e010102050101020401010201010102020101
-020e01010205010202020101020101010205010102010101020201010201010102060100
-020001020200010002010101020101010202010102000101020001010206010402040101
-0204010302090101020701010202010102010101020201010201010102010101025f0103
-020b0000020304000302000002040400025e010102050101020501010200010002030101
-020e01010205010102030105020201040201010102020105020601000201010102000100
-020101050202010102000101020001010206010102070101020601020208010102040104
-02020101020101010202010102010105025f0103020b0000020404000300000002050400
-025e0101020501010205010302030101020e010102050101020301010205010102010101
-0201010102020101020a0100020201020201010102060107020601010207010102070101
-0208010102030101020101010202010102010101020201010201010102630103020b0000
-020404000300000002050400025e0101020501010206010102040101020f010102020100
-020001010203010102020100020101010201010102010101020201010202010002060100
-020201020201010102020100020301010201010102070101020701010203010102010101
-0208010102030101020101010202010102010101020201010201010102020100025f0103
-020b00000205000002060400025e01010205010102060101020401010210010302010101
-020401030203010202000101020101020201010302070100020301010202010302040101
-020101010207010502030101020401030209010102040102020001010201010402030101
-0202010302600103020b0000020d0400025e01030211010302ff02000103020b0000020d
-040002ff02790103020b0000020d040002ff02790103020c040d02ff027a010302ff0295
-010302ff02950103020200ff008e0400020201030202000004ff048e0202010302ff0295
-010302020500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000020201030202000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050002020103020205000000
-05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
-0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
-01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
-000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
-058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
-05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
-010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
-0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
-05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
-0100020201030202000005ff058c0100050002020103020205000000056f07ff070e050d
-01000202010302020000057007ff070d0000050c0100050002020103020205000000056f
-070100ff000c050d010002020103020200000570070100ff000c050c0100050002020103
-020205000000056f070100ff000c050d010002020103020200000570070100ff000c050c
-0100050002020103020205000000056f070100ff000c050d010002020103020200000570
-070100040100002001000030010000b2050c0100050002020103020205000000050a0100
-05020100050c0100055107010004010000130100000a0100000001000018010200130100
-00b2050d01000202010302020000050b010105010100050c01000551070100030100001f
-010000020100001901000012010000b3050c0100050002020103020205000000050a0101
-050101000502010205030101050001000502010205040101054407010002010000040101
-000001000003010200030102000201000000010100020100000001020001010100000100
-000301020002010000000101000501000003010200020100000201000002010000b4050d
-01000202010302020000050b010005000100050001000501010005020100050101000501
-010105010100050201000503010105440701000801000000010000000100000101000002
-010000040100000201010001010000010100000001000000010000010100000001000000
-010000010100000201000001010100010100000401000002010000020100000101000002
-010000b8050c0100050002020103020205000000050a0100050001000500010005010100
-0502010005010100050201000501010005020100054a0701000801000000010000000100
-000501000004010000020100000201000001010000000100000001000001010000000100
-000001000005010000010100000801000002010000020100000201000001010000b8050d
-01000202010302020000050b010005010101050101000502010005010100050201000501
-0104054a0701000801000000010000000100000201030004010000020100000201000001
-010000000102000101000000010000000100000201030001010000080100000201040002
-01000001010000b8050c0100050002020103020205000000050a01000501010105010100
-05020100050101000502010005010100054e070100080100000001000000010000010100
-000201000004010000020100000201000001010000050100000001000000010000010100
-00020100000101000008010000020100000701000000010000b8050d0100020201030202
-0000050b0100050201000501010005020100050101000501010105010100050201000503
-010105440701000801000000010000000100000101000002010000040100000201000002
-010000020100000101000001010000000100000001000001010000020100000101000008
-010000020100000201000003010100b9050c0100050002020103020205000000050a0100
-050201000502010205030101050001000502010205040101054407010008010000000100
-000001000002010300040100000201000002010000030101000201000000010000000100
-000201030001010000080100000301020005010000b9050d010002020103020200000570
-07010051010000b9050c0100050002020103020205000000056f0701004e010000000100
-00ba050d0100020201030202000005700701004f010000bb050c01000500020201030202
-05000000056f070100ff000c050d010002020103020200000570070100ff000c050c0100
-050002020103020205000000056f070100ff000c050d0100020201030202000005700701
-00ff000c050c0100050002020103020205000000056f070100ff000c050d010002020103
-020200000570070000ff000d050c010005000202010302020500000005ff058c01000202
-01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
-000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
-058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
-05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
-010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
-0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
-05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
-0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
-01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
-000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
-058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
-05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
-010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
-0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
-056d01ff0112050b01000202010302020000056e01ff0112050a01000500020201030202
-05000000056d010107ff070e0101050b01000202010302020000056e010107ff070d0000
-0101050a0100050002020103020205000000056d0101070100ff000c0101050b01000202
-010302020000056e0101070100ff000c0101050a0100050002020103020205000000056d
-0101070100ff000c0101050b01000202010302020000056e010107010000030000000300
-000003000000030000000300000003000000030000000300000003000000030000000300
-000003000000030000000300000003000000030000000300000003000000030000000300
-000003000000030000000300000003000000030000000300000003000000030000000300
-00d20101050a0100050002020103020205000000056d010107010337010100d20101050b
-01000202010302020000056e0101070100000336010100d20101050a0100050002020103
-020205000000050a0104050801000506010205490101070103180100030a010003060102
-0307010100d20101050b01000202010302020000050d0100050a01000508010005490101
-0701000003170100030a0100030801000307010100d20101050a01000500020201030202
-05000000050c010005040102050201000500010105050100050301020509010005000101
-050301020502010105000100050301020504010105180101070103010101030001000302
-0100030201000308010403020102030201000300010103050100030301020300010100d2
-0101050b01000202010302020000050d0100050301000502010005010101050101000504
-010005020100050201000508010105010100050101000502010005010100050001000500
-010005010100050201000503010105180101070100000300010003000100030001000301
-010003020100030a01000303010003020100030101010301010003040100030201000302
-010200d20101050a0100050002020103020205000000050c010005070100050101000502
-010005040100050201000502010005080100050201000505010005010100050001000500
-01000501010005020100051e010107010301010003000100030001000302010003010100
-030a010003070100030101000302010003040100030201000302010200d20101050b0100
-0202010302020000050d0100050401030501010005020100050401000502010405080100
-050201000502010305010100050001000500010005010104051e01010701000003000100
-03000100030001000302010003010100030a010003040103030101000302010003040100
-0302010600d20101050a0100050002020103020205000000050c01000503010005020100
-05010100050201000504010005020100050c010005020100050101000502010005010100
-050001000500010005010100052201010701030101000300010003000100030301000300
-0100030a01000303010003020100030101000302010003040100030201000303010100d2
-0101050b01000202010302020000050d0100050301000502010005010101050101000504
-010005020100050201000508010005020100050101000502010005010100050001000500
-010005010100050201000503010105180101070100000300010003000100030001000303
-0101030b01000303010003020100030101010301010003040100030201000302010200d2
-0101050a0100050002020103020205000000050c01000504010305010100050001010505
-010005030102050901000502010005020103050101000500010005000100050201020504
-010105180101070103010100030001000300010003040100030c01010302010303010100
-0300010103050100030301020300010100d20101050b01000202010302020000056e0101
-07010000030a0100030101050322010100d20101050a0100050002020103020205000000
-056d010107010308010003000100032b010100d20101050b01000202010302020000056e
-01010701000003080100032c010100d20101050a0100050002020103020205000000056d
-010107010300010003000100030001000300010003000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300010003000100
-03000100030001000300010000d20101050b01000202010302020000056e0101070100ff
-000c0101050a0100050002020103020205000000056d0101070100ff000c0101050b0100
-0202010302020000056e0101070100ff000c0101050a0100050002020103020205000000
-056d0101070100ff000c0101050b01000202010302020000056e0101070000ff000d0101
-050a0100050002020103020205000000056d01ff0112050b01000202010302020000056e
-01ff0112050a010005000202010302020500000005ff058c0100020201030202000005ff
-058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
-05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
-010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
-0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
-05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
-0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
-01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
-000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
-058c01000500020201030202050000000570000005000000050000000500000005000000
-0508010005020100051a0100050a0100050a01000506010205c601000202010302020000
-0570000005000000050000000500000005000000050001000507010105010100051a0100
-050a0100050a01000508010005c501000500020201030202050000000570000005060100
-050801010501010005020102050201010500010005030102050301010500010005080104
-050201020502010005000101050501000503010205bf0100020201030202000005700000
-050801000507010005000100050001000501010005020100050101000500010005000100
-05010100050201000501010005010101050a010005030100050201000501010105010100
-05040100050201000502010005bd01000500020201030202050000000570000005060100
-050801000500010005000100050501000501010005000100050001000501010005020100
-0501010005020100050a0100050701000501010005020100050401000502010005020100
-05be01000202010302020000057000000508010005070100050101010502010305010100
-0500010005000100050101040501010005020100050a0100050401030501010005020100
-050401000502010405bd0100050002020103020205000000057000000506010005080100
-050101010501010005020100050101000500010005000100050101000505010005020100
-050a010005030100050201000501010005020100050401000502010005c2010002020103
-020200000570000005080100050701000502010005010100050201000501010005000100
-0500010005010100050201000501010005010101050a0100050301000502010005010101
-0501010005040100050201000502010005bd010005000202010302020500000005700000
-050601000508010005020100050201030501010005000100050001000502010205030101
-05000100050b0101050201030501010005000101050501000503010205bf010002020103
-0202000005700000050001000500010005000100050001000500010005ff051001000500
-02020103020205000000057001000500010005000100050001000500010005ff05120100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100020201030202000005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050002020103
-020205000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000202010302020000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-0000050000000500000005000000050000000500000005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c0100050002020103020205000000050a010405ff
-057c01000202010302020000050d010005ff057d0100050002020103020205000000050c
-010005030100050201000501010005000101050301020504010105ff0561010002020103
-02020000050d010005030100050201000501010105010100050101000502010005030101
-05ff05600100050002020103020205000000050c01000504010005010100050101000502
-0100050101000502010005ff056701000202010302020000050d01000504010005010100
-05010100050201000501010405ff05660100050002020103020205000000050c01000505
-01000500010005010100050201000501010005ff056b01000202010302020000050d0100
-05050101050201010501010005010100050201000503010105ff05600100050002020103
-020205000000050c0100050601000502010005000101050301020504010105ff05610100
-0202010302020000051501000502010005ff057101000500020201030202050000000511
-0100050001000503010005ff057201000202010302020000051301000504010005ff0571
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005440100
-0567000005670000057401000500020201030202050000000542010005000100051d0100
-0546000005000000050d0100055600000500000005110100051001020505010005120100
-05110100051f01000202010302020000054201000500010005000100051c010005450000
-0500000005000000050c0100055500000500000005000000051001000512010005190100
-05110100051e01000500020201030202050000000540010005000100060105000100050c
-01020503010205020104054200000500000005020000050b010005000101050301020503
-010105000100054200000500000005020000050c01010500010005010100050201000501
-010005000101050501000503010205030102050301020502010405020102050901000500
-0101050301020503010105000100050d0100020201030202000005400100050001000603
-05000100050a010005020100050101000502010005030100054300000500000005040000
-050a01010501010005010100050201000501010005010101054100000500000005040000
-050a01000501010105010100050201000501010105010100050401000505010005020100
-050201000501010005020100050301000503010005020100050801010501010005010100
-050201000501010005010101050c0100050002020103020205000000053e010005000100
-060505000100050901000505010005020100050301000542000005000000050600000509
-010005020100050501000501010005020100054000000500000005060000050901000502
-010005010100050201000501010005020100050401000505010005020100050901000503
-010005030100050201000508010005020100050501000501010005020100050d01000202
-010302020000053e00000500000006070500000005090102050201040503010005410100
-05000100050801000508010005020100050201030501010005020100053f010005000100
-050801000508010005020100050101000502010005010100050201000504010005050100
-050201000506010305030100050301040508010005020100050201030501010005020100
-050c0100050002020103020205000000053e000005000000060505000000050d01000501
-010005070100054201000500010005060100050901000502010005010100050201000501
-010005020100054001000500010005060100050901000502010005010100050201000501
-01000502010005040100050501000502010005050100050201000503010005030100050c
-01000502010005010100050201000501010005020100050d010002020103020200000540
-000005000000060305000000050a01000502010005010100050201000503010005430100
-0500010005040100050a0101050101000501010005020100050101000501010105410100
-0500010005040100050a0100050101010501010005010101050101010501010005040100
-050501000502010005020100050101000502010005030100050301000502010005080101
-0501010005010100050201000501010005010101050c0100050002020103020205000000
-0540000005000000060105000000050c0102050301020505010105420100050001000502
-0100050b010005000101050301030502010105000100054201000500010005020100050c
-010105000100050201010500010005010100050001010505010005050100050301020503
-010305040101050201020509010005000101050301030502010105000100050d01000202
-010302020000054200000500000005000000056301000500010005000100051e01000543
-01000500010005000100051a0100052e010505130100050c010005000202010302020500
-000005420000050000000565010005000100051b0100050201000544010005000100051b
-01000544010005020100050d010002020103020200000544000005670100051d01020546
-0100051c010005450102050d010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-0000050a010305120100051301000506010005ff054c01000202010302020000050b0100
-05020100051101000513010005ff05530100050002020103020205000000050a01000502
-010005010100050001010503010205020104050201020503010205020104050201020503
-010205020100050001010504010105ff053701000202010302020000050b010005020100
-050101010501010005010100050201000503010005030100050201000501010005020100
-0503010005060100050201000502010005010101050101000503010105ff053601000500
-02020103020205000000050a010305020100050501000502010005030100050301000502
-01000501010005070100050601000502010005020100050101000502010005ff053d0100
-0202010302020000050b0100050501000505010005020100050301000503010405010100
-05070100050601000502010005020100050101000502010005ff053c0100050002020103
-020205000000050a01000505010005050100050201000503010005030100050501000507
-0100050601000502010005020100050101000502010005ff053d01000202010302020000
-050b01000505010005050100050201000503010005030100050201000501010005020100
-0503010005060100050201000502010005010100050201000503010105ff053601000500
-02020103020205000000050a010005050100050601020505010105020102050301020505
-0101050401000503010205020100050201000503010105ff053701000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005440100
-0567000005670000057401000500020201030202050000000542010005000100051b0100
-050601020505010005370000050000000524010005130100050e0100051a000005000000
-051e010005120100054001000202010302020000054201000500010005000100051a0100
-05080100053d000005000000050000000523010005130100050e01000519000005000000
-0500000005310100053f0100050002020103020205000000054001000500010006010500
-0100050b0100050001010502010005020100050101000500010105050100050301020503
-0102052e00000500000005020000050b0100050001010502010005000101050301020502
-010405020102050301020502010405020102050301010500010005180000050000000502
-0000050b0100050001010502010005000101050301020502010005020100050201020502
-0104050201020538010002020103020200000540010005000100060305000100050a0101
-050101000501010005020100050101010501010005040100050501000502010005020100
-052c00000500000005040000050a01010501010005010101050101000501010005020100
-050301000503010005020100050101000502010005030100050301000502010005010100
-05010101051700000500000005040000050a010105010100050101010501010005040100
-050201000502010005010100050201000503010005030100050201000536010005000202
-0103020205000000053e0100050001000605050001000509010005020100050101000502
-01000501010005020100050401000505010005020100052f000005000000050600000509
-010005020100050101000505010005020100050301000503010005020100050101000507
-010005030100050201000501010005020100051600000500000005060000050901000502
-010005010100050801000502010005020100050501000503010005030100050201000537
-01000202010302020000053e000005000000060705000000050801000502010005010100
-050201000501010005020100050401000505010005020100052e01000500010005080100
-050801000502010005010100050501000502010005030100050301040501010005070100
-050301040501010005020100051501000500010005080100050801000502010005010100
-050801000503010005000100050301030503010005030104053601000500020201030202
-05000000053e000005000000060505000000050901000502010005010100050201000501
-010005020100050401000505010005020100052f01000500010005060100050901000502
-010005010100050501000502010005030100050301000505010005070100050301000505
-010005020100051601000500010005060100050901000502010005010100050801000503
-01000500010005020100050201000503010005030100053b010002020103020200000540
-000005000000060305000000050a01010501010005010100050101010501010105010100
-05040100050501000502010005020100052c01000500010005040100050a010105010100
-050101000505010005020100050301000503010005020100050101000502010005030100
-05030100050201000501010005010101051701000500010005040100050a010105010100
-050101000508010005040100050301000502010005030100050301000502010005360100
-0500020201030202050000000540000005000000060105000000050b0100050001010503
-0101050001000501010005000101050501000505010005030102052e0100050001000502
-0100050b0100050001010502010005060102050501010502010205030102050501010502
-01020503010105000100051801000500010005020100050b010005000101050201000508
-010005040100050401030504010105020102053801000202010302020000054200000500
-000005000000050c0100055501000500010005000100050c010005550100050001000500
-0100050c0100056401000500020201030202050000000542000005000000050d01000556
-010005000100050d01000556010005000100050d01000565010002020103020200000544
-0000050e010005570100050e010005570100050e01000564010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-02020103020205000000056f072d05ee010002020103020200000570072c000005ed0100
-050002020103020205000000056f0701002b05ee0100020201030202000005700701002b
-05ed0100050002020103020205000000056f0701002b05ee010002020103020200000570
-0701002b05ed0100050002020103020205000000056f0701002b05ee0100020201030202
-000005700701002b05ed0100050002020103020205000000050a010005020100052e0100
-05040100050601000521070100030100002605ee01000202010302020000050b01000501
-0100053501000529070100020101002605ed0100050002020103020205000000050a0100
-050001000504010205020100050201000508010005000101050301020503010205030102
-050201040502010205030102050201000500010105040101050c07010001010000000100
-002605ee01000202010302020000050b0101050401000502010005010100050201000508
-010105010100050101000502010005010100050201000504010005040100050601000502
-010005020100050101010501010005030101050c070100030100002605ed010005000202
-0103020205000000050a0100050001000503010005020100050201000501010005080100
-050201000501010005020100050101000508010005040100050601000502010005020100
-05010100050201000512070100030100002605ee01000202010302020000050b01000501
-010005020104050201000501010005080100050201000501010005020100050201020505
-010005040100050601000502010005020100050101000502010005120701000301000026
-05ed0100050002020103020205000000050a010005010100050201000507010005000100
-050801000502010005010100050201000505010005040100050401000506010005020100
-0502010005010100050201000512070100030100002605ee01000202010302020000050b
-010005020100050101000502010005030101050901010501010005010100050201000501
-010005020100050401000504010005060100050201000502010005010100050201000503
-0101050c070100030100002605ed0100050002020103020205000000050a010005020100
-050201020505010005090100050001010503010205030102050501000505010105040100
-05030102050201000502010005030101050c070100010104002405ee0100020201030202
-0000051c01000509010005470701002b05ed010005000202010302020500000005180100
-05000100050a010005470701002b05ee01000202010302020000051a0100050b01000547
-0701002b05ed0100050002020103020205000000056f0701002b05ee0100020201030202
-000005700701002b05ed0100050002020103020205000000056f0701002b05ee01000202
-01030202000005700701002b05ed0100050002020103020205000000056f0701002b05ee
-0100020201030202000005700700002c05ed010005000202010302020500000005ff058c
-0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
-01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
-000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
-058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
-05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
-010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
-0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
-05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
-0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
-01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
-000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
-058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
-050002020103020205000000050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000202010302020000050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500020201030202
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000002020103020200000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000202010302020500000005ff058c
-0100020201030202000005ff058c010005000202010302020500000005ff058c01000202
-01030202000005ff058c010005000202010302020500000005ff058c0100020201030202
-000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff
-058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100
-05000202010302020500000005ff058c0100020201030202000005ff058c010005000202
-010302020500000005ff058c0100020201030202000005ff058c01000500020201030202
-0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000
-05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c
-0100020201030202000005ff058c01000500020201030202050000000557010005000100
-05000100050001000500010005090102051e010005fe0100020201030202000005570100
-05000100050001000500010005000100050000000507010005020100051d010005fd0100
-050002020103020205000000055701000606000005080100050201000501010005000101
-050301020502010005000101050901000500010105020100050001010503010205020100
-050201000502010205030102050201000500010105d10100020201030202000005570100
-050006060500000005070100050201000501010105010100050101000502010005010101
-050101000508010105010100050101010501010005010100050201000501010005020100
-05010100050201000501010005020100050101010501010005cf01000500020201030202
-050000000557010006060000050801000502010005010100050201000501010005020100
-050101000502010005080100050201000501010005050100050201000501010005000100
-050001000501010005050100050201000501010005d40100020201030202000005570100
-050006060500000005070100050201000501010005020100050101040501010005020100
-050801000502010005010100050501000502010005010100050001000500010005020102
-050201040501010005d30100050002020103020205000000055701000606000005080100
-050201000501010005020100050101000505010005020100050801000502010005010100
-050501000502010005010100050001000500010005050100050101000505010005d40100
-020201030202000005570100050006060500000005070100050201000501010105010100
-050101000502010005010100050201000508010105010100050101000505010005020100
-050101000500010005000100050101000502010005010100050201000501010005d30100
-050002020103020205000000055701000606000005090102050201000500010105030102
-050201000502010005080100050001010502010005060102050301000500010005030102
-050301020502010005d40100020201030202000005570100050000000500000005000000
-0500000005000000050e010005ff05190100050002020103020205000000055700000500
-0000050000000500000005000000050f010005ff051a0100020201030202000005710100
-05ff0519010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-020200000556000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000052800000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005460100050002020103020205000000055400000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005280000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000548010002020103
-020200000556000005600100052800000560010005460100050002020103020205000000
-055400000560010005280000056001000548010002020103020200000556000005600100
-052800000560010005460100050002020103020205000000055400000560010005280000
-056001000548010002020103020200000556000005600100052800000560010005460100
-050002020103020205000000055400000560010005280000056001000548010002020103
-020200000556000005600100052800000560010005460100050002020103020205000000
-05540000052a01020502010005020100052a010005280000051c0102051f0102051d0100
-0548010002020103020200000556000005280100050201000501010005010100052c0100
-05280000051a01000502010005200100051e010005460100050002020103020205000000
-0554000005290100050201000501010005000100052c010005280000051b010005020100
-050201020502010005000101050301020503010205050100051d01000548010002020103
-0202000005560000052801000502010005010101052e010005280000051a010005050100
-0502010005010101050101000501010005020100050101000502010005040100051e0100
-054601000500020201030202050000000554000005290100050201000501010005000100
-052c010005280000051b0100050901000501010005020100050101000505010005020100
-05040100051d010005480100020201030202000005560000052801000502010005010100
-05010100052c010005280000051a01000506010305010100050201000501010005050104
-05040100051e010005460100050002020103020205000000055400000529010005020100
-0501010005010100052b010005280000051b010005020100050101000502010005010100
-05020100050101000505010005080100051d010005480100020201030202000005560000
-05280100050201000501010005020100052b010005280000051a01000502010005010100
-0502010005010100050201000501010005020100050101000502010005040100051e0100
-0546010005000202010302020500000005540000052a01020502010005020100052a0100
-05280000051c0102050301030501010005020100050201020503010205050100051d0100
-054801000202010302020000055600000560010005280000056001000546010005000202
-010302020500000005540000056001000528000005600100054801000202010302020000
-055600000560010005280000056001000546010005000202010302020500000005540000
-056001000528000005600100054801000202010302020000055600000560010005280000
-056001000546010005000202010302020500000005540000056001000528000005600100
-054801000202010302020000055600000560010005280000056001000546010005000202
-010302020500000005540000056001000528000005600100054801000202010302020000
-055600000560010005280000056001000546010005000202010302020500000005540000
-056001000528000005600100054801000202010302020000055600000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005280000050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000546010005000202
-010302020500000005540000050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000528000005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-05000100050001000500010005480100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff
-058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100
-020201030202000005ff058c010005000202010302020500000005ff058c010002020103
-0202000005ff058c010005000202010302020500000005ff058c01000202010302020000
-05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c
-010005000202010302020500000005ff058c0100020201030202000005ff058c01000500
-0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103
-02020500000005ff058c0100020201030202000005ff058c010005000202010302020500
-000005ff058c010002020101000505ff058c010005000005020204000500000005ff058c
-0100000002020400000002020400000005ff058c01000500000002020400000002020400
-0500000005ff058c01000000020204000000020204000000050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500000002020400
-000002020400050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0100050001000500010005000100000002020400000002020400000502ff028300060202
-040000000208040002ff028300000208040000000208040002ff02830000020804000000
-0208040001ff01830000020804000000040901ff018300000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 114 250 471
-%%EOF
diff --git a/lib/tv/doc/src/tv_record_editor_mnesia.gif b/lib/tv/doc/src/tv_record_editor_mnesia.gif
deleted file mode 100644
index fbbdcab515..0000000000
--- a/lib/tv/doc/src/tv_record_editor_mnesia.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_record_editor_mnesia.ps b/lib/tv/doc/src/tv_record_editor_mnesia.ps
deleted file mode 100644
index b4d19f963f..0000000000
--- a/lib/tv/doc/src/tv_record_editor_mnesia.ps
+++ /dev/null
@@ -1,897 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./tv_record_editor_mnesia.tmp.eps)
-%%CreationDate: (Tue Jun 12 16:09:57 2001)
-%%BoundingBox: 0 41 300 330
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 41 300 330
-userdict begin
-%%BeginData:
-DisplayImage
-0 41
-300.000000 289.000000
-12
-385 371
-1
-0
-0
-8
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-999999
-000a01ff016a000b0208040001ff016a00000208040000000208040002ff026a00000208
-0400000002080400020000ff0067040002000000020804000000020204060200000004ff
-0467020000000405020204000000020204000209000d02ff025e00000202040000000202
-040002080000020d04000242010302110103023701010211010102020101022301010231
-01010206010102090101023e00000202040000000202040002080000020d040002420101
-02020107020001010203010102010101020e010402230101020601050204010102020101
-02020100021f01010201010002130100020c0100020b01010206010102090101023e0000
-0202040000000202040002080000020d0400024201010205010102030101020301010201
-0101020e0101020101010222010102060101020801010206010102200100020001010212
-0101020b0101020b010102060101020a0100023e00000202040000000202040002080000
-02020406020304000242010102050101020301010203010102010101020e010102010101
-020201030203010302020103020201010200010102010104020601010205010402020101
-0200010402010103020201010200010102000101020c0100020001040201010302030104
-0200010402080104020101030203010102000101020301010202010302020100023f0000
-020204000000040302080000020204000304000002030400024201010205010102040101
-0202010002020101020e0101020101000202010102010101020101010201010102000101
-020101010201010102000101020001010201010102060101020401010201010102020101
-020101010202010102010101020101010200010102000101020f01010202010102010101
-0201010102050101020b0101020201010201010102020102020001010202010102010101
-020101010242000004030101020b00000203040003020000020404000242010102050101
-020401010201010102020101020e01030203010102010101020101010204010102010101
-020101020202010102010101020601040201010102010101020201010201010102020101
-02010101020101020214010102020101020101010201010202040101020b010102060101
-020201010201010102020101020101010201010102450103020b00000203040003020000
-020404000242010102050101020501010200010002030101020e01010200010102020105
-020101010204010102010101020101010203010102010101020601010204010102010101
-020201010201010102020101020101010201010102150101020201050202010302020101
-020b0101020301040202010102010101020201010201010502450103020b000002040400
-030000000205040002420101020501010205010302030101020e01010200010102020101
-020501010204010102010101020101010203010102010101020601010204010102010101
-020201010201010102020101020101010201010102150101020201010208010202010101
-020b010102020101020101010202010102010101020201010201010102490103020b0000
-02040400030000000205040002420101020501010206010102040101020e010102010101
-020101010202010002010101020201000200010102010101020101010203010102000102
-020601010204010102000102020201010201010102020101020101010201010102030101
-020f010102020101020201000205010102010101020b0101020201010201010102020101
-0201010102020101020101010202010002450103020b0000020500000206040002420101
-020501010206010102040101020e01010201010202010103020301030202010302020101
-020401010200010102060105020101010200010102020101020201020201010302020101
-0203010102100102020101030202010402030102020a0102020101020200010102010104
-020301010202010302460103020b0000020d040002420103021101030293010602680103
-020b0000020d040002ff02600103020b0000020d040002ff02600103020c040d02ff0261
-010302ff027c010302ff027c0103020200ff00750400020201030202000004ff04750202
-010302ff027c010302020500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000202010302020000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050001000202010302020500000005ff057201000500020201030202000005ff05740100
-0202010302020500000005ff057201000500020201030202000005ff0574010002020103
-02020500000005ff057201000500020201030202000005ff057401000202010302020500
-000005ff057201000500020201030202000005ff057401000202010302020500000005ff
-057201000500020201030202000005ff057401000202010302020500000005ff05720100
-0500020201030202000005ff057401000202010302020500000005ff0572010005000202
-01030202000005ff057401000202010302020500000005ff057201000500020201030202
-000005ff057401000202010302020500000005ff057201000500020201030202000005ff
-057401000202010302020500000005ff057201000500020201030202000005ff05740100
-02020103020205000000054e01ff0116050c010005000202010302020000054f01ff0116
-050d010002020103020205000000054e010107ff07120101050c01000500020201030202
-0000054f010107ff071100000101050d010002020103020205000000054e0101070100ff
-00100101050c010005000202010302020000054f0101070100ff00100101050d01000202
-0103020205000000054e0101070100ff00100101050c010005000202010302020000054f
-010107010000030000000300000003000000030000000300000003000000030000000300
-000003000000030000000300000003000000030000000300000003000000030000000300
-000003000000030000000300000003000000030000000300000003000000030000000300
-00000300000003000000030000000300000003000000030000d00101050d010002020103
-020205000000054e01010701034000cf0101050c010005000202010302020000054f0101
-07010000033e010000cf0101050d010002020103020205000000054e0101070103130100
-030b01010304010003140100030100cf0101050c010005000202010302020000054f0101
-0701000003120100030a0100031c01000300010000cf0101050d01000202010302020500
-0000050f0100050001010503010205020101050001000503010205250101070103010100
-030201000301010003000101030301010300010003020102030401000304010203020100
-03000101030301020303010103000100030100cf0101050c010005000202010302020000
-051001010501010005010100050201000501010005000100050001000501010005020100
-052401010701000003000100030201000301010103010100030101000301010103010100
-030201000301010403040100030201010301010003010100030201000301010003010101
-0300010000cf0101050d010002020103020205000000050f010005020100050501000501
-010005000100050001000501010005020100052401010701030101000302010003010100
-030201000301010003020100030101000302010003030100030601000302010003020100
-03010100030201000301010003020100030100cf0101050c010005000202010302020000
-051001000502010005020103050101000500010005000100050101040524010107010000
-030001000302010003010100030201000301010003020100030101040303010003060100
-03020100030201000301010403010100030201000300010000cf0101050d010002020103
-020205000000050f01000502010005010100050201000501010005000100050001000501
-010005280101070103010100030201000301010003020100030101000302010003010100
-03070100030601000302010003020100030101000305010003020100030100cf0101050c
-010005000202010302020000051001000502010005010100050201000501010005000100
-050001000501010005020100052401010701000003000100030101010301010003020100
-030101000301010103010100030201000303010003060100030201000302010003010100
-0302010003010100030101010300010000cf0101050d010002020103020205000000050f
-010005020100050201030501010005000100050001000502010205250101070103020101
-030001000301010003020100030201010300010003020102030401000306010003020100
-03020100030201020303010103000100030100cf0101050c010005000202010302020000
-054f010107010000033e010000cf0101050d010002020103020205000000054e01010701
-034000cf0101050c010005000202010302020000054f010107010000033e010000cf0101
-050d010002020103020205000000054e0101070103000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300010003000100
-03000100030000cf0101050c010005000202010302020000054f0101070100ff00100101
-050d010002020103020205000000054e0101070100ff00100101050c0100050002020103
-02020000054f0101070100ff00100101050d010002020103020205000000054e01010701
-00ff00100101050c010005000202010302020000054f0101070000ff00110101050d0100
-02020103020205000000054e01ff0116050c010005000202010302020000054f01ff0116
-050d01000202010302020500000005ff057201000500020201030202000005ff05740100
-0202010302020500000005ff057201000500020201030202000005ff0574010002020103
-02020500000005ff057201000500020201030202000005ff057401000202010302020500
-000005ff057201000500020201030202000005ff057401000202010302020500000005ff
-057201000500020201030202000005ff057401000202010302020500000005ff05720100
-0500020201030202000005ff0574010002020103020205000000055007ff0712050e0100
-05000202010302020000055107ff07110000050f01000202010302020500000005500701
-00ff0010050e0100050002020103020200000551070100ff0010050f0100020201030202
-050000000550070100ff0010050e0100050002020103020200000551070100ff0010050f
-0100020201030202050000000550070100ff0010050e0100050002020103020200000551
-070100ff0010050f010002020103020205000000051a010005050100052d070100130100
-000b0101000401000014010000d1050e010005000202010302020000051b010005050100
-052d070100130100000a0100001c010000d1050f01000202010302020500000005100102
-050301010500010005020101050001000501010005000101050301020503010205030102
-051207010001010000020100000101000000010100030101000001000002010200040100
-00040102000201000000010100030102000301010000010000d1050e0100050002020103
-020200000510010005020100050101000501010105010100050101010501010105010100
-050101000502010005010100050201000501010005020100051107010001010000020100
-000101010001010000010100000101010001010000020100000101040004010000020101
-000101000001010000020100000101000001010100d1050f010002020103020205000000
-051301000501010005020100050101000502010005010100050501000502010005010100
-050501000515070100010100000201000001010000020100000101000002010000010100
-000201000003010000060100000201000002010000010100000201000001010000020100
-00d1050e0100050002020103020200000511010305010100050201000501010005020100
-050101000505010405020102050301020512070100010100000201000001010000020100
-000101000002010000010104000301000006010000020100000201000001010400010100
-0002010000d1050f010002020103020205000000050f0100050201000501010005020100
-050101000502010005010100050501000509010005050100051107010001010000020100
-000101000002010000010100000201000001010000070100000601000002010000020100
-00010100000501000002010000d1050e0100050002020103020200000510010005020100
-050101000501010105010100050101010501010005050100050201000501010005020100
-050101000502010005110701000101000001010100010100000201000001010000010101
-000101000002010000030100000601000002010000020100000101000002010000010100
-0001010100d1050f01000202010302020500000005100103050201010500010005020101
-050001000501010005060102050301020503010205120701000201010000010000010100
-000201000002010100000100000201020004010000060100000201000002010000020102
-000301010000010000d1050e0100050002020103020200000551070100ff0010050f0100
-020201030202050000000550070100ff0010050e01000500020201030202000005510701
-00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103
-020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e
-0100050002020103020200000551070100ff0010050f0100020201030202050000000550
-070100ff0010050e0100050002020103020200000551070000ff0011050f010002020103
-02020500000005ff057201000500020201030202000005ff057401000202010302020500
-000005ff057201000500020201030202000005ff057401000202010302020500000005ff
-057201000500020201030202000005ff057401000202010302020500000005ff05720100
-0500020201030202000005ff057401000202010302020500000005ff0572010005000202
-01030202000005ff057401000202010302020500000005ff057201000500020201030202
-000005ff057401000202010302020500000005ff057201000500020201030202000005ff
-0574010002020103020205000000055007ff0712050e0100050002020103020200000551
-07ff07110000050f0100020201030202050000000550070100ff0010050e010005000202
-0103020200000551070100ff0010050f0100020201030202050000000550070100ff0010
-050e0100050002020103020200000551070100ff0010050f010002020103020205000000
-0550070100ff0010050e0100050002020103020200000551070100ff0010050f01000202
-010302020500000005190100052201000511070100130100000b01010004010000140100
-00d1050e010005000202010302020000053e01000511070100130100000a0100001c0100
-00d1050f010002020103020205000000050f0104050201020502010005000101050a0102
-05030102050301010500010005020102050b070100010100000201000001010000000101
-000301010000010000020102000401000004010200020100000001010003010200030101
-0000010000d1050e01000500020201030202000005140100050401000502010105010100
-0508010005020100050101000502010005010100050101010501010005020100050a0701
-000101000002010000010101000101000001010000010101000101000002010000010104
-0004010000020101000101000001010000020100000101000001010100d1050f01000202
-010302020500000005120100050501000502010005020100050801000505010005020100
-05010100050201000501010005020100050a070100010100000201000001010000020100
-000101000002010000010100000201000003010000060100000201000002010000010100
-00020100000101000002010000d1050e0100050002020103020200000512010005060100
-0502010005020100050801000505010005020100050101000502010005010104050a0701
-000101000002010000010100000201000001010000020100000101040003010000060100
-000201000002010000010104000101000002010000d1050f010002020103020205000000
-051001000507010005020100050201000508010005050100050201000501010005020100
-05010100050e070100010100000201000001010000020100000101000002010000010100
-0007010000060100000201000002010000010100000501000002010000d1050e01000500
-020201030202000005100100050801000502010105010100050801000502010005010100
-0502010005010100050101010501010005020100050a0701000101000001010100010100
-000201000001010000010101000101000002010000030100000601000002010000020100
-0001010000020100000101000001010100d1050f010002020103020205000000050f0104
-050401000502010005000101050a010205030102050301010500010005020102050b0701
-000201010000010000010100000201000002010100000100000201020004010000060100
-000201000002010000020102000301010000010000d1050e010005000202010302020000
-051e0100050401050526070100ff0010050f010002020103020205000000051d01000531
-070100ff0010050e010005000202010302020000051e01000531070100ff0010050f0100
-020201030202050000000550070100ff0010050e01000500020201030202000005510701
-00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103
-020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e
-0100050002020103020200000551070000ff0011050f01000202010302020500000005ff
-057201000500020201030202000005ff057401000202010302020500000005ff05720100
-0500020201030202000005ff057401000202010302020500000005ff0572010005000202
-01030202000005ff057401000202010302020500000005ff057201000500020201030202
-000005ff057401000202010302020500000005ff057201000500020201030202000005ff
-057401000202010302020500000005ff057201000500020201030202000005ff05740100
-0202010302020500000005ff057201000500020201030202000005ff0574010002020103
-020205000000055007ff0712050e010005000202010302020000055107ff07110000050f
-0100020201030202050000000550070100ff0010050e0100050002020103020200000551
-070100ff0010050f0100020201030202050000000550070100ff0010050e010005000202
-0103020200000551070100ff0010050f0100020201030202050000000550070100ff0010
-050e0100050002020103020200000551070100ff0010050f010002020103020205000000
-05180100050c01000528070100130100000b0101000401000014010000d1050e01000500
-020201030202000005190100050c01000528070100130100000a0100001c010000d1050f
-010002020103020205000000051001020502010405020102050201040502010205200701
-000101000002010000010100000001010003010100000100000201020004010000040102
-000201000000010100030102000301010000010000d1050e010005000202010302020000
-0510010005020100050301000503010005020100050301000503010005020100051f0701
-000101000002010000010101000101000001010000010101000101000002010000010104
-0004010000020101000101000001010000020100000101000001010100d1050f01000202
-0103020205000000050f01000507010005070100050301000503010005020100051f0701
-000101000002010000010100000201000001010000020100000101000002010000030100
-0006010000020100000201000001010000020100000101000002010000d1050e01000500
-02020103020200000511010205040100050401030503010005030104051f070100010100
-000201000001010000020100000101000002010000010104000301000006010000020100
-0002010000010104000101000002010000d1050f01000202010302020500000005130100
-050301000503010005020100050301000503010005230701000101000002010000010100
-000201000001010000020100000101000007010000060100000201000002010000010100
-000501000002010000d1050e010005000202010302020000051001000502010005030100
-0503010005020100050301000503010005020100051f0701000101000001010100010100
-000201000001010000010101000101000002010000030100000601000002010000020100
-0001010000020100000101000001010100d1050f01000202010302020500000005100102
-050501010502010305040101050201020520070100020101000001000001010000020100
-000201010000010000020102000401000006010000020100000201000002010200030101
-0000010000d1050e0100050002020103020200000551070100ff0010050f010002020103
-0202050000000550070100ff0010050e0100050002020103020200000551070100ff0010
-050f0100020201030202050000000550070100ff0010050e010005000202010302020000
-0551070100ff0010050f0100020201030202050000000550070100ff0010050e01000500
-02020103020200000551070100ff0010050f0100020201030202050000000550070100ff
-0010050e0100050002020103020200000551070000ff0011050f01000202010302020500
-000005ff057201000500020201030202000005ff057401000202010302020500000005ff
-057201000500020201030202000005ff057401000202010302020500000005ff05720100
-0500020201030202000005ff057401000202010302020500000005ff0572010005000202
-01030202000005ff057401000202010302020500000005ff057201000500020201030202
-000005ff057401000202010302020500000005ff057201000500020201030202000005ff
-057401000202010302020500000005ff057201000500020201030202000005ff05740100
-02020103020205000000055007ff0712050e010005000202010302020000055107ff0711
-0000050f0100020201030202050000000550070100ff0010050e01000500020201030202
-00000551070100ff0010050f0100020201030202050000000550070100ff0010050e0100
-050002020103020200000551070100ff0010050f01000202010302020500000005500701
-00ff0010050e0100050002020103020200000551070100ff0010050f0100020201030202
-05000000052d01000521070100130100000b0101000401000014010000d1050e01000500
-0202010302020000052e01000521070100130100000a0100001c010000d1050f01000202
-010302020500000005100102050301020502010005020100050101000500010105020104
-050101000500010105020100050201000511070100010100000201000001010000000101
-000301010000010000020102000401000004010200020100000001010003010200030101
-0000010000d1050e01000500020201030202000005100100050201000501010005020100
-050101000502010005010101050101000503010005030101050101000501010005020100
-051107010001010000020100000101010001010000010100000101010001010000020100
-000101040004010000020101000101000001010000020100000101000001010100d1050f
-010002020103020205000000050f01000505010005020100050101000502010005010100
-050201000503010005030100050601000501010005110701000101000002010000010100
-000201000001010000020100000101000002010000030100000601000002010000020100
-0001010000020100000101000002010000d1050e01000500020201030202000005100100
-050501000502010005010100050201000501010005020100050301000503010005060100
-050101000511070100010100000201000001010000020100000101000002010000010104
-0003010000060100000201000002010000010104000101000002010000d1050f01000202
-0103020205000000050f0100050501000502010005010100050201000501010005020100
-050301000503010005070100050001000511070100010100000201000001010000020100
-000101000002010000010100000701000006010000020100000201000001010000050100
-0002010000d1050e01000500020201030202000005100100050201000501010005020100
-050101000501010105010100050201000503010005030100050701010512070100010100
-000101010001010000020100000101000001010100010100000201000003010000060100
-00020100000201000001010000020100000101000001010100d1050f0100020201030202
-050000000510010205030102050301010500010005010100050201000504010105010100
-050801000512070100020101000001000001010000020100000201010000010000020102
-0004010000060100000201000002010000020102000301010000010000d1050e01000500
-0202010302020000053d01000512070100ff0010050f0100020201030202050000000539
-0100050001000513070100ff0010050e010005000202010302020000053b010005140701
-00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103
-020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e
-0100050002020103020200000551070100ff0010050f0100020201030202050000000550
-070100ff0010050e0100050002020103020200000551070000ff0011050f010002020103
-02020500000005ff057201000500020201030202000005ff057401000202010302020500
-000005ff057201000500020201030202000005ff057401000202010302020500000005ff
-057201000500020201030202000005ff057401000202010302020500000005ff05720100
-0500020201030202000005ff057401000202010302020500000005ff0572010005000202
-01030202000005ff057401000202010302020500000005ff057201000500020201030202
-000005ff057401000202010302020500000005ff057201000500020201030202000005ff
-057401000202010302020500000005ff057201000500020201030202000005ff05740100
-0202010302020500000005ff057201000500020201030202000005ff0574010002020103
-02020500000005ff057201000500020201030202000005ff057401000202010302020500
-000005ff052f000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500000005000000050b01000500020201030202000005ff052f00000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500000005000000050000000500000005000000050000000500000005000100050b0100
-0202010302020500000005ff052f000005340100050b01000500020201030202000005ff
-052f000005360100050b01000202010302020500000005ff052f0000052a060005080100
-050b01000500020201030202000005ff052f0000050906000502060005110600050a0600
-05080100050b01000202010302020500000005ff052f0000050806010501060005110600
-050b060005060100050b01000500020201030202000005ff052f00000509060105010600
-05020602050206000502060005010604050a060005060100050b01000202010302020500
-000005ff052f000005080600050006000500060005010600050206000501060005020600
-05030600050d060005040100050b01000500020201030202000005ff052f000005090600
-05000600050006000501060005020600050206000500060005040600050e060005040100
-050b01000202010302020500000005ff052f000005080600050106010501060405030600
-05050600050d060005040100050b01000500020201030202000005ff052f000005090600
-0501060105010600050606000500060005040600050c060005060100050b010002020103
-02020500000005ff052f0000050806000502060005010600050206000501060005020600
-05030600050b060005060100050b01000500020201030202000005ff052f000005090600
-05020600050206020502060005020600050406010508060005080100050b010002020103
-02020500000005ff052f0000052a060005080100050b01000500020201030202000005ff
-052f000005360100050b01000202010302020500000005ff052f000005340100050b0100
-0500020201030202000005ff052f000005360100050b01000202010302020500000005ff
-052f000005340100050b01000500020201030202000005ff052f000005360100050b0100
-0202010302020500000005ff052f00000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-05000100050001000500010005000100050b01000500020201030202000005ff052f0000
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-05000100050b01000202010302020500000005ff057201000500020201030202000005ff
-057401000202010302020500000005ff057201000500020201030202000005ff05740100
-0202010302020500000005ff057201000500020201030202000005ff0574010002020103
-02020500000005ff057201000500020201030202000005ff057401000202010302020500
-000005ff057201000500020201030202000005ff057401000202010302020500000005ff
-057201000500020201030202000005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100020201030202050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500020201030202050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500020201030202000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-0000050001000202010302020500000005ff057201000500020201030202000005ff0574
-01000202010302020500000005ff057201000500020201030202000005ff057401000202
-010302020500000005ff057201000500020201030202000005ff05740100020201030202
-0500000005ff057201000500020201030202000005ff0574010002020103020205000000
-05ff057201000500020201030202000005ff057401000202010302020500000005ff0572
-01000500020201030202000005ff057401000202010302020500000005ff057201000500
-020201030202000005ff057401000202010302020500000005ff05720100050002020103
-0202000005ff057401000202010302020500000005ff0572010005000202010302020000
-05ff057401000202010302020500000005ff057201000500020201030202000005ff0574
-01000202010302020500000005ff057201000500020201030202000005ff057401000202
-010302020500000005ff0572010005000202010302020000052e00000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000517000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005170000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0528010002020103020205000000052c0000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000051700000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000517000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005280100050002020103
-02020000052e0000054c010005170000054c010005170000054c01000528010002020103
-020205000000052c0000054c010005170000054c010005170000054c0100052801000500
-0202010302020000052e0000054c010005170000054c010005170000054c010005280100
-02020103020205000000052c0000054c010005170000054c010005170000054c01000528
-010005000202010302020000052e0000054c010005170000054c010005170000054c0100
-0528010002020103020205000000052c0000054c010005170000054c010005170000054c
-01000528010005000202010302020000052e0000054c010005170000054c010005170000
-054c01000528010002020103020205000000052c000005110104051f0100051401000517
-000005120102051f01020513010005170000051401030519010005180100052801000500
-0202010302020000052e0000051201000521010005150100051700000510010005020100
-052001000514010005170000051301000502010005180100051901000528010002020103
-020205000000052c00000513010005030100050001010503010205030102050201000500
-010105020104051201000517000005110100050201000502010205020100050001010503
-010205030102050501000513010005170000051401000502010005020102050301020503
-010205020104051601000528010005000202010302020000052e00000512010005030101
-050101000501010005020100050101000502010005010101050101000503010005150100
-051700000510010005050100050201000501010105010100050101000502010005010100
-050201000504010005140100051700000513010005020100050101000502010005010100
-05020100050101000502010005030100051901000528010002020103020205000000052c
-000005130100050301000502010005010100050501000502010005010100050701000514
-010005170000051101000509010005010100050201000501010005050100050201000504
-010005130100051700000514010305020100050201000501010005050100050201000503
-0100051801000528010005000202010302020000052e0000051201000503010005020100
-050201020502010405010100050701000515010005170000051001000506010305010100
-050201000501010005050104050401000514010005170000051301000501010005020104
-050201020502010405030100051901000528010002020103020205000000052c00000513
-010005030100050201000505010005010100050501000507010005140100051700000511
-010005020100050101000502010005010100050201000501010005050100050801000513
-010005170000051401000502010005010100050901000501010005070100051801000528
-010005000202010302020000052e00000512010005030100050201000501010005020100
-050101000502010005010100050701000515010005170000051001000502010005010100
-050201000501010005020100050101000502010005010100050201000504010005140100
-051700000513010005020100050101000502010005010100050201000501010005020100
-05030100051901000528010002020103020205000000052c000005110104050101000502
-010005020102050301020502010005080101051201000517000005120102050301030501
-010005020100050201020503010205050100051301000517000005140100050201000502
-0102050301020503010205050101051601000528010005000202010302020000052e0000
-054c010005170000054c010005170000054c01000528010002020103020205000000052c
-0000054c010005170000054c010005170000054c01000528010005000202010302020000
-052e0000054c010005170000054c010005170000054c0100052801000202010302020500
-0000052c0000054c010005170000054c010005170000054c010005280100050002020103
-02020000052e0000054c010005170000054c010005170000054c01000528010002020103
-020205000000052c0000054c010005170000054c010005170000054c0100052801000500
-0202010302020000052e0000054c010005170000054c010005170000054c010005280100
-02020103020205000000052c0000054c010005170000054c010005170000054c01000528
-010005000202010302020000052e0000054c010005170000054c010005170000054c0100
-0528010002020103020205000000052c0000054c010005170000054c010005170000054c
-01000528010005000202010302020000052e000005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005170000
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100051700000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000528010002020103
-020205000000052c00000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000517000005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005170000050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100052801000500020201030202000005ff0574
-01000202010302020500000005ff057201000500020201030202000005ff057401000202
-010302020500000005ff057201000500020201030202000005ff05740100020201030202
-0500000005ff057201000500020201030202000005ff0574010002020103020205000000
-05ff057201000500020201030202000005ff057401000202010302020500000005ff0572
-01000500020201030202000005ff057401000202010302020500000005ff057201000500
-020201030202000005ff057401000202010302020500000005ff05720100050002020103
-0202000005ff057401000202010100040500000005ff0572010005000005020204000000
-05ff057401000000020204000000020204000500000005ff057201000500000002020400
-000002020400000005ff0574010000000202040000000202040005000000050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050000000202040000000202040000000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010000000202040000000202
-0400000502ff026a00060202040000000208040002ff026a000002080400000002080400
-02ff026a00000208040000000208040001ff016a0000020804000000040901ff016a0000
-0409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 41 300 330
-%%EOF
diff --git a/lib/tv/doc/src/tv_row_marked.gif b/lib/tv/doc/src/tv_row_marked.gif
deleted file mode 100644
index bc80eb34f1..0000000000
--- a/lib/tv/doc/src/tv_row_marked.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_row_marked.ps b/lib/tv/doc/src/tv_row_marked.ps
deleted file mode 100644
index 99631c5046..0000000000
--- a/lib/tv/doc/src/tv_row_marked.ps
+++ /dev/null
@@ -1,1611 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./tv_row_marked.tmp.eps)
-%%CreationDate: (Tue Jun 12 16:11:48 2001)
-%%BoundingBox: 0 61 377 359
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 61 377 359
-userdict begin
-%%BeginData:
-DisplayImage
-0 61
-377.000000 298.000000
-12
-719 569
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-00ff00
-ff0000
-990000
-7f7f7f
-999999
-ff7f7f
-c8ffff
-009900
-7fff7f
-000a01ff01ff01b8000b0208040001ff01ff01b800000208040000000208040002ff02ff
-02b8000002080400000002080400020000ff00ff00b50400020000000208040000000202
-04060200000004ff04ff04b5020000000405020204000000020204000209000d02ff02ff
-02ac00000202040000000202040002080000020d04000274010302110103023201020258
-0102020c010102010101021e010102290101020601010208010102310101022a01010230
-0101028200000202040000000202040002080000020d0400027401010202010702000101
-0203010102010101020e01050200010702010103020d0101020401010204010302030103
-020e010302060103020301030203010302060103020b0101020a01010202010102190100
-02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101
-020c0104021e0101028200000202040000000202040002080000020d0400027401010205
-0101020301010203010102010101020e0101020701010203010102010101020c01010202
-010302030101020101010201010102010101020801010201010102010101020401010201
-01010201010102010101020101010201010102040101020101010201010102060101020a
-0101020201010218010102210101020b01010206010102090101021b010202020100020d
-01010238010102020101021d010102820000020204000000020204000208000002020406
-020304000274010102050101020301010203010102010101020e01010207010102030101
-020501010209010102030101020701010201010102010101020601020202010102010101
-020801010201010102010101020101010201010102040101020101010202010202030101
-020a01010203010102020103020301030202010302010104020101010202010302030101
-02000101020a0104020101030203010102000101020301010202010302030101021a0100
-020001010201010002020103020301040202010302020101020901010200010102010101
-020301030203010102020101020001010202010102010103020201010200010102010101
-020301030202010102000101020101010202010302020101020201010271000002020400
-000004030208000002020400030400000203040002740101020501010204010102020100
-02020101020e0101020701010203010202040101020a0100020301010207010102010101
-020101010205010102040101020101010208010102010101020101010201010102010101
-02040101020101010204010102020100020b010102030101020101010201010102010101
-020101010200010102010101020101010203010102010101020101010202010202000101
-020a01010202010102010101020201020200010102020101020101010201010102020101
-021a01000200010102010100020101010201010102010101020101010201010102010101
-020101010209010202000102020001010201010102010101020201010202010202000101
-020101010200010102000101020201020200010202000101020101010201010102010101
-0200010102010101020101010201010102010101020201010271000004030101020b0000
-0203040003020000020404000274010102050101020401010201010102020101020e0104
-0204010102040103020d0101020401010205010202020101020101010204010102050101
-020101010207010102020101020101010202010402040101020101010205010102020101
-020901010203010102010101020101010201010102080101020101010203010102010101
-020101010202010102010101020a01010206010102020101020101010202010102010101
-0201010102020101021a0100020001020200010002010101020101010201010102010101
-0201010102010101020d0101020101010201010102050101020201010202010102010101
-020101010200010102000101020201010201010102010101020501010201010202030101
-0201010102010101020101010202010002750103020b0000020304000302000002040400
-0274010102050101020501010200010002030101020e01010207010102060102020e0100
-020301010207010102010101020101010205010102040101020101010206010102030101
-020101010205010102040101020101010204010102020100020b01010203010102010101
-020101010201010102050104020101010203010102010101020101010202010102010101
-020a0101020301040202010102010101020201010201010502020101021a010002010101
-020001000201010102010101020101010201010102010105020d01010201010102010101
-020201040202010102020101020101010201010102000101020001010202010102010101
-0201010102020104020101010204010102010105020201010200010102750103020b0000
-02040400030000000205040002740101020501010205010302030101020e010102070101
-02070101020d010102030101020701010201010102010101020601020202010102010101
-0205010102040101020101010205010102040101020101010202010202030101020a0101
-020301010201010102010101020101010204010102010101020101010203010102010101
-020101010202010102010101020a01010202010102010101020201010201010102020101
-0201010102060101021a0100020201020201010102010101020101010201010102010101
-021101010201010102010101020101010201010102020101020201010201010102010101
-020101010200010102010101020101010201010102010101020101010201010102040101
-02010101020601010200010002760103020b000002040400030000000205040002740101
-020501010206010102040101020e01010207010102030101020101010201010102080101
-020401010203010102010101020101010201010102010101020401010201010102010101
-020101010200010502010101020101010201010102010101020101010200010102010101
-0201010102060101020a0101020201010201010102010101020101010202010002000101
-02010101020101010203010102010101020101010202010102010101020a010102020101
-02010101020201010201010102020101020101010202010002010101021b010002020102
-020101010201010102010101020001020201010102020100020101010209010102010101
-020101010201010102010101020201010202010102010101020201010207010102010101
-020101010201010102010101020101010204010102010101020201000203010202760103
-020b0000020500000206040002740101020501010206010102040101020e010502030101
-020401030202010102080101020401010204010302030103020201010209010302020101
-0200010502020103020301030202010102010103020b0101020a01010202010102020103
-0203010302020102020001010201010202010101020201030203010102010101020b0102
-020101020200010102010104020301010202010302020101021b01000203010102020103
-020301010200010102020103020201010209010102010101020101010202010202000101
-020101010202010102010101020301050202010102010101020101010202010202000101
-0200010102040101020201030204010102770103020b0000020d04000274010302110103
-0232010202190100023d0102020c01010237010602230101029e010102780103020b0000
-020d040002dd010002ff0254010102780103020b0000020d040002ff02ff02ae0103020c
-040d02ff02ff02af010302ff02ff02ca010302ff02ff02ca0103020200ff00ff00c30400
-020201030202000004ff04ff04c30202010302ff02ff02ca010302020500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500020201030202000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500010002020103020205000000
-05ff05ff05c001000500020201030202000005ff05ff05c2010002020103020205000000
-05ff05ff05c001000500020201030202000005ff05ff05c2010002020103020205000000
-05ff05ff05c0010005000202010302020000050c06040504060005030602051f06040505
-0600050406000504060005190600050206000504060005270602050b06000506060005ff
-05df060005020600050906020514010002020103020205000000050b0600050f0600051f
-060005090600050a06000519060005020600052c060005020600050a060005ff05e70600
-05020600050b06000513010005000202010302020000050c060005060602050506000503
-060205180600050606010500060005020602050206040517060005020600050206020503
-060205020600050206000517060005020600050106000500060105020604050206020503
-060205020600050006010503060205ff05ca060005020600050206020505060005020600
-05000601050d010002020103020205000000050b06000508060005050600050206000502
-06000517060005050600050106010504060005040600051a060005000600050506000502
-060005020600050106000502060005170600050206000501060105010600050306000506
-060005020600050206000501060105010600050106000502060005ff05c9060005020600
-0501060005020600050406000502060105010600050b010005000202010302020000050c
-060305050600050506000502060005020600051706030502060005020600050406000504
-0600051a0600050006000505060005020600050206000501060005000600050006000517
-060005020600050106000502060005030600050606000502060005020600050106000502
-06000501060005ff05cd06040501060005020600050406000502060005020600050c0100
-02020103020205000000050b060005080600050506000502060405170600050506000502
-06000504060005040600051a060005000600050506000502060405010600050006000500
-060005170600050206000501060005020600050306000506060005020600050206000501
-0600050206000502060205ff05ca06000502060005010604050406000502060005020600
-050b010005000202010302020000050c0600050806000505060005020600051b06000505
-0600050206000504060005040600051b0600050606000502060005050600050006000500
-060005170600050206000501060005020600050306000506060005020600050206000501
-0600050206000505060005ff05c906000502060005010600050806000502060005020600
-050c010002020103020205000000050b0600050806000505060005020600050206000517
-060005050600050106010504060005040600051b06000506060005020600050206000501
-060005000600050006000517060005020600050106010501060005030600050606000502
-0600050206000501060005020600050106000502060005ff05c906000502060005010600
-05020600050406000502060105010600050b010005000202010302020000050c06000508
-060005050600050306020518060405020601050006000504060005050601051906000506
-060005030602050306000500060005190602050206000500060105050601050406000503
-060205020600050206000502060205ff05ca060005020600050206020505060005020600
-05000601050d01000202010302020500000005a8060005ff05ff05050600050f01000500
-0202010302020000050b0606052a0606052a0606052a06060500060005ff05ef0606050e
-06000510010002020103020205000000050a0606052a0606052a0606052a060605000600
-05ff05ef0606050e0600050f01000500020201030202000005ff05ff05c2010002020103
-02020500000005ff05ff05c001000500020201030202000005ff05ff05c2010002020103
-020205000000050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000202010302020000050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-02020103020205ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4
-02020103020205ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4
-02020103020205ff05ff05c402020103020205ff05ff05c4020201030202053600000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000051a00000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050100000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050100000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000051a00000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000051a00000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000051a00000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-00000500000005ff057c0202010302020535000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500010005180000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000100000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500010000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050001000518000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500010005180000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000100
-051800000500000005000000050000000500000005000000050000000500000005000000
-0500000005000000050000000500010005ff057b0202010302020536000005140100051a
-00000514010005010000051401000501000005140100051a000005140100051a00000514
-0100051a00000514010005ff057c02020103020205350000051601000518000005160100
-000005160100000005160100051800000516010005180000051601000518000005160100
-05ff057b0202010302020536000005140100051a00000514010005010000051401000501
-000005140100051a000005140100051a000005140100051a00000514010005ff057c0202
-010302020535000005050602050306020506010005180000051601000000051601000000
-0516010005180000051601000518000005160100051800000516010005ff057b02020103
-020205360000050406020503060205050100051a00000514010005010000051401000501
-000005140100051a00000506060405080100051a00000508060105090100051a00000508
-06030507010005ff057c0202010302020535000005040604050106040505010005180000
-051006000504010000000510060005040100000005040600051001000518000005050608
-0507010005180000050806030509010005180000050706070506010005ff057b02020103
-0202053600000503060005010601050106000501060105040100051a0000050f06000503
-010005010000050f0600050301000501000005030600050f0100051a00000503060a0505
-0100051a00000507060305080100051a000005050603050106030504010005ff057c0202
-01030202053500000503060d0504010005180000050d0600050106000504010000000504
-0600050a06000504010000000504060005010600050d0100051800000504060305020603
-050601000518000005090601050a01000518000005060602050306020505010005ff057b
-020201030202053600000501060005000603050006020500060405020100051a0000050c
-060005010600050301000501000005030600050a06000503010005010000050306000501
-0600050c0100051a0000050206030504060305040100051a000005140100051a00000505
-0602050306020504010005ff057c02020103020205350000050206000500060305000602
-050006040503010005180000050a06000501060005010600050401000000050406000504
-060005040600050401000000050406000501060005010600050a01000518000005030602
-050306070503010005180000050706040509010005180000050706010502060205060100
-05ff057b020201030202053600000501060005000603050006020500060405020100051a
-000005090600050106000501060005030100050100000503060005040600050406000503
-01000501000005030600050106000501060005090100051a000005020602050406050503
-0100051a00000507060305080100051a0000050a06020506010005ff057c020201030202
-053500000502060005000603050006020500060405030100051800000507060005010600
-050106000501060005040100000005040600050406000501060005010600050401000000
-050406000501060005010600050106000507010005180000050306020505060305050100
-05180000050906020509010005180000050a06020508010005ff057b0202010302020536
-000005010600050006070500060405020100051a00000506060005010600050106000501
-060005030100050100000503060005040600050106000501060005030100050100000503
-060005010600050106000501060005060100051a0000050206030505060105050100051a
-00000508060205080100051a0000050806020508010005ff057c02020103020205350000
-050206000500060405010600050006040503010005180000050406000501060005010600
-050106000501060005040100000005040600050106000501060005010600050106000504
-010000000504060005010600050106000501060005010600050401000518000005040603
-050d010005180000050906020509010005180000050906020509010005ff057b02020103
-020205360000050106060501060605020100051a00000503060005010600050106000501
-060005010600050301000501000005030600050106000501060005010600050106000503
-010005010000050306000501060005010600050106000501060005030100051a00000503
-060905060100051a00000508060205080100051a00000514010005ff057c020201030202
-053500000502060005000602050506000500060205030100051800000504060005010600
-050106000501060005010600050401000000050406000501060005010600050106000501
-060005040100000005040600050106000501060005010600050106000504010005180000
-050506070508010005180000050806040508010005180000050906020509010005ff057b
-020201030202053600000501060005000602050506000500060205020100051a00000503
-060005010600050106000501060005010600050301000501000005030600050106000501
-060005010600050106000503010005010000050306000501060005010600050106000501
-060005030100051a00000506060405080100051a00000506060605060100051a00000508
-06020508010005ff057c0202010302020535000005020604050506040503010005180000
-051601000000051601000000051601000518000005160100051800000516010005180000
-0516010005ff057b0202010302020536000005140100051a000005140100050100000514
-01000501000005140100051a000005140100051a000005140100051a00000514010005ff
-057c02020103020205350000051601000518000005160100000005160100000005160100
-05180000051601000518000005160100051800000516010005ff057b0202010302020536
-000005140100051a00000514010005010000051401000501000005140100051a00000514
-0100051a000005140100051a00000514010005ff057c0202010302020535000005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005180000050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100000005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010000000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000518000005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005180000
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100051800000500010005000100050001000500010005000100
-0500010005000100050001000500010005000100050001000500010005ff057b02020103
-020205360100050001000500010005000100050001000500010005000100050001000500
-0100050001000500010005000100051a0100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005010100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005010100050001000500010005000100050001000500010005000100050001000500
-0100050001000500010005000100051a0100050001000500010005000100050001000500
-0100050001000500010005000100050001000500010005000100051a0100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0100051a0100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005ff057c02020103020205ff05ff05c4020201030202
-05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202
-05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202
-05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202
-05ff05ff05c4020201030202050301ff01ff01bc0503020201030202050301ff01ff01a8
-050000000500000005000000050000000500000005000000050000000500000005000000
-050001000503020201030202050301ff01ff01a800000500000005000000050000000500
-000005000000050000000500000005000000050001010503020201030202050301020bff
-0bff0ba2010205000000050e0100050001000503020201030202050301020bff0bff0ba1
-000001020000051001010503020201030202050301020b0100ff00ff00a0010205000000
-050e0100050001000503020201030202050301020b0100040101007101010002010100ff
-00ff002001020000051001010503020201030202050301020b0100030100007501000001
-010100ff00ff0020010205000000050e0100050001000503020201030202050301020b01
-000301000003010000160100001001000006010200100100000c0100001c010000010101
-00ff00ff002001020000051001010503020201030202050301020b010003010000030100
-002801000008010000100100000c0100001c01000001010100ff00ff0020010205000000
-050e0100050001000503020201030202050301020b010003010000030100000101000003
-010200020100000001010003010200020100000001010009010000000101000501000003
-010200030102000201000001010000030102000201000000010100030102000201000000
-01010003010100000100000301000001010100ff00ff0020010200000502010a05020101
-0503020201030202050301020b0100030100000301000000010000030100000201000001
-010100010100000401000002010100010100000801010001010000040100000201000002
-010000010100000201000001010000000100000301000002010000010101000101000001
-01000002010000010101000101000001010000010101000301000001010100ff00ff0020
-0102050000000502010805020100050001000503020201030202050301020b0100010101
-000401010008010000010100000801000002010000020100000801000002010000040100
-000601000001010000050101000401000002010000010100000201000001010000020100
-0001010000050100000201000004010300ff00ff00200102000005040106050401010503
-020201030202050301020b01000301000003010100050103000101000008010000020100
-000201000008010000020100000401000003010300010100000501010004010400010100
-0002010000010104000101000005010000020100000301000001010100ff00ff00200102
-050000000504010405040100050001000503020201030202050301020b01000301000003
-010000000100000301000002010000010100000801000002010000020100000801000002
-010000040100000201000002010000010100000501000000010000030100000501000002
-010000010100000501000005010000020100000301000001010100ff00ff002001020000
-05060102050601010503020201030202050301020b010003010000030100000101000002
-010000020100000101000008010000020100000201000003010100020101000101000004
-010000020100000201000001010000020100000101000001010000020100000201000001
-0101000101000001010000020100000101000005010000010101000301000001010100ff
-00ff00200102050000000506010005060100050001000503020201030202050301020b01
-000301000003010000020100000201030001010000080100000201000002010000030101
-000201000000010100050100000301030002010200020100000201000002010200020100
-0000010100030102000201000006010100000100000301000001010100ff00ff00200102
-0000051001010503020201030202050301020b0100030100002901000045010000030100
-0001010100ff00ff0020010205000000050e010005000100050302020103020205030102
-0b0100040101002501010042010000020100000101010002010100ff00ff002001020000
-051001010503020201030202050301020b01007201020007010100ff00ff002001020500
-0000050e0100050001000503020201030202050301020b0100ff00ff00a0010200000510
-01010503020201030202050301020b0100ff00ff00a0010205000000050e010005000100
-0503020201030202050301020b0000ff00ff00a101020000051001010503020201030202
-050301ff01ff01a805000000050001000500010005000100050001000500010005000100
-0500010005000100050001000503020201030202050301ff01ff01a80000050001000500
-010005000100050001000500010005000100050001000500010005000101050302020103
-0202050301ff01ff01bc05030202010302020503010005ff05ff05a80100050001000500
-010005000100050001000500010005000100050001000500010005000100050302020103
-02020503010005ff05ff05a7010005000100050001000500010005000100050001000500
-0100050001000500010005000000010005030202010302020503010005010bff0bff0ba3
-0502010003060100030600000500010005030202010302020503010005010bff0bff0ba2
-000005010100050003050000050003060500000001000503020201030202050301000501
-0b0100ff00ff00a105020100030505000100050003050000050001000503020201030202
-0503010005010b0100ff00ff00a105010100050003040500000005000100030505000000
-010005030202010302020503010005010b0100ff00ff00a1050201000304000005020100
-030400000500010005030202010302020503010005010b0100ff00ff00a1050101000500
-03030000050201000500030405000000010005030202010302020503010005010b0100ff
-00ff00a10502010003030500000005020100050003030000050001000503020201030202
-0503010005010b0100ff00ff00a105010100050003020500000005040100030305000000
-010005030202010302020503010005010b0100ff00ff00a1050201000302000005060100
-030200000500010005030202010302020503010005010b0100ff00ff00a1050101000500
-03010000050601000500030205000000010005030202010302020503010005010b0100ff
-00ff00a10502010003010500000005060100050003010000050001000503020201030202
-0503010005010b0100ff00ff00a105010100050003000500000005080100030105000000
-010005030202010302020503010005010b0100ff00ff00a10502010003000000050a0100
-030000000500010005030202010302020503010005010b0100ff00ff00a1050101000500
-000005000100050001000500010005000100050001000500010005000300050000000100
-05030202010302020503010005010b0100ff00ff00a10502010005000100050001000500
-010005000100050001000500010005000100050000000500010005030202010302020503
-010005010b0100ff00ff00a1050101000500030e05000000010005030202010302020503
-010005010b01000301010071010100ff00ff002705020100050000000500000005000000
-050000000500000005000000050000000500000005000100050302020103020205030100
-05010b01000201000075010000ff00ff0026050101000500000005000000050000000500
-000005000000050000000500000005000100050000000100050302020103020205030100
-05010b01000201000003010000160100001001000006010200100100000c0100001c0100
-00ff00ff00260502010005000000050a0100050000000500010005030202010302020503
-010005010b010002010000030100002801000008010000100100000c0100001c010000ff
-00ff00260501010005000000050c01000500000001000503020201030202050301000501
-0b0100020100000301000001010000030102000201000000010100030102000201000000
-010100090100000001010005010000030102000301020002010000010100000301020002
-01000000010100030102000201000000010100030101000001000003010000ff00ff0026
-0502010005000000050a0100050000000500010005030202010302020503010005010b01
-000201000003010000000100000301000002010000010101000101000004010000020101
-000101000008010100010100000401000002010000020100000101000002010000010100
-000001000003010000020100000101010001010000010100000201000001010100010100
-00010100000101010003010000ff00ff00260501010005000000050c0100050000000100
-05030202010302020503010005010b010000010100040101000801000001010000080100
-000201000002010000080100000201000004010000060100000101000005010100040100
-000201000001010000020100000101000002010000010100000501000002010000040101
-00ff00ff00240502010005000000050a0100050000000500010005030202010302020503
-010005010b01000201000003010100050103000101000008010000020100000201000008
-010000020100000401000003010300010100000501010004010400010100000201000001
-01040001010000050100000201000003010000ff00ff00260501010005000000050c0100
-05000000010005030202010302020503010005010b010002010000030100000001000003
-010000020100000101000008010000020100000201000008010000020100000401000002
-010000020100000101000005010000000100000301000005010000020100000101000005
-010000050100000201000003010000ff00ff00260502010005000000050a010005000000
-0500010005030202010302020503010005010b0100020100000301000001010000020100
-000201000001010000080100000201000002010000030101000201010001010000040100
-000201000002010000010100000201000001010000010100000201000002010000010101
-0001010000010100000201000001010000050100000101010003010000ff00ff00260501
-010005000000050c010005000000010005030202010302020503010005010b0100020100
-000301000002010000020103000101000008010000020100000201000003010100020100
-000001010005010000030103000201020002010000020100000201020002010000000101
-000301020002010000060101000001000003010000ff00ff00260502010005000000050a
-0100050000000500010005030202010302020503010005010b0100020100002901000045
-01000003010000ff00ff00260501010005000000050c0100050000000100050302020103
-02020503010005010b01000301010025010100420100000201000001010100ff00ff0027
-0502010005000000050a0100050000000500010005030202010302020503010005010b01
-0071010200ff00ff002c0501010005000000050c01000500000001000503020201030202
-0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503
-0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000
-010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100
-050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500
-0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502
-010005000000050a0100050000000500010005030202010302020503010005010b0100ff
-00ff00a10501010005000000050c01000500000001000503020201030202050301000501
-0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202
-0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202
-010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500
-010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100
-05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000
-050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501
-010005000000050c010005000000010005030202010302020503010005010b0100ff00ff
-00a10502010005000000050a010005000000050001000503020201030202050301000501
-0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503
-010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202
-010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100
-05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500
-00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000
-050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100
-05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff
-00a10501010005000000050c010005000000010005030202010302020503010005010b01
-00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503
-010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103
-02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100
-05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500
-0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a
-0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100
-05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1
-0502010005000000050a0100050000000500010005030202010302020503010005010b01
-00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100
-05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103
-02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503
-0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000
-0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c
-010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500
-0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1
-0501010005000000050c010005000000010005030202010302020503010005010b0100ff
-00ff00a10502010005000000050a01000500000005000100050302020103020205030100
-05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202
-0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503
-0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000
-010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100
-050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500
-0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502
-010005000000050a0100050000000500010005030202010302020503010005010b0100ff
-00ff00a10501010005000000050c01000500000001000503020201030202050301000501
-0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202
-0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202
-010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500
-010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100
-05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000
-050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501
-010005000000050c010005000000010005030202010302020503010005010b0100ff00ff
-00a10502010005000000050a010005000000050001000503020201030202050301000501
-0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503
-010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202
-010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100
-05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500
-00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000
-050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100
-05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff
-00a10501010005000000050c010005000000010005030202010302020503010005010b01
-00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503
-010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103
-02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100
-05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500
-0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a
-0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100
-05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1
-0502010005000000050a0100050000000500010005030202010302020503010005010b01
-00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100
-05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103
-02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503
-0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000
-0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c
-010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500
-0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1
-0501010005000000050c010005000000010005030202010302020503010005010b0100ff
-00ff00a10502010005000000050a01000500000005000100050302020103020205030100
-05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202
-0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503
-0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000
-010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100
-050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500
-0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502
-010005000000050a0100050000000500010005030202010302020503010005010b0100ff
-00ff00a10501010005000000050c01000500000001000503020201030202050301000501
-0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202
-0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202
-010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500
-010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100
-05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000
-050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501
-010005000000050c010005000000010005030202010302020503010005010b0100ff00ff
-00a10502010005000000050a010005000000050001000503020201030202050301000501
-0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503
-010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202
-010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100
-05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500
-00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000
-050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100
-05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff
-00a10501010005000000050c010005000000010005030202010302020503010005010b01
-00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503
-010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103
-02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100
-05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500
-0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a
-0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100
-05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1
-0502010005000000050a0100050000000500010005030202010302020503010005010b01
-00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100
-05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103
-02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503
-0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000
-0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c
-010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500
-0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1
-0501010005000000050c010005000000010005030202010302020503010005010b0100ff
-00ff00a10502010005000000050a01000500000005000100050302020103020205030100
-05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202
-0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503
-0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000
-010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100
-050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500
-0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502
-010005000000050a0100050000000500010005030202010302020503010005010b0100ff
-00ff00a10501010005000000050c01000500000001000503020201030202050301000501
-0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202
-0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202
-010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500
-010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100
-05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000
-050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501
-010005000000050c010005000000010005030202010302020503010005010b0100ff00ff
-00a10502010005000000050a010005000000050001000503020201030202050301000501
-0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503
-010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202
-010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100
-05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500
-00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000
-050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100
-05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff
-00a10501010005000000050c010005000000010005030202010302020503010005010b01
-00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503
-010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103
-02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100
-05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500
-0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a
-0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100
-05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1
-0502010005000000050a0100050000000500010005030202010302020503010005010b01
-00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100
-05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103
-02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503
-0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000
-0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c
-010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500
-0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1
-0501010005000000050c010005000000010005030202010302020503010005010b0100ff
-00ff00a10502010005000000050a01000500000005000100050302020103020205030100
-05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202
-0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503
-0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000
-010005030202010302020503010005010b0100ff00ff00a1050201000500000005000100
-050001000500010005000100050001000500010005000000050001000503020201030202
-0503010005010b0100ff00ff00a105010100050000000500010005000100050001000500
-010005000100050001000500010005000000010005030202010302020503010005010b01
-00ff00ff00a105020100030e00000500010005030202010302020503010005010b0100ff
-00ff00a10501010005000000050000000500000005000000050000000500000005000000
-0500000005000000010005030202010302020503010005010b0100ff00ff00a105020100
-030000000500000005000000050000000500000005000000050000000500000005000100
-05030202010302020503010005010b0100ff00ff00a10501010005000300050000000508
-01000500030005000000010005030202010302020503010005010b0100ff00ff00a10502
-010003010500000005080100030000000500010005030202010302020503010005010b01
-00ff00ff00a1050101000500030100000508010003010500000001000503020201030202
-0503010005010b0100ff00ff00a105020100030200000506010005000301000005000100
-05030202010302020503010005010b0100ff00ff00a10501010005000302050000000504
-01000500030205000000010005030202010302020503010005010b0100ff00ff00a10502
-010003030500000005040100030200000500010005030202010302020503010005010b01
-00ff00ff00a1050101000500030300000504010003030500000001000503020201030202
-0503010005010b0100ff00ff00a105020100030400000502010005000303000005000100
-05030202010302020503010005010b0100ff00ff00a10501010005000304050000000500
-01000500030405000000010005030202010302020503010005010b0100ff00ff00a10502
-010003050500010005000100030400000500010005030202010302020503010005010b01
-00ff00ff00a1050101000500030500000500010003050500000001000503020201030202
-0503010005010b0100ff00ff00a105020100030601000500030500000500010005030202
-010302020503010005010b0000ff00ff00a2050101000500030605000306050000000100
-05030202010302020503010005ff05ff05a8010005000000050000000500000005000000
-050000000500000005000000050000000500010005030202010302020503010005ff05ff
-05a701000500000005000000050000000500000005000000050000000500000005000000
-0500000001000503020201030202050301ff01ff01bc0503020201030202050301000f01
-0717010007190e01000a0100000201000002010000050100000101000007010000060100
-000201000002010000010100002901000008010000000100000201000002010000050100
-000101000002010000050100000301000003010000020100000101000002010000250100
-006301000063010000630100003e0100051301000500030e050000000523010005030202
-01030202050301000f010717010007190e01000a01000002010000020100000101000002
-010000010100000201000003010000060100000201000002010000010100000201000025
-010000090100000301000002010000010100000201000001010000020100000101000002
-010000030100000301000002010000010100000201000025010000630100006301000063
-0100003e010005140100030e0000052401000503020201030202050301000f0107320e01
-000a01000003010200030102000301020004010000060100000201000002010000020102
-002601000009010000040103000201020003010300020102000501010002010300010100
-0002010000250100006301000063010000630100003e0100051301000500030e05000000
-052301000503020201030202050301000f0107320e01000a010000570100006301000063
-01000063010000630100003e010005140100030e00000524010005030202010302020503
-01000f0107320e0100070100000101000057010000630100006301000063010000630100
-003e0100051301000500030e05000000052301000503020201030202050301000f010732
-0e01000801010058010000630100006301000063010000630100003e010005140100030e
-0000052401000503020201030202050301000f0107320e01006301000063010000630100
-0063010000630100003e0100051301000500030e05000000052301000503020201030202
-050301000f0107320e010063010000630100006301000063010000630100003e01000514
-0100030e0000052401000503020201030202050301000f010e3400630100006301000063
-01000063010000630100003e0100051301000500030e0500000005230100050302020103
-0202050301000f000e3501ff01ff013805140100030e0000052401000503020201030202
-050301000c360d6301000d6301000d6301000d6301000d6301000d3e0100051301000500
-030e05000000052301000503020201030202050301000c3509000d6301000d6301000d63
-01000d6301000d6301000d3e010005140100030e00000524010005030202010302020503
-01000c01083209010d6301000d6301000d6301000d6301000d6301000d3e010005130100
-0500030e05000000052301000503020201030202050301000c01083209010d6301000d63
-01000d6301000d6301000d6301000d3e010005140100030e000005240100050302020103
-0202050301000c0108160102081809010d6301000d6301000d6301000d6301000d630100
-0d3e0100051301000500030e05000000052301000503020201030202050301000c010815
-010008020100081709010d0701000d1601000d4201000d0701000d0601020d1001000d0c
-01000d3001000d6301000d6301000d6301000d3e010005140100030e0000052401000503
-020201030202050301000c010815010008020100081709010d0701000d5a01000d070100
-0d0801000d1001000d0c01000d3001000d6301000d6301000d6301000d3e010005130100
-0500030e05000000052301000503020201030202050301000c0108150100080201000817
-09010d0701000d0101000d0301020d0201000d0001010d0301020d0201000d0001010d3b
-01000d0701000d0001010d0501000d0301020d0301020d0201000d0101000d0301020d02
-01000d0001010d0301020d0201000d0001010d0301010d0001000d1701000d6301000d63
-01000d6301000d3e010005140100030e0000052401000503020201030202050301000c01
-08160102081809010d0701000d0001000d0301000d0201000d0101010d0101000d040100
-0d0201010d0101000d3a01000d0701010d0101000d0401000d0201000d0201000d010100
-0d0201000d0101000d0001000d0301000d0201000d0101010d0101000d0101000d020100
-0d0101010d0101000d0101000d0101010d1701000d6301000d6301000d6301000d3e0100
-051301000500030e05000000052301000503020201030202050301000c01081501000802
-0100081709010d0701010d0801000d0101000d0801000d0201000d0201000d3a01000d07
-01000d0201000d0401000d0601000d0101000d0501010d0401000d0201000d0101000d02
-01000d0101000d0201000d0101000d0501000d0201000d1701000d6301000d6301000d63
-01000d3e010005140100030e0000052401000503020201030202050301000c0108150100
-08020100081709010d0701010d0501030d0101000d0801000d0201000d0201000d3a0100
-0d0701000d0201000d0401000d0301030d0101000d0501010d0401040d0101000d020100
-0d0101040d0101000d0501000d0201000d1701000d6301000d6301000d6301000d3e0100
-051301000500030e05000000052301000503020201030202050301000c01081501000802
-0100081709010d0701000d0001000d0301000d0201000d0101000d0801000d0201000d02
-01000d3a01000d0701000d0201000d0401000d0201000d0201000d0101000d0501000d00
-01000d0301000d0501000d0201000d0101000d0501000d0501000d0201000d1701000d63
-01000d6301000d6301000d3e010005140100030e00000524010005030202010302020503
-01000c0108160102081809010d0701000d0101000d0201000d0201000d0101000d080100
-0d0201000d0201000d3a01000d0701010d0101000d0401000d0201000d0201000d010100
-0d0201000d0101000d0101000d0201000d0201000d0101010d0101000d0101000d020100
-0d0101000d0501000d0101010d1701000d6301000d6301000d6301000d3e010005130100
-0500030e05000000052301000503020201030202050301000c01083209010d0701000d02
-01000d0201030d0101000d0801000d0201000d0201000d3a01000d0701000d0001010d05
-01000d0301030d0201020d0201000d0201000d0201020d0201000d0001010d0301020d02
-01000d0601010d0001000d1701000d6301000d6301000d6301000d3e010005140100030e
-0000052401000503020201030202050301000c01083209010d6301000d4a01000d170100
-0d6301000d6301000d6301000d3e0100051301000500030e050000000523010005030202
-01030202050301000c01083209010d6301000d4601000d0201000d1701000d6301000d63
-01000d6301000d3e010005140100030e0000052401000503020201030202050301000c01
-083209010d6301000d4701020d1801000d6301000d6301000d6301000d3e010005130100
-0500030e05000000052301000503020201030202050301000c01083209010d6301000d63
-01000d6301000d6301000d6301000d3e010005140100030e000005240100050302020103
-0202050301000c01083209010d6301000d6301000d6301000d6301000d6301000d3e0100
-051301000500030e05000000052301000503020201030202050301000c0109340d630100
-0d6301000d6301000d6301000d6301000d3e010005140100030e00000524010005030202
-01030202050301000c00093501ff01ff0138051301000500030e05000000052301000503
-020201030202050301000a360063010000630100006301000063010000630100003e0100
-05140100030e0000052401000503020201030202050301000a3501000063010000630100
-006301000063010000630100003e0100051301000500030e050000000523010005030202
-01030202050301000a0101340063010000630100006301000063010000630100003e0100
-05140100030e0000052401000503020201030202050301000a0101340063010000630100
-006301000063010000630100003e0100051301000500030e050000000523010005030202
-01030202050301000a0101160002011a0063010000630100006301000063010000630100
-003e010005140100030e0000052401000503020201030202050301000a01011500000102
-0000011900070100000e01000014010000340100002b0102003401000063010000630100
-00630100003e0100051301000500030e0500000005230100050302020103020205030100
-0a010115000001020000011900070100000e0100004a0100002d01000034010000630100
-0063010000630100003e010005140100030e000005240100050302020103020205030100
-0a0101150000010200000119000701000001010000030102000201040002010200020100
-000001010003010200020100000001010003010200260100000701000002010000010100
-00000101000201000000010100030102000301020005010000030102002d010000630100
-0063010000630100003e0100051301000500030e05000000052301000503020201030202
-050301000a01011500000102000001190007010000000100000301000002010000030100
-000301000002010000010101000101000004010000020101000101000001010000020100
-002501000007010000020100000101010001010000010101000101000001010000020100
-0001010000020100000401000002010000020100002c0100006301000063010000630100
-003e010005140100030e0000052401000503020201030202050301000a01011600030119
-000701010008010000030100000701000001010000080100000201000002010000050100
-002501000007010000020100000101000002010000010100000201000001010000090100
-0004010000060100002c0100006301000063010000630100003e0100051301000500030e
-05000000052301000503020201030202050301000a010119000001190007010100050103
-000301000004010300010100000801000002010000020100000201030025010000070100
-000201000001010000020100000101000002010000020102000301030004010000030103
-002c0100006301000063010000630100003e010005140100030e00000524010005030202
-01030202050301000a0101180000011a0007010000000100000301000002010000030100
-000301000002010000010100000801000002010000020100000101000002010000250100
-000701000002010000010100000201000001010000020100000501000001010000020100
-000401000002010000020100002c0100006301000063010000630100003e010005130100
-0500030e05000000052301000503020201030202050301000a0101150002011b00070100
-000101000002010000020100000301000003010000020100000101000008010000020100
-000201000001010000020100002501000007010000010101000101010001010000010101
-0001010000010100000201000001010000020100000401000002010000020100002c0100
-006301000063010000630100003e010005140100030e0000052401000503020201030202
-050301000a01013400070100000201000002010300040101000201030001010000080100
-000201000002010000020103002501000008010100000100000101000000010100020100
-0000010100030102000301030004010000030103002c0100006301000063010000630100
-003e0100051301000500030e05000000052301000503020201030202050301000a010134
-00630100000e010000050100004c0100006301000063010000630100003e010005140100
-030e0000052401000503020201030202050301000a01013400630100000e010000050100
-004c0100006301000063010000630100003e0100051301000500030e0500000005230100
-0503020201030202050301000a01013400630100000e010000050100004c010000630100
-0063010000630100003e010005140100030e000005240100050302020103020205030100
-0a0101340063010000630100006301000063010000630100003e0100051301000500030e
-05000000052301000503020201030202050301000a010134006301000063010000630100
-0063010000630100003e010005140100030e000005240100050302020103020205030100
-0a0101340063010000630100006301000063010000630100003e0100051301000500030e
-05000000052301000503020201030202050301000a0001ff01ff016e05140100030e0000
-052401000503020201030202050301000c36006301000063010000630100006301000063
-0100003e0100051301000500030e05000000052301000503020201030202050301000c35
-09000063010000630100006301000063010000630100003e010005140100030e00000524
-01000503020201030202050301000c010832090100630100006301000063010000630100
-00630100003e0100051301000500030e0500000005230100050302020103020205030100
-0c01083209010063010000630100006301000063010000630100003e010005140100030e
-0000052401000503020201030202050301000c0108130100080401020815090100630100
-00630100006301000063010000630100003e0100051301000500030e0500000005230100
-0503020201030202050301000c0108110102080301000802010008140901006301000032
-0102002d0100006301000063010000630100003e010005140100030e0000052401000503
-020201030202050301000c01081301000803010008020100081409010063010000340100
-002d0100006301000063010000630100003e0100051301000500030e0500000005230100
-0503020201030202050301000c0108130100080301000802010008140901000701010000
-010000030102000301010000010000010100000001010002010000020100000201020034
-010000070100000001010003010200020100000001010002010000000101000201010000
-01000003010200050100000201010000010000260100006301000063010000630100003e
-010005140100030e0000052401000503020201030202050301000c010813010008030100
-080201000814090100070100000001000000010000010100000201000001010000010101
-000101010001010000010100000201000001010000020100003301000007010100010100
-000101000002010000010101000101000001010100010100000101000000010000000100
-000101000002010000040100000201000000010000000100002501000063010000630100
-00630100003e0100051301000500030e0500000005230100050302020103020205030100
-0c0108130100080301000802010008140901000701000000010000000100000501000001
-010000020100000101000002010000010100000201000001010000370100000701000002
-010000010100000201000001010000050100000501000000010000000100000501000004
-010000020100000001000000010000250100006301000063010000630100003e01000514
-0100030e0000052401000503020201030202050301000c01081301000803010008020100
-081409010007010000000100000001000002010300010100000201000001010000020100
-000101000002010000020102003401000007010000020100000101000002010000010100
-000501000005010000000100000001000002010300040100000201000000010000000100
-00250100006301000063010000630100003e0100051301000500030e0500000005230100
-0503020201030202050301000c0108130100080301000802010008140901000701000000
-010000000100000101000002010000010100000201000001010000020100000101000002
-010000050100003301000007010000020100000101000002010000010100000501000005
-010000000100000001000001010000020100000401000002010000000100000001000025
-0100006301000063010000630100003e010005140100030e000005240100050302020103
-0202050301000c0108110104080201020815090100070100000001000000010000010100
-000201000001010000010101000101000002010000010100000101010001010000020100
-003301000007010000020100000101000002010000010100000501000005010000000100
-000001000001010000020100000401000002010000000100000001000025010000630100
-0063010000630100003e0100051301000500030e05000000052301000503020201030202
-050301000c01083209010007010000000100000001000002010300020101000001000001
-010000020100000201010000010000020102003401000007010000020100000201020002
-010000050100000501000000010000000100000201030004010000020100000001000000
-010000250100006301000063010000630100003e010005140100030e0000052401000503
-020201030202050301000c01083209010019010000480100006301000063010000630100
-00630100003e0100051301000500030e0500000005230100050302020103020205030100
-0c010832090100150100000201000048010000630100006301000063010000630100003e
-010005140100030e0000052401000503020201030202050301000c010832090100160102
-0049010000630100006301000063010000630100003e0100051301000500030e05000000
-052301000503020201030202050301000c01083209010063010000630100006301000063
-010000630100003e010005140100030e0000052401000503020201030202050301000c01
-083209010063010000630100006301000063010000630100003e0100051301000500030e
-05000000052301000503020201030202050301000c010934006301000063010000630100
-0063010000630100003e010005140100030e000005240100050302020103020205030100
-0c00093501ff01ff0138051301000500030e050000000523010005030202010302020503
-01000c360063010000630100006301000063010000630100003e010005140100030e0000
-052401000503020201030202050301000c35090000630100006301000063010000630100
-00630100003e0100051301000500030e0500000005230100050302020103020205030100
-0c01083209010063010000630100006301000063010000630100003e010005140100030e
-0000052401000503020201030202050301000c0108320901006301000063010000630100
-0063010000630100003e0100051301000500030e05000000052301000503020201030202
-050301000c01081301000805010008160901006301000063010000630100006301000063
-0100003e010005140100030e0000052401000503020201030202050301000c0108110102
-0803010208160901001601020005010000420100002b0102003401000063010000630100
-00630100003e0100051301000500030e0500000005230100050302020103020205030100
-0c010813010008050100081609010018010000490100002d010000340100006301000063
-010000630100003e010005140100030e0000052401000503020201030202050301000c01
-081301000805010008160901000701010000010000030102000501000003010200020100
-00000101003b010000070100000201000001010000000101000201000000010100030102
-000301020005010000030102002d0100006301000063010000630100003e010005130100
-0500030e05000000052301000503020201030202050301000c0108130100080501000816
-090100070100000001000000010000010100000201000004010000050100000201010001
-0100003a0100000701000002010000010101000101000001010100010100000101000002
-01000001010000020100000401000002010000020100002c010000630100006301000063
-0100003e010005140100030e0000052401000503020201030202050301000c0108130100
-080501000816090100070100000001000000010000050100000401000005010000020100
-00020100003a010000070100000201000001010000020100000101000002010000010100
-000901000004010000060100002c0100006301000063010000630100003e010005130100
-0500030e05000000052301000503020201030202050301000c0108130100080501000816
-09010007010000000100000001000002010300040100000501000002010000020100003a
-010000070100000201000001010000020100000101000002010000020102000301030004
-010000030103002c0100006301000063010000630100003e010005140100030e00000524
-01000503020201030202050301000c010813010008050100081609010007010000000100
-00000100000101000002010000040100000501000002010000020100003a010000070100
-000201000001010000020100000101000002010000050100000101000002010000040100
-0002010000020100002c0100006301000063010000630100003e0100051301000500030e
-05000000052301000503020201030202050301000c010811010408010104081409010007
-01000000010000000100000101000002010000040100000501000002010000020100003a
-010000070100000101010001010100010100000101010001010000010100000201000001
-010000020100000401000002010000020100002c0100006301000063010000630100003e
-010005140100030e0000052401000503020201030202050301000c010832090100070100
-00000100000001000002010300040100000501000002010000020100003a010000080101
-000001000001010000000101000201000000010100030102000301030004010000030103
-002c0100006301000063010000630100003e0100051301000500030e0500000005230100
-0503020201030202050301000c010832090100630100000e010000050100004c01000063
-01000063010000630100003e010005140100030e00000524010005030202010302020503
-01000c010832090100630100000e010000050100004c0100006301000063010000630100
-003e0100051301000500030e05000000052301000503020201030202050301000c010832
-090100630100000e010000050100004c0100006301000063010000630100003e01000514
-0100030e0000052401000503020201030202050301000c01083209010063010000630100
-006301000063010000630100003e0100051301000500030e050000000523010005030202
-01030202050301000c01083209010063010000630100006301000063010000630100003e
-010005140100030e0000052401000503020201030202050301000c010934006301000063
-0100006301000063010000630100003e0100051301000500030e05000000052301000503
-020201030202050301000c00093501ff01ff013805140100030e00000524010005030202
-010302020503010005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000063010000630100006301000063010000630100003e01000513
-01000500030e050000000523010005030202010302020503010000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050001000063010000630100
-006301000063010000630100003e010005140100030e0000052401000503020201030202
-05030100050000000532010005000063010000630100006301000063010000630100003e
-0100051301000500030e0500000005230100050302020103020205030100000005340100
-0063010000630100006301000063010000630100003e010005140100030e000005240100
-050302020103020205030100050000000513010005040102051501000500006301000063
-0100006301000063010000630100003e0100051301000500030e05000000052301000503
-02020103020205030100000005120102050301000502010005150100001f010000420100
-001201000017010200340100006301000063010000630100003e010005140100030e0000
-052401000503020201030202050301000500000005130100050301000502010005140100
-050000630100001201000019010000340100006301000063010000630100003e01000513
-01000500030e050000000523010005030202010302020503010000000514010005030100
-050201000515010000070101000001000003010200020100000001010003010200030102
-003b01000008010200030101000001000002010200020100000001010002010000000101
-0005010000030102000201000000010100260100006301000063010000630100003e0100
-05140100030e000005240100050302020103020205030100050000000513010005060100
-051501000500000701000000010000000100000101000002010000010101000101000004
-01000002010000020100003a010000070100000201000001010000010101000101000002
-010000010101000101000001010100010100000401000002010000020100000101010001
-010000250100006301000063010000630100003e0100051301000500030e050000000523
-010005030202010302020503010000000514010005050100051701000007010000000100
-0000010000050100000101000008010000060100003a0100000701000002010000010100
-000201000001010000020100000101000002010000010100000201000004010000060100
-000101000002010000250100006301000063010000630100003e010005140100030e0000
-052401000503020201030202050301000500000005130100050401000517010005000007
-0100000001000000010000020103000101000008010000030103003a0100000701000002
-010000010100000201000001010400010100000201000001010000020100000401000003
-0103000101000002010000250100006301000063010000630100003e0100051301000500
-030e05000000052301000503020201030202050301000000051401000503010005020100
-051501000007010000000100000001000001010000020100000101000008010000020100
-00020100003a010000070100000201000001010000020100000101000005010000020100
-000101000002010000040100000201000002010000010100000201000025010000630100
-0063010000630100003e010005140100030e000005240100050302020103020205030100
-050000000511010405010104051401000500000701000000010000000100000101000002
-010000010100000801000002010000020100003a01000007010000020100000101000001
-010100010100000201000001010000020100000101010001010000040100000201000002
-0100000101000002010000250100006301000063010000630100003e0100051301000500
-030e05000000052301000503020201030202050301000000053401000007010000000100
-0000010000020103000101000008010000030103003a0100000801020003010100000100
-000201020002010000020100000101000000010100050100000301030001010000020100
-00250100006301000063010000630100003e010005140100030e00000524010005030202
-0103020205030100050000000532010005000063010000230100003e0100006301000063
-010000630100003e0100051301000500030e050000000523010005030202010302020503
-01000000053401000063010000230100003e0100006301000063010000630100003e0100
-05140100030e000005240100050302020103020205030100050000000532010005000063
-010000230100003e0100006301000063010000630100003e0100051301000500030e0500
-000005230100050302020103020205030100000005340100006301000063010000630100
-0063010000630100003e010005140100030e000005240100050302020103020205030100
-050000000532010005000063010000630100006301000063010000630100003e01000513
-01000500030e050000000523010005030202010302020503010000000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000063010000630100
-006301000063010000630100003e010005140100030e0000052401000503020201030202
-050301000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-05000100050001ff01ff0138051301000500030e05000000052301000503020201030202
-050301000c360063010000630100006301000063010000630100003e010005140100030e
-0000052401000503020201030202050301000c3509000063010000630100006301000063
-010000630100003e0100051301000500030e050000000523010005030202010302020503
-01000c01083209010063010000630100006301000063010000630100003e010005140100
-030e0000052401000503020201030202050301000c010832090100630100006301000063
-01000063010000630100003e0100051301000500030e0500000005230100050302020103
-0202050301000c0108130100080401020815090100630100006301000063010000630100
-00630100003e010005140100030e0000052401000503020201030202050301000c010811
-010208030100080201000814090100170100004a01000007010000300102002601000063
-01000063010000630100003e0100051301000500030e0500000005230100050302020103
-0202050301000c0108130100080701000814090100170100004a01000007010000320100
-00260100006301000063010000630100003e010005140100030e00000524010005030202
-01030202050301000c010813010008070100081409010007010100000100000301020002
-010400020102004201000007010000000101000201000000010100030102000201010000
-010000020101000001000003010200020100000001010005010000030102000201000000
-010100180100006301000063010000630100003e0100051301000500030e050000000523
-01000503020201030202050301000c010813010008050101081509010007010000000100
-000001000001010000020100000301000003010000020100004101000007010100010100
-000101010001010000010100000201000001010000000100000001000001010000000100
-000001000001010000020100000101010001010000040100000201000002010000010101
-0001010000170100006301000063010000630100003e010005140100030e000005240100
-0503020201030202050301000c0108130100080701000814090100070100000001000000
-010000050100000301000003010000450100000701000002010000010100000501000002
-010000010100000001000000010000010100000001000000010000050100000101000002
-01000004010000060100000101000002010000170100006301000063010000630100003e
-0100051301000500030e05000000052301000503020201030202050301000c0108130100
-080701000814090100070100000001000000010000020103000301000004010200420100
-000701000002010000010100000501000002010000010100000001000000010000010100
-000001000000010000020103000101000002010000040100000301030001010000020100
-00170100006301000063010000630100003e010005140100030e00000524010005030202
-01030202050301000c010813010008030100080201000814090100070100000001000000
-010000010100000201000003010000070100004101000007010000020100000101000005
-010000020100000101000000010000000100000101000000010000000100000101000002
-010000010100000201000004010000020100000201000001010000020100001701000063
-01000063010000630100003e0100051301000500030e0500000005230100050302020103
-0202050301000c0108110104080201020815090100070100000001000000010000010100
-000201000003010000030100000201000041010000070101000101000001010000050100
-000201000001010000000100000001000001010000000100000001000001010000020100
-000101010001010000040100000201000002010000010100000201000017010000630100
-0063010000630100003e010005140100030e000005240100050302020103020205030100
-0c0108320901000701000000010000000100000201030004010100020102004201000007
-010000000101000201000006010200020100000001000000010000010100000001000000
-010000020103000101000000010100050100000301030001010000020100001701000063
-01000063010000630100003e0100051301000500030e0500000005230100050302020103
-0202050301000c0108320901006301000031010000300100006301000063010000630100
-003e010005140100030e0000052401000503020201030202050301000c01083209010063
-01000031010000300100006301000063010000630100003e0100051301000500030e0500
-0000052301000503020201030202050301000c0108320901006301000031010000300100
-006301000063010000630100003e010005140100030e0000052401000503020201030202
-050301000c01083209010063010000630100006301000063010000630100003e01000513
-01000500030e05000000052301000503020201030202050301000c010832090100630100
-00630100006301000063010000630100003e010005140100030e00000524010005030202
-01030202050301000c0109340063010000630100006301000063010000630100003e0100
-051301000500030e05000000052301000503020201030202050301000c00093501ff01ff
-013805140100030e0000052401000503020201030202050301000c360063010000630100
-006301000063010000630100003e0100051301000500030e050000000523010005030202
-01030202050301000c3509000063010000630100006301000063010000630100003e0100
-05140100030e0000052401000503020201030202050301000c0108320901006301000063
-0100006301000063010000630100003e0100051301000500030e05000000052301000503
-020201030202050301000c01083209010063010000630100006301000063010000630100
-003e010005140100030e0000052401000503020201030202050301000c01081301000806
-0100081509010063010000630100006301000063010000630100003e0100051301000500
-030e05000000052301000503020201030202050301000c01081101020805010108150901
-0011010000500100001e01000018010000290100006301000063010000630100003e0100
-05140100030e0000052401000503020201030202050301000c0108130100080401000800
-01000815090100630100001e01000018010000290100006301000063010000630100003e
-0100051301000500030e05000000052301000503020201030202050301000c0108130100
-080401000800010008150901000701000000010100030102000201000000010100030102
-004201000008010100000100000101000002010000020102000201040002010200020100
-000201000002010200020100000001010003010200020100000001010003010100000100
-00100100006301000063010000630100003e010005140100030e00000524010005030202
-01030202050301000c010813010008030100080101000815090100070101000101000004
-010000020101000101000001010000020100004101000007010000010101000101000002
-010000010100000201000003010000030100000201000001010000020100000101000002
-010000010101000101000001010000020100000101010001010000010100000101010010
-0100006301000063010000630100003e0100051301000500030e05000000052301000503
-020201030202050301000c01081301000802010008020100081509010007010000020100
-000401000002010000020100000501000041010000070100000201000001010000020100
-000101000007010000070100000101000002010000010100000501000002010000010100
-0002010000010100000501000002010000100100006301000063010000630100003e0100
-05140100030e0000052401000503020201030202050301000c0108130100080201050814
-090100070100000201000004010000020100000201000002010300410100000701000002
-010000010100000201000002010200040100000401030002010000000100000301020002
-010000020100000101040001010000050100000201000010010000630100006301000063
-0100003e0100051301000500030e05000000052301000503020201030202050301000c01
-081301000806010008150901000701000002010000040100000201000002010000010100
-000201000041010000070100000201000001010000020100000501000003010000030100
-000201000002010000000100000601000001010000020100000101000005010000050100
-0002010000100100006301000063010000630100003e010005140100030e000005240100
-0503020201030202050301000c0108110104080301020814090100070100000201000004
-010000020100000201000001010000020100004101000007010000010101000101000001
-010100010100000201000003010000030100000201000003010000030100000201000001
-010100010100000101000002010000010100000501000001010100100100006301000063
-010000630100003e0100051301000500030e050000000523010005030202010302020503
-01000c010832090100070100000201000004010000020100000201000002010300410100
-000801010000010000020101000001000002010200050101000201030003010000040102
-000201000000010100030102000201000006010100000100001001000063010000630100
-00630100003e010005140100030e0000052401000503020201030202050301000c010832
-090100630100000b01000044010000100100006301000063010000630100003e01000513
-01000500030e05000000052301000503020201030202050301000c010832090100630100
-0007010000020100004001000002010000100100006301000063010000630100003e0100
-05140100030e0000052401000503020201030202050301000c0108320901006301000008
-01020042010200110100006301000063010000630100003e0100051301000500030e0500
-0000052301000503020201030202050301000c0108320901006301000063010000630100
-0063010000630100003e010005140100030e000005240100050302020103020205030100
-0c01083209010063010000630100006301000063010000630100003e0100051301000500
-030e05000000052301000503020201030202050301000c01093400630100006301000063
-01000063010000630100003e010005140100030e00000524010005030202010302020503
-01000c00093501ff01ff0138051301000500030e05000000052301000503020201030202
-050301000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500000005000063010000630100006301000063010000630100003e010005140100030e
-000005240100050302020103020205030100000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500010000630100006301000063010000630100
-00630100003e0100051301000500030e0500000005230100050302020103020205030100
-050000000532010005000063010000630100006301000063010000630100003e01000514
-0100030e0000052401000503020201030202050301000000053401000063010000630100
-006301000063010000630100003e0100051301000500030e050000000523010005030202
-010302020503010005000000051301000503010405140100050000630100006301000063
-01000063010000630100003e010005140100030e00000524010005030202010302020503
-01000000051201020503010005190100000f010200030102004901000007010000230100
-000b010200030102001f0100006301000063010000630100003e0100051301000500030e
-050000000523010005030202010302020503010005000000051301000503010005180100
-05000011010000050100004901000007010000230100000d010000050100001f01000063
-01000063010000630100003e010005140100030e00000524010005030202010302020503
-010000000514010005030100051901000008010200050100000501000003010200420100
-000701000000010100030102000201000000010100020100000001010003010200020104
-00010100000201000004010000050100001f0100006301000063010000630100003e0100
-051301000500000005000000050000000500000005000000050000000500000005000000
-05000000052301000503020201030202050301ff01ff0170051400000500000005000000
-050000000500000005000000050000000500000005000000052401000503020201030202
-0503010005ff05ff05ba010005030202010302020503010005ff05ff05ba010005030202
-010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100
-05030202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff
-05ba010005030202010302020503010005ff05ff05ba0100050302020103020205030100
-05ff05ff05ba01000503020201030202050301000549010005ff05ff056f010005030202
-01030202050301000548010105ff05ff056f010005030202010302020503010005470100
-0500010005ff05ff056f01000503020201030202050301000549010005ff05ff056f0100
-0503020201030202050301000549010005ff05ff056f0100050302020103020205030100
-0549010005ff05ff056f01000503020201030202050301000549010005ff05ff056f0100
-0503020201030202050301000549010005ff05ff056f0100050302020103020205030100
-0547010405ff05ff056d010005030202010302020503010005ff05ff05ba010005030202
-010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100
-05030202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff
-05ba01000503020201030202050301000538010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-054a01000503020201030202050301000537010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-054b01000503020201030202050301000538010005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000003ff03ff031505000000054a01000503020201030202050301000537
-010005000000050000000500000005000000050000000500000005000000050000000500
-0000050000000500000005000000050000000500000005000000050003ff03ff03150000
-054b01000503020201030202050301000538010005000000050c0000050c010003ff03ff
-031505000000054a01000503020201030202050301000537010005000000050c0100050c
-0100050003ff03ff03150000054b01000503020201030202050301000538010005000000
-050c0000050c010003ff03ff031505000000054a01000503020201030202050301000537
-010005000000050c0100050c0100050003ff03ff03150000054b01000503020201030202
-050301000538010005000000050c0000050c010003ff03ff031505000000054a01000503
-020201030202050301000537010005000000050c0100050c0100050003ff03ff03150000
-054b01000503020201030202050301000538010005000000050c0000050c010003ff03ff
-031505000000054a01000503020201030202050301000537010005000000050c0100050c
-0100050003ff03ff03150000054b01000503020201030202050301000538010005000000
-050c0000050c010003ff03ff031505000000054a01000503020201030202050301000537
-010005000000050c0100050c0100050003ff03ff03150000054b01000503020201030202
-050301000538010005000000050c0000050c010003ff03ff031505000000054a01000503
-020201030202050301000537010005000000050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0100050003ff03ff03150000054b01000503020201030202050301000538010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010003ff03ff031505000000054a01000503
-020201030202050301000537010005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000054b01000503
-020201030202050301000538000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000054a01000503
-0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba
-010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff
-05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503
-010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103
-02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503
-0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba
-010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff
-05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503
-010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103
-02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503
-0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba
-010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff
-05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503
-010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103
-02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503
-0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba
-010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff
-05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503
-010005ff05ff05ba010005030202010100040503010005ff05ff05ba0100050300050202
-0400050301ff01ff01bc050300000202040000000202040005ff05ff05c4000002020400
-00000202040005ff05ff05c400000202040000000202040005ff05ff05c4000002020400
-00000202040005ff05ff05c4000002020400000002020400000502ff02ff02b800060202
-040000000208040002ff02ff02b800000208040000000208040002ff02ff02b800000208
-040000000208040001ff01ff01b80000020804000000040901ff01ff01b800000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 61 377 359
-%%EOF
diff --git a/lib/tv/doc/src/tv_row_marked_popup.gif b/lib/tv/doc/src/tv_row_marked_popup.gif
deleted file mode 100644
index 9b3bc87959..0000000000
--- a/lib/tv/doc/src/tv_row_marked_popup.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_row_marked_popup.ps b/lib/tv/doc/src/tv_row_marked_popup.ps
deleted file mode 100644
index 7a909110d9..0000000000
--- a/lib/tv/doc/src/tv_row_marked_popup.ps
+++ /dev/null
@@ -1,1324 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./tv_row_marked_popup.tmp.eps)
-%%CreationDate: (Tue Jun 12 16:12:10 2001)
-%%BoundingBox: 0 64 377 377
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 64 377 377
-userdict begin
-%%BeginData:
-DisplayImage
-0 64
-377.000000 313.000000
-12
-760 630
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-ff0000
-d9d9d9
-b22222
-828282
-00ff00
-009100
-90ee90
-c3c3c3
-999999
-757575
-c8ffff
-000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff
-02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202
-04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff
-02d500000202040000000202040002080000020d040002a501010206010102150101021e
-0101022901010206010102430101022a010102260101023201010233010102ae00000202
-040000000202040002080000020d04000277010502000107020101030206010702090101
-02060101021501010219010002030101021c0100020b010102060101022e010202020100
-020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400
-00000202040002080000020d04000277010102070101020301010201010102080101020c
-010102060101021501010218010102210101020b010102060101022e010202020100020d
-01010238010102020101024801010215010102cc00000202040000000202040002080000
-0202040602030400027701010207010102030101020c0101020401030203010102000101
-020301010202010302020101020901010202010302030103020201030201010402010101
-020201030203010102000101020a01040201010302030101020001010203010102020103
-022701000200010102010100020201030203010402020103020201010209010102000101
-020101010203010302030101020201010200010102020101020101030202010402020101
-020101010202010102020101020001010203010102000101020301030203010402020104
-020501040202010102010101020501030201010402000101020101010204010302020101
-020001010201010102020103020201040202010402020103020301010200010102060104
-020201030274000002020400000004030208000002020400030400000203040002770101
-0207010102030102020b0101020301010201010102020102020001010202010102010101
-020101010201010102090101020101010201010102010101020101010200010102010101
-020101010203010102010101020101010202010202000101020a01010202010102010101
-020201020200010102020101020101010201010102260100020001010201010002010101
-020101010201010102010101020101010201010102010101020901020200010202000101
-020101010201010102020101020201020200010102010101020001010200010102010101
-020101010202010102010101020201010202010202000101020201020200010102010101
-020101010201010102050101020801010201010102020101020101010204010102010101
-020101010202010102010101020301010201010102010101020001010201010102010101
-020101010200010102050101020501010201010102020102020001010204010102050101
-020101010273000004030101020b00000203040003020000020404000277010402040101
-0204010302090101020701010202010102010101020201010201010102010101020d0101
-020101010201010102010101020801010201010102030101020101010201010102020101
-02010101020a010102060101020201010201010102020101020101010201010102260100
-0200010202000100020101010201010102010101020101010201010102010101020d0101
-020101010201010102050101020201010202010102010101020101010200010102000101
-020101010201010102020101020101010202010102020101020101010202010102010101
-020101010201010102010102020401020207010102010101020201010201010102040101
-020101010201010102030101020001000204010102010101020101020203010102010101
-020401020204010202040101020101010202010102010101020401020204010102010101
-02760103020b000002030400030200000204040002770101020701010206010202080101
-0204010402020101020101010202010102010105020d0101020101010201010102010101
-02050104020101010203010102010101020101010202010102010101020a010102030104
-020201010201010102020101020101050226010002010101020001000201010102010101
-020101010201010102010105020d01010201010102010101020201040202010102020101
-020101010201010102000101020001010201010102010101020201010201010102020101
-020201010201010102020101020101010201010502020103020301030205010102010101
-020201010201010102040105020101010204010102050105020101010204010102010101
-020501030203010302020101020101010202010102010101020501030202010502760103
-020b00000204040003000000020504000277010102070101020701010208010102030101
-020101010202010102010101020201010201010102110101020101010201010102010101
-0204010102010101020101010203010102010101020101010202010102010101020a0101
-020201010201010102020101020101010202010102010101022a01000202010202010101
-020101010201010102010101020101010211010102010101020101010201010102010101
-020201010202010102010101020101010201010102000101020001010200010202020101
-020101010202010102020101020101010202010102010101020101010208010202040102
-020401010201010102020101020101010204010102050101020301000200010102040101
-020501010204010102010101020701020204010202010101020101010202010102010101
-0207010202010101027a0103020b00000204040003000000020504000277010102070101
-020301010201010102080101020301010201010102020101020101010202010102010101
-020201000201010102090101020101010201010102010101020201000200010102010101
-020101010203010102010101020101010202010102010101020a01010202010102010101
-020201010201010102020101020101010202010002260100020201020201010102010101
-020101010200010202010101020201000201010102090101020101010201010102010101
-020101010202010102020101020101010202010102070101020001010202010102000102
-020201010202010102010101020201010201010102010101020201000205010102050101
-020101010200010102000102020201010200010202010101020001010202010002010101
-020201010201010102000101020001010202010002010101020401010201010102020100
-020401010205010102010101020101010202010102010101020101010204010102010101
-0202010002760103020b0000020500000206040002770105020301010204010302090101
-020401020200010102010104020301010202010302020101020901010202010302030103
-02020102020001010201010202010101020201030203010102010101020b010202010102
-020001010201010402030101020201030227010002030101020201030203010102000101
-020201030202010102090101020101010201010102020102020001010201010102020101
-020101010203010502050101020301010200010102020101020201010201010102020101
-020101010202010302020104020201040202010102010101020001010203010102000101
-020101010201010302030102020001010201010102000101020101030202010102040101
-020201030201010402020104020301030203010102010101020101010200010402030103
-02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d
-040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff
-02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103
-0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202
-00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff
-06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801
-020201030202000106ff06ff06e908010202010302020001060b07040604070006030702
-061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa
-07000602070006090702061308010202010302020001060b0700060f0700062107000614
-0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b
-0700061308010202010302020001060b0700060607020605070006030702061a07000604
-070206030702060507000603070206180700060207000601070006000701060207040602
-070206030702060207000600070106030702061807000602070006020702060307020602
-07000602070006ff06eb07000602070006020702060507000602070006000701060c0801
-0202010302020001060b0700060807000605070006020700060207000619070006030700
-060207000601070006020700060407000602070006020700061707000602070006010701
-060107000603070006060700060207000602070006010701060107000601070006020700
-0618070006000700060507000602070006020700060107000602070006ff06eb07000602
-07000601070006020700060407000602070106010700060b08010202010302020001060b
-070306050700060507000602070006020700061907000603070006020700060107000602
-07000604070006020700061b070006020700060107000602070006030700060607000602
-070006020700060107000602070006010700061c07000600070006050700060207000602
-070006010700060007000600070006ff06eb070406010700060207000604070006020700
-06020700060b08010202010302020001060b070006080700060507000602070406190700
-060307000602070006010700060207000604070006030702061807000602070006010700
-060207000603070006060700060207000602070006010700060207000602070206190700
-06000700060507000602070406010700060007000600070006ff06eb0700060207000601
-0704060407000602070006020700060b08010202010302020001060b0700060807000605
-070006020700061d07000603070006020700060107000602070006040700060607000617
-070006020700060107000602070006030700060607000602070006020700060107000602
-07000605070006190700060607000602070006050700060007000600070006ff06eb0700
-0602070006010700060807000602070006020700060b08010202010302020001060b0700
-060807000605070006020700060207000619070006030700060207000601070006020700
-060407000602070006020700061707000602070006010701060107000603070006060700
-060207000602070006010700060207000601070006020700061907000606070006020700
-0602070006010700060007000600070006ff06eb07000602070006010700060207000604
-07000602070106010700060b08010202010302020001060b070006080700060507000603
-0702061a0700060407020603070206050700060307020619070206020700060007010605
-07010604070006030702060207000602070006020702061a070006060700060307020603
-07000600070006ff06ec07000602070006020702060507000602070006000701060c0801
-0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706
-062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202
-0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801
-020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103
-0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff
-08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
-06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
-06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603
-0016061600160616004406160016061600160616001606ff06be02020103020206030015
-080006160015080006160015080000150800001508000616001508000616001508000616
-0015080006ff06be02020103020206030001061208010616000106120801061600010612
-080100010612080100010612080106160001061208010616000106120801061600010612
-080106ff06be020201030202060300010612080106160001061208010616000106120801
-000106120801000106120801061600010612080106160001061208010616000106120801
-06ff06be0202010302020603000106120801061600010603070206030702060408010616
-000106120801000106120801000106120801061600010612080106160001061208010616
-00010612080106ff06be0202010302020603000106080702060608010616000106030702
-060307020604080106160001061208010001061208010001061208010616000106050704
-0607080106160001060707010608080106160001060707030606080106ff06be02020103
-020206030001060b0701060408010616000106020704060107040603080106160001060e
-0700060208010001060e070006020801000106020700060e080106160001060307080605
-080106160001060607030607080106160001060507070604080106ff06be020201030202
-06030001060d070006000700060108010616000106020700060107010601070006010701
-0603080106160001060e0700060208010001060e070006020801000106020700060e0801
-061600010602070a06040801061600010606070306070801061600010604070306010703
-0603080106ff06be02020103020206030001060207020608070106010801061600010601
-070d0602080106160001060b07000601070006020801000106020700060a070006020801
-00010602070006010700060b080106160001060207030602070306040801061600010607
-0701060808010616000106040702060307020603080106ff06be02020103020206030001
-060107080602070206010801061600010600070006000703060007020600070406010801
-06160001060b07000601070006020801000106020700060a070006020801000106020700
-06010700060b080106160001060107030604070306030801061600010612080106160001
-06040702060307020603080106ff06be0202010302020603000106010709060608010616
-000106000700060007030600070206000704060108010616000106080700060107000601
-070006020801000106020700060407000604070006020801000106020700060107000601
-070006080801061600010601070206030707060108010616000106050704060708010616
-000106050701060207020604080106ff06be020201030202060300010601070906060801
-061600010600070006000703060007020600070406010801061600010608070006010700
-060107000602080100010602070006040700060407000602080100010602070006010700
-060107000608080106160001060107020604070506020801061600010606070306070801
-06160001060907020605080106ff06be0202010302020603000106010709060608010616
-000106000700060007030600070206000704060108010616000106050700060107000601
-070006010700060208010001060207000604070006010700060107000602080100010602
-070006010700060107000601070006050801061600010601070206050703060308010616
-0001060707020607080106160001060807020606080106ff06be02020103020206030001
-0601070d0602080106160001060007000600070706000704060108010616000106050700
-060107000601070006010700060208010001060207000604070006010700060107000602
-080100010602070006010700060107000601070006050801061600010601070306050701
-0604080106160001060707020607080106160001060707020607080106ff06be02020103
-020206030001060107030607070006030801061600010600070006000704060107000600
-070406010801061600010602070006010700060107000601070006010700060208010001
-060207000601070006010700060107000601070006020801000106020700060107000601
-07000601070006010700060208010616000106020703060b080106160001060707020607
-080106160001060707020607080106ff06be020201030202060300010601070206070700
-060408010616000106000706060107060601080106160001060207000601070006010700
-060107000601070006020801000106020700060107000601070006010700060107000602
-080100010602070006010700060107000601070006010700060208010616000106020709
-06050801061600010607070206070801061600010612080106ff06be0202010302020603
-000106010701060707000605080106160001060007000600070206050700060007020601
-080106160001060207000601070006010700060107000601070006020801000106020700
-060107000601070006010700060107000602080100010602070006010700060107000601
-070006010700060208010616000106030707060608010616000106060704060608010616
-0001060707020607080106ff06be02020103020206030001060107090606080106160001
-060007000600070206050700060007020601080106160001060207000601070006010700
-060107000601070006020801000106020700060107000601070006010700060107000602
-080100010602070006010700060107000601070006010700060208010616000106050704
-0607080106160001060507060605080106160001060707020607080106ff06be02020103
-020206030001061208010616000106000704060507040601080106160001061208010001
-0612080100010612080106160001061208010616000106120801061600010612080106ff
-06be02020103020206030001061208010616000106120801061600010612080100010612
-080100010612080106160001061208010616000106120801061600010612080106ff06be
-020201030202060300010612080106160001061208010616000106120801000106120801
-00010612080106160001061208010616000106120801061600010612080106ff06be0202
-010302020603000108140616000108140616000108140001081400010814061600010814
-06160001081406160001081406ff06be0202010302020603000008150616000008150616
-00000815000008150000081506160000081506160000081506160000081506ff06be0202
-0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
-0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
-0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
-0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5
-06030202010302020603010000ff00ff00cf010000120100060302020103020206030100
-00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001
-060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603
-0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603
-0100003401010071010100ff00ff002401000001060e0801010006030202010302020603
-0100003301000075010000ff00ff002301000001060e0801010006030202010302020603
-010000070103000401000005010100190100000301000016010000100100000601020010
-0100000c0100001c010000ff00ff002301000001060e0801010006030202010302020603
-010000070100000201000002010100040100000101000018010000030100002801000008
-010000100100000c0100001c010000ff00ff002301000001060e08010100060302020103
-020206030100000701000002010000010100000001000004010000010100000301010012
-010000030100000101000003010200020100000001010003010200020100000001010009
-010000000101000501000003010200030102000201000001010000030102000201000000
-010100030102000201000000010100030101000001000003010000ff00ff002301000001
-0601010a0601080101000603020201030202060301000007010000020100000301000004
-010000010100000301010012010000030100000001000003010000020100000101010001
-010000040100000201010001010000080101000101000004010000020100000201000001
-010000020100000101000000010000030100000201000001010100010100000101000002
-0100000101010001010000010100000101010003010000ff00ff00230100000106020108
-060208010100060302020103020206030100000701030004010000040100000101000016
-010100040101000801000001010000080100000201000002010000080100000201000004
-010000060100000101000005010100040100000201000001010000020100000101000002
-01000001010000050100000201000004010100ff00ff0021010000010603010606030801
-010006030202010302020603010000070100000101000004010000040100000101000018
-010000030101000501030001010000080100000201000002010000080100000201000004
-010000030103000101000005010100040104000101000002010000010104000101000005
-0100000201000003010000ff00ff00230100000106040104060408010100060302020103
-020206030100000701000002010000030100000401000001010000180100000301000000
-010000030100000201000001010000080100000201000002010000080100000201000004
-010000020100000201000001010000050100000001000003010000050100000201000001
-01000005010000050100000201000003010000ff00ff0023010000010605010206050801
-010006030202010302020603010000070100000201000003010000040100000101000003
-010100120100000301000001010000020100000201000001010000080100000201000002
-010000030101000201010001010000040100000201000002010000010100000201000001
-010000010100000201000002010000010101000101000001010000020100000101000005
-0100000101010003010000ff00ff00230100000106060100060608010100060302020103
-020206030100000701000002010000010104000301010004010100120100000301000002
-010000020103000101000008010000020100000201000003010100020100000001010005
-010000030103000201020002010000020100000201020002010000000101000301020002
-010000060101000001000003010000ff00ff002301000001060e08010100060302020103
-0202060301000033010000290100004501000003010000ff00ff002301000001060e0801
-0100060302020103020206030100003401010025010100420100000201000001010100ff
-00ff002401000001060e0801010006030202010302020603010000a2010200ff00ff0029
-01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801
-010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103
-02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff
-00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811
-01000603020201030202060301ff01ff01e50603020201030202060301ff01ff01d10617
-0202010302020603010006ff06ff06bc0812010006170202010302020603010006ff06ff
-06bc08110000010006170202010302020603010006010dff0dff0db8060108010c060800
-0c060001010006170202010302020603010006010dff0dff0db70000060108010c050000
-08000c060001010006170202010302020603010006010d0100ff00ff00b6060108010c05
-000008010c050001010006170202010302020603010006010d0100ff00ff00b606010801
-0c04000108010c050001010006170202010302020603010006010d0100ff00ff00b60601
-08010c040001060008010c040001010006170202010302020603010006010d0100ff00ff
-00b6060108010c030001060108010c040001011406030202010302020603010006010d01
-00ff00ff00b6060108010c030001060208010c0300010100061201000603020201030202
-0603010006010d0100ff00ff00b6060108010c020001060308010c030001010006120100
-06030202010302020603010006010d0100ff00ff00b6060108010c020001060408010c02
-000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c01
-0001060508010c02000101000612010006030202010302020603010006010d0100ff00ff
-00b6060108010c010001060608010c010001010006120100060302020103020206030100
-06010d0100ff00ff00b6060108010c000001060708010c01000101000612010006030202
-010302020603010006010d0100ff00ff00b6060108010c000001060808010c0000010100
-0612010006030202010302020603010006010d0100ff00ff00b6060108010001080b0c00
-000101000612010006030202010302020603010006010d0100ff00ff00b6060108010000
-080d000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0c0e000101000612010006030202010302020603010006010d01000301010071010100ff
-00ff003c06010801001001000612010006030202010302020603010006010d0100000c01
-01000c7501000c010e0000ff00ff003806010801000d0800000101000612010006030202
-010302020603010006010d0100000c0101000c0301000c1601000c1001000c0601020c10
-01000c0c01000c1c01000c010e0000ff00ff0038060108010001060a0801000101000612
-010006030202010302020603010006010d0100000c0101000c0301000c2801000c080100
-0c1001000c0c01000c1c01000c010e0000ff00ff0038060108010001060a080100010100
-0612010006030202010302020603010006010d0100000c0101000c0301000c0101000c03
-01020c0201000c0001010c0301020c0201000c0001010c0901000c0001010c0501000c03
-01020c0301020c0201000c0101000c0301020c0201000c0001010c0301020c0201000c00
-01010c0301010c0001000c0301000c010e0000ff00ff0038060108010001060a08010001
-01000612010006030202010302020603010006010d0100000c0101000c0301000c000100
-0c0301000c0201000c0101010c0101000c0401000c0201010c0101000c0801010c010100
-0c0401000c0201000c0201000c0101000c0201000c0101000c0001000c0301000c020100
-0c0101010c0101000c0101000c0201000c0101010c0101000c0101000c0101010c030100
-0c010e0000ff00ff0038060108010001060a080100010100061201000603020201030202
-0603010006010d01000001010c0401010c0801000c0101000c0801000c0201000c020100
-0c0801000c0201000c0401000c0601000c0101000c0501010c0401000c0201000c010100
-0c0201000c0101000c0201000c0101000c0501000c0201000c0401010e0000ff00ff0038
-060108010001060a0801000101000612010006030202010302020603010006010d010000
-0c0101000c0301010c0501030c0101000c0801000c0201000c0201000c0801000c020100
-0c0401000c0301030c0101000c0501010c0401040c0101000c0201000c0101040c010100
-0c0501000c0201000c0301000c010e0000ff00ff0038060108010001060a080100010100
-0612010006030202010302020603010006010d0100000c0101000c0301000c0001000c03
-01000c0201000c0101000c0801000c0201000c0201000c0801000c0201000c0401000c02
-01000c0201000c0101000c0501000c0001000c0301000c0501000c0201000c0101000c05
-01000c0501000c0201000c0301000c010e0000ff00ff0038060108010001060a08010001
-01000612010006030202010302020603010006010d0100000c0101000c0301000c010100
-0c0201000c0201000c0101000c0801000c0201000c0201000c0301010c0201010c010100
-0c0401000c0201000c0201000c0101000c0201000c0101000c0101000c0201000c020100
-0c0101010c0101000c0101000c0201000c0101000c0501000c0101010c0301000c010e00
-00ff00ff0038060108010001060a08010001010006120100060302020103020206030100
-06010d0100000c0101000c0301000c0201000c0201030c0101000c0801000c0201000c02
-01000c0301010c0201000c0001010c0501000c0301030c0201020c0201000c0201000c02
-01020c0201000c0001010c0301020c0201000c0601010c0001000c0301000c010e0000ff
-00ff0038060108010001060a080100010100061201000603020201030202060301000601
-0d0100000c0101000c2901000c4501000c0301000c010e0000ff00ff0038060108010001
-060a0801000101000612010006030202010302020603010006010d0100000c0201010c25
-01010c4201000c0201000c0101010c020e0000ff00ff0038060108010001060a08010001
-01000612010006030202010302020603010006010d0100000e7001020e0800ff00ff0038
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603
-0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001
-01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a
-0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801
-0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6
-060108010001060a0801000101000612010006030202010302020603010006010d0100ff
-00ff00b6060108010001060a080100010100061201000603020201030202060301000601
-0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603
-010006010d0100ff00ff00b6060108010001080c00010100061201000603020201030202
-0603010006010d0100ff00ff00b6060108010000080d0001010006120100060302020103
-02020603010006010d0100ff00ff00b6060108010c0e0001010006120100060302020103
-02020603010006010d0100ff00ff00b60601080100100100061201000603020201030202
-0603010006010d0100ff00ff00b6060108010c00000c0800000101000612010006030202
-010302020603010006010d0100ff00ff00b6060108010c000001060808010c0000010100
-0612010006030202010302020603010006010d0100ff00ff00b6060108010c0100010607
-08010c00000101000612010006030202010302020603010006010d0100ff00ff00b60601
-08010c010001060608010c01000101000612010006030202010302020603010006010d01
-00ff00ff00b6060108010c020001060508010c0100010100061201000603020201030202
-0603010006010d0100ff00ff00b6060108010c020001060408010c020001010006120100
-06030202010302020603010006010d0100ff00ff00b6060108010c030001060308010c02
-000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c03
-0001060208010c03000101000612010006030202010302020603010006010d0100ff00ff
-00b6060108010c040001060108010c030001010006120100060302020103020206030100
-06010d0100ff00ff00b6060108010c040001060008010c04000101000612010006030202
-010302020603010006010d0100ff00ff00b6060108010c05000008020c04000101000612
-010006030202010302020603010006010d0100ff00ff00b6060108010c05000008010c05
-000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c06
-08010c05000101000612010006030202010302020603010006010d0000ff00ff00b70601
-08010c0608000c06000101000612010006030202010302020603010006ff06ff06bc0801
-001001000612010006030202010302020603010006ff06ff06bc08000011010006120100
-0603020201030202060301ff01ff01d1061201000603020201030202060301000b010932
-0a0100630100006301000063010000630100006301000063010000020100061308010c0e
-0001062301000603020201030202060301000b010916010209180a010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-01030202060301000b01091501000902010009170a010063010000170100002001020026
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000b01091501000902010009170a01006301000017010000220100
-002601000063010000630100006301000063010000020100061308010c0e000106230100
-0603020201030202060301000b01091501000902010009170a01000e0100000001010003
-0102000201000000010100420100000f0102000201040001010000020100000101000000
-010100030102000201000000010100050100000301020002010000000101001801000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-0202060301000b010916010209180a01000e010100010100000101000002010000010101
-0001010000410100000e0100000201000003010000030100000201000001010100010100
-000101000002010000010101000101000004010000020100000201000001010100010100
-001701000063010000630100006301000063010000020100061308010c0e000106230100
-0603020201030202060301000b01091501000902010009170a01000e0100000201000001
-0100000201000001010000450100000e0100000701000003010000020100000101000005
-010000020100000101000002010000040100000601000001010000020100001701000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-0202060301000b01091501000902010009170a01000e0100000201000001010400010100
-00450100000f010200040100000301000002010000010100000501040001010000020100
-000401000003010300010100000201000017010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000b01091501000902
-010009170a01000e01000002010000010100000501000045010000120100000301000003
-010000020100000101000005010000050100000201000004010000020100000201000001
-010000020100001701000063010000630100006301000063010000020100061308010c0e
-0001062301000603020201030202060301000b010916010209180a01000e010100010100
-00010100000201000001010000450100000e010000020100000301000003010000010101
-000101000005010000020100000101010001010000040100000201000002010000010100
-00020100001701000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000b0109320a01000e010000000101000301020002
-010000450100000f01020005010100020101000001000001010000060102000201000000
-010100050100000301030001010000020100001701000063010000630100006301000063
-010000020100061308010c0e0001062301000603020201030202060301000b0109320a01
-000e01000053010000310100003001000063010000630100006301000063010000020100
-061308010c0e0001062301000603020201030202060301000b0109320a01000e01000053
-010000310100003001000063010000630100006301000063010000020100061308010c0e
-0001062301000603020201030202060301000b0109320a01000e01000053010000310100
-003001000063010000630100006301000063010000020100061308010c0e000106230100
-0603020201030202060301000b0109320a01006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000b01
-09320a010063010000630100006301000063010000630100006301000002010006130801
-0c0e0001062301000603020201030202060301000b010a34006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000b000a3501ff01ff0161061308010c0e00010623010006030202010302020603
-0100009a0100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100003508000063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106320801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001061601020618080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000106150100060201000617080100260100003b01000019010000170102002d01000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-0202060301000001061501000602010006170801006301000019010000190100002d0100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-01030202060301000001061501000602010006170801000e010100000100000301020002
-010000000101000301020003010200340100000f01020003010100000100000201020002
-010000000101000201000000010100050100000301020002010000000101001f01000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-0202060301000001061501000602010006170801000e0100000001000000010000010100
-00020100000101010001010000040100000201000002010000330100000e010000020100
-000101000001010100010100000201000001010100010100000101010001010000040100
-00020100000201000001010100010100001e010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061601030617
-0801000e010000000100000001000005010000010100000801000006010000330100000e
-010000020100000101000002010000010100000201000001010000020100000101000002
-010000040100000601000001010000020100001e01000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106190100
-06170801000e010000000100000001000002010300010100000801000003010300330100
-000e01000002010000010100000201000001010400010100000201000001010000020100
-00040100000301030001010000020100001e010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061801000618
-0801000e0100000001000000010000010100000201000001010000080100000201000002
-010000330100000e01000002010000010100000201000001010000050100000201000001
-0100000201000004010000020100000201000001010000020100001e0100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010615010206190801000e01000000010000000100000101000002010000010100
-00080100000201000002010000330100000e010000020100000101000001010100010100
-000201000001010000020100000101010001010000040100000201000002010000010100
-00020100001e01000063010000630100006301000063010000020100061308010c0e0001
-06230100060302020103020206030100000106320801000e010000000100000001000002
-010300010100000801000003010300330100000f01020003010100000100000201020002
-010000020100000101000000010100050100000301030001010000020100001e01000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-02020603010000010632080100630100002a010000370100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010632
-080100630100002a01000037010000630100006301000063010000630100000201000613
-08010c0e00010623010006030202010302020603010000010632080100630100002a0100
-003701000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-063208010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010834006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000000083501ff01ff0161061308010c0e00010623010006030202010302020603
-010005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000f6301000f6301000f6301000f6301000f6301000f6301000f02010006130801
-0c0e00010623010006030202010302020603010000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050001000f6301000f6301000f6301000f63
-01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603
-0100050000000532010005000f6301000f6301000f6301000f6301000f6301000f630100
-0f020100061308010c0e0001062301000603020201030202060301000000053401000f63
-01000f6301000f6301000f6301000f6301000f6301000f020100061308010c0e00010623
-01000603020201030202060301000500000005130100050401020515010005000f630100
-0f6301000f6301000f6301000f6301000f6301000f020100061308010c0e000106230100
-0603020201030202060301000000051201020503010005020100051501000f0e01000f16
-01000f3b01000f0e01000f0601020f1001000f0c01000f2901000f6301000f6301000f63
-01000f6301000f020100061308010c0e0001062301000603020201030202060301000500
-00000513010005030100050201000514010005000f0e01000f5301000f0e01000f080100
-0f1001000f0c01000f2901000f6301000f6301000f6301000f6301000f02010006130801
-0c0e00010623010006030202010302020603010000000514010005030100050201000515
-01000f0e01000f0101000f0301020f0201000f0001010f0301020f0201000f0001010f34
-01000f0e01000f0001010f0501000f0301020f0301020f0201000f0101000f0301020f02
-01000f0001010f0301020f0201000f0001010f0301010f0001000f1001000f6301000f63
-01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603
-0100050000000513010005030100050201000514010005000f0e01000f0001000f030100
-0f0201000f0101010f0101000f0401000f0201010f0101000f3301000f0e01010f010100
-0f0401000f0201000f0201000f0101000f0201000f0101000f0001000f0301000f020100
-0f0101010f0101000f0101000f0201000f0101010f0101000f0101000f0101010f100100
-0f6301000f6301000f6301000f6301000f020100061308010c0e00010623010006030202
-01030202060301000000051401000503010005020100051501000f0e01010f0801000f01
-01000f0801000f0201000f0201000f3301000f0e01000f0201000f0401000f0601000f01
-01000f0501010f0401000f0201000f0101000f0201000f0101000f0201000f0101000f05
-01000f0201000f1001000f6301000f6301000f6301000f6301000f020100061308010c0e
-000106230100060302020103020206030100050000000513010005030100050201000514
-010005000f0e01010f0501030f0101000f0801000f0201000f0201000f3301000f0e0100
-0f0201000f0401000f0301030f0101000f0501010f0401040f0101000f0201000f010104
-0f0101000f0501000f0201000f1001000f6301000f6301000f6301000f6301000f020100
-061308010c0e000106230100060302020103020206030100000005140100050301000502
-0100051501000f0e01000f0001000f0301000f0201000f0101000f0801000f0201000f02
-01000f3301000f0e01000f0201000f0401000f0201000f0201000f0101000f0501000f00
-01000f0301000f0501000f0201000f0101000f0501000f0501000f0201000f1001000f63
-01000f6301000f6301000f6301000f020100061308010c0e000106230100060302020103
-0202060301000500000005110104050201020515010005000f0e01000f0101000f020100
-0f0201000f0101000f0801000f0201000f0201000f3301000f0e01010f0101000f040100
-0f0201000f0201000f0101000f0201000f0101000f0101000f0201000f0201000f010101
-0f0101000f0101000f0201000f0101000f0501000f0101010f1001000f6301000f630100
-0f6301000f6301000f020100061308010c0e000106230100060302020103020206030100
-0000053401000f0e01000f0201000f0201030f0101000f0801000f0201000f0201000f33
-01000f0e01000f0001010f0501000f0301030f0201020f0201000f0201000f0201020f02
-01000f0001010f0301020f0201000f0601010f0001000f1001000f6301000f6301000f63
-01000f6301000f020100061308010c0e0001062301000603020201030202060301000500
-00000532010005000f6301000f5101000f1001000f6301000f6301000f6301000f630100
-0f020100061308010c0e0001062301000603020201030202060301000000053401000f63
-01000f4d01000f0201000f1001000f6301000f6301000f6301000f6301000f0201000613
-08010c0e000106230100060302020103020206030100050000000532010005000f630100
-0f4e01020f1101000f6301000f6301000f6301000f6301000f020100061308010c0e0001
-062301000603020201030202060301000000053401000f6301000f6301000f6301000f63
-01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603
-0100050000000532010005000f6301000f6301000f6301000f6301000f6301000f630100
-0f020100061308010c0e0001062301000603020201030202060301000000050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0100050001000500010005000100050001000500010005000100050001000f6301000f63
-01000f6301000f6301000f6301000f6301000f020100061308010c0e0001062301000603
-020201030202060301000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-01000500010005000100050001ff01ff0161061308010c0e000106230100060302020103
-020206030100050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500010000630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100050000000532010005000063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000000534
-010000630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100050000000513010005050100051601000500
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000000051201020503010205170100001e01000043
-0100000e01000006010200100100000c0100002901000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100050000000513
-010005050100051601000500001e010000430100000e01000008010000100100000c0100
-002901000063010000630100006301000063010000020100061308010c0e000106230100
-0603020201030202060301000000051401000505010005170100000e0101000001000003
-01020002010400020102003b0100000e0100000001010005010000030102000301020002
-010000010100000301020002010000000101000301020002010000000101000301010000
-0100001001000063010000630100006301000063010000020100061308010c0e00010623
-0100060302020103020206030100050000000513010005050100051601000500000e0100
-00000100000001000001010000020100000301000003010000020100003a0100000e0101
-000101000004010000020100000201000001010000020100000101000000010000030100
-000201000001010100010100000101000002010000010101000101000001010000010101
-001001000063010000630100006301000063010000020100061308010c0e000106230100
-0603020201030202060301000000051401000505010005170100000e0100000001000000
-0100000501000003010000030100003e0100000e01000002010000040100000601000001
-010000050101000401000002010000010100000201000001010000020100000101000005
-010000020100001001000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100050000000513010005050100051601000500
-000e01000000010000000100000201030003010000040102003b0100000e010000020100
-000401000003010300010100000501010004010400010100000201000001010400010100
-000501000002010000100100006301000063010000630100006301000002010006130801
-0c0e0001062301000603020201030202060301000000051401000505010005170100000e
-0100000001000000010000010100000201000003010000070100003a0100000e01000002
-010000040100000201000002010000010100000501000000010000030100000501000002
-010000010100000501000005010000020100001001000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100050000000511
-010405010104051401000500000e01000000010000000100000101000002010000030100
-0003010000020100003a0100000e01010001010000040100000201000002010000010100
-000201000001010000010100000201000002010000010101000101000001010000020100
-000101000005010000010101001001000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000005340100000e01000000
-010000000100000201030004010100020102003b0100000e010000000101000501000003
-010300020102000201000002010000020102000201000000010100030102000201000006
-010100000100001001000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100050000000532010005000063010000510100
-001001000063010000630100006301000063010000020100061308010c0e000106230100
-06030202010302020603010000000534010000630100004d010000020100001001000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-0202060301000500000005320100050000630100004e0102001101000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000005340100006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000500000005320100050000630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010000630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001ff01ff
-0161061308010c0e000106230100060302020103020206030100009a0100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100003508000063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-061301000604010206150801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061101020603
-010006020100061408010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010613010006030100
-060201000614080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106130100060301000602
-010006140801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001061301000606010006150801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061301000605010006160801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001061301000604010006170801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001061301000603010006020100061408010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010611010406010104061408010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-063208010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010834006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000000083501ff01ff0161061308010c0e00010623010006030202010302020603
-0100009a0100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100003508000063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106320801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001061301000604010206150801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001061101020603010006020100061408010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010613010006070100061408010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010613
-010006070100061408010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010613010006050101
-061508010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010613010006070100061408010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010613010006070100061408010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010613010006030100060201000614080100630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106110104060201020615080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000106320801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000108340063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-01030202060301000000083501ff01ff0161061308010c0e000106230100060302020103
-020206030100009a01000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000035080000630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001063208010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010613010006060100061508010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010611010206050101061508010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010613010006040100060001000615080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000106130100060401000600010006150801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-061301000603010006010100061508010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010613
-010006020100060201000615080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106130100
-060201050614080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106130100060601000615
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106110104060301020614080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-063208010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001063208010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000108340063010000630100006301000063010000630100006301000002010006130801
-0c0e0001062301000603020201030202060301000000083501ff01ff0161061308010c0e
-000106230100060302020103020206030100009a01000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000035
-080000630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010613010006030104
-061408010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010611010206030100061808010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010613010006030100061808010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010613010006030100061808010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010613010006030103061508010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010613
-010006070100061408010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010613010006070100
-061408010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010613010006020100060301000614
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106110104060101030615080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-063208010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001063208010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000108340063010000630100006301000063010000630100006301000002010006130801
-0c0e0001062301000603020201030202060301000000083501ff01ff0161061308010c0e
-000106230100060302020103020206030100009a01000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000035
-080000630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010613010006050102
-061408010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010611010206040100061708010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010613010006030100061808010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010613010006030100061808010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010613010006030103061508010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010613
-010006030100060201000614080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106130100
-060301000602010006140801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061301000603
-010006020100061408010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010611010406020102
-061508010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001063208010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000106320801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010834006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000000083501ff01ff
-0161061308010c0e000106230100060302020103020206030100009a0100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100003508000063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-061301000603010406140801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061101020603
-010006020100061408010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010613010006060100
-061508010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010613010006060100061508010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010613010006060100061508010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010613010006060100061508010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010613010006050100061608010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010613
-010006050100061608010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010611010406030100
-061608010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001063208010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000106320801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010834006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000000083501ff01ff
-0161061308010c0e000106230100060302020103020206030100009a0100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100003508000063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-061301000604010206150801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061101020603
-010006020100061408010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010613010006030100
-060201000614080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106130100060301000602
-010006140801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001061301000604010206150801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061301000603010006020100061408010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010613010006030100060201000614080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106130100060301000602010006140801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001061101040602010206150801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-063208010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001083400630100
-006301000063010000630100006301000063010000020100061308010010062301000603
-020201030202060301ff01ff019906130800001106230100060302020103020206030100
-06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202
-0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
-010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
-06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff
-06e301000603020201030202060301000649010006ff06ff069801000603020201030202
-060301000648010106ff06ff069801000603020201030202060301000647010006000100
-06ff06ff069801000603020201030202060301000649010006ff06ff0698010006030202
-01030202060301000649010006ff06ff0698010006030202010302020603010006490100
-06ff06ff069801000603020201030202060301000649010006ff06ff0698010006030202
-01030202060301000649010006ff06ff0698010006030202010302020603010006470104
-06ff06ff0696010006030202010302020603010006ff06ff06e301000603020201030202
-0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
-010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
-060302020103020206030100063708ff08ff0860064a0100060302020103020206030100
-063708ff08ff085f0000064a010006030202010302020603010006370801001d0cff0cff
-0c3e0001064a010006030202010302020603010006370801001c08000cff0cff0c3e0001
-064a0100060302020103020206030100063708010001060b08000000060b08010cff0cff
-0c3e0001064a0100060302020103020206030100063708010001060b08000000060b0801
-0cff0cff0c3e0001064a0100060302020103020206030100063708010001060b08000000
-060b08010cff0cff0c3e0001064a0100060302020103020206030100063708010001060b
-08000000060b08010cff0cff0c3e0001064a010006030202010302020603010006370801
-0001060b08000000060b08010cff0cff0c3e0001064a0100060302020103020206030100
-063708010001060b08000000060b08010cff0cff0c3e0001064a01000603020201030202
-06030100063708010001060b08000000060b08010cff0cff0c3e0001064a010006030202
-0103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a0100
-060302020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001
-064a0100060302020103020206030100063708010001060b08000000060b08010cff0cff
-0c3e0001064a0100060302020103020206030100063708010001060b08000000060b0801
-0cff0cff0c3e0001064a0100060302020103020206030100063708010001080c0000080d
-0cff0cff0c3e0001064a0100060302020103020206030100063708010000081c0cff0cff
-0c3e0001064a01000603020201030202060301000637080100ff00ff005e064a01000603
-020201030202060301000637080000ff00ff005f064a0100060302020103020206030100
-06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202
-0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
-010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
-06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff
-06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100
-06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202
-0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
-010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
-06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff
-06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100
-06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202
-0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
-010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
-06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff
-06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100
-06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202
-0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202
-010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100
-06030202010100040603010006ff06ff06e301000603000502020400060301ff01ff01e5
-060300000202040000000202040006ff06ff06ed00000202040000000202040006ff06ff
-06ed00000202040000000202040006ff06ff06ed00000202040000000202040006ff06ff
-06ed000002020400000002020400000502ff02ff02e100060202040000000208040002ff
-02ff02e100000208040000000208040002ff02ff02e100000208040000000208040001ff
-01ff01e10000020804000000040901ff01ff01e100000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 64 377 377
-%%EOF
diff --git a/lib/tv/doc/src/tv_search_result.gif b/lib/tv/doc/src/tv_search_result.gif
deleted file mode 100644
index 3e615b4875..0000000000
--- a/lib/tv/doc/src/tv_search_result.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_search_result.ps b/lib/tv/doc/src/tv_search_result.ps
deleted file mode 100644
index 14d0331a8f..0000000000
--- a/lib/tv/doc/src/tv_search_result.ps
+++ /dev/null
@@ -1,2739 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./tv_search_result.tmp.eps)
-%%CreationDate: (Tue Jun 12 16:10:46 2001)
-%%BoundingBox: 0 34 400 249
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 34 400 249
-userdict begin
-%%BeginData:
-DisplayImage
-0 34
-400.000000 215.000000
-12
-1051 565
-1
-0
-0
-32
-ffffff
-000000
-d8d8d8
-4ac1df
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-00ff00
-ff0000
-aa2455
-990000
-7f7f7f
-999999
-ff7f7f
-009900
-7fff7f
-ffd700
-998100
-ffff7f
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-03ba01010000010100000100000001000000010000000100000001000000010000000100
-000101000002010103ff03ff03ff03ff0300010200000100000001000000010000000100
-000001000000010000000100000101000002010103f5000a01ff01ff0137000a03be0101
-000101000000010000000100000001000000010000000100000101000002010103f60000
-0208050001ff01ff013700000208050003bf010100010100000001000000010000000100
-00000100000101000002010103f700000208050002ff02ff023700000208050003c00101
-00010100000001000000010000000100000101000002010103f800000208050002ff02ff
-023700000208050003c10101000101000000010000000100000101000002010103f90000
-0202050602ff02ff0237000005050202050003c201010001010000000100000101000002
-010103fa0000020205000209000d02ff02ff022b00000202050003c30101000101000001
-01000002010103fb00000202050002080000020d05000234010302110103023201020258
-0102020c010102010101021e010102290101020601010208010102310101022a01010230
-0101024100000202050003c40101000201000002010103fc00000202050002080000020d
-05000234010102020107020001010203010102010101020e01050200010702010103020d
-0101020401010204010302030103020e010302060103020301030203010302060103020b
-0101020a0101020201010219010002030101021c0100020b01010206010102090101021b
-010202020100020d0101022a0101020c0104021e0101024100000202050003c501010000
-01000002010103fd00000202050002080000020d05000234010102050101020301010203
-010102010101020e0101020701010203010102010101020c010102020103020301010201
-010102010101020101010208010102010101020101010204010102010101020101010201
-0101020101010201010102040101020101010201010102060101020a0101020201010218
-010102210101020b01010206010102090101021b010202020100020d0101023801010202
-0101021d0101024100000202050003c601010002010103fe000002020500020800000202
-0506020305000234010102050101020301010203010102010101020e0101020701010203
-010102050101020901010203010102070101020101010201010102060102020201010201
-010102080101020101010201010102010101020101010204010102010101020201020203
-0101020a0101020301010202010302030103020201030201010402010101020201030203
-010102000101020a0104020101030203010102000101020301010202010302030101021a
-010002000101020101000202010302030104020201030202010102090101020001010201
-010102030103020301010202010102000101020201010201010302020101020001010201
-010102030103020201010200010102010101020201030202010102020101023000000202
-050003c701000001010103ff000005030208000002020500040400000203050002340101
-02050101020401010202010002020101020e0101020701010203010202040101020a0100
-020301010207010102010101020101010205010102040101020101010208010102010101
-02010101020101010201010102040101020101010204010102020100020b010102030101
-020101010201010102010101020101010200010102010101020101010203010102010101
-020101010202010202000101020a01010202010102010101020201020200010102020101
-020101010201010102020101021a01000200010102010100020101010201010102010101
-020101010201010102010101020101010209010202000102020001010201010102010101
-020201010202010202000101020101010200010102000101020201020200010202000101
-020101010201010102010101020001010201010102010101020101010201010102020101
-02300000050303c7010303ff03000101020b000002030500040200000204050002340101
-02050101020401010201010102020101020e01040204010102040103020d010102040101
-020501020202010102010101020401010205010102010101020701010202010102010101
-020201040204010102010101020501010202010102090101020301010201010102010101
-0201010102080101020101010203010102010101020101010202010102010101020a0101
-02060101020201010201010102020101020101010201010102020101021a010002000102
-02000100020101010201010102010101020101010201010102010101020d010102010101
-020101010205010102020101020201010201010102010101020001010200010102020101
-020101010201010102050101020101020203010102010101020101010201010102020100
-0234010103c8010103ff03010101020b0000020305000402000002040500023401010205
-0101020501010200010002030101020e01010207010102060102020e0100020301010207
-010102010101020101010205010102040101020101010206010102030101020101010205
-010102040101020101010204010102020100020b01010203010102010101020101010201
-010102050104020101010203010102010101020101010202010102010101020a01010203
-01040202010102010101020201010201010502020101021a010002010101020001000201
-010102010101020101010201010102010105020d01010201010102010101020201040202
-010102020101020101010201010102000101020001010202010102010101020101010202
-010402010101020401010201010502020101020001010234010103ff03cc0101020b0000
-02040500040000000205050002340101020501010205010302030101020e010102070101
-02070101020d010102030101020701010201010102010101020601020202010102010101
-0205010102040101020101010205010102040101020101010202010202030101020a0101
-020301010201010102010101020101010204010102010101020101010203010102010101
-020101010202010102010101020a01010202010102010101020201010201010102020101
-0201010102060101021a0100020201020201010102010101020101010201010102010101
-021101010201010102010101020101010201010102020101020201010201010102010101
-020101010200010102010101020101010201010102010101020101010201010102040101
-0201010102060101020001000235010103ff03cc0101020b000002040500040000000205
-050002340101020501010206010102040101020e01010207010102030101020101010201
-010102080101020401010203010102010101020101010201010102010101020401010201
-010102010101020101010200010502010101020101010201010102010101020101010200
-0101020101010201010102060101020a0101020201010201010102010101020101010202
-01000200010102010101020101010203010102010101020101010202010102010101020a
-01010202010102010101020201010201010102020101020101010202010002010101021b
-010002020102020101010201010102010101020001020201010102020100020101010209
-010102010101020101010201010102010101020201010202010102010101020201010207
-010102010101020101010201010102010101020101010204010102010101020201000203
-01020235010103ff03cc0101020b00000205000002060500023401010205010102060101
-02040101020e010502030101020401030202010102080101020401010204010302030103
-0202010102090103020201010200010502020103020301030202010102010103020b0101
-020a01010202010102020103020301030202010202000101020101020201010102020103
-0203010102010101020b0102020101020200010102010104020301010202010302020101
-021b01000203010102020103020301010200010102020103020201010209010102010101
-020101010202010202000101020101010202010102010101020301050202010102010101
-020101010202010202000101020001010204010102020103020401010236010103ff03cc
-0101020b0000020d050002340103021101030232010202190100023d0102020c01010237
-010602230101029e01010237010103ff03cc0101020b0000020d0500029d010002ff0254
-01010237010103ae0100030801000305010103ff030a0101020b0000020d050002ff02ff
-022d010103ae0100030801000306010003ff030a0101020c050d02ff02ff022e010103ae
-0100030801000306010003ff030a010102ff02ff0249010103ac01040301010303000103
-0303010003030102030201030307010203010100030001010307010003e2010102ff02ff
-0249010103ae010003020100030201000300010003020100030201000302010003020100
-03000100030a01000302010003000101030101000306010003e2010102ff02ff02490101
-03ae01000302010003020100030001000302010003020100030201040301010203070100
-0302010003000100030201000306010003e2010102ff02ff0249010103ae010003020100
-030101010300010003020100030201000302010003080100030601000302010003000100
-030201000306010003e2010102ff02ff0249010103af0101030101010300010003000103
-0302010203020102030101030308010203010100030201000306010003e2010102020600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-0000060000000202010103ff03cc01010202000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-06000000060000000600000006000000060000000600000006000202010103ff03cc0101
-02020600000006ff06ff064001000202010103ff03cc01010202000006ff06ff06400100
-06000202010103ff03cc010102020600000006ff06ff064001000202010103ff03cc0101
-0202000006ff06ff0640010006000202010103ff03cc010102020600000006ff06ff0640
-01000202010103ff03cc010102020000060c07040604070006030702061f070406050700
-060407000604070006190700060207000604070006270702060b07000606070006ff065e
-070006020700060907020613010006000202010103ff03cc0101020206000000060b0700
-060f0700061f070006090700060a07000619070006020700062c070006020700060a0700
-06ff0666070006020700060b0700061401000202010103ff03cc010102020000060c0700
-060607020605070006030702061807000606070106000700060207020602070406170700
-060207000602070206030702060207000602070006170700060207000601070006000701
-06020704060207020603070206020700060007010603070206ff06490700060207000602
-0702060507000602070006000701060c010006000202010103ff03cc0101020206000000
-060b07000608070006050700060207000602070006170700060507000601070106040700
-06040700061a070006000700060507000602070006020700060107000602070006170700
-060207000601070106010700060307000606070006020700060207000601070106010700
-060107000602070006ff0648070006020700060107000602070006040700060207010601
-0700060c01000202010103ff03cc010102020000060c0703060507000605070006020700
-060207000617070306020700060207000604070006040700061a07000600070006050700
-060207000602070006010700060007000600070006170700060207000601070006020700
-0603070006060700060207000602070006010700060207000601070006ff064c07040601
-070006020700060407000602070006020700060b010006000202010103ff03cc01010202
-06000000060b070006080700060507000602070406170700060507000602070006040700
-06040700061a070006000700060507000602070406010700060007000600070006170700
-060207000601070006020700060307000606070006020700060207000601070006020700
-0602070206ff064907000602070006010704060407000602070006020700060c01000202
-010103ff03cc010102020000060c0700060807000605070006020700061b070006050700
-060207000604070006040700061b07000606070006020700060507000600070006000700
-061707000602070006010700060207000603070006060700060207000602070006010700
-060207000605070006ff064807000602070006010700060807000602070006020700060b
-010006000202010103ff03cc0101020206000000060b0700060807000605070006020700
-060207000617070006050700060107010604070006040700061b07000606070006020700
-060207000601070006000700060007000617070006020700060107010601070006030700
-0606070006020700060207000601070006020700060107000602070006ff064807000602
-07000601070006020700060407000602070106010700060c01000202010103ff03cc0101
-02020000060c070006080700060507000603070206180704060207010600070006040700
-060507010619070006060700060307020603070006000700061907020602070006000701
-06050701060407000603070206020700060207000602070206ff06490700060207000602
-0702060507000602070006000701060c010006000202010103ff03cc0101020206000000
-06a8070006ff06840700061001000202010103ff03cc010102020000060b0706062a0706
-062a0706062a07060600070006ff066e0706060e0700060f010006000202010103ff03cc
-0101020206000000060a0706062a0706062a0706062a07060600070006ff066e0706060e
-0700061001000202010103ff03cc01010202000006ff06ff0640010006000202010103ff
-03cc010102020600000006ff06ff064001000202010103ff03cc01010202000006ff06ff
-0640010006000202010103ff03cc01010202060000000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-01000600010006000100060001000600010006000100060001000202010103ff03cc0101
-020200000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000202010103ff03cc0101020206ff06ff06430202010103ff03cc
-0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc
-0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc
-0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc
-0101020206ff06ff06430202010103ff03cc010102020636000006000000060000000600
-00000600000006000000060000000600000006000000060000000600000006000000061a
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000601000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000601000006000000060000000600
-00000600000006000000060000000600000006000000060000000600000006000000061a
-000006000000060000000600000006000000060000000600000006000000060000000600
-00000600000006000000061a000006000000060000000600000006000000060000000600
-00000600000006000000060000000600000006000000061a000006000000060000000600
-0000060000000600000006000000060000000600000006000000060000000600000006fb
-0202010103ff03cc01010202063500000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060001000618000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600010000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060001000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000100
-061800000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060001000618000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600010006180000
-060000000600000006000000060000000600000006000000060000000600000006000000
-06000000060000000600010006fa0202010103ff03cc010102020636000006140100061a
-00000614010006010000061401000601000006140100061a000006140100061a00000614
-0100061a00000614010006fb0202010103ff03cc01010202063500000616010006180000
-061601000000061601000000061601000618000006160100061800000616010006180000
-0616010006fa0202010103ff03cc010102020636000006140100061a0000061401000601
-0000061401000601000006140100061a000006140100061a000006140100061a00000614
-010006fb0202010103ff03cc010102020635000006050702060307020606010006180000
-061601000000061601000000061601000618000006160100061800000616010006180000
-0616010006fa0202010103ff03cc0101020206360000060407020603070206050100061a
-00000614010006010000061401000601000006140100061a00000606070406080100061a
-00000608070106090100061a0000060807030607010006fb0202010103ff03cc01010202
-063500000604070406010704060501000618000006100700060401000000061007000604
-010000000604070006100100061800000605070806070100061800000608070306090100
-06180000060707070606010006fa0202010103ff03cc0101020206360000060307000601
-0701060107000601070106040100061a0000060f07000603010006010000060f07000603
-01000601000006030700060f0100061a00000603070a06050100061a0000060707030608
-0100061a000006050703060107030604010006fb0202010103ff03cc0101020206350000
-0603070d0604010006180000060d07000601070006040100000006040700060a07000604
-010000000604070006010700060d01000618000006040703060207030606010006180000
-06090701060a01000618000006060702060307020605010006fa0202010103ff03cc0101
-0202063600000601070006000703060007020600070406020100061a0000060c07000601
-0700060301000601000006030700060a070006030100060100000603070006010700060c
-0100061a0000060207030604070306040100061a000006140100061a0000060507020603
-07020604010006fb0202010103ff03cc0101020206350000060207000600070306000702
-060007040603010006180000060a07000601070006010700060401000000060407000604
-070006040700060401000000060407000601070006010700060a01000618000006030702
-060307070603010006180000060707040609010006180000060707010602070206060100
-06fa0202010103ff03cc0101020206360000060107000600070306000702060007040602
-0100061a0000060907000601070006010700060301000601000006030700060407000604
-0700060301000601000006030700060107000601070006090100061a0000060207020604
-070506030100061a00000607070306080100061a0000060a07020606010006fb02020101
-03ff03cc0101020206350000060207000600070306000702060007040603010006180000
-060707000601070006010700060107000604010000000604070006040700060107000601
-070006040100000006040700060107000601070006010700060701000618000006030702
-060507030605010006180000060907020609010006180000060a07020608010006fa0202
-010103ff03cc010102020636000006010700060007070600070406020100061a00000606
-070006010700060107000601070006030100060100000603070006040700060107000601
-070006030100060100000603070006010700060107000601070006060100061a00000602
-07030605070106050100061a00000608070206080100061a0000060807020608010006fb
-0202010103ff03cc01010202063500000602070006000704060107000600070406030100
-061800000604070006010700060107000601070006010700060401000000060407000601
-070006010700060107000601070006040100000006040700060107000601070006010700
-06010700060401000618000006040703060d010006180000060907020609010006180000
-060907020609010006fa0202010103ff03cc010102020636000006010706060107060602
-0100061a0000060307000601070006010700060107000601070006030100060100000603
-070006010700060107000601070006010700060301000601000006030700060107000601
-0700060107000601070006030100061a00000603070906060100061a0000060807020608
-0100061a00000614010006fb0202010103ff03cc01010202063500000602070006000702
-060507000600070206030100061800000604070006010700060107000601070006010700
-060401000000060407000601070006010700060107000601070006040100000006040700
-060107000601070006010700060107000604010006180000060507070608010006180000
-060807040608010006180000060907020609010006fa0202010103ff03cc010102020636
-00000601070006000702060507000600070206020100061a000006030700060107000601
-070006010700060107000603010006010000060307000601070006010700060107000601
-07000603010006010000060307000601070006010700060107000601070006030100061a
-00000606070406080100061a00000606070606060100061a0000060807020608010006fb
-0202010103ff03cc01010202063500000602070406050704060301000618000006160100
-000006160100000006160100061800000616010006180000061601000618000006160100
-06fa0202010103ff03cc010102020636000006140100061a000006140100060100000614
-01000601000006140100061a000006140100061a000006140100061a00000614010006fb
-0202010103ff03cc01010202063500000616010006180000061601000000061601000000
-0616010006180000061601000618000006160100061800000616010006fa0202010103ff
-03cc010102020636000006140100061a0000061401000601000006140100060100000614
-0100061a000006140100061a000006140100061a00000614010006fb0202010103ff03cc
-010102020635000006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006180000060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-000006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010000000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000618000006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006180000060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100061800000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-0600010006fa0202010103ff03cc01010202063601000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100061a01000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060101000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060101000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100061a01000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100061a01000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100061a01000600010006000100060001000600
-01000600010006000100060001000600010006000100060001000600010006fb02020101
-03ff03cc0101020206ff06ff06430202010103ff03cc0101020206ff06ff064302020101
-0303000a01ff01b0000a03010101020206ff06ff064302020101030300000208050001ff
-01b000000208050003010101020206ff06ff064302020101030300000208050002ff02b0
-00000208050003010101020206ff06ff064302020101030300000208050002ff02b00000
-0208050003010101020206ff06ff064302020101030300000202050602ff02b000000505
-0202050003010101020206ff06ff06430202010103030000020205000209000d02ff02a4
-00000202050003010101020206ff06ff064302020101030300000202050002080000020d
-0500029001030211010302330101021501010206010102a1000002020500030101010202
-06ff06ff064302020101030300000202050002080000020d050002900101020201070200
-01010203010102010101020e010302200101020c0103020401010206010102110100028e
-00000202050003010101020206ff06ff064302020101030300000202050002080000020d
-05000290010102050101020301010203010102010101020d010102010101021f0101020b
-0101020101010203010102190101028e00000202050003010101020206ff06ff06430202
-010103030000020205000208000002020506020305000290010102050101020301010203
-010102010101020d01010206010302030103020201010200010102010103020201010200
-01010207010102030101020201010200010102030101020201030203010302000104028c
-000002020500030101010202060301ff01ff013b06030202010103030000050302080000
-0202050004040000020305000290010102050101020401010202010002020101020d0102
-020401010201010102010101020101010201010102000101020001010201010102010102
-020001010206010102030101020201020200010102020101020101010201010102010101
-0201010102000101028e000005030301010102020603010006ff06ff0625010006000000
-060000000600000006000000060000000600000006000000060000000600000006000100
-06030202010103030101020b000002030500040200000204050002900101020501010204
-01010201010102020101020e010302020101020101010205010102010102020201010205
-010102010101020601010203010102020101020101010202010102010101020101010201
-010102040101029101010301010102020603010006ff06ff062501000000060000000600
-000006000000060000000600000006000000060000000600000006000101060302020101
-03030101020b000002030500040200000204050002900101020501010205010102000100
-020301010210010202010105020201040201010102030101020501010201010102060101
-020301010202010102010101020201010201010502010101020401010291010103010101
-02020603010006010dff0dff0d210601010006000000060e010006000100060302020101
-03030101020b000002040500040000000205050002900101020501010205010302030101
-021101010201010102050101020101010201010102030101020501010201010102060101
-020301010202010102010101020201010201010102050101020401010291010103010101
-02020603010006010dff0dff0d2000000601010000000610010106030202010103030101
-020b000002040500040000000205050002900101020501010206010102040101020d0101
-020101010201010102020100020101010201010102010101020301010202010002010101
-020101010207010102010101020301010201010102020101020101010202010002010101
-0202010002000101029101010301010102020603010006010d0100ff00ff001f06010100
-06000000060e01000600010006030202010103030101020b000002050000020605000290
-0101020501010206010102040101020e0103020301030203010202000101020001010204
-01030202010102010101020801030204010402030101020201030203010302020102028f
-01010301010102020603010006010d0100ff00ff001f0601010000000610010106030202
-010103030101020b0000020d050002900103021101030254010102a40101030101010202
-0603010006010d0100ff00ff001f0601010006000000060e010006000100060302020101
-03030101020b0000020d050002fd010202a501010301010102020603010006010d0100ff
-00ff001f0601010000000610010106030202010103030101020b0000020d050002ff02a6
-01010301010102020603010006010d0100ff00ff001f0601010006000000060e01000600
-010006030202010103030101020c050d02ff02a701010301010102020603010006010d01
-00ff00ff001f0601010000000602010a060201010603020201010303010102ff02c20101
-0301010102020603010006010d0100ff00ff001f06010100060000000602010806020100
-060001000603020201010303010102ff02c201010301010102020603010006010d0100ff
-00ff001f06010100000006040106060401010603020201010303010102ff02c201010301
-010102020603010006010d0100ff00ff001f060101000600000006040104060401000600
-01000603020201010303010102ff02c201010301010102020603010006010d0100ff00ff
-001f06010100000006060102060601010603020201010303010102ff02c2010103010101
-02020603010006010d0100ff00ff001f0601010006000000060601000606010006000100
-06030202010103030101020206ff06bc020201010301010102020603010006010d0100ff
-00ff001f0601010000000610010106030202010103030101020206ff06bc020201010301
-010102020603010006010d0100ff00ff001f0601010006000000060e0100060001000603
-0202010103030101020206ff06bc020201010301010102020603010006010d0100ff00ff
-001f0601010000000610010106030202010103030101020206ff06bc0202010103010101
-02020603010006010d0100ff00ff001f0601010006000000060e01000600010006030202
-010103030101020206ff06bc020201010301010102020603010006010d0100ff00ff001f
-0601010000000610010106030202010103030101020206ff06bc02020101030101010202
-0603010006010d0100ff00ff001f0601010006000000060e010006000100060302020101
-03030101020206ff06bc020201010301010102020603010006010d0000ff00ff00200601
-010000000610010106030202010103030101020206ff06bc020201010301010102020603
-010006ff06ff062501000600000006000100060001000600010006000100060001000600
-010006000100060001000600010006030202010103030101020206ff06bc020201010301
-010102020603010006ff06ff062501000000060001000600010006000100060001000600
-01000600010006000100060001000600010106030202010103030101020206ff06bc0202
-0101030101010202060301ff01ff013b0603020201010303010102020608000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006080202010103010101020206ff06ff
-064302020101030301010202060700000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600010006070202010103010101020206ff06ff064302020101030301010202
-0608000006ff06a8010006080202010103010101020206ff06ff06430202010103030101
-02020607000006ff06aa010006070202010103010101020206ff06ff0643020201010303
-010102020608000006ff06a8010006080202010103010101020206ff06ff064302020101
-0303010102020607000006ff06aa010006070202010103010101020206ff06ff06430202
-01010303010102020608000006ff06a8010006080202010103010101020206ff06ff0643
-020201010303010102020607000006ff06aa010006070202010103010101020206ff06ff
-0643020201010303010102020608000006ff06a8010006080202010103010101020206ff
-06ff0643020201010303010102020607000006ff06aa0100060702020101030101010202
-06ff06ff0643020201010303010102020608000006ff06a8010006080202010103010101
-020206ff06ff0643020201010303010102020607000006ff06aa01000607020201010301
-0101020206ff06ff0643020201010303010102020608000006ff06a80100060802020101
-03010101020206ff06ff0643020201010303010102020607000006ff0649000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-06000000060000000611010006070202010103010101020206ff06ff0643020201010303
-010102020608000006ff0647000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006110100060802020101
-03010101020206ff06ff0643020201010303010102020607000006ff06490000064c0100
-0611010006070202010103010101020206ff06ff06430202010103030101020206080000
-06ff06470000064c01000611010006080202010103010101020206ff06ff064302020101
-03030101020206070000060d0102061e0100060f010106ff06060000064c010006110100
-06070202010103010101020206ff06ff06430202010103030101020206080000060b0100
-06020100061d0100060e010006ff06070000064c01000611010006080202010103010101
-020206ff06ff06430202010103030101020206070000060c010006060102060301020602
-010006000101060301020602010006000101060b01000604010206020100060001010604
-010106f20000064c01000611010006070202010103010101020206ff06ff064302020101
-03030101020206080000060c010006040100060201000601010006020100060101010601
-010006010100060201000601010106010100060801040601010006020100060101010601
-01000603010106f10000064c010006110100060802020101030101010202060301ff01ff
-013b06030202010103030101020206070000060e01010602010006020100060501000601
-0100060501000605010006020100060a010006030100060201000601010006fc0000064c
-0100061101000607020201010301010102020603010006ff06ed0100064a010006030202
-010103030101020206080000060f01000601010406020103060101000605010006050100
-06020100060a010006030100060201000601010006fb000006120102061e010006160100
-06110100060802020101030101010202060301000663010506ff06830100064a01000603
-0202010103030101020206070000060c0100060201000601010006050100060201000601
-0100060501000605010006020100060a010006030100060201000601010006fc00000610
-010006020100061d01000617010006110100060702020101030101010202060301000662
-010706ff06820100064a010006030202010103030101020206080000060b010006020100
-060101000602010006010100060201000601010006050100060201000601010006020100
-060a01000603010006020100060101000607010106f10000061101000606010206030102
-060201000600010106030102060201000600010106130100061101000608020201010301
-0101020206030100066101020603010206ff06810100064a010006030202010103030101
-020206070000060d0102060301020603010306010100060601020602010006020100060a
-010006040102060201000607010106f20000061101000604010006020100060101000602
-010006010101060101000601010006020100060101010601010006130100061101000607
-0202010103010101020206030100066101010605010106ff06810100064a010006030202
-01010303010102020608000006ff06470000061301010602010006020100060501000601
-010006050100060501000602010006120100061101000608020201010301010102020603
-0100066101020603010206ff06810100064a010006030202010103030101020206070000
-06ff06490000061401000601010406020103060101000605010006050100060201000613
-010006110100060702020101030101010202060301000662010706ff06820100064a0100
-0603020201010303010102020608000006ff064700000611010006020100060101000605
-010006020100060101000605010006050100060201000612010006110100060802020101
-030101010202060301000663010506ff06830100064a0100060302020101030301010202
-0607000006ff064900000610010006020100060101000602010006010100060201000601
-010006050100060201000601010006020100061301000611010006070202010103010101
-0202060301000665010106ff06850100064a010006030202010103030101020206080000
-06ff06470000061201020603010206030103060101000606010206020100060201000612
-010006110100060802020101030101010202060301000665010106ff06850100064a0100
-0603020201010303010102020607000006ff06490000064c010006110100060702020101
-030101010202060301000665010106ff06850100064a0100060302020101030301010202
-0608000006ff06470000064c010006110100060802020101030101010202060301000665
-010106ff06850100064a01000603020201010303010102020607000006ff06490000064c
-010006110100060702020101030101010202060301000665010106ff06850100064a0100
-0603020201010303010102020608000006ff06470000064c010006110100060802020101
-030101010202060301000665010106ff06850100064a0100060302020101030301010202
-06070000060b0dff0d2806140000064c0100061101000607020201010301010102020603
-0100066101010600010206ff06850100064a010006030202010103030101020206080000
-060a0dff0d27000006130000064c01000611010006080202010103010101020206030100
-066101010600010206ff06850100064a010006030202010103030101020206070000060b
-0d0100ff002606140000064c010006110100060702020101030101010202060301000661
-010506ff06850100064a010006030202010103030101020206080000060a0d0100ff0026
-06130000064c010006110100060802020101030101010202060301000661010506ff0685
-0100064a010006030202010103030101020206070000060b0d0100ff002606140000064c
-01000611010006070202010103010101020206030100066101020600010106ff06850100
-064a010006030202010103030101020206080000060a0d0100ff002606130000064c0100
-061101000608020201010301010102020603010006ff06ed0100064a0100060302020101
-03030101020206070000060b0d0100ff0026061400000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000611
-0100060702020101030101010202060301ff01ef064a0100060302020101030301010202
-06080000060a0d0100ff0026061300000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000611010006080202
-010103010101020206030100063513610c04060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-0000060000000600000006000000060000000600000006000000060000000c0406000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-06000000060000000c040600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000c04060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000001000614010006000100060001000600
-010006000100060001000600010006000100060001000624010006030202010103030101
-020206070000060b0d01001f010000ff0005067501000607020201010301010102020603
-01000635136012000c030100000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-0000060000000600000006000000060000000600000006000c0301000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000c03010000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-00000600000006000000060000000600000006000c030100000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060001000613010006000100060001000600
-010006000100060001000600010006000100060001000600000006230100060302020101
-03030101020206080000060a0d01001d0100000001000000010000ff0003067401000608
-020201010301010102020603010006351301115d12010c01010206000000065c01000c01
-010206000000065c01000c01010206000000065c01000c01010206000000061f01000614
-0100040e00000624010006030202010103030101020206070000060b0d01000101000002
-01000002010200030102000301020003010200ff00040675010006070202010103010101
-02020603010006351301112c0100112f12010c0101020000062b0102062d010006000c01
-01020000062b0102062d010006000c0101020000062d0100062d010006000c0101020000
-06200100061301000600040e060000000623010006030202010103030101020206080000
-060a0d010001010000020100000101000002010000010100000201000001010000020100
-0002010200ff0004067401000608020201010301010102020603010006351301112a0102
-112f12010c010102060000000629010006020100062d01000c0101020600000006290100
-06020100062d01000c01010206000000062b0101062e01000c01010206000000061f0100
-06140100040e00000624010006030202010103030101020206070000060b0d0100010100
-0002010000050100000101000009010000010100000001000000010000ff000306750100
-0607020201010301010102020603010006351301112c0100112f12010c0101020000062a
-010006020100062c010006000c0101020000062e0100062c010006000c0101020000062b
-010006000100062d010006000c010102000006200100061301000600040e060000000623
-010006030202010103030101020206080000060a0d010002010000000100000301030002
-0102000301030003010000ff000506740100060802020101030101010202060301000635
-1301112c0100112f12010c010102060000000629010006020100062d01000c0101020600
-0000062d0100062d01000c01010206000000062a010006000100062e01000c0101020600
-0000061f010006140100040e00000624010006030202010103030101020206070000060b
-0d010002010000000100000201000002010000050100000101000002010000ff000a0675
-01000607020201010301010102020603010006351301112c0100112f12010c0101020000
-062d0100062d010006000c0101020000062c0101062d010006000c0101020000062a0100
-06010100062d010006000c010102000006200100061301000600040e0600000006230100
-06030202010103030101020206080000060a0d0100030100000301000002010000010100
-00020100000101000002010000ff000a0674010006080202010103010101020206030100
-06351301112c0100112f12010c01010206000000062b0100062f01000c01010206000000
-062d0100062d01000c010102060000000628010006020100062e01000c01010206000000
-061f010006140100040e00000624010006030202010103030101020206070000060b0d01
-0003010000040103000201020003010300ff000a06750100060702020101030101010202
-0603010006351301112c0100112f12010c0101020000062b0100062f010006000c010102
-0000062e0100062c010006000c010102000006290105062c010006000c01010200000620
-0100061301000600040e060000000623010006030202010103030101020206080000060a
-0d0100ff0026067401000608020201010301010102020603010006351301112c0100112f
-12010c010102060000000629010006020100062d01000c01010206000000062901000602
-0100062d01000c01010206000000062c0100062e01000c01010206000000061f01000614
-0100040e00000624010006030202010103030101020206070000060b0d0100ff00260614
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006110100060702020101030101010202060301000635
-1301112a0104112d12010c0101020000062a0104062c010006000c0101020000062b0102
-062d010006000c0101020000062c0102062c010006000c01010200000620010006130100
-0600040e060000000623010006030202010103030101020206080000060a0d0100ff0026
-061300000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000611010006080202010103010101020206030100
-06351301115d12010c01010206000000065c01000c01010206000000065c01000c010102
-06000000065c01000c01010206000000061f010006140100040e00000624010006030202
-010103030101020206070000060b0d0100ff002606140000064c01000611010006070202
-01010301010102020603010006351301115d12010c0101020000065c010006000c010102
-0000065c010006000c0101020000065c010006000c010102000006200100061301000600
-040e060000000623010006030202010103030101020206080000060a0d0100ff00260613
-0000064c0100061101000608020201010301010102020603010006351301115d12010c01
-010206000000065c01000c01010206000000065c01000c01010206000000065c01000c01
-010206000000061f010006140100040e0000062401000603020201010303010102020607
-0000060b0d0100ff002606140000064c0100061101000607020201010301010102020603
-010006351301115d12010c0101020000065c010006000c0101020000065c010006000c01
-01020000065c010006000c010102000006200100061301000600040e0600000006230100
-06030202010103030101020206080000060a0d0100ff002606130000064c010006110100
-0608020201010301010102020603010006351301115d12010c01010206000000065c0100
-0c01010206000000065c01000c01010206000000065c01000c01010206000000061f0100
-06140100040e00000624010006030202010103030101020206070000060b0d0100ff0026
-06140000064c0100061101000607020201010301010102020603010006351301115d1201
-0c0101020000065c010006000c0101020000065c010006000c0101020000065c01000600
-0c010102000006200100061301000600040e060000000623010006030202010103030101
-020206080000060a0d0000ff002706130000064c01000611010006080202010103010101
-02020603010006351301125f0c0101020600000006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000c01010206000000
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-06000100060001000c010102060000000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-0600010006000100060001000600010006000100060001000c0101020600000006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-06000100060001000600010006000100060001000600010106140100040e000006240100
-0603020201010303010102020607000006ff06490000064c010006110100060702020101
-030101010202060301000635130012600c00010300000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-01000600010006000100060001000600010006000100060001000600010006000c000103
-000006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-0100060001000600010006000c0001030000060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000c00010300000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100061301000600
-040e06000000062301000603020201010303010102020608000006ff0647000006120102
-061f01020613010006110100060802020101030101010202060301001036006301000063
-010000630100006301000022010006140100040e00000624010006030202010103030101
-02020607000006ff06490000061001000602010006200100061401000611010006070202
-01010301010102020603010010350f000063010000630100006301000063010000220100
-061301000600040e06000000062301000603020201010303010102020608000006ff0647
-000006110100060201000602010206020100060001010603010206030102060501000613
-01000611010006080202010103010101020206030100100108320f010063010000630100
-00630100006301000022010006140100040e000006240100060302020101030301010202
-0607000006ff064900000610010006050100060201000601010106010100060101000602
-010006010100060201000604010006140100061101000607020201010301010102020603
-0100100108320f010063010000630100006301000063010000220100061301000600040e
-06000000062301000603020201010303010102020608000006ff06470000061101000609
-010006010100060201000601010006050100060201000604010006130100061101000608
-020201010301010102020603010010010815010408170f01006301000063010000630100
-006301000022010006140100040e00000624010006030202010103030101020206070000
-06ff06490000061001000606010306010100060201000601010006050104060401000614
-010006110100060702020101030101010202060301001001081501000802010008170f01
-000a0100001a01010004010000340100002c010000350100006301000063010000220100
-061301000600040e06000000062301000603020201010303010102020608000006ff0647
-000006110100060201000601010006020100060101000602010006010100060501000608
-010006130100061101000608020201010301010102020603010010010818010008180f01
-00250100003c0100002c01000035010000630100006301000022010006140100040e0000
-062401000603020201010303010102020607000006ff0649000006100100060201000601
-010006020100060101000602010006010100060201000601010006020100060401000614
-0100061101000607020201010301010102020603010010010818010008180f0100080102
-000301020003010200030102000401000004010200020100000001010003010200260100
-000701000002010000020102000301020003010200030102000201040002010200020100
-0000010100260100006301000063010000220100061301000600040e0600000006230100
-0603020201010303010102020608000006ff064700000612010206030103060101000602
-010006020102060301020605010006130100061101000608020201010301010102020603
-010010010818010008180f01000a01000002010000020100000101000002010000010100
-000201000001010400040100000201010001010000010100000201000025010000070100
-000201000001010000020100000101000002010000010100000201000001010000020100
-000301000003010000020100000101010001010000250100006301000063010000220100
-06140100040e0000062401000603020201010303010102020607000006ff06490000064c
-0100061101000607020201010301010102020603010010010818010008180f01000a0100
-000201000002010000010100000501000002010000030100000601000002010000020100
-000101000002010000250100000701000002010000050100000101000009010000010100
-000701000007010000010100000201000025010000630100006301000022010006130100
-0600040e06000000062301000603020201010303010102020608000006ff06470000064c
-0100061101000608020201010301010102020603010010010817010008190f01000a0100
-000201000002010000020102000201040003010000060100000201000002010000010104
-002501000008010000000100000301030002010200030103000201020004010000040103
-00010100000201000025010000630100006301000022010006140100040e000006240100
-0603020201010303010102020607000006ff06490000064c010006110100060702020101
-0301010102020603010010010817010008190f01000a0100000201000002010000050100
-000101000007010000060100000201000002010000010100002901000008010000000100
-000201000002010000050100000101000002010000050100000301000003010000020100
-000101000002010000250100006301000063010000220100061301000600040e06000000
-062301000603020201010303010102020608000006ff06470000064c0100061101000608
-020201010301010102020603010010010817010008190f01000a01000002010000020100
-000101000002010000010100000201000003010000060100000201000002010000010100
-000201000025010000090100000301000002010000010100000201000001010000020100
-000101000002010000030100000301000002010000010100000201000025010000630100
-006301000022010006140100040e00000624010006030202010103030101020206070000
-06ff06490000064c01000611010006070202010103010101020206030100100108320f01
-000a01000003010200030102000301020004010000060100000201000002010000020102
-002601000009010000040103000201020003010300020102000501010002010300010100
-0002010000250100006301000063010000220100061301000600040e0600000006230100
-0603020201010303010102020608000006ff06470000064c010006110100060802020101
-03010101020206030100100108320f01000a010000570100006301000063010000630100
-0022010006140100040e0000062401000603020201010303010102020607000006ff0649
-0000064c01000611010006070202010103010101020206030100100108320f0100070100
-000101000057010000630100006301000063010000220100061301000600040e06000000
-062301000603020201010303010102020608000006ff06470000064c0100061101000608
-0202010103010101020206030100100108320f0100080101005801000063010000630100
-006301000022010006140100040e00000624010006030202010103030101020206070000
-062200000663010006c00000064c01000611010006070202010103010101020206030100
-100108320f010063010000630100006301000063010000220100061301000600040e0600
-00000623010006030202010103030101020206080000062000000600000006230100063c
-010006000100063e0102064b0100062f0000064c01000611010006080202010103010101
-020206030100100108320f01006301000063010000630100006301000022010006140100
-040e00000624010006030202010103030101020206070000062000000600000006000000
-06220100063b01000600010006000100063f0100067d0000060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-061101000607020201010301010102020603010010010f34006301000063010000630100
-0063010000220100061301000600040e0600000006230100060302020101030301010202
-06080000061e00000602000006000000060b010206030102060901040602010206020100
-0600010106020101060001000624010006000a01010006000100060b0102060301020609
-010006000101060301020603010106000100060101000602010006040100060301020602
-010006000101060a01020602010006020100060101000600010106020100060001010603
-010206030102060301020603010206030102060201000600010106210000060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100061101000608020201010301010102020603010010000f3501ff01b70614
-0100040e00000624010006030202010103030101020206070000061e0000060400000600
-000006090100060201000601010006020100060a01000603010006020100060101010601
-01000601010006000100060001000622010006000a030100060001000609010006020100
-060101000602010006080101060101000601010006020100060101000601010106010100
-060201000604010006020100060201000601010106010100060801000602010006010100
-060201000601010106010100060101010601010006010100060201000601010006020100
-060101000602010006040100060201000602010006010101060101000682010006070202
-0101030101010202060301000e3600630100006301000063010000630100002201000613
-01000600040e060000000623010006030202010103030101020206080000061c00000606
-000006000000060c010006010100060e0100060301000602010006010100060501000600
-0100060001000621010006000a05010006000100060c010006010100060c010006050100
-0602010006010100060201000601010006020100060401000606010006010100060c0100
-060201000602010006000100060201000602010006010100060501000602010006010100
-060501000608010006020100060201000601010006020100068101000608020201010301
-01010202060301000e350b00006301000063010000630100006301000022010006140100
-040e00000624010006030202010103030101020206070000061c01000608010006000100
-0608010306020102060b0100060301040601010006050100060001000600010006200000
-06000a070000060000000608010306020102060901000605010406010100060201000601
-010006020100060401000603010306010100060c01040603010006030100060201000601
-010006050104060201020603010206050100060201000602010006010100060201000682
-0100060702020101030101010202060301000e0109320b01006301000063010000630100
-0063010000220100061301000600040e0600000006230100060302020101030301010202
-06080000061c01000606010006000100060801000602010006050100060a010006030100
-060501000605010006000100060001000621000006000a05000006000000060801000602
-010006050100060801000605010006050100060201000601010006020100060401000602
-01000602010006010100060c010006060100060001000602010006020100060101000605
-010006090100060501000604010006020100060201000601010006020100068101000608
-02020101030101010202060301000e0109320b0100630100006301000063010000630100
-0022010006140100040e00000624010006030202010103030101020206070000061e0100
-060401000600010006090100060201000601010006020100060a01000603010006020100
-060101000605010006000100060001000622000006000a03000006000000060901000602
-010006010100060201000608010006050100060201000601010006010101060101000601
-010106040100060201000602010006010100060c01000602010006010100060201000601
-010106010100060101000605010006020100060101000602010006010100060201000604
-010006020100060201000601010006020100068201000607020201010301010102020603
-01000e010916010209180b01006301000063010000630100006301000022010006130100
-0600040e060000000623010006030202010103030101020206080000061e010006020100
-06000100060b010306020102060c01010602010206020100060501000600010006000100
-0623000006000a01000006000000060b0103060201020609010006060102060301010600
-01000602010106000100060401000603010306010100060d010206020100060201000601
-010006000101060201000606010206030102060301020605010006030102060201000602
-010006810100060802020101030101010202060301000e01091501000902010009170b01
-000701000016010000420100000701000006010200100100000c01000030010000630100
-006301000022010006140100040e00000624010006030202010103030101020206070000
-062001000600010006000100065f00000600000006000000063201000632010006b70100
-060702020101030101010202060301000e01091501000902010009170b0100070100005a
-0100000701000008010000100100000c0100003001000063010000630100002201000613
-01000600040e060000000623010006030202010103030101020206080000062001000600
-01000661000006000000062f0100060201000632010006b6010006080202010103010101
-0202060301000e01091501000902010009170b0100070100000101000003010200020100
-00000101000301020002010000000101003b010000070100000001010005010000030102
-000301020002010000010100000301020002010000000101000301020002010000000101
-00030101000001000017010000630100006301000022010006140100040e000006240100
-060302020101030301010202060700000622010006630000063101020633010006b70100
-060702020101030101010202060301000e010916010209180b0100070100000001000003
-0100000201000001010100010100000401000002010100010100003a0100000701010001
-010000040100000201000002010000010100000201000001010000000100000301000002
-010000010101000101000001010000020100000101010001010000010100000101010017
-0100006301000063010000220100061301000600040e0600000006230100060302020101
-0303010102020608000006ff06a80100060802020101030101010202060301000e010915
-01000902010009170b01000701010008010000010100000801000002010000020100003a
-010000070100000201000004010000060100000101000005010100040100000201000001
-010000020100000101000002010000010100000501000002010000170100006301000063
-01000022010006140100040e0000062401000603020201010303010102020607000006ff
-06aa0100060702020101030101010202060301000e01091501000902010009170b010007
-01010005010300010100000801000002010000020100003a010000070100000201000004
-010000030103000101000005010100040104000101000002010000010104000101000005
-01000002010000170100006301000063010000220100061301000600040e060000000623
-01000603020201010303010102020608000006ff06a80100060802020101030101010202
-060301000e01091501000902010009170b01000701000000010000030100000201000001
-0100000801000002010000020100003a0100000701000002010000040100000201000002
-010000010100000501000000010000030100000501000002010000010100000501000005
-0100000201000017010000630100006301000022010006140100040e0000062401000603
-020201010303010102020607000006ff06aa010006070202010103010101020206030100
-0e010916010209180b010007010000010100000201000002010000010100000801000002
-010000020100003a01000007010100010100000401000002010000020100000101000002
-010000010100000101000002010000020100000101010001010000010100000201000001
-0100000501000001010100170100006301000063010000220100061301000600040e0600
-0000062301000603020201010303010102020608000006ff06a801000608020201010301
-01010202060301000e0109320b0100070100000201000002010300010100000801000002
-010000020100003a01000007010000000101000501000003010300020102000201000002
-010000020102000201000000010100030102000201000006010100000100001701000063
-0100006301000022010006140100040e0000062401000603020201010303010102020607
-000006ff06aa0100060702020101030101010202060301000e0109320b0100630100004a
-010000170100006301000063010000220100061301000600040e06000000062301000603
-020201010303010102020608000006ff06a8010006080202010103010101020206030100
-0e0109320b01006301000046010000020100001701000063010000630100002201000614
-0100040e0000062401000603020201010303010102020607000006ff06aa010006070202
-0101030101010202060301000e0109320b01006301000047010200180100006301000063
-010000220100061301000600040e06000000062301000603020201010303010102020608
-000006ff06a80100060802020101030101010202060301000e0109320b01006301000063
-010000630100006301000022010006140100040e00000624010006030202010103030101
-02020607000006ff06aa0100060702020101030101010202060301000e0109320b010063
-010000630100006301000063010000220100061301000600040e06000000062301000603
-020201010303010102020608000006ff06a8010006080202010103010101020206030100
-0e010b34006301000063010000630100006301000022010006140100040e000006240100
-060302020101030301010202060700000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-0600010006000100060702020101030101010202060301000e000b3501ff01b706130100
-0600040e0600000006230100060302020101030301010202060801000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-06000100060001000600010006000100060802020101030101010202060301000c360063
-01000063010000630100006301000022010006140100040e000006240100060302020101
-03030101020206ff06bc02020101030101010202060301000c3501000063010000630100
-006301000063010000220100061301000600040e06000000062301000603020201010303
-0101020206ff06bc02020101030101010202060301000c01013400630100006301000063
-0100006301000022010006140100040e00000624010006030202010103030101020206ff
-06bc02020101030101010202060301000c01013400630100006301000063010000630100
-00220100061301000600040e060000000623010006030202010103030101020206ff06bc
-02020101030101010202060301000c0101160002011a0063010000630100006301000063
-01000022010006140100040e00000624010006030202010103030101020206ff06bc0202
-0101030101010202060301000c010115000001020000011900070100000e010000140100
-00340100002b010200340100006301000063010000220100061301000600040e06000000
-0623010006030202010103030101020206ff06bc02020101030101010202060301000c01
-0115000001020000011900070100000e0100004a0100002d010000340100006301000063
-01000022010006140100040e00000624010006030202010103030101020206ff06bc0202
-0101030101010202060301000c0101150000010200000119000701000001010000030102
-000201040002010200020100000001010003010200020100000001010003010200260100
-000701000002010000010100000001010002010000000101000301020003010200050100
-00030102002d0100006301000063010000220100061301000600040e0600000006230100
-06030202010103030101020206ff06bc02020101030101010202060301000c0101150000
-010200000119000701000000010000030100000201000003010000030100000201000001
-010100010100000401000002010100010100000101000002010000250100000701000002
-010000010101000101000001010100010100000101000002010000010100000201000004
-01000002010000020100002c010000630100006301000022010006140100040e00000624
-010006030202010103030101020206ff06bc02020101030101010202060301000c010116
-000301190007010100080100000301000007010000010100000801000002010000020100
-000501000025010000070100000201000001010000020100000101000002010000010100
-000901000004010000060100002c0100006301000063010000220100061301000600040e
-060000000623010006030202010103030101020206ff06bc020201010301010102020603
-01000c010119000001190007010100050103000301000004010300010100000801000002
-010000020100000201030025010000070100000201000001010000020100000101000002
-010000020102000301030004010000030103002c01000063010000630100002201000614
-0100040e00000624010006030202010103030101020206ff06a101000600010006000100
-060001000600010006000100060001000600010006000100060902020101030101010202
-060301000c0101180000011a000701000000010000030100000201000003010000030100
-000201000001010000080100000201000002010000010100000201000025010000070100
-000201000001010000020100000101000002010000050100000101000002010000040100
-0002010000020100002c0100006301000063010000220100061301000600040e06000000
-0623010006030202010103030101020206ff06a001000600010006000100060001000600
-010006000100060001000600010006000100060000000608020201010301010102020603
-01000c0101150002011b0007010000010100000201000002010000030100000301000002
-010000010100000801000002010000020100000101000002010000250100000701000001
-010100010101000101000001010100010100000101000002010000010100000201000004
-01000002010000020100002c010000630100006301000022010006140100040e00000624
-010006030202010103030101020206070dff0d9606020100060601000606000006090202
-0101030101010202060301000c0101340007010000020100000201030004010100020103
-000101000008010000020100000201000002010300250100000801010000010000010100
-00000101000201000000010100030102000301030004010000030103002c010000630100
-0063010000220100061301000600040e0600000006230100060302020101030301010202
-06070dff0d95000006010100060600000608000006080202010103010101020206030100
-0c01013400630100000e010000050100004c010000630100006301000022010006140100
-040e00000624010006030202010103030101020206070d0100ff00940602010006060100
-06060000060902020101030101010202060301000c01013400630100000e010000050100
-004c0100006301000063010000220100061301000600040e060000000623010006030202
-010103030101020206070d0100580101006a010100cc0601010006060000060001000606
-0000060802020101030101010202060301000c01013400630100000e010000050100004c
-010000630100006301000022010006140100040e00000624010006030202010103030101
-020206070d0100570100006e010000cb0602010006040000060201000604000006090202
-0101030101010202060301000c0101340063010000630100006301000063010000220100
-061301000600040e060000000623010006030202010103030101020206070d01000f0103
-00180102002701000020010200050100002e01000013010000cb06010100060400000602
-010006060000060802020101030101010202060301000c01013400630100006301000063
-0100006301000022010006140100040e0000062401000603020201010303010102020607
-0d01000f01000002010000160100000201000026010000220100003501000013010000cb
-06020100060400000602010006040000060902020101030101010202060301000c010134
-0063010000630100006301000063010000220100061301000600040e0600000006230100
-06030202010103030101020206070d01000f010000020100000201020002010000020100
-000c01000003010100200100000401020002010000000101000201000000010100030102
-000501000003010200090100000201000002010200030102000301020003010200020104
-0002010200020100000001010004010000cb060101000604000006040100060400000608
-02020101030101010202060301000c0001ff01ed06140100040e00000624010006030202
-010103030101020206070d01000f01000002010000010100000201000001010000020100
-000c01000003010100200100000301000002010000010101000101000001010100010100
-000101000002010000040100000501000009010000020100000101000002010000010100
-000201000001010000020100000101000002010000030100000301000002010000010101
-000101000003010000cb0602010006020000060601000602000006090202010103010101
-0202060301000e360063010000630100006301000063010000220100061301000600040e
-060000000623010006030202010103030101020206070d01000f01030002010000020100
-000101000000010000000100000b01000025010100080100000101000002010000010100
-000201000001010000020100000401000005010000090100000201000005010000010100
-0009010000010100000701000007010000010100000201000004010100c9060101000602
-00000606010006040000060802020101030101010202060301000e350b00006301000063
-010000630100006301000022010006140100040e00000624010006030202010103030101
-020206070d01000f0100000101000002010000020100000101000000010000000100000a
-010000280100000401030001010000020100000101000002010000010104000401000005
-0100000a0100000001000003010300020102000301030002010200040100000401030001
-0100000201000003010000cb060201000602000006060100060200000609020201010301
-01010202060301000e0109320b0100630100006301000063010000630100002201000613
-01000600040e060000000623010006030202010103030101020206070d01000f01000002
-010000010100000201000001010000000100000001000009010000290100000301000002
-010000010100000201000001010000020100000101000008010000050100000a01000000
-010000020100000201000005010000010100000201000005010000030100000301000002
-010000010100000201000003010000cb0601010006020000060801000602000006080202
-0101030101010202060301000e0109320b01006301000063010000630100006301000022
-010006140100040e00000624010006030202010103030101020206070d01000f01000002
-010000010100000201000001010000000100000001000008010000070101002001000003
-010000020100000101000002010000010100000201000001010000020100000401000005
-010000040101000401000003010000020100000101000002010000010100000201000001
-01000002010000030100000301000002010000010100000201000003010000cb06020100
-06000000060a010006000000060902020101030101010202060301000e01091301000904
-010209150b010063010000630100006301000063010000220100061301000600040e0600
-00000623010006030202010103030101020206070d01000f010000020100000201020003
-010000000100000901040003010100200100000401030001010000020100000101000002
-010000020102000501000005010000040101000401000004010300020102000301030002
-0102000501010002010300010100000201000003010000cb060101000600000006000100
-060001000600010006000100060001000600010006020000060802020101030101010202
-060301000e0109110102090301000902010009140b010063010000320102002d01000063
-0100006301000022010006140100040e0000062401000603020201010303010102020607
-0d010057010000300100003c010000cb0602010006000100060001000600010006000100
-06000100060001000600010006000000060902020101030101010202060301000e010913
-0100090301000902010009140b010063010000340100002d010000630100006301000022
-0100061301000600040e060000000623010006030202010103030101020206070d010058
-0101002c0101003b010100cc060101000610000006080202010103010101020206030100
-0e0109130100090301000902010009140b01000701010000010000030102000301010000
-010000010100000001010002010000020100000201020034010000070100000001010003
-010200020100000001010002010000000101000201010000010000030102000501000002
-0101000001000026010000630100006301000022010006140100040e0000062401000603
-0202010103030101020206070d0100ff0094060201000600000006000000060000000600
-000006000000060000000600000006000000060902020101030101010202060301000e01
-09130100090301000902010009140b010007010000000100000001000001010000020100
-000101000001010100010101000101000001010000020100000101000002010000330100
-000701010001010000010100000201000001010100010100000101010001010000010100
-000001000000010000010100000201000004010000020100000001000000010000250100
-006301000063010000220100061301000600000006000000060000000600000006000000
-060000000600000006000000060000000623010006030202010103030101020206070d01
-00ff00940601010006000000060000000600000006000000060000000600000006000000
-0600010006000000060802020101030101010202060301000e0109130100090301000902
-010009140b01000701000000010000000100000501000001010000020100000101000002
-010000010100000201000001010000370100000701000002010000010100000201000001
-010000050100000501000000010000000100000501000004010000020100000001000000
-010000250100006301000063010000220100061401000600000006000000060000000600
-000006000000060000000600000006000000062401000603020201010303010102020607
-0d0100ff00940602010006000000060a0100060000000609020201010301010102020603
-01000e0109130100090301000902010009140b0100070100000001000000010000020103
-000101000002010000010100000201000001010000020100000201020034010000070100
-000201000001010000020100000101000005010000050100000001000000010000020103
-000401000002010000000100000001000025010000630100006301000022010006130100
-06000000060c0100060000000623010006030202010103030101020206070d0100ff0094
-0601010006000000060c010006000000060802020101030101010202060301000e010913
-0100090301000902010009140b0100070100000001000000010000010100000201000001
-010000020100000101000002010000010100000201000005010000330100000701000002
-010000010100000201000001010000050100000501000000010000000100000101000002
-010000040100000201000000010000000100002501000063010000630100002201000614
-010006000000060a0100060000000624010006030202010103030101020206070d010058
-01010063010100d30602010006000000060a010006000000060902020101030101010202
-060301000e01091101040902010209150b01000701000000010000000100000101000002
-010000010100000101010001010000020100000101000001010100010100000201000033
-010000070100000201000001010000020100000101000005010000050100000001000000
-010000010100000201000004010000020100000001000000010000250100006301000063
-0100002201000613010006000000060c0100060000000623010006030202010103030101
-020206070d01005701000067010000d20601010006000000060c01000600000006080202
-0101030101010202060301000e0109320b01000701000000010000000100000201030002
-010100000100000101000002010000020101000001000002010200340100000701000002
-010000020102000201000005010000050100000001000000010000020103000401000002
-01000000010000000100002501000063010000630100002201000614010006000000060a
-0100060000000624010006030202010103030101020206070d01000f0103001801020027
-0100000d010000130100002e01000013010000d20602010006000000060a010006000000
-060902020101030101010202060301000e0109320b010019010000480100006301000063
-010000630100002201000613010006000000060c01000600000006230100060302020101
-03030101020206070d01000f010000020100001601000002010000260100005201000013
-010000d20601010006000000060c01000600000006080202010103010101020206030100
-0e0109320b01001501000002010000480100006301000063010000630100002201000614
-010006000000060a0100060000000624010006030202010103030101020206070d01000f
-010000020100000201020002010000020100000c01000003010100200100000401020003
-010200030102000301020003010200090100000201000002010200030102000301020003
-0102000201040002010200020100000001010004010000d20602010006000000060a0100
-06000000060902020101030101010202060301000e0109320b0100160102004901000063
-01000063010000630100002201000613010006000000060c010006000000062301000603
-0202010103030101020206070d01000f0100000201000001010000020100000101000002
-0100000c0100000301010020010000030100000201000004010000020100000201000001
-010000020100000401000009010000020100000101000002010000010100000201000001
-010000020100000101000002010000030100000301000002010000010101000101000003
-010000d20601010006000000060c01000600000006080202010103010101020206030100
-0e0109320b0100630100006301000063010000630100002201000614010006000000060a
-0100060000000624010006030202010103030101020206070d01000f0103000201000002
-0100000101000000010000000100000a0101002501010004010000080100000201000005
-010000080100000901000002010000050100000101000009010000010100000701000007
-010000010100000201000004010100d00602010006000000060a01000600000006090202
-0101030101010202060301000e0109320b01006301000063010000630100006301000022
-01000613010006000000060c010006000000062301000603020201010303010102020607
-0d01000f0100000101000002010000020100000101000000010000000100000c01000026
-01000003010000080100000201000005010000080100000a010000000100000301030002
-01020003010300020102000401000004010300010100000201000003010000d206010100
-06000000060c010006000000060802020101030101010202060301000e010b3400630100
-006301000063010000630100002201000614010006000000060a01000600000006240100
-06030202010103030101020206070d01000f010000020100000101000002010000010100
-0000010000000100000c0100002601000003010000080100000201000005010000080100
-000a01000000010000020100000201000005010000010100000201000005010000030100
-000301000002010000010100000201000003010000d20602010006000000060a01000600
-0000060902020101030101010202060301000e000b3501ff01b7060c0104060101000600
-0000060c0100060000000623010006030202010103030101020206070d01000f01000002
-010000010100000201000001010000000100000001000008010000020100000301010020
-010000030100000201000004010000020100000201000001010000020100000401000004
-010100040100000301000002010000010100000201000001010000020100000101000002
-010000030100000301000002010000010100000201000003010000d20601010006000000
-060c010006000000060802020101030101010202060301000e3600630100006301000063
-01000063010000220100060c0100060201000602010006000000060a0100060000000624
-010006030202010103030101020206070d01000f01000002010000020102000301000000
-0100000a0102000401010020010000040102000501000003010200030102000501000004
-010100040100000401030002010200030103000201020005010100020103000101000002
-01000003010000d20602010006000000060a010006000000060902020101030101010202
-060301000e350b0000630100006301000063010000630100002201000610010006010100
-060000000600010006000100060001000600010006000100060001000600010006000000
-0623010006030202010103030101020206070d010057010000290100003c010000d20601
-010006000000060c010006000000060802020101030101010202060301000e0109320b01
-0063010000630100006301000063010000220100060f0100060301000600000006000000
-060000000600000006000000060000000600000006000000062401000603020201010303
-0101020206070d010058010100250101003b010100d30602010006000000060a01000600
-0000060902020101030101010202060301000e0109320b01006301000063010000630100
-0063010000220100060f01000602010006000000060c0100060000000623010006030202
-010103030101020206070d0100ff00940601010006000000060c01000600000006080202
-0101030101010202060301000e01091301000905010009160b0100630100006301000063
-01000063010000220100060f01000603010006000000060a010006000000062401000603
-0202010103030101020206070d0100ff00940602010006000000060a0100060000000609
-02020101030101010202060301000e01091101020903010209160b010016010200050100
-00420100002b010200340100006301000063010000220100060e01000603010006000000
-060c0100060000000623010006030202010103030101020206070d0100ff009406010100
-06000000060c010006000000060802020101030101010202060301000e01091301000905
-010009160b010018010000490100002d010000340100006301000063010000220100060e
-01000604010006000000060a010006000000062401000603020201010303010102020607
-0d0100ff00940602010006000000060a0100060000000609020201010301010102020603
-01000e01091301000905010009160b010007010100000100000301020005010000030102
-0002010000000101003b0100000701000002010000010100000001010002010000000101
-00030102000301020005010000030102002d0100006301000063010000220100060e0100
-0603010006000000060c0100060000000623010006030202010103030101020206070d01
-005801010055010100e10601010006000000060c01000600000006080202010103010101
-0202060301000e01091301000905010009160b0100070100000001000000010000010100
-0002010000040100000501000002010100010100003a0100000701000002010000010101
-000101000001010100010100000101000002010000010100000201000004010000020100
-00020100002c01000063010000630100002201000614010006000000060a010006000000
-0624010006030202010103030101020206070d01005701000059010000e0060201000600
-0000060a010006000000060902020101030101010202060301000e010913010009050100
-09160b010007010000000100000001000005010000040100000501000002010000020100
-003a01000007010000020100000101000002010000010100000201000001010000090100
-0004010000060100002c01000063010000630100002201000613010006000000060c0100
-060000000623010006030202010103030101020206070d01000f0103001b010000260100
-004401000013010000e00601010006000000060c01000600000006080202010103010101
-0202060301000e01091301000905010009160b0100070100000001000000010000020103
-00040100000501000002010000020100003a010000070100000201000001010000020100
-000101000002010000020102000301030004010000030103002c01000063010000630100
-002201000614010006000000060a01000600000006240100060302020101030301010202
-06070d01000f0100000201000019010100260100004401000013010000e0060201000600
-0000060a010006000000060902020101030101010202060301000e010913010009050100
-09160b010007010000000100000001000001010000020100000401000005010000020100
-00020100003a010000070100000201000001010000020100000101000002010000050100
-0001010000020100000401000002010000020100002c0100006301000063010000220100
-0613010006000000060c0100060000000623010006030202010103030101020206070d01
-000f010000020100000201020002010000020100000a0100000001000003010100200100
-000401020002010000020100000201020009010000020100000201020003010200030102
-00030102000201040002010200020100000001010004010000e00601010006000000060c
-010006000000060802020101030101010202060301000e01091101040901010409140b01
-000701000000010000000100000101000002010000040100000501000002010000020100
-003a01000007010000010101000101010001010000010101000101000001010000020100
-0001010000020100000401000002010000020100002c0100006301000063010000220100
-0614010006000000060a0100060000000624010006030202010103030101020206070d01
-000f01000002010000010100000201000001010000020100000901000001010000030101
-002001000003010000020100000101000002010000010100000201000008010000020100
-000101000002010000010100000201000001010000020100000101000002010000030100
-000301000002010000010101000101000003010000e00602010006000000060a01000600
-0000060902020101030101010202060301000e0109320b01000701000000010000000100
-0002010300040100000501000002010000020100003a0100000801010000010000010100
-00000101000201000000010100030102000301030004010000030103002c010000630100
-00630100002201000613010006000000060c010006000000062301000603020201010303
-0101020206070d01000f0103000201000002010000010100000001000000010000080100
-000201000024010100040100000201000001010000020100000501000008010000020100
-000501000001010000090100000101000007010000070100000101000002010000040101
-00de0601010006000000060c010006000000060802020101030101010202060301000e01
-09320b0100630100000e010000050100004c010000630100006301000022010006140100
-06000000060a0100060000000624010006030202010103030101020206070d01000f0100
-000101000002010000020100000101000000010000000100000801000002010000260100
-000301040002010000000100000301030009010000000100000301030002010200030103
-00020102000401000004010300010100000201000003010000e00602010006000000060a
-010006000000060902020101030101010202060301000e0109320b0100630100000e0100
-00050100004c010000630100006301000022010006130100060000000600010006000100
-060001000600010006000100060001000600010006000000062301000603020201010303
-0101020206070d01000f0100000201000001010000020100000101000000010000000100
-000801050025010000030100000601000000010000020100000201000009010000000100
-000201000002010000050100000101000002010000050100000301000003010000020100
-00010100000201000003010000e00601010006000000060c010006000000060802020101
-030101010202060301000e0109320b0100630100000e010000050100004c010000630100
-006301000022010006140100060001000600010006000100060001000600010006000100
-06000100060000000624010006030202010103030101020206070d01000f010000020100
-0001010000020100000101000000010000000100000c0100000301010020010000030100
-000201000003010000030100000201000003010100040100000301000002010000010100
-000201000001010000020100000101000002010000030100000301000002010000010100
-000201000003010000e00602010006000000060a01000600000006090202010103010101
-0202060301000e0109320b01006301000063010000630100006301000022010006130100
-0600040e060000000623010006030202010103030101020206070d01000f010000020100
-000201020003010000000100000d01000003010100200100000401020004010000040103
-000301010004010000040103000201020003010300020102000501010002010300010100
-000201000003010000e00601010006000000060c01000600000006080202010103010101
-0202060301000e0109320b01006301000063010000630100006301000022010006140100
-040e00000624010006030202010103030101020206070d0100570100001b0100003c0100
-00e00602010006000000060a010006000000060902020101030101010202060301000e01
-0b340063010000630100006301000063010000220100061301000600040e060000000623
-010006030202010103030101020206070d010058010100170101003b010100e106010100
-06000000060c010006000000060802020101030101010202060301000e000b3501ff01b7
-06140100040e00000624010006030202010103030101020206070d0100ff009406020100
-06000000060a010006000000060902020101030101010202060301000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600006301000063
-0100006301000063010000220100061301000600040e0600000006230100060302020101
-03030101020206070d0100ff00940601010006000000060c010006000000060802020101
-030101010202060301000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000100006301000063010000630100006301000022010006140100
-040e00000624010006030202010103030101020206070d0100ff00940602010006000000
-060a01000600000006090202010103010101020206030100060000000632010006000063
-010000630100006301000063010000220100061301000600040e06000000062301000603
-0202010103030101020206070d0100000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000020601010006000000
-060c01000600000006080202010103010101020206030100000006340100006301000063
-010000630100006301000022010006140100040e00000624010006030202010103030101
-020206070d01045801010478010104bc00010602010006000000060a0100060000000609
-020201010301010102020603010006000000061301000604010206150100060000630100
-00630100006301000063010000220100061301000600040e060000000623010006030202
-010103030101020206070d01000004560100047c010004ba010000010601010006000000
-060c01000600000006080202010103010101020206030100000006120102060301000602
-010006150100001f01000042010000120100001701020034010000630100006301000022
-010006140100040e00000624010006030202010103030101020206070d01040f01030417
-01040426010004060100041a010104040100043c01000413010004bb0001060201000600
-0000060a0100060000000609020201010301010102020603010006000000061301000603
-010006020100061401000600006301000012010000190100003401000063010000630100
-00220100061301000600040e060000000623010006030202010103030101020206070d01
-0000040e01000402010004160100040201000426010004210100044401000413010004ba
-010000010601010006000000060c01000600000006080202010103010101020206030100
-000006140100060301000602010006150100000701010000010000030102000201000000
-01010003010200030102003b010000080102000301010000010000020102000201000000
-010100020100000001010005010000030102000201000000010100260100006301000063
-01000022010006140100040e00000624010006030202010103030101020206070d01040f
-010004020100040201020402010004020100040c01000403010104200100040401020403
-010204030102040301020404010004040102040201000400010104030102040901000402
-010004020102040301020403010204030102040201040402010204020100040001010404
-010004bb00010602010006000000060a0100060000000609020201010301010102020603
-010006000000061301000606010006150100060000070100000001000000010000010100
-000201000001010100010100000401000002010000020100003a01000007010000020100
-000101000001010100010100000201000001010100010100000101010001010000040100
-000201000002010000010101000101000025010000630100006301000022010006130100
-0600040e060000000623010006030202010103030101020206070d010000040e01000402
-010004010100040201000401010004020100040b01000404010104200100040601000402
-010004020100040101000402010004010100040201000401010404040100040201010401
-010004010100040201000408010004020100040101000402010004010100040201000401
-010004020100040101000402010004030100040301000402010004010101040101000403
-010004ba010000010601010006000000060c010006000000060802020101030101010202
-060301000000061401000605010006170100000701000000010000000100000501000001
-01000008010000060100003a010000070100000201000001010000020100000101000002
-010000010100000201000001010000020100000401000006010000010100000201000025
-010000630100006301000022010006140100040e00000624010006030202010103030101
-020206070d01040f01030402010004020100040101000400010004000100040b01000425
-010104070100040201000402010004010100040501000402010004030100040601000402
-010004020100040101000402010004080100040201000405010004010100040901000401
-0100040701000407010004010100040201000404010104b900010602010006000000060a
-010006000000060902020101030101010202060301000600000006130100060401000617
-0100060000070100000001000000010000020103000101000008010000030103003a0100
-000701000002010000010100000201000001010400010100000201000001010000020100
-000401000003010300010100000201000025010000630100006301000022010006130100
-0600040e060000000623010006030202010103030101020206070d010000040e01000401
-01000402010004020100040101000400010004000100040b010004270100040601000402
-010004020100040201020402010404030100040601000402010004020100040101040409
-010004000100040301030402010204030103040201020404010004040103040101000402
-01000403010004ba010000010601010006000000060c0100060000000608020201010301
-010102020603010000000614010006030100060201000615010000070100000001000000
-0100000101000002010000010100000801000002010000020100003a0100000701000002
-010000010100000201000001010000050100000201000001010000020100000401000002
-01000002010000010100000201000025010000630100006301000022010006140100040e
-00000624010006030202010103030101020206070d01040f010004020100040101000402
-0100040101000400010004000100040a0100042801000406010004020100040201000405
-0100040101000407010004060100040201000402010004010100040d0100040001000402
-010004020100040501000401010004020100040501000403010004030100040201000401
-0100040201000403010004bb00010602010006000000060a010006000000060902020101
-030101010202060301000600000006110104060101040614010006000007010000000100
-00000100000101000002010000010100000801000002010000020100003a010000070100
-000201000001010000010101000101000002010000010100000201000001010100010100
-000401000002010000020100000101000002010000250100006301000063010000220100
-061301000600040e060000000623010006030202010103030101020206070d010000040e
-0100040201000401010004020100040101000400010004000100040a0100040501010420
-010004060100040201000402010004010100040201000401010004020100040301000406
-010004020100040201000401010004020100040301010404010004030100040201000401
-010004020100040101000402010004010100040201000403010004030100040201000401
-0100040201000403010004ba010000010601010006000000060c01000600000006080202
-010103010101020206030100000006340100000701000000010000000100000201030001
-01000008010000030103003a010000080102000301010000010000020102000201000002
-010000010100000001010005010000030103000101000002010000250100006301000063
-01000022010006140100040e00000624010006030202010103030101020206070d01040f
-010004020100040201020403010004000100040b01000405010104200100040601000403
-010204030102040301020404010004060100040201000402010004020102040401010404
-010004040103040201020403010304020102040501010402010304010100040201000403
-010004bb00010602010006000000060a0100060000000609020201010301010102020603
-0100060000000632010006000063010000230100003e0100006301000063010000220100
-061301000600040e060000000623010006030202010103030101020206070d0100000456
-01000406010004360100043c010004ba010000010601010006000000060c010006000000
-060802020101030101010202060301000000063401000063010000230100003e01000063
-0100006301000022010006140100040e0000062401000603020201010303010102020607
-0d0104580101040101000401010004340101043b010104bc00010602010006000000060a
-010006000000060902020101030101010202060301000600000006320100060000630100
-00230100003e0100006301000063010000220100061301000600040e0600000006230100
-06030202010103030101020206070d010000045c010104ff043101000001060101000600
-0000060c0100060000000608020201010301010102020603010000000634010000630100
-0063010000630100006301000022010006140100040e0000062401000603020201010303
-0101020206070d0104ff049200010602010006000000060a010006000000060902020101
-030101010202060301000600000006320100060000630100006301000063010000630100
-00220100061301000600040e060000000623010006030202010103030101020206070d01
-000004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010000010601010006000000060c01000600000006080202
-010103010101020206030100000006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010000630100006301000063010000630100002201000614
-0100040e00000624010006030202010103030101020206070d0100ff0094060201000600
-0000060a0100060000000609020201010301010102020603010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-0100060001000600010006000100060001000600010006000100060001ff01b706130100
-0600040e060000000623010006030202010103030101020206070d010058010100710101
-00c50601010006000000060c010006000000060802020101030101010202060301000e36
-006301000063010000630100006301000022010006140100040e00000624010006030202
-010103030101020206070d01005701000075010000c40602010006000000060a01000600
-0000060902020101030101010202060301000e350b000063010000630100006301000063
-010000220100061301000600040e06000000062301000603020201010303010102020607
-0d01000f0103001901000004010200200100000d01000009010000170100002d01000013
-010000c40601010006000000060c01000600000006080202010103010101020206030100
-0e0109320b01006301000063010000630100006301000022010006140100040e00000624
-010006030202010103030101020206070d01000f01000002010000170101000301000002
-0100001f01000018010000170100002d01000013010000c40602010006000000060a0100
-06000000060902020101030101010202060301000e0109320b0100630100006301000063
-01000063010000220100061301000600040e060000000623010006030202010103030101
-020206070d01000f01000002010000020102000201000002010000080100000001000003
-010000020100000301010019010000030100000001010003010200030102000201000000
-010100030102000201000000010100030101000001000008010000020100000201020003
-01020003010200030102000201040002010200020100000001010004010000c406010100
-06000000060c010006000000060802020101030101010202060301000e01091301000904
-010209150b01006301000063010000630100006301000022010006140100040e00000624
-010006030202010103030101020206070d01000f01000002010000010100000201000001
-010000020100000a01000003010000020100000301010019010000030101000101000004
-010000020100000201000001010100010100000101000002010000010101000101000001
-010000010101000801000002010000010100000201000001010000020100000101000002
-0100000101000002010000030100000301000002010000010101000101000003010000c4
-0602010006000000060a010006000000060902020101030101010202060301000e010911
-0102090301000902010009140b0100170100004a01000007010000300102002601000063
-01000063010000220100061301000600040e060000000623010006030202010103030101
-020206070d01000f01030002010000020100000101000000010000000100000a01000004
-0102001e0101000401000008010000020100000501000002010000050100000101000005
-010000020100000801000002010000050100000101000009010000010100000701000007
-010000010100000201000004010100c20601010006000000060c01000600000006080202
-0101030101010202060301000e01091301000907010009140b0100170100004a01000007
-0100003201000026010000630100006301000022010006140100040e0000062401000603
-0202010103030101020206070d01000f0100000101000002010000020100000101000000
-010000000100000a01000003010000020100001f01000003010000080100000201000005
-010000020100000201030001010000050100000201000009010000000100000301030002
-01020003010300020102000401000004010300010100000201000003010000c406020100
-06000000060a010006000000060902020101030101010202060301000e01091301000907
-010009140b01000701010000010000030102000201040002010200420100000701000000
-010100020100000001010003010200020101000001000002010100000100000301020002
-010000000101000501000003010200020100000001010018010000630100006301000022
-0100061301000600040e060000000623010006030202010103030101020206070d01000f
-0100000201000001010000020100000101000000010000000100000a0100000301000002
-0100001f0100000301000008010000020100000501000002010000010100000201000001
-010000050100000201000009010000000100000201000002010000050100000101000002
-01000005010000030100000301000002010000010100000201000003010000c406010100
-06000000060c010006000000060802020101030101010202060301000e01091301000905
-010109150b01000701000000010000000100000101000002010000030100000301000002
-010000410100000701010001010000010101000101000001010000020100000101000000
-010000000100000101000000010000000100000101000002010000010101000101000004
-010000020100000201000001010100010100001701000063010000630100002201000614
-0100040e00000624010006030202010103030101020206070d01000f0100000201000001
-010000020100000101000000010000000100000a01000003010000020100000301010019
-010000030100000801000002010000020100000101000002010000010100000201000001
-010000050100000101010003010100040100000301000002010000010100000201000001
-010000020100000101000002010000030100000301000002010000010100000201000003
-010000c40602010006000000060a01000600000006090202010103010101020206030100
-0e01091301000907010009140b0100070100000001000000010000050100000301000003
-010000450100000701000002010000010100000501000002010000010100000001000000
-010000010100000001000000010000050100000101000002010000040100000601000001
-01000002010000170100006301000063010000220100061301000600040e060000000623
-010006030202010103030101020206070d01000f01000002010000020102000301000000
-010000090104000201020004010100190100000301000008010000030102000201000002
-010000020103000101000006010100000100000301010004010000040103000201020003
-010300020102000501010002010300010100000201000003010000c40601010006000000
-060c010006000000060802020101030101010202060301000e0109130100090701000914
-0b0100070100000001000000010000020103000301000004010200420100000701000002
-010000010100000501000002010000010100000001000000010000010100000001000000
-010000020103000101000002010000040100000301030001010000020100001701000063
-0100006301000022010006140100040e0000062401000603020201010303010102020607
-0d010057010000370100003c010000c40602010006000000060a01000600000006090202
-0101030101010202060301000e0109130100090301000902010009140b01000701000000
-010000000100000101000002010000030100000701000041010000070100000201000001
-010000050100000201000001010000000100000001000001010000000100000001000001
-010000020100000101000002010000040100000201000002010000010100000201000017
-0100006301000063010000220100061301000600040e0600000006230100060302020101
-03030101020206070d010058010100330101003b010100c50601010006000000060c0100
-06000000060802020101030101010202060301000e01091101040902010209150b010007
-010000000100000001000001010000020100000301000003010000020100004101000007
-010100010100000101000005010000020100000101000000010000000100000101000000
-010000000100000101000002010000010101000101000004010000020100000201000001
-0100000201000017010000630100006301000022010006140100040e0000062401000603
-0202010103030101020206070d0100ff00940602010006000000060a0100060000000609
-02020101030101010202060301000e0109320b0100070100000001000000010000020103
-000401010002010200420100000701000000010100020100000601020002010000000100
-000001000001010000000100000001000002010300010100000001010005010000030103
-000101000002010000170100006301000063010000220100061301000600040e06000000
-0623010006030202010103030101020206070d0100ff00940601010006000000060c0100
-06000000060802020101030101010202060301000e0109320b0100630100003101000030
-010000630100006301000022010006140100040e00000624010006030202010103030101
-020206070d0100ff00940602010006000000060a01000600000006090202010103010101
-0202060301000e0109320b01006301000031010000300100006301000063010000220100
-061301000600040e060000000623010006030202010103030101020206070d0100ff0094
-0601010006000000060c010006000000060802020101030101010202060301000e010932
-0b0100630100003101000030010000630100006301000022010006140100040e00000624
-010006030202010103030101020206070d01005801010071010100c50602010006000000
-060a010006000000060902020101030101010202060301000e0109320b01006301000063
-0100006301000063010000220100061301000600040e0600000006230100060302020101
-03030101020206070d01005701000075010000c40601010006000000060c010006000000
-060802020101030101010202060301000e0109320b010063010000630100006301000063
-01000022010006140100040e00000624010006030202010103030101020206070d01000f
-0103001801020004010100200100006001000013010000c40602010006000000060a0100
-06000000060902020101030101010202060301000e010b34006301000063010000630100
-0063010000220100061301000600040e0600000006230100060302020101030301010202
-06070d01000f01000002010000160100000201000002010000010100001f010000600100
-0013010000c40601010006000000060c0100060000000608020201010301010102020603
-01000e000b3501ff01b706140100040e0000062401000603020201010303010102020607
-0d01000f010000020100000201020002010000020100000c010000020100000101000003
-010100190100000401020002010000020100000201020003010200020100000001010002
-010000000101000301020009010000020100000201020003010200030102000301020002
-01040002010200020100000001010004010000c40602010006000000060a010006000000
-060902020101030101010202060301000e36006301000063010000630100006301000022
-0100061301000600040e060000000623010006030202010103030101020206070d01000f
-01000002010000010100000201000001010000020100000c010000020100000101000003
-010100190100000301000002010000010100000201000001010000020100000101000002
-010000010101000101000001010100010100000101000002010000080100000201000001
-010000020100000101000002010000010100000201000001010000020100000301000003
-01000002010000010101000101000003010000c40601010006000000060c010006000000
-060802020101030101010202060301000e350b0000630100006301000063010000630100
-0022010006140100040e00000624010006030202010103030101020206070d01000f0103
-0002010000020100000101000000010000000100000b01000003010000010100001d0101
-000401000005010000020100000101000009010000010100000201000001010000020100
-000101000002010000080100000201000005010000010100000901000001010000070100
-0007010000010100000201000004010100c20602010006000000060a0100060000000609
-02020101030101010202060301000e0109320b0100630100006301000063010000630100
-00220100061301000600040e060000000623010006030202010103030101020206070d01
-000f0100000101000002010000020100000101000000010000000100000a010000040100
-00010100001f010000040102000201000002010000020102000301030001010000020100
-000101000002010000010104000901000000010000030103000201020003010300020102
-000401000004010300010100000201000003010000c40601010006000000060c01000600
-0000060802020101030101010202060301000e0109320b01006301000063010000630100
-006301000022010006140100040e00000624010006030202010103030101020206070d01
-000f01000002010000010100000201000001010000000100000001000009010000050100
-00010100001f010000070100000101000002010000050100000101000002010000010100
-00020100000101000002010000010100000d010000000100000201000002010000050100
-000101000002010000050100000301000003010000020100000101000002010000030100
-00c40602010006000000060a010006000000060902020101030101010202060301000e01
-091301000906010009150b01006301000063010000630100006301000022010006130100
-0600040e060000000623010006030202010103030101020206070d01000f010000020100
-000101000002010000010100000001000000010000080100000601000001010000030101
-001901000003010000020100000101000001010100010100000201000001010000020100
-000101000002010000010100000201000001010000020100000301010004010000030100
-000201000001010000020100000101000002010000010100000201000003010000030100
-0002010000010100000201000003010000c40601010006000000060c0100060000000608
-02020101030101010202060301000e01091101020905010109150b010011010000500100
-001e0100001801000029010000630100006301000022010006140100040e000006240100
-06030202010103030101020206070d01000f010000020100000201020003010000000100
-000901040003010100040101001901000004010200030101000001000002010200030103
-000101000002010000010100000201000002010200040101000401000004010300020102
-0003010300020102000501010002010300010100000201000003010000c4060201000600
-0000060a010006000000060902020101030101010202060301000e010913010009040100
-0900010009150b0100630100001e01000018010000290100006301000063010000220100
-061301000600040e060000000623010006030202010103030101020206070d0100570100
-00370100003c010000c40601010006000000060c01000600000006080202010103010101
-0202060301000e0109130100090401000900010009150b01000701000000010100030102
-000201000000010100030102004201000008010100000100000101000002010000020102
-000201040002010200020100000201000002010200020100000001010003010200020100
-0000010100030101000001000010010000630100006301000022010006140100040e0000
-0624010006030202010103030101020206070d010058010100330101003b010100c50602
-010006000000060a010006000000060902020101030101010202060301000e0109130100
-090301000901010009150b01000701010001010000040100000201010001010000010100
-000201000041010000070100000101010001010000020100000101000002010000030100
-000301000002010000010100000201000001010000020100000101010001010000010100
-000201000001010100010100000101000001010100100100006301000063010000220100
-061301000600040e060000000623010006030202010103030101020206070d0100ff0094
-0601010006000000060c010006000000060802020101030101010202060301000e010913
-0100090201000902010009150b0100070100000201000004010000020100000201000005
-010000410100000701000002010000010100000201000001010000070100000701000001
-010000020100000101000005010000020100000101000002010000010100000501000002
-01000010010000630100006301000022010006140100040e000006240100060302020101
-03030101020206070d0100ff00940602010006000000060a010006000000060902020101
-030101010202060301000e01091301000902010509140b01000701000002010000040100
-000201000002010000020103004101000007010000020100000101000002010000020102
-000401000004010300020100000001000003010200020100000201000001010400010100
-000501000002010000100100006301000063010000220100061301000600040e06000000
-0623010006030202010103030101020206070d0100ff00940601010006000000060c0100
-06000000060802020101030101010202060301000e01091301000906010009150b010007
-010000020100000401000002010000020100000101000002010000410100000701000002
-010000010100000201000005010000030100000301000002010000020100000001000006
-010000010100000201000001010000050100000501000002010000100100006301000063
-01000022010006140100040e00000624010006030202010103030101020206070d0100ff
-00940602010006000000060a010006000000060902020101030101010202060301000e01
-091101040903010209140b01000701000002010000040100000201000002010000010100
-000201000041010000070100000101010001010000010101000101000002010000030100
-000301000002010000030100000301000002010000010101000101000001010000020100
-00010100000501000001010100100100006301000063010000220100061301000600040e
-060000000623010006030202010103030101020206070d0100ff00940601010006000000
-060c010006000000060802020101030101010202060301000e0109320b01000701000002
-010000040100000201000002010000020103004101000008010100000100000201010000
-010000020102000501010002010300030100000401020002010000000101000301020002
-010000060101000001000010010000630100006301000022010006140100040e00000624
-010006030202010103030101020206070d0100ff00940602010006000000060a01000600
-0000060902020101030101010202060301000e0109320b0100630100000b010000440100
-00100100006301000063010000220100061301000600040e060000000623010006030202
-010103030101020206070d0100ff00940601010006000000060c01000600000006080202
-0101030101010202060301000e0109320b01006301000007010000020100004001000002
-01000010010000630100006301000022010006140100040e000006240100060302020101
-03030101020206070d0100ff00940602010006000000060a010006000000060902020101
-030101010202060301000e0109320b010063010000080102004201020011010000630100
-0063010000220100061301000600040e0600000006230100060302020101030301010202
-06070d0100ff00940601010006000000060c010006000000060802020101030101010202
-060301000e0109320b01006301000063010000630100006301000022010006140100040e
-00000624010006030202010103030101020206070d0100ff00940602010006000000060a
-010006000000060902020101030101010202060301000e0109320b010063010000630100
-006301000063010000220100061301000600040e06000000062301000603020201010303
-0101020206070d0100ff00940601010006000000060c0100060000000608020201010301
-01010202060301000e010b34006301000063010000630100006301000022010006140100
-040e00000624010006030202010103030101020206070d0100ff00940602010006000000
-060a010006000000060902020101030101010202060301000e000b3501ff01b706130100
-0600040e060000000623010006030202010103030101020206070d0100ff009406010100
-06000000060c010006000000060802020101030101010202060301000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600006301000063
-010000630100006301000022010006140100040e00000624010006030202010103030101
-020206070d0100ff00940602010006000000060a01000600000006090202010103010101
-020206030100000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-06000000060001000063010000630100006301000063010000220100061301000600040e
-060000000623010006030202010103030101020206070d0100ff00940601010006000000
-060c01000600000006080202010103010101020206030100060000000632010006000063
-01000063010000630100006301000022010006140100040e000006240100060302020101
-03030101020206070d0100ff00940602010006000000060a010006000000060902020101
-030101010202060301000000063401000063010000630100006301000063010000220100
-061301000600040e060000000623010006030202010103030101020206070d0100ff0094
-0601010006000000060c0100060000000608020201010301010102020603010006000000
-061301000603010406140100060000630100006301000063010000630100002201000614
-0100040e00000624010006030202010103030101020206070d0100ff0094060201000600
-0000060a0100060000000609020201010301010102020603010000000612010206030100
-06190100000f010200030102004901000007010000230100000b010200030102001f0100
-006301000063010000220100061301000600040e06000000062301000603020201010303
-0101020206070d0100ff00940601010006000000060c0100060000000608020201010301
-010102020603010006000000061301000603010006180100060000110100000501000049
-01000007010000230100000d010000050100001f01000063010000630100002201000614
-0100040e00000624010006030202010103030101020206070d0100ff0094060201000600
-0000060a0100060000000609020201010301010102020603010000000614010006030100
-061901000008010200050100000501000003010200420100000701000000010100030102
-000201000000010100020100000001010003010200020104000101000002010000040100
-00050100001f0100006301000063010000220100061301000600040e0600000006230100
-06030202010103030101020206070d0100ff009406010100060000000600010006000100
-060001000600010006000100060001000600010006000000060802020101030101010202
-060301000600000006130100060301030615010006000007010000020100000401000005
-010000020100000201000041010000070101000101000001010000020100000101010001
-010000010101000101000001010000020100000301000003010000020100000401000005
-0100001f010000630100006301000022010006140100040e000006240100060302020101
-03030101020206070d0100ff009406020100060001000600010006000100060001000600
-010006000100060001000600000006090202010103010101020206030100000006140100
-060701000615010000070100000201000004010000050100000201000002010000410100
-000701000002010000010100000201000001010000050100000201000001010000070100
-00030100000201000004010000050100001f010000630100006301000022010006130100
-0600040e060000000623010006030202010103030101020206070d0100ff009406010100
-061000000608020201010301010102020603010006000000061301000607010006140100
-060000070100000201000004010000050100000201040041010000070100000201000001
-010000020100000101000005010000020100000201020004010000030100000201000004
-010000050100001f010000630100006301000022010006140100040e0000062401000603
-0202010103030101020206070d0100ff0094060201000600000006000000060000000600
-000006000000060000000600000006000000060902020101030101010202060301000000
-061401000602010006030100061501000007010000020100000401000005010000020100
-004501000007010000020100000101000002010000010100000501000002010000050100
-0003010000030100000201000004010000050100001f0100006301000063010000220100
-061301000600040e060000000623010006030202010103030101020206070d0100ff0094
-060101000602000006000000060000000600000006000000060000000600010006000000
-060802020101030101010202060301000600000006110104060101030615010006000007
-010000020100000401000005010000020100000201000041010000070100000201000001
-010000020100000101000005010000020100000101000002010000030100000301000001
-01010004010000050100001f010000630100006301000022010006140100040e00000624
-010006030202010103030101020206070d0100ff00940602010006000000060a01000600
-000006090202010103010101020206030100000006340100000801020005010000050100
-000301020042010000070100000201000002010200020100000501000002010000020102
-0005010100020101000001000004010000050100001f0100006301000063010000220100
-061301000600040e060000000623010006030202010103030101020206070d0100ff0094
-060101000602000006080100060200000608020201010301010102020603010006000000
-063201000600006301000063010000630100006301000022010006140100040e00000624
-010006030202010103030101020206070d0100ff00940602010006020000060601000602
-000006090202010103010101020206030100000006340100006301000063010000630100
-0063010000220100061301000600040e0600000006230100060302020101030301010202
-06070d0100ff009406010100060400000606010006020000060802020101030101010202
-060301000600000006320100060000630100006301000063010000630100002201000614
-0100040e00000624010006030202010103030101020206070d0100ff0094060201000602
-000006060100060200000609020201010301010102020603010000000634010000630100
-00630100006301000063010000220100061301000600040e060000000623010006030202
-010103030101020206070d0100ff00940601010006040000060401000604000006080202
-010103010101020206030100060000000632010006000063010000630100006301000063
-01000022010006140100040e00000624010006030202010103030101020206070d0100ff
-009406020100060400000602010006040000060902020101030101010202060301000000
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-0063010000630100006301000063010000220100061301000600040e0600000006230100
-06030202010103030101020206070d0100ff009406010100060600000602010006040000
-060802020101030101010202060301000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-06000100060001000600010006000100060001ff01b706140100040e0000062401000603
-0202010103030101020206070d0100ff0094060201000604000006020100060400000609
-02020101030101010202060301000e360063010000630100006301000063010000220100
-061301000600040e060000000623010006030202010103030101020206070d0100ff0094
-06010100060600000600010006060000060802020101030101010202060301000e350b00
-006301000063010000630100006301000022010006140100040e00000624010006030202
-010103030101020206070d0100ff00940602010006060100060600000609020201010301
-01010202060301000e0109320b0100630100006301000063010000630100002201000613
-01000600040e060000000623010006030202010103030101020206070d0100ff00940601
-01000608010006060000060802020101030101010202060301000e0109320b0100630100
-0063010000630100006301000022010006140100040e0000062401000603020201010303
-0101020206070d0000ff0095060201000606010006060000060902020101030101010202
-060301000e01091301000905010209140b01006301000063010000630100006301000022
-0100061301000600040e060000000623010006030202010103030101020206ff06a00100
-060000000600000006000000060000000600000006000000060000000600000006000000
-060802020101030101010202060301000e01091101020904010009170b0100170100000d
-010000020100003701000008010200050100000301020005010000090100000d01020026
-010000630100006301000022010006140100040e00000624010006030202010103030101
-020206ff06a1000006000000060000000600000006000000060000000600000006000000
-06000000060902020101030101010202060301000e01091301000903010009180b010017
-01000011010000370100000a0100000c010000100100000f010000260100006301000063
-010000220100061301000600040e06000000062301000603020201010303010102020606
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000618
-02020101030101010202060301000e01091301000903010009180b010007010000000101
-0003010200020104000101000000010100030102000201000001010000340100000a0100
-000301020005010000030102000301020002010000000101000301020005010000020101
-000001000003010200020100000001010011010000630100006301000022010006140100
-040e00000624010006030202010103030101020206050100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000000061702020101030101010202
-060301000e01091301000903010309150b01000701010001010000010100000201000003
-0100000301010001010000040100000201000000010000350100000a0100000501000005
-010000050100000201000002010000010101000101000001010000020100000401000002
-010000000100000001000001010000020100000101010001010000100100006301000063
-010000220100061301000600040e06000000062301000603020201010303010102020606
-010006100000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006020000060c0000061802020101030101010202060301000e010913010009030100
-0902010009140b0100070100000201000005010000030100000301000008010000020101
-00360100000a010000050100000501000005010000020100000201000001010000020100
-000101000002010000040100000201000000010000000100000101000002010000010100
-000201000010010000630100006301000022010006140100040e00000624010006030202
-010103030101020206050100060c00000600010006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-0600000006000000060000000600000006000000060001000600000006000000060c0000
-061702020101030101010202060301000e0109130100090301000902010009140b010007
-010000020100000201030003010000030100000801000002010100360100000a01000005
-010000050100000501000002010400010100000201000001010000020100000401000002
-010000000100000001000001010400010100000201000010010000630100006301000022
-0100061301000600040e060000000623010006030202010103030101020206060100060a
-0000060001000602000006ff067601000602000006000000060000000608000006180202
-0101030101010202060301000e0109130100090301000902010009140b01000701000002
-01000001010000020100000301000003010000080100000201000000010000350100000a
-010000050100000501000005010000020100000501000002010000010100000201000004
-010000020100000001000000010000010100000501000002010000100100006301000063
-01000022010006140100040e000006240100060302020101030301010202060501000608
-000006000000060201000600000006ff0678010006000000060200000600000006080000
-061702020101030101010202060301000e01091101040902010209150b01000701010001
-01000001010000020100000301000003010000080100000201000001010000340100000a
-010000050100000501000005010000020100000201000001010000020100000101000002
-010000040100000201000000010000000100000101000002010000010100000201000010
-0100006301000063010000220100061301000600040e0600000006230100060302020101
-030301010202060601000606000006000000060201000602000006ff0676010006020000
-060400000600000006040000061802020101030101010202060301000e0109320b010007
-01000000010100030103000401010001010000080100000201000002010000330100000a
-010000050100000501000005010000030102000201000002010000020102000501000002
-010000000100000001000002010200020100000201000010010000630100006301000022
-010006140100040e00000624010006030202010103030101020206050100060400000600
-0000060601000600000006ff067801000600000006060000060000000604000006170202
-0101030101010202060301000e0109320b0100070100005a0100001f0100004201000063
-01000063010000220100061301000600040e060000000623010006030202010103030101
-0202060601000602000006000000060601000602000006ff067601000602000006080000
-0600000006000000061802020101030101010202060301000e0109320b0100070100005a
-0100001c0100000101000042010000630100006301000022010006140100040e00000624
-0100060302020101030301010202060501000600010006000100060a01000600000006ff
-0678010006000000060a0100060001000600000006170202010103010101020206030100
-0e0109320b0100070100005a0100001d0101004301000063010000630100002201000613
-01000600040e060000000623010006030202010103030101020206060100060201000600
-0100060601000602000006ff067601000602000006080100060001000600000006180202
-0101030101010202060301000e0109320b01006301000063010000630100006301000022
-010006140100040e00000624010006030202010103030101020206050100060401000600
-0100060601000600000006ff067801000600000006060100060001000604000006170202
-0101030101010202060301000e0109320b01006301000063010000630100006301000022
-0100061301000600040e0600000006230100060302020101030301010202060601000606
-010006000100060201000602000006ff0676010006020000060401000600010006040000
-061802020101030101010202060301000e010b3400630100006301000063010000630100
-0022010006140100040e0000062401000603020201010303010102020605010006080100
-06000100060201000600000006ff06780100060000000602010006000100060800000617
-02020101030101010202060301000e000b3501ff01b7061301000600040e060000000623
-010006030202010103030101020206060100060a0100060001000602000006ff06760100
-060200000600010006000100060800000618020201010301010102020603010010360063
-01000063010000630100006301000022010006140100040e000006240100060302020101
-03030101020206050100060c010006000100060000000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600000006000100060c00000617
-020201010301010102020603010010350f00006301000063010000630100006301000022
-0100061301000600040e0600000006230100060302020101030301010202060601000610
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000602
-0100060c000006180202010103010101020206030100100108320f010063010000630100
-00630100006301000022010006140100040e000006240100060302020101030301010202
-060501000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-0600000006170202010103010101020206030100100108320f0100630100006301000063
-01000063010000220100061301000600040e060000000623010006030202010103030101
-020206060000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-0000061802020101030101010202060301001001081301000803010408140f0100630100
-0063010000630100006301000022010006140100040e0000062401000603020201010303
-0101020206ff06bc02020101030101010202060301001001081101020803010008020100
-08140f01006301000010010000200102002d010000630100006301000022010006130100
-0600040e060000000623010006030202010103030101020206ff06bc0202010103010101
-0202060301001001081301000806010008150f01006301000010010000220100002d0100
-00630100006301000022010006140100040e000006240100060302020101030301010202
-06ff06bc02020101030101010202060301001001081301000806010008150f0100070100
-000001010003010200020100000001010049010000080102000201040001010000020100
-000101000000010100030102000201000000010100050100000301020002010000000101
-001f0100006301000063010000220100061301000600040e060000000623010006030202
-010103030101020206ff06bc020201010301010102020603010010010813010008060100
-08150f010007010100010100000101000002010000010101000101000048010000070100
-000201000003010000030100000201000001010100010100000101000002010000010101
-000101000004010000020100000201000001010100010100001e01000063010000630100
-0022010006140100040e00000624010006030202010103030101020206ff06bc02020101
-030101010202060301001001081301000806010008150f01000701000002010000010100
-0002010000010100004c0100000701000007010000030100000201000001010000050100
-00020100000101000002010000040100000601000001010000020100001e010000630100
-0063010000220100061301000600040e0600000006230100060302020101030301010202
-06ff06bc02020101030101010202060301001001081301000805010008160f0100070100
-000201000001010400010100004c01000008010200040100000301000002010000010100
-00050104000101000002010000040100000301030001010000020100001e010000630100
-006301000022010006140100040e00000624010006030202010103030101020206ff06bc
-02020101030101010202060301001001081301000805010008160f010007010000020100
-0001010000050100004c0100000b01000003010000030100000201000001010000050100
-00050100000201000004010000020100000201000001010000020100001e010000630100
-0063010000220100061301000600040e0600000006230100060302020101030301010202
-06ff06bc02020101030101010202060301001001081101040803010008160f0100070101
-00010100000101000002010000010100004c010000070100000201000003010000030100
-000101010001010000050100000201000001010100010100000401000002010000020100
-0001010000020100001e010000630100006301000022010006140100040e000006240100
-06030202010103030101020206ff06bc0202010103010101020206030100100108320f01
-00070100000001010003010200020100004c010000080102000501010002010100000100
-0001010000060102000201000000010100050100000301030001010000020100001e0100
-006301000063010000220100061301000600040e06000000062301000603020201010303
-0101020206ff06bc0202010103010101020206030100100108320f0100070100005a0100
-002a01000037010000630100006301000022010006140100040e00000624010006030202
-010103030101020206ff06bc0202010103010101020206030100100108320f0100070100
-005a0100002a010000370100006301000063010000220100061301000600040e06000000
-0623010006030202010103030101020206ff06bc02020101030101010202060301001001
-08320f0100070100005a0100002a01000037010000630100006301000022010006140100
-040e00000624010006030202010103030101020206ff06bc020201010301010102020603
-0100100108320f010063010000630100006301000063010000220100061301000600040e
-060000000623010006030202010103030101020206ff06bc020201010301010102020603
-0100100108320f01006301000063010000630100006301000022010006140100040e0000
-0624010006030202010103030101020206ff06bc02020101030101010202060301001001
-0f340063010000630100006301000063010000220100061301000600040e060000000623
-010006030202010103030101020206ff06bc020201010301010102020603010010000f35
-01ff01b706140100040e00000624010006030202010103030101020206ff06bc02020101
-030101010202060301000e36006301000063010000630100006301000022010006130100
-0600040e060000000623010006030202010103030101020206ff06bc0202010103010101
-0202060301000e350b00006301000063010000630100006301000022010006140100040e
-00000624010006030202010103030101020206ff06bc0202010103010101020206030100
-0e0109320b010063010000630100006301000063010000220100061301000600040e0600
-00000623010006030202010103030101020206410100060a010006ff066d020201010301
-01010202060301000e0109320b0100630100006301000063010000630100002201000614
-0100040e0000062401000603020201010303010102020607010206100100060801000612
-010006050100060c0100060d0101061a010006ff06400202010103010101020206030100
-0e01091301000904010209150b0100630100006301000063010000630100002201000613
-01000600040e06000000062301000603020201010303010102020606010006020100060f
-0100061c010006050100060c0100060c0100061c010006ff064002020101030101010202
-060301000e0109110102090301000902010009140b01001101000009010000170100002c
-0100002c01000035010000630100006301000022010006140100040e0000062401000603
-0202010103030101020206060100060d0102060201000600010106030102060301020603
-010206020104060201000605010206050100060b01000604010206020100060201000601
-010006000101060301010600010006ff064002020101030101010202060301000e010913
-0100090301000902010009140b01001c010000170100002c0100002c0100003501000063
-01000063010000220100061301000600040e060000000623010006030202010103030101
-020206060100060c01000602010006010101060101000604010006020100060201000601
-010006020100060301000604010006040100060201000604010006090104060101000602
-010006010100060201000601010106010100060101000601010106ff0640020201010301
-01010202060301000e0109130100090301000902010009140b0100070100000001010003
-01020003010200020100000001010003010200020100000001010003010100000100002c
-010000070100000201000002010200030102000301020003010200020104000201020002
-0100000001010026010000630100006301000022010006140100040e0000062401000603
-020201010303010102020606010306090100060201000601010006020100060401000602
-0100060201000601010006070100060401000604010006080100060b0100060301000602
-010006010100060201000601010006020100060101000602010006ff0640020201010301
-01010202060301000e01091301000904010209150b010007010100010100000401000002
-010000020100000101010001010000010100000201000001010100010100000101000001
-0101002c0100000701000002010000010100000201000001010000020100000101000002
-010000010100000201000003010000030100000201000001010100010100002501000063
-01000063010000220100061301000600040e060000000623010006030202010103030101
-020206060100060201000608010006020100060101000602010006040100060201040601
-010006070100060401000605010206050100060b01000603010006020100060101000602
-01000601010006020100060101000602010006ff06400202010103010101020206030100
-0e0109130100090301000902010009140b01000701000008010000020100000501000002
-010000050100000101000005010000020100002c01000007010000020100000501000001
-010000090100000101000007010000070100000101000002010000250100006301000063
-01000022010006140100040e000006240100060302020101030301010202060601000602
-010006080100060201000601010006020100060401000602010006050100060701000604
-01000608010006040100060b010006030100060201000601010006020100060101000602
-0100060101000602010006ff064002020101030101010202060301000e01091301000903
-01000902010009140b010007010000080100000201000005010000020100000201030001
-01000005010000020100002c010000080100000001000003010300020102000301030002
-010200040100000401030001010000020100002501000063010000630100002201000613
-01000600040e060000000623010006030202010103030101020206060100060201000608
-010006020100060101010601010006040100060201000602010006010100060201000603
-010006050100060301000602010006030100060c01000603010006020100060101000601
-01010601010006020100060101000601010106ff06400202010103010101020206030100
-0e0109130100090301000902010009140b01000701000008010000020100000501000002
-01000001010000020100000101000005010000020100002c010000080100000001000002
-010000020100000501000001010000020100000501000003010000030100000201000001
-0100000201000025010000630100006301000022010006140100040e0000062401000603
-0202010103030101020206070102060a0102060201000600010106050100060301020603
-010206050101060301000604010206040100060c01000604010206030101060001000601
-010006020100060201010600010006ff064002020101030101010202060301000e010911
-01040902010209150b010007010000080100000201000002010000010100000201000001
-010000020100000101000005010000010101002c01000009010000030100000201000001
-010000020100000101000002010000010100000201000003010000030100000201000001
-01000002010000250100006301000063010000220100061301000600040e060000000623
-010006030202010103030101020206250100061a0100060a010006ff066d020201010301
-01010202060301000e0109320b0100070100000801000003010200020100000201000002
-0103000101000006010100000100002c0100000901000004010300020102000301030002
-010200050101000201030001010000020100002501000063010000630100002201000614
-0100040e000006240100060302020101030301010202062201000601010006ff06950202
-0101030101010202060301000e0109320b01006301000063010000630100006301000022
-0100061301000600040e06000000062301000603020201010303010102020623010106ff
-069602020101030101010202060301000e0109320b010063010000630100006301000063
-01000022010006140100040e00000624010006030202010103030101020206ff06bc0202
-0101030101010202060301000e0109320b01006301000063010000630100006301000022
-0100061301000600040e060000000623010006030202010103030101020206ff06bc0202
-0101030101010202060301000e0109320b01006301000063010000630100006301000022
-010006140100040e00000624010006030202010103030101020206ff06bc020201010301
-01010202060301000e0109320b0100630100006301000063010000630100002201000613
-01000600040e060000000623010006030202010103030101020206ff06bc020201010301
-01010202060301000e010b34006301000063010000630100006301000022010006140100
-040e00000624010006030202010103030101020206ff06bc020201010301010102020603
-01000e000b3501ff01b7061301000600040e060000000623010006030202010103030101
-020206ff06bc020201010301010102020603010010360063010000630100006301000063
-01000022010006140100040e00000624010006030202010103030101020206ff06bc0202
-01010301010102020603010010350f000063010000630100006301000063010000220100
-061301000600040e060000000623010006030202010103030101020206ff06bc02020101
-03010101020206030100100108320f010063010000630100006301000063010000220100
-06140100040e00000624010006030202010103030101020206ff06bc0202010103010101
-020206030100100108320f01006301000063010000630100006301000022010006130100
-0600040e060000000623010006030202010103030101020206ff06bc0202010103010101
-0202060301001001081301000804010208150f0100630100006301000063010000630100
-0022010006140100040e0000062401000603020201010303000406ff06bc000403010101
-020206030100100108110102080301000802010008140f01001001000006010000490100
-000e0100001c0100000b010200030102001f010000630100006301000022010006130100
-0600040e0600000006230100060302020101030300000202050006ff06bc000002020500
-03010101020206030100100108130100080301000802010008140f010010010000510100
-000e0100001c0100000d010000050100001f010000630100006301000022010006140100
-040e000006240100060302020101030300000202050006ff06bc00000202050003010101
-020206030100100108130100080301000802010008140f01000801020002010400020102
-000201000000010100030102003b01000008010200020100000101000003010200020100
-00000101000301020002010400010100000201000004010000050100001f010000630100
-0063010000220100061301000600040e0600000006230100060302020101030300000202
-050006ff06bc000002020500030101010202060301001001081301000803010008020100
-08140f010007010000020100000301000006010000020101000101000001010000020100
-003a01000007010000020100000101000000010000030100000201000001010100010100
-00010100000201000003010000030100000201000004010000050100001f010000630100
-006301000022010006140100040e000006240100060302020101030300000202050006ff
-06bc000002020500030101010202060301001001081301000804010308140f0100070100
-0007010000060100000201000002010000050100003a0100000701000005010100080100
-0001010000020100000101000007010000030100000201000004010000050100001f0100
-006301000063010000220100061301000600040e06000000062301000603020201010303
-00000202050006ff06bc0000020205000301010102020603010010010813010008070100
-08140f01000801020004010000060100000201000002010000020103003a010000080102
-000201010005010300010100000201000002010200040100000301000002010000040100
-00050100001f010000630100006301000022010006140100040e00000624010006030202
-01010303000002020500000502ff02b00006020205000301010102020603010010010813
-01000806010008150f01000b010000030100000601000002010000020100000101000002
-0100003a0100000b01000001010000000100000301000002010000010100000201000005
-01000003010000030100000201000004010000050100001f010000630100006301000022
-0100061301000600040e0600000006230100060302020101030300000208050002ff02b0
-000002080500030101010202060301001001081101040801010208160f01000701000002
-0100000301000006010000020100000201000001010000020100003a0100000701000002
-010000010100000101000002010000020100000101000002010000010100000201000003
-010000030100000101010004010000050100001f01000063010000630100002201000614
-0100040e000006240100060302020101030300000208050002ff02b00000020805000301
-0101020206030100100108320f0100080102000501010004010000020100000201000002
-0103003a0100000801020002010000020100000201030001010000020100000201020005
-010100020101000001000004010000050100001f01000063010000630100002201000613
-01000600040e0600000006230100060302020101030300000208050001ff01b000000208
-050003010101020206030100100108320f01006301000063010000630100006301000022
-010006140100040e00000624010006030202010103030000050901ff01b0000005090301
-0101020206030100100108320f0100630100006301000063010000630100002201000613
-01000600040e060000000623010006030202010103ff03cc010102020603010010010832
-0f01006301000063010000630100006301000022010006140100040e0000062401000603
-0202010103ff03cc0101020206030100100108320f010063010000630100006301000063
-010000220100061301000600040e060000000623010006030202010103ff03cc01010202
-06030100100108320f01006301000063010000630100006301000022010006140100040e
-00000624010006030202010103ff03cc010102020603010010010f340063010000630100
-006301000063010000220100061301000600040e060000000623010006030202010103ff
-03cc010102020603010010000f3501ff01b706140100040e000006240100060302020101
-03ff03cc01010202060301000e3600630100006301000063010000630100002201000613
-01000600040e060000000623010006030202010103ff03cc01010202060301000e350b00
-006301000063010000630100006301000022010006140100040e00000624010006030202
-010103ff03cc01010202060301000e0109320b0100630100006301000063010000630100
-00220100061301000600040e060000000623010006030202010103ff03cc010102020603
-01000e0109320b01006301000063010000630100006301000022010006140100040e0000
-0624010006030202010103ff03cc01010202060301000e01091201020903010209150b01
-0063010000630100006301000063010000220100061301000600040e0600000006230100
-06030202010103ff03cc01010202060301000e0109110100090201000901010009020100
-09140b0100630100002c01000035010000630100006301000022010006140100040e0000
-0624010006030202010103ff03cc01010202060301000e01091101000902010009010100
-0902010009140b0100630100002c01000035010000630100006301000022010006130100
-0600040e060000000623010006030202010103ff03cc01010202060301000e0109110100
-09020100090101000902010009140b010008010200020100000201000002010200030102
-0002010000000101000201000000010100030102002d0100000701000002010000020102
-000301020003010200030102000201040002010200020100000001010026010000630100
-006301000022010006140100040e00000624010006030202010103ff03cc010102020603
-01000e0109140100090201000902010009140b0100070100000201000001010000020100
-000101000002010000010100000201000001010100010100000101010001010000010100
-00020100002c010000070100000201000001010000020100000101000002010000010100
-000201000001010000020100000301000003010000020100000101010001010000250100
-006301000063010000220100061301000600040e060000000623010006030202010103ff
-03cc01010202060301000e0109130100090301000902010009140b010007010000050100
-000201000001010000090100000101000002010000010100000201000001010000020100
-002c01000007010000020100000501000001010000090100000101000007010000070100
-00010100000201000025010000630100006301000022010006140100040e000006240100
-06030202010103ff03cc01010202060301000e0109120100090401000902010009140b01
-000801020002010000020100000201020003010300010100000201000001010000020100
-00010104002c010000080100000001000003010300020102000301030002010200040100
-00040103000101000002010000250100006301000063010000220100061301000600040e
-060000000623010006030202010103ff03cc01010202060301000e010911010009020100
-090101000902010009140b01000b01000001010000020100000501000001010000020100
-000101000002010000010100000201000001010000300100000801000000010000020100
-000201000005010000010100000201000005010000030100000301000002010000010100
-000201000025010000630100006301000022010006140100040e00000624010006030202
-010103ff03cc01010202060301000e01091101040902010209150b010007010000020100
-000101000001010100010100000201000001010000020100000101000002010000010100
-000201000001010000020100002c01000009010000030100000201000001010000020100
-000101000002010000010100000201000003010000030100000201000001010000020100
-00250100006301000063010000220100061301000600040e060000000623010006030202
-010103ff03cc01010202060301000e0109320b0100080102000301010000010000020102
-000301030001010000020100000101000002010000020102002d01000009010000040103
-000201020003010300020102000501010002010300010100000201000025010000630100
-006301000022010006140100040e00000624010006030202010103ff03cc010102020603
-01000e0109320b010063010000630100006301000063010000220100061301000600040e
-060000000623010006030202010103ff03cc01010202060301000e0109320b0100630100
-0063010000630100006301000022010006140100040e00000624010006030202010103ff
-03cc01010202060301000e0109320b010063010000630100006301000063010000220100
-061301000600040e060000000623010006030202010103ff03cc01010202060301000e01
-09320b01006301000063010000630100006301000022010006140100040e000006240100
-06030202010103ff03cc01010202060301000e0109320b01006301000063010000630100
-0063010000220100061301000600040e060000000623010006030202010103ff03cc0101
-0202060301000e010b34006301000063010000630100006301000022010006140100040e
-00000624010006030202010103ff03cc01010202060301000e000b3501ff01b706130100
-0600040e060000000623010006030202010103ff03cc0101020206030100060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000630100
-006301000063010000630100002201000614010006000000060000000600000006000000
-060000000600000006000000060000000624010006030202010103ff03cc010102020603
-01ff01ef0613010006000000060000000600000006000000060000000600000006000000
-06000000060000000623010006030202010103ff03cc010102020603010006ff06ff0639
-010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff
-03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100
-06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603
-0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101
-02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff
-0639010006030202010103ff03cc01010202060301000649010006ff06ee010006030202
-010103ff03cc01010202060301000648010106ff06ee010006030202010103ff03cc0101
-020206030100064701000600010006ff06ee010006030202010103ff03cc010102020603
-01000649010006ff06ee010006030202010103ff03cc01010202060301000649010006ff
-06ee010006030202010103ff03cc01010202060301000649010006ff06ee010006030202
-010103ff03cc01010202060301000649010006ff06ee010006030202010103ff03cc0101
-0202060301000649010006ff06ee010006030202010103ff03cc01010202060301000647
-010406ff06ec010006030202010103ff03cc010102020603010006ff06ff063901000603
-0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101
-02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff
-0639010006030202010103ff03cc010102020603010006ff06ff06390100060302020101
-03ff03cc0101020206030100063801000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100064b010006030202010103ff
-03cc01010202060301000637010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-0100060001000600010006000100060001000600010006000000064a0100060302020101
-03ff03cc0101020206030100063801000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-0600000004ff04940000064b010006030202010103ff03cc010102020603010006370100
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060004ff049406000000064a
-010006030202010103ff03cc01010202060301000638010006000000060c0000060c0100
-04ff04940000064b010006030202010103ff03cc01010202060301000637010006000000
-060c0100060c0100060004ff049406000000064a010006030202010103ff03cc01010202
-060301000638010006000000060c0000060c010004ff04940000064b0100060302020101
-03ff03cc01010202060301000637010006000000060c0100060c0100060004ff04940600
-0000064a010006030202010103ff03cc01010202060301000638010006000000060c0000
-060c010004ff04940000064b010006030202010103ff03cc010102020603010006370100
-06000000060c0100060c0100060004ff049406000000064a010006030202010103ff03cc
-01010202060301000638010006000000060c0000060c010004ff04940000064b01000603
-0202010103ff03cc01010202060301000637010006000000060c0100060c0100060004ff
-049406000000064a010006030202010103ff03cc01010202060301000638010006000000
-060c0000060c010004ff04940000064b010006030202010103ff03cc0101020206030100
-0637010006000000060c0100060c0100060004ff049406000000064a0100060302020101
-03ff03cc01010202060301000638010006000000060c0000060c010004ff04940000064b
-010006030202010103ff03cc010102020603010006370100060000000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060004ff049406000000064a010006030202010103ff03cc
-010102020603010006380100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-04ff04940000064b010006030202010103ff03cc01010202060301000637010006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-0600000006000000064a010006030202010103ff03cc0101020206030100063800000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000064b010006030202010103ff03cc010102020603010006ff06ff06390100
-06030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc
-010102020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff
-06ff0639010006030202010103ff03cc010102020603010006ff06ff0639010006030202
-010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc01010202
-0603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff0639
-010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff
-03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100
-06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603
-0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101
-02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff
-0639010006030202010103ff03cc010102020603010006ff06ff06390100060302020101
-03ff03cc010102020603010006ff06ff0639010006030202010103ff03cc010102020603
-010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff06390100
-06030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc
-010102020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff
-06ff0639010006030202010103ff03cc010102020603010006ff06ff0639010006030202
-010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc01010202
-0603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff0639
-010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff
-03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100
-06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603
-0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101
-02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff
-0639010006030202010103ff03cc00040603010006ff06ff063901000603000403ff03cc
-000002020500060301ff01ff013b060300000202050003ff03cc00000202050006ff06ff
-064300000202050003ff03cc00000202050006ff06ff064300000202050003ff03cc0000
-0202050006ff06ff064300000202050003ff03cc00000202050006ff06ff064300000202
-050003ff03cc000002020500000502ff02ff023700060202050003ff03cc000002080500
-02ff02ff023700000208050003ff03cc00000208050002ff02ff023700000208050003ff
-03cc00000208050001ff01ff013700000208050003ff03cc0000050901ff01ff01370000
-050903ff03ff03ff03ff03ff03ff03ff03ff0337
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 34 400 249
-%%EOF
diff --git a/lib/tv/doc/src/tv_search_window.gif b/lib/tv/doc/src/tv_search_window.gif
deleted file mode 100644
index d6e72dda2f..0000000000
--- a/lib/tv/doc/src/tv_search_window.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_search_window.ps b/lib/tv/doc/src/tv_search_window.ps
deleted file mode 100644
index a6dd2ef9fc..0000000000
--- a/lib/tv/doc/src/tv_search_window.ps
+++ /dev/null
@@ -1,975 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_search_window.eps)
-%%CreationDate: (Mon Mar 19 17:15:21 2001)
-%%BoundingBox: 0 0 228 183
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 228 183
-userdict begin
-%%BeginData:
-DisplayImage
-0 0
-228.000000 183.000000
-12
-455 365
-1
-0
-0
-8
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-aa2455
-999999
-000a01ff01b0000b0208040001ff01b000000208040000000208040002ff02b000000208
-0400000002080400020000ff00ad040002000000020804000000020204060200000004ff
-04ad020000000405020204000000020204000209000d02ff02a400000202040000000202
-040002080000020d0400029001030211010302330101021501010206010102a100000202
-040000000202040002080000020d04000290010102020107020001010203010102010101
-020e010302200101020c0103020401010206010102110100028e00000202040000000202
-040002080000020d04000290010102050101020301010203010102010101020d01010201
-0101021f0101020b0101020101010203010102190101028e000002020400000002020400
-0208000002020406020304000290010102050101020301010203010102010101020d0101
-020601030203010302020101020001010201010302020101020001010207010102030101
-020201010200010102030101020201030203010302000104028c00000202040000000403
-020800000202040003040000020304000290010102050101020401010202010002020101
-020d01020204010102010101020101010201010102010101020001010200010102010101
-020101020200010102060101020301010202010202000101020201010201010102010101
-020101010201010102000101028e000004030101020b0000020304000302000002040400
-0290010102050101020401010201010102020101020e0103020201010201010102050101
-020101020202010102050101020101010206010102030101020201010201010102020101
-0201010102010101020101010204010102910103020b0000020304000302000002040400
-029001010205010102050101020001000203010102100102020101050202010402010101
-020301010205010102010101020601010203010102020101020101010202010102010105
-020101010204010102910103020b00000204040003000000020504000290010102050101
-020501030203010102110101020101010205010102010101020101010203010102050101
-020101010206010102030101020201010201010102020101020101010205010102040101
-02910103020b000002040400030000000205040002900101020501010206010102040101
-020d01010201010102010101020201000201010102010101020101010203010102020100
-020101010201010102070101020101010203010102010101020201010201010102020100
-02010101020201000200010102910103020b000002050000020604000290010102050101
-0206010102040101020e0103020301030203010202000101020001010204010302020101
-02010101020801030204010402030101020201030203010302020102028f0103020b0000
-020d040002900103021101030254010102a40103020b0000020d040002fd010202a50103
-020b0000020d040002ff02a60103020c040d02ff02a7010302ff02c2010302ff02c20103
-020200ff00bb0400020201030202000004ff04bb0202010302ff02c20103020205ff05bc
-02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202
-05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202
-0103020205ff05bc02020103020205ff05bc020201030202050800000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000508020201030202050700000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500010005070202010302020508000005ff05a8
-010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8
-010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8
-010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8
-010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8
-010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8
-010005080202010302020507000005ff0549000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005110100
-05070202010302020508000005ff05470000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000051101000508
-0202010302020507000005ff05490000054c010005110100050702020103020205080000
-05ff05470000054c010005110100050802020103020205070000050d0102051e0100050f
-010105ff05060000054c010005110100050702020103020205080000050b010005020100
-051d0100050e010005ff05070000054c010005110100050802020103020205070000050c
-010005060102050301020502010005000101050301020502010005000101050b01000504
-010205020100050001010504010105f20000054c01000511010005070202010302020508
-0000050c0100050401000502010005010100050201000501010105010100050101000502
-0100050101010501010005080104050101000502010005010101050101000503010105f1
-0000054c010005110100050802020103020205070000050e010105020100050201000505
-010005010100050501000505010005020100050a010005030100050201000501010005fc
-0000054c010005110100050702020103020205080000050f010005010104050201030501
-0100050501000505010005020100050a010005030100050201000501010005fb00000512
-0102051e01000516010005110100050802020103020205070000050c0100050201000501
-0100050501000502010005010100050501000505010005020100050a0100050301000502
-01000501010005fc00000510010005020100051d01000517010005110100050702020103
-020205080000050b01000502010005010100050201000501010005020100050101000505
-0100050201000501010005020100050a01000503010005020100050101000507010105f1
-000005110100050601020503010205020100050001010503010205020100050001010513
-010005110100050802020103020205070000050d01020503010205030103050101000506
-01020502010005020100050a010005040102050201000507010105f20000051101000504
-010005020100050101000502010005010101050101000501010005020100050101010501
-0100051301000511010005070202010302020508000005ff054700000513010105020100
-050201000505010005010100050501000505010005020100051201000511010005080202
-010302020507000005ff0549000005140100050101040502010305010100050501000505
-010005020100051301000511010005070202010302020508000005ff0547000005110100
-050201000501010005050100050201000501010005050100050501000502010005120100
-0511010005080202010302020507000005ff054900000510010005020100050101000502
-010005010100050201000501010005050100050201000501010005020100051301000511
-010005070202010302020508000005ff0547000005120102050301020503010305010100
-050601020502010005020100051201000511010005080202010302020507000005ff0549
-0000054c01000511010005070202010302020508000005ff05470000054c010005110100
-050802020103020205070000050901ff012c05120000054c010005110100050702020103
-020205080000050801ff012c05110000054c010005110100050802020103020205070000
-0509010107ff0728010105120000054c0100051101000507020201030202050800000508
-010107ff07270000010105110000054c0100051101000508020201030202050700000509
-0101070100ff0026010105120000054c0100051101000507020201030202050800000508
-0101070100ff0026010105110000054c0100051101000508020201030202050700000509
-0101070100ff0026010105120000054c0100051101000507020201030202050800000508
-010107010000030000000300000003000000030000000300000003000000030000000300
-000003000000030000000300000003000000030000000300000003000000030000000300
-000003000000030000000300000003000000030000000300000003000000030000000300
-000003000000030000000300000003000000030000000300000003000000030000000300
-000003000000030000000300000003000000030000000300000003000000030000000300
-000003000000030000000300000003000000030000000300000003000000030000000300
-000003000000030000000300000003000000030000000300000003000000030000000300
-000003000000030000000300000003000000030000a0010105110000054c010005110100
-05080202010302020507000005090101070103840101009f010105120000050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100051101000507020201030202050800000508010107010000030401000377
-010003040101009f01010511000005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005110100050802020103
-0202050700000509010107010304010003030102031e0100034001000310010003030101
-009f01010573010005070202010302020508000005080101070100000302010003030100
-03020100031d01000353010003020101009f010105720100050802020103020205070000
-050901010701030201000304010003060102030301020302010003000101030301020302
-010003000101030a01020302010003020100030101000300010103020100030001010303
-01020303010203030102030301020303010203020100030001010304010003010101009f
-010105730100050702020103020205080000050801010701000003000100030601000304
-010003020100030101000302010003010101030101000301010003020100030101010301
-010003080100030201000301010003020100030101010301010003010101030101000301
-010003020100030101000302010003010100030201000304010003020100030201000301
-0101030101000304010003000101009f0101057201000508020201030202050700000509
-010107010300010003080101030201000302010003050100030101000305010003050100
-030201000308010003020100030201000300010003020100030201000301010003050100
-030201000301010003050100030801000302010003020100030101000302010003050102
-009f01010573010005070202010302020508000005080101070100000300010003090100
-030101040302010303010100030501000305010003020100030801040303010003030100
-030201000301010003050104030201020303010203050100030201000302010003010100
-030201000304010003000101009f01010572010005080202010302020507000005090101
-070103020100030401000302010003010100030501000302010003010100030501000305
-010003020100030801000306010003000100030201000302010003010100030501000309
-01000305010003040100030201000302010003010100030201000303010003010101009f
-010105730100050702020103020205080000050801010701000003020100030301000302
-010003010100030201000301010003020100030101000305010003020100030101000302
-010003080100030201000301010003020100030101010301010003010100030501000302
-010003010100030201000301010003020100030401000302010003020100030101000302
-01000302010003020101009f010105720100050802020103020205070000050901010701
-030401000303010203030102030301030301010003060102030201000302010003090102
-030201000302010003010100030001010302010003060102030301020303010203050100
-0303010203020100030201000301010003030101009f0101057301000507020201030202
-05080000050801010701000003040100034001000335010003040101009f010105720100
-05080202010302020507000005090101070103470100033b0101009f0101051200000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000511010005070202010302020508000005080101070100000346
-0100033b0101009f01010511000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005110100050802020103
-020205070000050901010701030001000300010003000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300010003000100
-030001000300010003000100030001000300010003000100030001000300009f01010512
-0000054c01000511010005070202010302020508000005080101070100ff002601010511
-0000054c01000511010005080202010302020507000005090101070100ff002601010512
-0000054c01000511010005070202010302020508000005080101070100ff002601010511
-0000054c01000511010005080202010302020507000005090101070100ff002601010512
-0000054c01000511010005070202010302020508000005080101070000ff002701010511
-0000054c010005110100050802020103020205070000050901ff012c05120000054c0100
-05110100050702020103020205080000050801ff012c0511000005120102051f01020513
-01000511010005080202010302020507000005ff05490000051001000502010005200100
-051401000511010005070202010302020508000005ff0547000005110100050201000502
-010205020100050001010503010205030102050501000513010005110100050802020103
-02020507000005ff05490000051001000505010005020100050101010501010005010100
-050201000501010005020100050401000514010005110100050702020103020205080000
-05ff05470000051101000509010005010100050201000501010005050100050201000504
-0100051301000511010005080202010302020507000005ff054900000510010005060103
-050101000502010005010100050501040504010005140100051101000507020201030202
-0508000005ff054700000511010005020100050101000502010005010100050201000501
-01000505010005080100051301000511010005080202010302020507000005ff05490000
-051001000502010005010100050201000501010005020100050101000502010005010100
-0502010005040100051401000511010005070202010302020508000005ff054700000512
-010205030103050101000502010005020102050301020505010005130100051101000508
-0202010302020507000005ff05490000054c010005110100050702020103020205080000
-05ff05470000054c01000511010005080202010302020507000005ff05490000054c0100
-0511010005070202010302020508000005ff05470000054c010005110100050802020103
-02020507000005ff05490000054c01000511010005070202010302020508000005ff0547
-0000054c01000511010005080202010302020507000005ff05490000054c010005110100
-05070202010302020508000005ff05470000054c01000511010005080202010302020507
-0000052201000563000005c00000054c0100051101000507020201030202050800000520
-01000500010005230100053c000005000000053e0102054b0100052f0000054c01000511
-010005080202010302020507000005200100050001000500010005220100053b00000500
-000005000000053f0100057d000005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005110100050702020103
-020205080000051e010005000601010005000100050b0102050301020509010405020102
-05020100050001010502010105000100052400000502000005000000050b010205030102
-050901000500010105030102050301010500010005010100050201000504010005030102
-0502010005000101050a0102050201000502010005010100050001010502010005000101
-050301020503010205030102050301020503010205020100050001010521000005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005110100050802020103020205070000051e01000500060301000500
-010005090100050201000501010005020100050a01000503010005020100050101010501
-010005010100050001000500010005220000050400000500000005090100050201000501
-010005020100050801010501010005010100050201000501010005010101050101000502
-010005040100050201000502010005010101050101000508010005020100050101000502
-010005010101050101000501010105010100050101000502010005010100050201000501
-010005020100050401000502010005020100050101010501010005820100050702020103
-020205080000051c010005000605010005000100050c010005010100050e010005030100
-0502010005010100050501000500010005000100052100000506000005000000050c0100
-05010100050c010005050100050201000501010005020100050101000502010005040100
-0506010005010100050c0100050201000502010005000100050201000502010005010100
-050501000502010005010100050501000508010005020100050201000501010005020100
-05810100050802020103020205070000051c000005000607000005000000050801030502
-0102050b0100050301040501010005050100050001000500010005200100050801000500
-010005080103050201020509010005050104050101000502010005010100050201000504
-01000503010305010100050c010405030100050301000502010005010100050501040502
-010205030102050501000502010005020100050101000502010005820100050702020103
-020205080000051c000005000605000005000000050801000502010005050100050a0100
-050301000505010005050100050001000500010005210100050601000500010005080100
-050201000505010005080100050501000505010005020100050101000502010005040100
-050201000502010005010100050c01000506010005000100050201000502010005010100
-050501000509010005050100050401000502010005020100050101000502010005810100
-050802020103020205070000051e00000500060300000500000005090100050201000501
-010005020100050a01000503010005020100050101000505010005000100050001000522
-010005040100050001000509010005020100050101000502010005080100050501000502
-01000501010005010101050101000501010105040100050201000502010005010100050c
-010005020100050101000502010005010101050101000501010005050100050201000501
-010005020100050101000502010005040100050201000502010005010100050201000582
-0100050702020103020205080000051e000005000601000005000000050b010305020102
-050c01010502010205020100050501000500010005000100052301000502010005000100
-050b01030502010205090100050601020503010105000100050201010500010005040100
-0503010305010100050d0102050201000502010005010100050001010502010005060102
-050301020503010205050100050301020502010005020100058101000508020201030202
-05070000052000000500000005000000055f010005000100050001000532010005320100
-05b7010005070202010302020508000005200000050000000561010005000100052f0100
-050201000532010005b60100050802020103020205070000052200000563010005310102
-0533010005b7010005070202010302020508000005ff05a8010005080202010302020507
-000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507
-000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507
-000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507
-000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507
-000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507
-000005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050702020103
-020205080100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050802020103
-020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc
-02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202
-05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05a10100
-050001000500010005000100050001000500010005000100050001000500010005090202
-0103020205ff05a001000500010005000100050001000500010005000100050001000500
-010005000100050000000508020201030202050707ff0796050201000506010005060000
-0509020201030202050707ff079500000501010005060000050800000508020201030202
-0507070100ff009405020100050601000506000005090202010302020507070100ff0094
-0501010005060000050001000506000005080202010302020507070100ff009405020100
-05040000050201000504000005090202010302020507070100ff00940501010005040000
-050201000506000005080202010302020507070100ff0094050201000504000005020100
-0504000005090202010302020507070100ff009405010100050400000504010005040000
-05080202010302020507070100ff00940502010005020000050601000502000005090202
-010302020507070100ff0094050101000502000005060100050400000508020201030202
-0507070100ff009405020100050200000506010005020000050902020103020205070701
-00ff00940501010005020000050801000502000005080202010302020507070100ff0094
-0502010005000000050a01000500000005090202010302020507070100ff009405010100
-050000000500010005000100050001000500010005000100050001000502000005080202
-010302020507070100ff0094050201000500010005000100050001000500010005000100
-05000100050001000500000005090202010302020507070100ff00940501010005100000
-05080202010302020507070100ff00940502010005000000050000000500000005000000
-0500000005000000050000000500000005090202010302020507070100ff009405010100
-050000000500000005000000050000000500000005000000050000000500010005000000
-05080202010302020507070100ff00940502010005000000050a01000500000005090202
-010302020507070100ff00940501010005000000050c0100050000000508020201030202
-0507070100ff00940502010005000000050a010005000000050902020103020205070701
-00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
-0502010005000000050a01000500000005090202010302020507070100ff009405010100
-05000000050c01000500000005080202010302020507070100ff00940502010005000000
-050a01000500000005090202010302020507070100ff00940501010005000000050c0100
-0500000005080202010302020507070100ff00940502010005000000050a010005000000
-05090202010302020507070100ff00940501010005000000050c01000500000005080202
-010302020507070100ff00940502010005000000050a0100050000000509020201030202
-0507070100ff00940501010005000000050c010005000000050802020103020205070701
-00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
-0501010005000000050c01000500000005080202010302020507070100ff009405020100
-05000000050a01000500000005090202010302020507070100ff00940501010005000000
-050c01000500000005080202010302020507070100ff00940502010005000000050a0100
-0500000005090202010302020507070100ff00940501010005000000050c010005000000
-05080202010302020507070100ff00940502010005000000050a01000500000005090202
-010302020507070100ff00940501010005000000050c0100050000000508020201030202
-0507070100ff00940502010005000000050a010005000000050902020103020205070701
-00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
-0502010005000000050a01000500000005090202010302020507070100ff009405010100
-05000000050c01000500000005080202010302020507070100ff00940502010005000000
-050a01000500000005090202010302020507070100ff00940501010005000000050c0100
-0500000005080202010302020507070100ff00940502010005000000050a010005000000
-05090202010302020507070100ff00940501010005000000050c01000500000005080202
-010302020507070100ff00940502010005000000050a0100050000000509020201030202
-0507070100ff00940501010005000000050c010005000000050802020103020205070701
-00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
-0501010005000000050c01000500000005080202010302020507070100ff009405020100
-05000000050a01000500000005090202010302020507070100ff00940501010005000000
-050c01000500000005080202010302020507070100ff00940502010005000000050a0100
-0500000005090202010302020507070100ff00940501010005000000050c010005000000
-05080202010302020507070100ff00940502010005000000050a01000500000005090202
-010302020507070100ff00940501010005000000050c0100050000000508020201030202
-0507070100ff00940502010005000000050a010005000000050902020103020205070701
-00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
-0502010005000000050a01000500000005090202010302020507070100ff009405010100
-05000000050c01000500000005080202010302020507070100ff00940502010005000000
-050a01000500000005090202010302020507070100ff00940501010005000000050c0100
-0500000005080202010302020507070100ff00940502010005000000050a010005000000
-05090202010302020507070100ff00940501010005000000050c01000500000005080202
-010302020507070100ff00940502010005000000050a0100050000000509020201030202
-0507070100ff00940501010005000000050c010005000000050802020103020205070701
-00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
-0501010005000000050c01000500000005080202010302020507070100ff009405020100
-05000000050a01000500000005090202010302020507070100ff00940501010005000000
-050c01000500000005080202010302020507070100ff00940502010005000000050a0100
-0500000005090202010302020507070100ff00940501010005000000050c010005000000
-05080202010302020507070100ff00940502010005000000050a01000500000005090202
-010302020507070100ff00940501010005000000050c0100050000000508020201030202
-0507070100ff00940502010005000000050a010005000000050902020103020205070701
-00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
-0502010005000000050a01000500000005090202010302020507070100ff009405010100
-05000000050c01000500000005080202010302020507070100ff00940502010005000000
-050a01000500000005090202010302020507070100ff00940501010005000000050c0100
-0500000005080202010302020507070100ff00940502010005000000050a010005000000
-05090202010302020507070100ff00940501010005000000050c01000500000005080202
-010302020507070100ff00940502010005000000050a0100050000000509020201030202
-0507070100ff00940501010005000000050c010005000000050802020103020205070701
-00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
-0501010005000000050c01000500000005080202010302020507070100ff009405020100
-05000000050a01000500000005090202010302020507070100ff00940501010005000000
-050c01000500000005080202010302020507070100ff00940502010005000000050a0100
-0500000005090202010302020507070100ff00940501010005000000050c010005000000
-05080202010302020507070100ff00940502010005000000050a01000500000005090202
-010302020507070100ff00940501010005000000050c0100050000000508020201030202
-0507070100ff00940502010005000000050a010005000000050902020103020205070701
-00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
-0502010005000000050a01000500000005090202010302020507070100ff009405010100
-05000000050c01000500000005080202010302020507070100ff00940502010005000000
-050a01000500000005090202010302020507070100ff00940501010005000000050c0100
-0500000005080202010302020507070100ff00940502010005000000050a010005000000
-05090202010302020507070100ff00940501010005000000050c01000500000005080202
-010302020507070100ff00940502010005000000050a0100050000000509020201030202
-0507070100ff00940501010005000000050c010005000000050802020103020205070701
-00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
-0501010005000000050c01000500000005080202010302020507070100ff009405020100
-05000000050a01000500000005090202010302020507070100ff00940501010005000000
-050c01000500000005080202010302020507070100ff00940502010005000000050a0100
-0500000005090202010302020507070100ff00940501010005000000050c010005000000
-05080202010302020507070100ff00940502010005000000050a01000500000005090202
-010302020507070100ff00940501010005000000050c0100050000000508020201030202
-0507070100ff00940502010005000000050a010005000000050902020103020205070701
-00ff00940501010005000000050c01000500000005080202010302020507070100ff0094
-0502010005000000050a01000500000005090202010302020507070100ff009405010100
-05000000050c01000500000005080202010302020507070100ff00940502010005000000
-050a01000500000005090202010302020507070100ff00940501010005000000050c0100
-0500000005080202010302020507070100ff00940502010005000000050a010005000000
-05090202010302020507070100ff00940501010005000000050c01000500000005080202
-010302020507070100ff00940502010005000000050a0100050000000509020201030202
-0507070100ff00940501010005000000050c010005000000050802020103020205070701
-00ff00940502010005000000050a01000500000005090202010302020507070100ff0094
-050101000500000005000100050001000500010005000100050001000500010005000100
-0500000005080202010302020507070100ff009405020100050001000500010005000100
-050001000500010005000100050001000500000005090202010302020507070100ff0094
-050101000510000005080202010302020507070100ff0094050201000500000005000000
-050000000500000005000000050000000500000005000000050902020103020205070701
-00ff00940501010005020000050000000500000005000000050000000500000005000100
-0500000005080202010302020507070100ff00940502010005000000050a010005000000
-05090202010302020507070100ff00940501010005020000050801000502000005080202
-010302020507070100ff0094050201000502000005060100050200000509020201030202
-0507070100ff009405010100050400000506010005020000050802020103020205070701
-00ff00940502010005020000050601000502000005090202010302020507070100ff0094
-0501010005040000050401000504000005080202010302020507070100ff009405020100
-05040000050201000504000005090202010302020507070100ff00940501010005060000
-050201000504000005080202010302020507070100ff0094050201000504000005020100
-0504000005090202010302020507070100ff009405010100050600000500010005060000
-05080202010302020507070100ff00940502010005060100050600000509020201030202
-0507070100ff009405010100050801000506000005080202010302020507070000ff0095
-050201000506010005060000050902020103020205ff05a0010005000000050000000500
-0000050000000500000005000000050000000500000005000000050802020103020205ff
-05a100000500000005000000050000000500000005000000050000000500000005000000
-050902020103020205060100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005180202010302020505010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500000005170202010302020506010005100000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005020000
-050c0000051802020103020205050100050c000005000100050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050001000500000005000000
-050c0000051702020103020205060100050a0000050001000502000005ff057601000502
-000005000000050000000508000005180202010302020505010005080000050000000502
-01000500000005ff05780100050000000502000005000000050800000517020201030202
-050601000506000005000000050201000502000005ff0576010005020000050400000500
-0000050400000518020201030202050501000504000005000000050601000500000005ff
-057801000500000005060000050000000504000005170202010302020506010005020000
-05000000050601000502000005ff05760100050200000508000005000000050000000518
-020201030202050501000500010005000100050a01000500000005ff0578010005000000
-050a01000500010005000000051702020103020205060100050201000500010005060100
-0502000005ff057601000502000005080100050001000500000005180202010302020505
-01000504010005000100050601000500000005ff05780100050000000506010005000100
-050400000517020201030202050601000506010005000100050201000502000005ff0576
-010005020000050401000500010005040000051802020103020205050100050801000500
-0100050201000500000005ff057801000500000005020100050001000508000005170202
-0103020205060100050a0100050001000502000005ff0576010005020000050001000500
-010005080000051802020103020205050100050c01000500010005000000050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050000000500
-0100050c0000051702020103020205060100051001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-01000500010005000100050001000500010005020100050c000005180202010302020505
-010005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005170202010302020506000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-00000500000005000000051802020103020205ff05bc02020103020205ff05bc02020103
-020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc
-02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202
-05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202
-0103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff
-05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103
-020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc
-02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202
-05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202
-0103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff
-05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103
-020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc
-02020101000405ff05bc00050202040005ff05bc00000202040000000202040005ff05bc
-00000202040000000202040005ff05bc00000202040000000202040005ff05bc00000202
-040000000202040005ff05bc000002020400000002020400000502ff02b0000602020400
-00000208040002ff02b000000208040000000208040002ff02b000000208040000000208
-040001ff01b00000020804000000040901ff01b000000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 0 228 183
-%%EOF
diff --git a/lib/tv/doc/src/tv_start.gif b/lib/tv/doc/src/tv_start.gif
deleted file mode 100644
index 7a8a0cf6ce..0000000000
--- a/lib/tv/doc/src/tv_start.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_start.ps b/lib/tv/doc/src/tv_start.ps
deleted file mode 100644
index 7dae8e4a5a..0000000000
--- a/lib/tv/doc/src/tv_start.ps
+++ /dev/null
@@ -1,828 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./tv_start.tmp.eps)
-%%CreationDate: (Tue Jun 12 16:02:24 2001)
-%%BoundingBox: 0 42 377 247
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 42 377 247
-userdict begin
-%%BeginData:
-DisplayImage
-0 42
-377.000000 205.000000
-12
-755 410
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-828282
-aab6aa
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff
-02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202
-04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff
-02d000000202040000000202040002080000020d040002f6010302110103023801010206
-0101024001010230010102ff020400000202040000000202040002080000020d040002f6
-010102020107020001010203010102010101020e0105020001070201010302070100020b
-01010206010102400101020c0104021e010102ff02040000020204000000020204000208
-0000020d040002f6010102050101020301010203010102010101020e0101020701010203
-01010201010102050101020b010102060101024e010102020101021d010102ff02040000
-0202040000000202040002080000020204060203040002f6010102050101020301010203
-010102010101020e01010207010102030101020801040201010302030101020001010203
-010102020103020301040206010302030101020001010207010102000101020101010203
-010302030101020201010200010102020101020101030202010102000101020101010203
-010302020101020001010201010102020103020201010202010102f30000020204000000
-04030208000002020400030400000203040002f601010205010102040101020201000202
-0101020e0101020701010203010202080101020201010201010102020102020001010202
-010102010101020101010201010102090101020101010202010202000101020601020200
-010202000101020101010201010102020101020201020200010102010101020001010200
-010102020102020001020200010102010101020101010201010102000101020101010201
-010102010101020101010202010102f3000004030101020b000002030400030200000204
-040002f6010102050101020401010201010102020101020e010402040101020401030206
-010102060101020201010201010102020101020101010201010102010102020801010201
-010102020101020101010206010102010101020101010205010102020101020201010201
-010102010101020001010200010102020101020101010201010102050101020101020203
-01010201010102010101020101010202010002f70103020b000002030400030200000204
-040002f6010102050101020501010200010002030101020e010102070101020601020205
-010102030104020201010201010102020101020101050202010302060101020101010202
-010102010101020601010201010102010101020201040202010102020101020101010201
-010102000101020001010202010102010101020101010202010402010101020401010201
-0105020201010200010102f70103020b000002040400030000000205040002f601010205
-01010205010302030101020e010102070101020701010205010102020101020101010202
-010102010101020201010201010102080102020501010201010102020101020101010206
-010102010101020101010201010102010101020201010202010102010101020101010201
-010102000101020101010201010102010101020101010201010102010101020401010201
-0101020601010200010002f80103020b000002040400030000000205040002f601010205
-01010206010102040101020e010102070101020301010201010102050101020201010201
-010102020101020101010202010102010101020201000205010102050101020101010202
-010102010101020601010201010102010101020101010201010102020101020201010201
-010102020101020701010201010102010101020101010201010102010101020401010201
-0101020201000203010202f80103020b0000020500000206040002f60101020501010206
-010102040101020e01050203010102040103020701020201010202000101020101040203
-010102020103020201040207010302030101020101010206010102010101020101010202
-010202000101020101010202010102010101020301050202010102010101020101010202
-0102020001010200010102040101020201030204010102f90103020b0000020d040002f6
-01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000
-020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff
-02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff
-02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff
-05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
-0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202
-010302020001050b06040504060005030602051f0600050206000504060005270602050b
-06000506060005ff05ff053506000502060005090602051307010202010302020001050b
-0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502
-0600050b0600051307010202010302020001050b06000506060205050600050306020518
-060005020600050206020503060205020600050206000517060005020600050106000500
-060105020604050206020503060205020600050006010503060205ff05ff052006000502
-060005020602050506000502060005000601050c07010202010302020001050b06000508
-060005050600050206000502060005180600050006000505060005020600050206000501
-060005020600051706000502060005010601050106000503060005060600050206000502
-06000501060105010600050106000502060005ff05ff051f060005020600050106000502
-0600050406000502060105010600050b07010202010302020001050b0603050506000505
-060005020600050206000518060005000600050506000502060005020600050106000500
-060005000600051706000502060005010600050206000503060005060600050206000502
-060005010600050206000501060005ff05ff052306040501060005020600050406000502
-060005020600050b07010202010302020001050b06000508060005050600050206040518
-060005000600050506000502060405010600050006000500060005170600050206000501
-0600050206000503060005060600050206000502060005010600050206000502060205ff
-05ff052006000502060005010604050406000502060005020600050b0701020201030202
-0001050b0600050806000505060005020600051d06000506060005020600050506000500
-060005000600051706000502060005010600050206000503060005060600050206000502
-060005010600050206000505060005ff05ff051f06000502060005010600050806000502
-060005020600050b07010202010302020001050b06000508060005050600050206000502
-060005190600050606000502060005020600050106000500060005000600051706000502
-060005010601050106000503060005060600050206000502060005010600050206000501
-06000502060005ff05ff051f060005020600050106000502060005040600050206010501
-0600050b07010202010302020001050b0600050806000505060005030602051a06000506
-060005030602050306000500060005190602050206000500060105050601050406000503
-060205020600050206000502060205ff05ff052006000502060005020602050506000502
-060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202
-010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f
-07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e
-0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
-0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103
-0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103
-05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202
-01030202050e01060508010005060101050f010205010102059b01060508010005060101
-0510010505040101054d010205240104050d0101051e0102052401020501010205930106
-0508010005060101051101030535020201030202050e0100050101010500010005070101
-050601000511010105010100059d01000501010105000100050701010506010005130101
-05060100054d0101050001010524010105000101050c0100051e01010500010105240101
-050101000595010005010101050001000507010105060100051101010501010105340202
-010302020510010105030103050201030503010105030103050801020500010105010103
-05000101050001000500010005020103058b010105030103050201030503010105030103
-050a010105030104054c0101050101050500010305000102050201030501010105000102
-05070101050101010500010305030104051d010105010105050001030500010205020103
-050101010500010205070102050001010501010305000101050001000500010005020103
-058301010503010305020103050301010503010305090101050101000500010305020105
-050101030521020201030202051001010506010105000101050101010502010105020101
-0501010105070100050001000500010005050101050001050500010105010101058a0101
-050601010500010105010101050201010502010105010101050901010502010105010101
-054c01000502010105000101050201000500010205000101050001010501010105010102
-050001000507010105010101050201010502010105010101051d01000502010105000101
-050201000500010205000101050001010501010105010102050001000507010005000100
-050001000505010105000105050001010501010105820101050601010500010105010101
-050201010502010105010101050801020504010105020101050001010501010105010101
-052002020103020205100100050401040500010105010101050201010501010605070100
-0500010205020104050001010500010005000107058a0100050401040500010105010101
-0502010105010106050901010501010105020101054b0101050201000501010105000100
-05000100050001010501010805010101050a0103050401010501010105020101051c0101
-05020100050101010500010005000100050001010501010805010101050a010005000102
-050201040500010105000100050001070582010005040104050001010501010105020101
-05010106050901020503010105040101050101060520020201030202050f010105020101
-0501010105000101050201010501010105020101050b0101050001010501010105010101
-05010100050001000500010005000101058e010105020101050101010500010105020101
-0501010105020101050d01010502010105010101054c0101050101010501010205000100
-05010100050201000500010105050101050a0101050601010502010105010101051d0101
-05010101050101020500010005010100050201000500010105050101050a010105000101
-050101010501010105010100050001000500010005000101058601010502010105010101
-05000101050201010501010105020101050b010105010101050201010503010105030101
-0525020201030202050f0101050201010501010105000101050101010502010105020101
-050101010507010005010101050101010501010105000101050001000500010005000101
-05010101058a010105020101050101010500010105010101050201010502010105010101
-050901010502010105010101054c01010500010105020103050101010501010105000101
-0501010105010101050a0101050601010502010105010101051d01010500010105020103
-0501010105010101050001010501010105010101050a0100050101010501010105010101
-050001010500010005000100050001010501010105820101050201010501010105000101
-050101010502010105020101050101010507010105010101050201010502010205000101
-05000101050101010521020201030202050e01030502010a050101050501010305070102
-0500010105020107050001000500010105000103058a01030502010a0501010505010103
-0508010505010105054c0102050301010500010005000103050001020500010305010104
-050701030503010505010105051d01020503010105000100050001030500010205000103
-05010104050701020500010105020107050001000500010105000103058201030502010a
-050101050501010305090103050101050500010505010103052202020103020205ff05ff
-05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
-05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
-05e8020201030202050201ff01ff01e205020202010302020503080000cb080001000081
-01010059010100c30101005801000711000005020202010302020503080000cb08000100
-000b0101004e0101002201010059010100c3010100580100070103060700030600010502
-0202010302020503080000cb08000100000a0100001c0100002a01000008010000210101
-000c0100002a0100001f010100c301010058010007010305000007000306000105020202
-0103020205030800001f0800000a080000060802009408000100000a0100000401020003
-0102000c010000040101000a010200030102000b0101000201000007010000210101000b
-010000040101000a010200030102000b010100020100001e010100c30101000a0101004b
-0100070103050000070103050001050202020103020205030800001f0800000a08000008
-0800009408000100000a010000030100000201000001010000020100000a010000040100
-000101000008010000020100000101000002010000090100000101000002010000060100
-00210101000a010000040100000101000008010000020100000101000002010000090100
-0001010000020100001d010100c301010009010000010100004a01000701030400010701
-030500010502020201030202050308000008080100000800000208000002080000080804
-0002080200020800000008010005080000030802008d08000100000a0100000701000005
-0100000901000005010000010100000c0100000501000009010000010100000301000005
-010000210101000901000005010000010100000c01000005010000090100000101000003
-0100001c010100c301010009010000010100004a01000701030400010500070103040001
-0502020201030202050308000008080000000800000008000001080000020800000a0800
-00030800000208000001080100010800000408000002080000020800008c08000100000a
-01000007010000050100000801000006010000010100000c010000050100000901000001
-0100000401000004010000210101000801000006010000010100000c0100000501000009
-01000001010000040100001b010100c301010009010000010100004a0100070103030001
-050107010304000105020202010302020503080000080800000008000000080000020800
-00010800000a0800000708000001080000020800000408000002080000020800008c0800
-0100000801010007010000050100000801000007010000010100000a010100040101000a
-0100000101000005010000040101001f0101000701000007010000010100000a01010004
-0101000a01000001010000050100001a010100c301010009010000010100004a01000701
-030300010502070103030001050202020103020205030800000808000000080000000800
-0002080000010800000a08000004080300010800000208000004080000020804008c0800
-0100000a01000005010000050100000a01000006010000010100000c0100000501000009
-010000010100000401000004010000210101000801000006010000010100000c01000005
-0100000901000001010000040100001b010100c301010009010000010100004a01000701
-030200010503070103030001050202020103020205030800000808000000080000000800
-0003080000000800000a0800000308000002080000010800000208000004080000020800
-009008000100000a01000004010000050100000c01000005010000010100000c01000005
-01000009010000010100000301000005010000210101000901000005010000010100000c
-010000050100000901000001010000030100001c010100c301010009010000010100004a
-010007010302000105040701030200010502020201030202050308000008080000000800
-0000080000030801000b0800000308000002080000010801000108000004080000020800
-00020800008c08000100000a010000030100000501000007010100040100000401000001
-010000030101000201000002010000010100000201000003010100030100000101000002
-01000006010000210101000a010000040100000101000003010100020100000201000001
-01000002010000030101000301000001010000020100001d010100c30101000901000001
-0100004a0100070103010001050507010302000105020202010302020503080000080800
-000008000000080000040800000c08010002080300010800000008010005080000030802
-008d08000100000a01000003010400010104000301010005010000040101000401010003
-0102000301020004010100040101000201000007010000210101000b0100000401010004
-01010003010200030102000401010004010100020100001e010100c30101000a0101004b
-010007010301000105060701030100010502020201030202050308000012080000010805
-00af08000100000a01000014010000060100002a01000008010000210101000c0100002a
-0100001f010100c301010058010007010300000105070701030100010502020201030202
-05030800000f08000000080000b808000100000b010100100101003b0101002201010059
-010100c30101005801000701030000010508070103000001050202020103020205030800
-0010080000b908000100008101010059010100c301010058010007010001070b03000001
-05020202010302020503080000cb08000100008101010059010100c30101005801000701
-0000070d000105020202010302020503080000cb08000100008101010059010100c30101
-005801000701030e000105020202010302020503080000cb080001000081010100590101
-00c30101005801000701001005020202010302020503080000cb08000100008101010059
-010100c30101005801000701000d070000010502020201030202050308cd01ff01ff0100
-07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202
-01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce0701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a070100010502020201030202050301ff01ff01ce07010001050a
-070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-0502020201030202050301ff01ff01ce07010001050a0701000105020202010302020503
-01ff01ff01ce07010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a070100010502020201030202050301ff01ff
-01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502
-020201030202050301ff01ff01ce07010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-0202050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a070100010502020201030202050301ff01ff01ce07010001
-050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-00010502020201030202050301ff01ff01ce07010001050a070100010502020201030202
-050301ff01ff01ce07010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a070100010502020201030202050301ff
-01ff01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001070c
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0000070d00010502020201030202050301ff01ff01ce0701030e00010502020201030202
-050301ff01ff01ce0701030e000105020202010302020503010000cb0101008101010059
-010100c30101005801000701030e000105020202010302020503010000cb010100810101
-0059010100c30101005801000701030e000105020202010302020503010000cb01010081
-01010059010100c30101005801000701030e000105020202010302020503010000cb0101
-008101010059010100c30101005801000701030e000105020202010302020503010000cb
-0101008101010059010100c30101005801000701030e0001050202020103020205030100
-00cb0101008101010059010100c30101005801000701030e000105020202010302020503
-010000cb0101008101010059010100c30101005801000701030e00010502020201030202
-0503010000cb0101008101010059010100c30101005801000701030e0001050202020103
-02020503010000cb0101008101010059010100c30101005801000701030e000105020202
-010302020503010000cb0101008101010059010100c30101005801000701030e00010502
-0202010302020503010000cb0101008101010059010100c30101005801000701030e0001
-05020202010302020503010000cb0101008101010059010100c30101005801000701030e
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-030e000105020202010302020503010000cb0101008101010059010100c3010100580100
-0701030e000105020202010302020503010000cb0101008101010059010100c301010058
-01000701030e000105020202010302020503010000cb0101008101010059010100c30101
-005801000701030e000105020202010302020503010000cb0101008101010059010100c3
-0101005801000701030e000105020202010302020503010000cb01010081010100590101
-00c30101005801000701030e000105020202010302020503010000cb0101008101010059
-010100c30101005801000701030e00010502020201030202050301ff01ff01ce0701030e
-00010502020201030202050301ff01ff01ce0701001005020202010302020503010000cb
-0101008101010059010100c301010058010007010300000c070000010502020201030202
-0503010000cb0101008101010059010100c3010100580100070103000001050807010300
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-03010001050707010300000105020202010302020503010000cb01010081010100590101
-00c3010100580100070103010001050607010301000105020202010302020503010000cb
-0101008101010059010100c3010100580100070103020001050507010301000105020202
-010302020503010000cb0101008101010059010100c30101005801000701030200010504
-07010302000105020202010302020503010000cb0101008101010059010100c301010058
-0100070103030001050307010302000105020202010302020503010000cb010100810101
-0059010100c3010100580100070103030001050207010303000105020202010302020503
-010000cb0101008101010059010100c30101005801000701030400010501070103030001
-05020202010302020503010000cb0101008101010059010100c301010058010007010304
-0001050007010304000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010305000007020304000105020202010302020503010000cb01010081
-01010059010100c301010058010007010305000007010305000105020202010302020503
-010000cb0101008101010059010100c30101005801000701030607010305000105020202
-010302020503010000cb0101008101010059010100c30101005801000701030607000306
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-001005020202010302020503010000cb0101008101010059010100c30101005801000700
-00110502020201030202050207ff07ff07d30511020201030202050207ff07ff07d20000
-051102020103020205020701030d0000030000ff00ff00af03000001030c000105110202
-0103020205020701030b00010700030000ff00ff00ae070003000003030a000105110202
-01030202050207010309000207010300000105ff05ff05ab070103000005030800010511
-0202010302020502070103070003050007010300000105ff05ff05ab0701030000010501
-00030306000105110202010302020502070103050003050207010300000105ff05ff05ab
-070103000001050300030304000105110202010302020502070103030003050407010300
-000105ff05ff05ab07010300000105050003030200010511020201030202050207010301
-0003050607010300000105ff05ff05ab0701030000010507000303000001051102020103
-020205020705050807010300000105ff05ff05ab07010300000105080703000105110202
-010302020502070103010703050607010300000105ff05ff05ab07010300000105070703
-0300000105110202010302020502070103030703050407010300000105ff05ff05ab0701
-030000010505070303020001051102020103020205020701030507030502070103000001
-05ff05ff05ab070103000001050307030304000105110202010302020502070103070703
-050007010300000105ff05ff05ab07010300000105010703030600010511020201030202
-05020701030907040300000105ff05ff05ab070103000001070303080001051102020103
-020205020701030b07020300000107ff07ff07ad030000010701030a0001051102020101
-000405020701030d07000300000007ff07ff07ae030000000700030c0001051100050202
-04000502070100ff00ff00d105110000020204000000020204000502070000ff00ff00d2
-051100000202040000000202040005ff05ff05e800000202040000000202040005ff05ff
-05e800000202040000000202040005ff05ff05e8000002020400000002020400000502ff
-02ff02dc00060202040000000208040002ff02ff02dc00000208040000000208040002ff
-02ff02dc00000208040000000208040001ff01ff01dc0000020804000000040901ff01ff
-01dc00000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 42 377 247
-%%EOF
diff --git a/lib/tv/doc/src/tv_start_mnesia.gif b/lib/tv/doc/src/tv_start_mnesia.gif
deleted file mode 100644
index 0ad04331cd..0000000000
--- a/lib/tv/doc/src/tv_start_mnesia.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_mnesia.ps b/lib/tv/doc/src/tv_start_mnesia.ps
deleted file mode 100644
index a90185089d..0000000000
--- a/lib/tv/doc/src/tv_start_mnesia.ps
+++ /dev/null
@@ -1,835 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_mnesia.eps)
-%%CreationDate: (Mon Mar 19 17:15:23 2001)
-%%BoundingBox: 0 0 377 205
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 377 205
-userdict begin
-%%BeginData:
-DisplayImage
-0 0
-377.000000 205.000000
-12
-755 410
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-828282
-a3a3a3
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff
-02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202
-04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff
-02d000000202040000000202040002080000020d040002ea01030211010302330101021b
-010102060101024001010230010102f700000202040000000202040002080000020d0400
-02ea010102020107020001010203010102010101020e010202020102021b0101020e0100
-020b01010206010102400101020c0104021e010102f70000020204000000020204000208
-0000020d040002ea010102050101020301010203010102010101020e010202020102022b
-0101020b010102060101024e010102020101021d010102f7000002020400000002020400
-02080000020204060203040002ea010102050101020301010203010102010101020e0102
-020201020202010102000101020301030203010402020101020201030205010402010103
-020301010200010102030101020201030203010402060103020301010200010102070101
-020001010201010102030103020301010202010102000101020201010201010302020101
-020001010201010102030103020201010200010102010101020201030202010102020101
-02e6000002020400000004030208000002020400030400000203040002ea010102050101
-020401010202010002020101020e01000200010102000100020001010202010202000101
-020101010201010102010101020601010201010102010101020501010202010102010101
-020201020200010102020101020101010201010102010101020901010201010102020102
-020001010206010202000102020001010201010102010101020201010202010202000101
-020101010200010102000101020201020200010202000101020101010201010102010101
-02000101020101010201010102010101020101010202010102e6000004030101020b0000
-02030400030200000204040002ea010102050101020401010201010102020101020e0100
-020001010200010002000101020201010201010102010101020101010201010202050101
-020501010205010102060101020201010201010102020101020101010201010102010102
-020801010201010102020101020101010206010102010101020101010205010102020101
-020201010201010102010101020001010200010102020101020101010201010102050101
-02010102020301010201010102010101020101010202010002ea0103020b000002030400
-030200000204040002ea010102050101020501010200010002030101020e010002000101
-020001000200010102020101020101010201010502020103020301010202010402050101
-020301040202010102010101020201010201010502020103020601010201010102020101
-020101010206010102010101020101010202010402020101020201010201010102010101
-020001010200010102020101020101010201010102020104020101010204010102010105
-020201010200010102ea0103020b000002040400030000000205040002ea010102050101
-0205010302030101020e0100020101010201010102020101020101010201010102080102
-020201010201010102010101020501010202010102010101020201010201010102020101
-020101010208010202050101020101010202010102010101020601010201010102010101
-020101010201010102020101020201010201010102010101020101010200010102010101
-020101010201010102010101020101010201010102040101020101010206010102000100
-02eb0103020b000002040400030000000205040002ea0101020501010206010102040101
-020e01000201010102010101020201010201010102010101020201000205010102020101
-020101010201010102050101020201010201010102020101020101010202010102010101
-020201000205010102050101020101010202010102010101020601010201010102010101
-020101010201010102020101020201010201010102020101020701010201010102010101
-0201010102010101020101010204010102010101020201000203010202eb0103020b0000
-020500000206040002ea0101020501010206010102040101020e01000205010102020101
-020101010202010302020104020301010202010202000101020501020201010202000101
-020101040203010102020103020201040207010302030101020101010206010102010101
-020101010202010202000101020101010202010102010101020301050202010102010101
-0201010102020102020001010200010102040101020201030204010102ec0103020b0000
-020d040002ea01030211010302dd010102ed0103020b0000020d040002ff02e2010102ed
-0103020b0000020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee
-010302ff02ff02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202
-010302ff02ff02ee0103020200ff00ff00e802020103020200ff00ff00e7070002020103
-0202000105ff05ff05e40701020201030202000105ff05ff05e407010202010302020001
-05ff05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff
-05e407010202010302020001050b06040504060005030602051f06000502060005040600
-05270602050b06000506060005ff05ff0535060005020600050906020513070102020103
-02020001050b0600050f0600051f060005020600052c060005020600050a060005ff05ff
-053d060005020600050b0600051307010202010302020001050b06000506060205050600
-050306020518060005020600050206020503060205020600050206000517060005020600
-050106000500060105020604050206020503060205020600050006010503060205ff05ff
-052006000502060005020602050506000502060005000601050c07010202010302020001
-050b06000508060005050600050206000502060005180600050006000505060005020600
-050206000501060005020600051706000502060005010601050106000503060005060600
-05020600050206000501060105010600050106000502060005ff05ff051f060005020600
-0501060005020600050406000502060105010600050b07010202010302020001050b0603
-050506000505060005020600050206000518060005000600050506000502060005020600
-050106000500060005000600051706000502060005010600050206000503060005060600
-050206000502060005010600050206000501060005ff05ff052306040501060005020600
-050406000502060005020600050b07010202010302020001050b06000508060005050600
-050206040518060005000600050506000502060405010600050006000500060005170600
-050206000501060005020600050306000506060005020600050206000501060005020600
-0502060205ff05ff052006000502060005010604050406000502060005020600050b0701
-0202010302020001050b0600050806000505060005020600051d06000506060005020600
-050506000500060005000600051706000502060005010600050206000503060005060600
-050206000502060005010600050206000505060005ff05ff051f06000502060005010600
-050806000502060005020600050b07010202010302020001050b06000508060005050600
-050206000502060005190600050606000502060005020600050106000500060005000600
-051706000502060005010601050106000503060005060600050206000502060005010600
-05020600050106000502060005ff05ff051f060005020600050106000502060005040600
-0502060105010600050b07010202010302020001050b0600050806000505060005030602
-051a06000506060005030602050306000500060005190602050206000500060105050601
-050406000503060205020600050206000502060205ff05ff052006000502060005020602
-050506000502060005000601050c070102020103020200010576060005ff05ff055b0600
-050f07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606
-050e0600050f07010202010302020001050a0606052a0606052a06060500060005ff05ff
-05450606050e0600050f0701020201030202000105ff05ff05e407010202010302020001
-05ff05ff05e40701020201030202000105ff05ff05e40701020201030202000107ff07ff
-07e6020201030202000007ff07ff07e702020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e8020201030202051c
-01020504010305c1080205040803051a0802057f01010505010205f00102050401030519
-0101052f020201030202050e01060508010005060101050f010205010102059b08060508
-0800050608010510080505040801054d010205240104050d0101051e0102052401020501
-0102059301060508010005060101051101030535020201030202050e0100050101010500
-010005070101050601000511010105010100059d08000501080105000800050708010506
-08000513080105060800054d0101050001010524010105000101050c0100051e01010500
-010105240101050101000595010005010101050001000507010105060100051101010501
-010105340202010302020510010105030103050201030503010105030103050801020500
-01010501010305000101050001000500010005020103058b080105030803050208030503
-080105030803050a080105030804054c0101050101050500010305000102050201030501
-01010500010205070101050101010500010305030104051d010105010105050001030500
-010205020103050101010500010205070102050001010501010305000101050001000500
-010005020103058301010503010305020103050301010503010305090101050101000500
-010305020105050101030521020201030202051001010506010105000101050101010502
-010105020101050101010507010005000100050001000505010105000105050001010501
-0101058a0801050608010500080105010801050208010502080105010801050908010502
-080105010801054c01000502010105000101050201000500010205000101050001010501
-010105010102050001000507010105010101050201010502010105010101051d01000502
-010105000101050201000500010205000101050001010501010105010102050001000507
-010005000100050001000505010105000105050001010501010105820101050601010500
-010105010101050201010502010105010101050801020504010105020101050001010501
-010105010101052002020103020205100100050401040500010105010101050201010501
-0106050701000500010205020104050001010500010005000107058a0800050408040500
-0801050108010502080105010806050908010501080105020801054b0101050201000501
-01010500010005000100050001010501010805010101050a010305040101050101010502
-0101051c010105020100050101010500010005000100050001010501010805010101050a
-010005000102050201040500010105000100050001070582010005040104050001010501
-01010502010105010106050901020503010105040101050101060520020201030202050f
-0101050201010501010105000101050201010501010105020101050b0101050001010501
-01010501010105010100050001000500010005000101058e080105020801050108010500
-0801050208010501080105020801050d08010502080105010801054c0101050101010501
-01020500010005010100050201000500010105050101050a010105060101050201010501
-0101051d010105010101050101020500010005010100050201000500010105050101050a
-010105000101050101010501010105010100050001000500010005000101058601010502
-01010501010105000101050201010501010105020101050b010105010101050201010503
-0101050301010525020201030202050f0101050201010501010105000101050101010502
-010105020101050101010507010005010101050101010501010105000101050001000500
-01000500010105010101058a080105020801050108010500080105010801050208010502
-080105010801050908010502080105010801054c01010500010105020103050101010501
-0101050001010501010105010101050a0101050601010502010105010101051d01010500
-0101050201030501010105010101050001010501010105010101050a0100050101010501
-010105010101050001010500010005000100050001010501010105820101050201010501
-010105000101050101010502010105020101050101010507010105010101050201010502
-01020500010105000101050101010521020201030202050e01030502010a050101050501
-0103050701020500010105020107050001000500010105000103058a08030502080a0501
-0805050108030508080505010805054c0102050301010500010005000103050001020500
-010305010104050701030503010505010105051d01020503010105000100050001030500
-010205000103050101040507010205000101050201070500010005000101050001030582
-01030502010a050101050501010305090103050101050500010505010103052202020103
-020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103
-020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103
-020205ff05ff05e8020201030202050201ff01ff01e205020202010302020503010000cb
-0101008101010059010100c30101005801000711000005020202010302020503010000cb
-0101008101010059010100c3010100580100070103060700030600010502020201030202
-0503010000cb010100810101000c0100002a0100001f010100c301010058010007010305
-0000070003060001050202020103020205030100000a010000130100000c0100000a0100
-000601020086010100810101000b0100000401010009010400010104000a010100020100
-001e0101002701000028010000040100006a0101000a0101004b01000701030500000701
-03050001050202020103020205030100000a010000130100000c0100000a010000080100
-0086010100810101000a01000004010000010100000801000002010000010100000d0100
-0001010000020100001d010100570100006a01010009010000010100004a010007010304
-000107010305000105020202010302020503010000080104000201020003010200020104
-000801040002010200020100000001010005010000030102007f01010081010100090100
-0005010000010100000c010000010100000d01000001010000030100001c010100080101
-000001000002010000000101000301020003010200030102000301020009010100000100
-0003010200020100000001010003010200020104000201020002010000000101005b0101
-0009010000010100004a0100070103040001050007010304000105020202010302020503
-0100000a01000003010000020100000101000002010000030100000c0100000301000002
-01000001010100010100000401000002010000020100007e010100810101000801000006
-010000010100000b010000020103000a01000001010000040100001b0101000801000000
-010000000100000101010001010000010100000201000001010000020100000401000002
-010000020100000801000000010000000100000101000002010000010101000101000004
-01000004010000030100000201000001010100010100005a01010009010000010100004a
-01000701030300010501070103040001050202020103020205030100000a010000030100
-000201000001010000070100000c01000007010000010100000201000004010000020100
-00020100007e010100810101000701000007010000010100000b01000006010000090100
-0001010000050100001a0101000801000000010000000100000101000002010000010100
-000201000001010000080100000601000008010000000100000001000001010000020100
-00010100000201000004010000040100000301000002010000010100005e010100090100
-00010100004a01000701030300010502070103030001050202020103020205030100000a
-0100000301040002010200040100000c0100000401030001010000020100000401000002
-0104007e010100810101000801000006010000010100000b010000060100000901000001
-010000040100001b01010008010000000100000001000001010000020100000101040002
-010200050100000301030008010000000100000001000001010000020100000101000002
-01000004010000040100000301000002010000010100005e01010009010000010100004a
-01000701030200010503070103030001050202020103020205030100000a010000030100
-0009010000030100000c0100000301000002010000010100000201000004010000020100
-0082010100810101000901000005010000010100000a0100000301000002010000090100
-0001010000030100001c0101000801000000010000000100000101000002010000010100
-000901000004010000020100000201000008010000000100000001000001010000020100
-00010100000201000004010000040100000301000002010000010100005e010100090100
-00010100004a01000701030200010504070103020001050202020103020205030100000a
-01000003010000020100000101000002010000030100000c010000030100000201000001
-010100010100000401000002010000020100007e010100810101000a0100000401000001
-01000003010100040100000301000002010000030101000301000001010000020100001d
-010100080100000001000000010000010100000201000001010000020100000101000002
-010000040100000201000002010000080100000001000000010000010100000201000001
-0100000201000004010000040100000301000002010000010100005e0101000901000001
-0100004a01000701030100010505070103020001050202020103020205030100000b0101
-000201020003010200050101000b01010002010300010100000001010005010000030102
-007f010100810101000b0100000401010004010100040100000401020004010100040101
-00020100001e010100080100000001000000010000010100000201000002010200030102
-000501000003010300080100000001000000010000020102000201000002010000040100
-000501010002010200020100005e0101000a0101004b0100070103010001050607010301
-00010502020201030202050301000023010500a1010100810101000c0100002a0100001f
-010100310105008b01010058010007010300000105070701030100010502020201030202
-0503010000cb0101008101010059010100c3010100580100070103000001050807010300
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001070b0300000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010000070d000105020202010302020503010000cb01010081010100590101
-00c30101005801000701030e000105020202010302020503010000cb0101008101010059
-010100c30101005801000701001005020202010302020503010000cb0101008101010059
-010100c30101005801000701000d070000010502020201030202050301ff01ff01ce0701
-0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103
-0202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-01ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce07010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a070100010502020201030202050301ff01ff01ce07010001050a0701
-00010502020201030202050301ff01ff01ce07010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-020201030202050301ff01ff01ce07010001050a070100010502020201030202050301ff
-01ff01ce07010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a070100010502020201030202050301ff01ff01ce
-07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202
-01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce0701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a070100010502020201030202050301ff01ff01ce07010001050a
-070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-0502020201030202050301ff01ff01ce07010001050a0701000105020202010302020503
-01ff01ff01ce07010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a070100010502020201030202050301ff01ff
-01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001070c0001
-05020202010302020503010000cb0101008101010059010100c301010058010007010000
-070d00010502020201030202050301ff01ff01ce0701030e000105020202010302020503
-01ff01ff01ce0701030e000105020202010302020503010000cb01010081010100590101
-00c30101005801000701030e000105020202010302020503010000cb0101008101010059
-010100c30101005801000701030e000105020202010302020503010000cb010100810101
-0059010100c30101005801000701030e000105020202010302020503010000cb01010081
-01010059010100c30101005801000701030e000105020202010302020503010000cb0101
-008101010059010100c30101005801000701030e000105020202010302020503010000cb
-0101008101010059010100c30101005801000701030e0001050202020103020205030100
-00cb0101008101010059010100c30101005801000701030e000105020202010302020503
-010000cb0101008101010059010100c30101005801000701030e00010502020201030202
-0503010000cb0101008101010059010100c30101005801000701030e0001050202020103
-02020503010000cb0101008101010059010100c30101005801000701030e000105020202
-010302020503010000cb0101008101010059010100c30101005801000701030e00010502
-0202010302020503010000cb0101008101010059010100c30101005801000701030e0001
-05020202010302020503010000cb0101008101010059010100c30101005801000701030e
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-030e000105020202010302020503010000cb0101008101010059010100c3010100580100
-0701030e000105020202010302020503010000cb0101008101010059010100c301010058
-01000701030e000105020202010302020503010000cb0101008101010059010100c30101
-005801000701030e000105020202010302020503010000cb0101008101010059010100c3
-0101005801000701030e000105020202010302020503010000cb01010081010100590101
-00c30101005801000701030e00010502020201030202050301ff01ff01ce0701030e0001
-0502020201030202050301ff01ff01ce0701001005020202010302020503010000cb0101
-008101010059010100c301010058010007010300000c0700000105020202010302020503
-010000cb0101008101010059010100c30101005801000701030000010508070103000001
-05020202010302020503010000cb0101008101010059010100c301010058010007010301
-0001050707010300000105020202010302020503010000cb0101008101010059010100c3
-010100580100070103010001050607010301000105020202010302020503010000cb0101
-008101010059010100c30101005801000701030200010505070103010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010302000105040701
-0302000105020202010302020503010000cb0101008101010059010100c3010100580100
-070103030001050307010302000105020202010302020503010000cb0101008101010059
-010100c30101005801000701030300010502070103030001050202020103020205030100
-00cb0101008101010059010100c301010058010007010304000105010701030300010502
-0202010302020503010000cb0101008101010059010100c3010100580100070103040001
-050007010304000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010305000007020304000105020202010302020503010000cb010100810101
-0059010100c3010100580100070103050000070103050001050202020103020205030100
-00cb0101008101010059010100c301010058010007010306070103050001050202020103
-02020503010000cb0101008101010059010100c301010058010007010306070003060001
-05020202010302020503010000cb0101008101010059010100c301010058010007010010
-05020202010302020503010000cb0101008101010059010100c301010058010007000011
-0502020201030202050207ff07ff07d30511020201030202050207ff07ff07d200000511
-02020103020205020701030d0000030000ff00ff00af03000001030c0001051102020103
-020205020701030b00010700030000ff00ff00ae070003000003030a0001051102020103
-0202050207010309000207010300000105ff05ff05ab0701030000050308000105110202
-010302020502070103070003050007010300000105ff05ff05ab07010300000105010003
-0306000105110202010302020502070103050003050207010300000105ff05ff05ab0701
-030000010503000303040001051102020103020205020701030300030504070103000001
-05ff05ff05ab070103000001050500030302000105110202010302020502070103010003
-050607010300000105ff05ff05ab07010300000105070003030000010511020201030202
-05020705050807010300000105ff05ff05ab070103000001050807030001051102020103
-02020502070103010703050607010300000105ff05ff05ab070103000001050707030300
-000105110202010302020502070103030703050407010300000105ff05ff05ab07010300
-0001050507030302000105110202010302020502070103050703050207010300000105ff
-05ff05ab0701030000010503070303040001051102020103020205020701030707030500
-07010300000105ff05ff05ab070103000001050107030306000105110202010302020502
-0701030907040300000105ff05ff05ab0701030000010703030800010511020201030202
-05020701030b07020300000107ff07ff07ad030000010701030a00010511020201010004
-05020701030d07000300000007ff07ff07ae030000000700030c00010511000502020400
-0502070100ff00ff00d105110000020204000000020204000502070000ff00ff00d20511
-00000202040000000202040005ff05ff05e800000202040000000202040005ff05ff05e8
-00000202040000000202040005ff05ff05e8000002020400000002020400000502ff02ff
-02dc00060202040000000208040002ff02ff02dc00000208040000000208040002ff02ff
-02dc00000208040000000208040001ff01ff01dc0000020804000000040901ff01ff01dc
-00000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 0 377 205
-%%EOF
diff --git a/lib/tv/doc/src/tv_start_other_node.gif b/lib/tv/doc/src/tv_start_other_node.gif
deleted file mode 100644
index 897686e5ef..0000000000
--- a/lib/tv/doc/src/tv_start_other_node.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_other_node.ps b/lib/tv/doc/src/tv_start_other_node.ps
deleted file mode 100644
index 34477bed6c..0000000000
--- a/lib/tv/doc/src/tv_start_other_node.ps
+++ /dev/null
@@ -1,2316 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (./tv_start_other_node.tmp.eps)
-%%CreationDate: (Tue Jun 12 16:05:42 2001)
-%%BoundingBox: 0 21 400 186
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 21 400 186
-userdict begin
-%%BeginData:
-DisplayImage
-0 21
-400.000000 165.000000
-12
-1001 414
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-4ac1df
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-aab6aa
-e7e7e7
-000000
-000000
-000000
-000000
-000000
-000000
-03ff03ff03ff03ff03ff03ff03ff03ff03c5000a01ff01ff01dc000a03f5000002080500
-01ff01ff01dc00000208050003f500000208050002ff02ff02dc00000208050003f50000
-0208050002ff02ff02dc00000208050003f500000202050602ff02ff02dc000005050202
-050003f50000020205000209000d02ff02ff02d000000202050003f50000020205000208
-0000020d050002e101030211010302380101020601010238010102310101022f010102ee
-00000202050003f500000202050002080000020d050002e1010102020107020001010203
-010102010101020e0105020001070201010302070100020b010102060101023301000203
-010102310101020b0104021e010102ee00000202050003f500000202050002080000020d
-050002e1010102050101020301010203010102010101020e010102070101020301010201
-010102050101020b010102060101023201010203010102310101020a010102020101021d
-010102ee00000202050003f500000202050002080000020205060203050002e101010205
-0101020301010203010102010101020e0101020701010203010102080104020101030203
-010102000101020301010202010302030104020601030203010102000101020701030201
-01040201010102000101020301030202010102000101020a010102000101020301030203
-010402020103020201010201010302020101020001010201010102030103020201010200
-01010201010102020103020201010202010102dd00000202050003f50000050302080000
-02020500040400000203050002e1010102050101020401010202010002020101020e0101
-020701010203010202080101020201010201010102020102020001010202010102010101
-020101010201010102090101020101010202010202000101020501010201010102010101
-020301020200010102010101020101010201010102000101020a01020200010102010101
-020101010201010102010101020101010201010102010101020001010200010102020102
-020001020200010102010101020101010201010102000101020101010201010102010101
-020101010202010102dd0000050303f50101020b000002030500040200000204050002e1
-010102050101020401010201010102020101020e01040204010102040103020601010206
-010102020101020101010202010102010101020101010201010202080101020101010202
-010102010101020501010201010102010101020301010201010102010101020101010201
-0102020c0101020101010201010102010101020101010201010102010101020101010201
-010102000101020001010202010102010101020101010205010102010102020301010201
-010102010101020101010202010002e1010103f50101020b000002030500040200000204
-050002e1010102050101020501010200010002030101020e010102070101020601020205
-010102030104020201010201010102020101020101050202010302060101020101010202
-01010201010102050101020101010201010102030101020101010201010502010101020d
-010102010101020101010201010102010101020101010201010502010101020001010200
-010102020101020101010201010102020104020101010204010102010105020201010200
-010102e1010103f50101020b000002040500040000000205050002e10101020501010205
-010302030101020e01010207010102070101020501010202010102010101020201010201
-010102020101020101010208010202050101020101010202010102010101020501010201
-01010201010102030101020101010201010102050101020d010102010101020101010201
-010102010101020101010201010102050101020101010200010102010101020101010201
-01010201010102010101020101010204010102010101020601010200010002e2010103f5
-0101020b000002040500040000000205050002e10101020501010206010102040101020e
-010102070101020301010201010102050101020201010201010102020101020101010202
-010102010101020201000205010102050101020101010202010102010101020501010201
-0101020101010203010102010101020101010202010002010101020d0101020101010201
-010102010101020101010200010202010101020201000202010102070101020101010201
-01010201010102010101020101010204010102010101020201000203010202e2010103f5
-0101020b0000020500000206050002e10101020501010206010102040101020e01050203
-010102040103020701020201010202000101020101040203010102020103020201040207
-01030203010102010101020601030203010202010101020101010202010302020101020d
-010102010101020201030203010102000101020201030204010502020101020101010201
-010102020102020001010200010102040101020201030204010102e3010103f50101020b
-0000020d050002e1010302110103029201060255010102e4010103f50101020b0000020d
-050002ff02eb010102e4010103f50101020b0000020d050002ff02ff02d2010103f50101
-020c050d02ff02ff02d3010103f5010102ff02ff02ee010103f5010102ff02ff02ee0101
-03f5010102ff02ff02ee010103f5010102ff02ff02ee010103f5010102ff02ff02ee0101
-03f501010202060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-00000600000006000000060000000600000006000202010103f501010202000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-06000000060001000202010103f5010102020600000006ff06ff06e40100060002020101
-03f501010202000006ff06ff06e601000202010103f5010102020600000006ff06ff06e4
-010006000202010103f501010202000006ff06ff06e601000202010103f5010102020600
-000006ff06ff06e4010006000202010103f5010102020000060c07040604070006030702
-061f0700060207000604070006270702060b07000606070006ff06ff0635070006020700
-06090702061401000202010103f50101020206000000060b0700060f0700061f07000602
-0700062c070006020700060a070006ff06ff063d070006020700060b0700061301000600
-0202010103f5010102020000060c07000606070206050700060307020618070006020700
-060207020603070206020700060207000617070006020700060107000600070106020704
-060207020603070206020700060007010603070206ff06ff062007000602070006020702
-060507000602070006000701060d01000202010103f50101020206000000060b07000608
-070006050700060207000602070006180700060007000605070006020700060207000601
-070006020700061707000602070006010701060107000603070006060700060207000602
-07000601070106010700060107000602070006ff06ff061f070006020700060107000602
-0700060407000602070106010700060b010006000202010103f5010102020000060c0703
-060507000605070006020700060207000618070006000700060507000602070006020700
-060107000600070006000700061707000602070006010700060207000603070006060700
-060207000602070006010700060207000601070006ff06ff062307040601070006020700
-060407000602070006020700060c01000202010103f50101020206000000060b07000608
-070006050700060207040618070006000700060507000602070406010700060007000600
-070006170700060207000601070006020700060307000606070006020700060207000601
-0700060207000602070206ff06ff06200700060207000601070406040700060207000602
-0700060b010006000202010103f5010102020000060c0700060807000605070006020700
-061d07000606070006020700060507000600070006000700061707000602070006010700
-060207000603070006060700060207000602070006010700060207000605070006ff06ff
-061f07000602070006010700060807000602070006020700060c01000202010103f50101
-020206000000060b07000608070006050700060207000602070006190700060607000602
-070006020700060107000600070006000700061707000602070006010701060107000603
-07000606070006020700060207000601070006020700060107000602070006ff06ff061f
-0700060207000601070006020700060407000602070106010700060b0100060002020101
-03f5010102020000060c0700060807000605070006030702061a07000606070006030702
-060307000600070006190702060207000600070106050701060407000603070206020700
-060207000602070206ff06ff062007000602070006020702060507000602070006000701
-060d01000202010103f501010202060000000676070006ff06ff065b0700060f01000600
-0202010103f5010102020000060b0706062a0706062a07060600070006ff06ff06450706
-060e0700061001000202010103f50101020206000000060a0706062a0706062a07060600
-070006ff06ff06450706060e0700060f010006000202010103f501010202000006ff06ff
-06e601000202010103f5010102020600000006ff06ff06e4010006000202010103f50101
-0202000006ff06ff06e601000202010103f5010102020600000006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-0202010103f5010102020000060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-0600010006000100060001000600010006000100060001000202010103f50101020206ff
-06ff06e80202010103f50101020206ff06ff06e80202010103f50101020206ff06ff06e8
-0202010103f50101020206ff06ff06e80202010103f50101020206ff06ff06e802020101
-0303000a01d9000a03010101020206ff06ff06e802020101030300000208050001d90000
-0208050003010101020206ff06ff06e802020101030300000208050002d9000002080500
-03010101020206ff06ff06e802020101030300000208050002d900000208050003010101
-020206ff06ff06e802020101030300000202050602d90000050502020500030101010202
-06ff06ff06e80202010103030000020205000209000d02cd000002020500030101010202
-06ff06ff06e802020101030300000202050002080000020d0500021a0103021101030250
-0101021a0101022700000202050003010101020206ff06ff06e802020101030300000202
-050002080000020d0500021a01010202010702000101020301010201010102100103022b
-0100020e0101021a0101022700000202050003010101020206ff06ff06e8020201010303
-00000202050002080000020d0500021a010102050101020301010203010102010101020f
-01010201010102290101020e0101021a0101022700000202050003010101020206ff06ff
-06e8020201010303000002020500020800000202050602030500021a0101020501010203
-01010203010102010101020e010102060103020301010200010102030101020001010203
-010302030103020001040201010302030104020601010200010102030103020301040202
-010302030104021700000202050003010101020206ff06ff06e802020101030300000503
-02080000020205000404000002030500021a010102050101020401010202010002020101
-020e01010205010102010101020201020200010102020102020001010201010102010101
-020101010201010102000101020201010201010102010101020101010206010202000101
-02010101020101010201010102010101020101010201010102010101021b000005030301
-0101020206ff06ff06e80202010103030101020b0000020305000402000002040500021a
-010102050101020401010201010102020101020e01010205010102010101020201010201
-010102020101020101010201010102010101020101010204010102020101020101010201
-010102010101020601010201010102010101020101010201010102010101020101010201
-010102010102021d010103010101020206ff06ff06e80202010103030101020b00000203
-05000402000002040500021a010102050101020501010200010002030101020e01010205
-010102010101020201010201010102020101020101010201010502010101020401010202
-010502010101020101010206010102010101020101010201010102010101020101010201
-010502020103021b010103010101020206ff06ff06e80202010103030101020b00000204
-05000400000002050500021a0101020501010205010302030101020e0101020501010201
-010102020101020101010202010102010101020101010205010102040101020201010205
-010102010101020601010201010102010101020101010201010102010101020101010208
-0102021a010103010101020206ff06ff06e80202010103030101020b0000020405000400
-000002050500021a0101020501010206010102040101020f010102020100020001010201
-010102020101020101010202010102010101020101010202010002010101020201000200
-010102020101020201000201010102000102020601010201010102010101020101010201
-010102000102020101010202010002050101021a010103010101020206ff06ff06e80202
-010103030101020b00000205000002060500021a01010205010102060101020401010210
-010302020103020301010201010102020101020101010202010302030103020201020201
-010302030101020001010206010102010101020201030203010102000101020201030202
-0104021b010103010101020206ff06ff06e80202010103030101020b0000020d0500021a
-010302110103029a010103010101020206ff06ff06e80202010103030101020b0000020d
-050002cf010103010101020206ff06ff06e80202010103030101020b0000020d050002cf
-010103010101020206ff06ff06e80202010103030101020c050d02d00101030101010202
-06ff06ff06e8020201010303010102eb010103010101020206ff06ff06e8020201010303
-010102eb010103010101020206ff06ff06e8020201010303010102eb0101030101010202
-06ff06ff06e8020201010303010102eb0101030101010202061c01020604010306c10102
-06040103061a0102067f01010605010206f001020604010306190101062f020201010303
-010102eb0101030101010202060e01060608010006060101060f010206010102069b0106
-06080100060601010610010506040101064d010206240104060d0101061e010206240102
-060101020693010606080100060601010611010306350202010103030101020206000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-06000000060000000600000006000000060000000600000002020101030101010202060e
-0100060101010600010006070101060601000611010106010100069d0100060101010600
-010006070101060601000613010106060100064d0101060001010624010106000101060c
-0100061e0101060001010624010106010100069501000601010106000100060701010606
-010006110101060101010634020201010303010102020000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060002020101030101010202061001010603010306020103
-060301010603010306080102060001010601010306000101060001000600010006020103
-068b010106030103060201030603010106030103060a010106030104064c010106010105
-060001030600010206020103060101010600010206070101060101010600010306030104
-061d01010601010506000103060001020602010306010101060001020607010206000101
-060101030600010106000100060001000602010306830101060301030602010306030101
-060301030609010106010100060001030602010506010103062102020101030301010202
-0600000006e2010002020101030101010202061001010606010106000101060101010602
-010106020101060101010607010006000100060001000605010106000105060001010601
-0101068a0101060601010600010106010101060201010602010106010101060901010602
-010106010101064c01000602010106000101060201000600010206000101060001010601
-010106010102060001000607010106010101060201010602010106010101061d01000602
-010106000101060201000600010206000101060001010601010106010102060001000607
-010006000100060001000605010106000105060001010601010106820101060601010600
-010106010101060201010602010106010101060801020604010106020101060001010601
-010106010101062002020101030301010202000006e20100060002020101030101010202
-061001000604010406000101060101010602010106010106060701000600010206020104
-060001010600010006000107068a01000604010406000101060101010602010106010106
-060901010601010106020101064b01010602010006010101060001000600010006000101
-0601010806010101060a0103060401010601010106020101061c01010602010006010101
-0600010006000100060001010601010806010101060a0100060001020602010406000101
-060001000600010706820100060401040600010106010101060201010601010606090102
-0603010106040101060101060620020201010303010102020600000006e2010002020101
-030101010202060f0101060201010601010106000101060201010601010106020101060b
-010106000101060101010601010106010100060001000600010006000101068e01010602
-01010601010106000101060201010601010106020101060d01010602010106010101064c
-010106010101060101020600010006010100060201000600010106050101060a01010606
-01010602010106010101061d010106010101060101020600010006010100060201000600
-010106050101060a01010600010106010101060101010601010006000100060001000600
-010106860101060201010601010106000101060201010601010106020101060b01010601
-0101060201010603010106030101062502020101030301010202000006e2010006000202
-0101030101010202060f0101060201010601010106000101060101010602010106020101
-060101010607010006010101060101010601010106000101060001000600010006000101
-06010101068a010106020101060101010600010106010101060201010602010106010101
-060901010602010106010101064c01010600010106020103060101010601010106000101
-0601010106010101060a0101060601010602010106010101061d01010600010106020103
-0601010106010101060001010601010106010101060a0100060101010601010106010101
-060001010600010006000100060001010601010106820101060201010601010106000101
-060101010602010106020101060101010607010106010101060201010602010206000101
-06000101060101010621020201010303010102020600000006e201000202010103010101
-0202060e01030602010a0601010506010103060701020600010106020107060001000600
-010106000103068a01030602010a06010105060101030608010506010105064c01020603
-01010600010006000103060001020600010306010104060701030603010506010105061d
-010206030101060001000600010306000102060001030601010406070102060001010602
-0107060001000600010106000103068201030602010a0601010506010103060901030601
-010506000105060101030622020201010303010102020000060c07040604070006030702
-06c3010006000202010103010101020206ff06ff06e80202010103030101020206000000
-060b0700060f070006c401000202010103010101020206ff06ff06e80202010103030101
-02020000060c070006060702060507000603070206bc0100060002020101030101010202
-06ff06ff06e80202010103030101020206000000060b0700060807000605070006020700
-0602070006bc01000202010103010101020206ff06ff06e8020201010303010102020000
-060c07030605070006050700060207000602070006bb0100060002020101030101010202
-06ff06ff06e80202010103030101020206000000060b0700060807000605070006020704
-06bc01000202010103010101020206ff06ff06e8020201010303010102020000060c0700
-06080700060507000602070006bf010006000202010103010101020206ff06ff06e80202
-010103030101020206000000060b07000608070006050700060207000602070006bc0100
-02020101030101010202060201ff01ff01e20602020201010303010102020000060c0700
-06080700060507000603070206bc01000600020201010301010102020603010000cb0101
-008101010059010100c30101005801010600010006000100060001000600010006000100
-060001000600010006000100060000000602020201010303010102020600000006e20100
-020201010301010102020603010000cb0101008101010059010100c30101005801000600
-010004060100040600000603020201010303010102020000060b070606cf010006000202
-01010301010102020603010000cb010100810101000c0100002a0100001f010100c30101
-00580101060004050000060004060600000006020202010103030101020206000000060a
-070606d001000202010103010101020206030100001f0100000a0100009e010100810101
-000b0100000301020003010200090104000a010100020100001e0101001e010200050100
-0012010000060100002e010000120102000301020031010100080104004a010006000100
-040506000100060004050000060302020101030301010202000006e20100060002020101
-03010101020206030100001f0100000a0100009e010100810101000a0100000301000002
-0100000101000002010000080100000d01000001010000020100001d0101002001000019
-0100003601000014010000050100003101010008010000020100004a0101060004040600
-0000060001000405060000000602020201010303010102020600000006e2010002020101
-03010101020206030100000901020003010200090104000201020002010000000101009b
-010100810101000901000008010000010100000c0100000d01000001010000030100001c
-010100090102000201000000010100020100000001010005010000030102000301020003
-01020002010400020102000301020002010000000101000a010200030102000201000000
-010100020104000101000000010100030102000501000005010000030102000201000000
-010100230101000c0100004a010006000100040400000602010004040000060302020101
-030301010202000006e20100060002020101030101010202060301000008010000020100
-0001010000020100000a010000030100000201000001010100010100009a010100810101
-000801000009010000010100000c0103000a01000001010000040100001b010100080100
-000201000001010100010100000101010001010000040100000501000002010000020100
-000101000002010000030100000601000002010000020100000101010001010000080100
-000201000001010000020100000101010001010000030100000301010001010000010100
-0002010000040100000501000002010000020100000101010001010000220101000b0100
-004b01010600040300000602010006000404060000000602020201010303010102020600
-000006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010002020101030101010202
-06030100000c010000010100000e0100000701000001010000020100009a010100810101
-000701000009010000020103000d0100000901000001010000050100001a0101000c0100
-000101000002010000010100000201000004010000050100000201000009010000030100
-000601000002010000020100000101000002010000080100000501000002010000010100
-000201000003010000030100000501000002010000040100000501000002010000020100
-0001010000260101000b0100004b01000600010004030600000006020100060004030000
-060302020101030301010202000006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-0100060002020101030101010202060301000009010300010100000e0100000401030001
-010000020100009a01010081010100080100000701000003010000020100000c01000009
-01000001010000040100001b010100090103000101000002010000010100000201000004
-010000050100000201000006010300030100000601000002010000020100000101000002
-010000080100000501000002010000010100000201000003010000030100000501000002
-01000004010000050100000201040001010000260101000b0100004b0101060004020600
-00000604010004030600000006020202010103030101020206e502020101030101010202
-06030100000801000002010000010100000e010000030100000201000001010000020100
-009a01010081010100090100000501000004010000020100000801000002010000090100
-0001010000030100001c0101000801000002010000010100000201000001010000020100
-000401000005010000020100000501000002010000030100000601000002010000020100
-000101000002010000080100000501000002010000010100000201000003010000030100
-00050100000201000004010000050100000201000005010000260101000a0100004c0100
-0600010004020000060601000402000006030202010103030101020206e5020201010301
-010102020603010000080100000201000001010000020100000a01000003010000020100
-0001010100010100009a010100810101000a010000030100000501000002010000030101
-000201000002010000030101000301000001010000020100001d01010008010000020100
-000101010001010000010101000101000004010000050100000201000002010000010100
-000201000003010000060100000201000002010000010100000201000008010000020100
-000101000002010000010100000201000003010000030100000501000002010000040100
-0005010000020100000201000001010000260101000a0100004c01010600040100000606
-0100060004020600000006020202010103030101020206e5020201010301010102020603
-01000009010300020102000c0101000201030001010000000101009b010100810101000b
-010000020104000201020004010100030102000401010004010100020100001e01010009
-010300010100000001010002010000000101000501000005010000030102000301030004
-010100040100000301020002010000020100000901020003010200020100000201000004
-010100010100000601020005010000050100000301020002010000260101000a0100004c
-0100060001000401060000000606010006000401000006030202010103030101020206e5
-02020101030101010202060301000015010500af010100810101000c0100002a0100001f
-0101000f010000050100003c010500680101005801010600040006000000060801000401
-0600000006020202010103030101020206e5020201010301010102020603010000cb0101
-0081010100590101000f01000005010000ab0101005801000600010004000000060a0100
-0400000006030202010103030101020206e5020201010301010102020603010000cb0101
-0081010100590101000f01000005010000ab010100580101060000000600010006000100
-060001000600010006000100060001000600040006000000060202020101030301010202
-06e5020201010301010102020603010000cb0101008101010059010100c3010100580100
-060001000600010006000100060001000600010006000100060001000600010006000000
-06030202010103030101020206e5020201010301010102020603010000cb010100810101
-0059010100c30101005801010600040e0600000006020202010103030101020206e50202
-01010301010102020603010000cb0101008101010059010100c301010058010006000100
-060000000600000006000000060000000600000006000000060000000600000006030202
-010103030101020206e5020201010301010102020603010000cb01010081010100590101
-00c301010058010106000000060000000600000006000000060000000600000006000000
-060001000600000006020202010103030101020206e502020101030101010202060301ff
-01ff01ce0600010006000000060a01000600000006030202010103030101020206e50202
-0101030101010202060308cd01ff01ff010106000000060c010006000000060202020101
-03030101020206e5020201010301010102020603080009cb080001000981010109590101
-09c30101095801000600010006000000060a010006000000060302020101030301010202
-06e5020201010301010102020603080009cb08000100090b010109550101091b01010959
-010109c301010958010106000000060c01000600000006020202010103030101020206e5
-020201010301010102020603080009cb08000100090a0100091c01000931010009080100
-091a0101090c0100093101000918010109c30101095801000600010006000000060a0100
-0600000006030202010103030101020206e50202010103010101020206030800091a0800
-09af08000100090a01000905010009050101090c01000903010209030102090a01020902
-0104090a01010902010009070100091a0101090b01000903010209030102090a01020902
-0104090a01010902010009170101091a010009a70101090901020904010109030102093d
-010106000000060c01000600000006020202010103030101020206cf0100060001000600
-010006000100060001000600010006000100060001000600010006040202010103010101
-020206030800091a080009af08000100090a0100090401010904010009010100090a0100
-090301000902010009010100090201000908010009020100090101000902010009090100
-090101000902010009060100091a0101090a010009030100090201000901010009020100
-0908010009020100090101000902010009090100090101000902010009160101091a0100
-09a70101090801000902010009020100090101000901010009020100093c010006000100
-06000000060a01000600000006030202010103030101020206ce01000600010006000100
-060001000600010006000100060001000600010006000100060000000603020201010301
-0101020206030800090908020903080209030801090008000902080209a908000100090a
-010009030100090001000904010009010100090901000908010009010100091001000905
-010009090100090101000903010009050100091a01010909010009080100090101000910
-010009050100090901000901010009030100091501010909010209030102090301010900
-010009020102090a01020903010209020100090001010902010009020100090201020902
-01000900010109700101090c01000902010009010100090101000940010106000000060c
-010006000000060202020101030301010202060500000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000602010004060100040600000604
-020201010301010102020603080009080800090208000901080009020800090108000901
-0801090108000902080009a808000100090a010009050100090401000901010009080100
-09090100090101000910010009040100090a0100090101000904010009040100091a0101
-0908010009090100090101000910010009040100090a0100090101000904010009140101
-090801000902010009010100090201000901010009010101090101000902010009080100
-090201000901010009020100090101010901010009010100090201000901010009020100
-0901010109010100096f0101090c01000902010009010100090101000940010006000100
-06000000060a010006000000060302020101030301010202060501000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000001000000010000000100
-000001000000010000000100000001000000010000000100000106010100060004050000
-060004060600000006030202010103010101020206030800090808000905080009020800
-0901080009020800090108000902080009a8080001000908010109060100090401000901
-0100090701000909010009020103090c010009050100090a010009010100090501000904
-010109180101090701000909010009020103090c010009050100090a0100090101000905
-010009130101090801000905010009020100090101000902010009010100090201000908
-010009050100090201000901010009050100090201000901010009020100090101000973
-0101090b0100090301000901010009010103093d010106000000060c0100060000000602
-0202010103030101020206050000010000c4060201000405060001000600040500000604
-020201010301010102020603080009080800090508000902080009010800090208000901
-080409a808000100090a0100090501000904010009010100090801000907010009030100
-09020100090a010009060100090a0100090101000904010009040100091a010109080100
-090701000903010009020100090a010009060100090a0100090101000904010009140101
-090801000905010009020100090101000902010009010104090901020902010409010100
-0906010009000100090201040901010009730101090a0100090401000901010009010100
-09020100093c01000600010006000000060a010006000000060302020101030301010202
-0605010000c5060101000600040406000000060001000405060000000603020201010301
-010102020603080009080800090508000902080009010800090208000901080009ac0800
-0100090a0100090501000904010009010100090901000905010009040100090201000909
-010009060100090b0100090101000903010009050100091a010109090100090501000904
-0100090201000909010009060100090b0100090101000903010009150101090801000905
-010009020100090101000902010009010100091001000901010009050100090601000900
-01000902010009050100097301010909010009050100090101000901010009020100093c
-010106000000060c01000600000006020202010103030101020206050000010000260100
-009c06020100040400000602010004040000060402020101030101010202060308000908
-08000902080009010800090208000901080009010801090108000902080009a808000100
-090a01000905010009040100090101000903010109040100090301000905010009020100
-0903010109020100090701000905010109030100090101000902010009060100091a0101
-090a01000903010009050100090201000903010109020100090701000905010109030100
-090101000902010009160101090801000902010009010100090201000901010009010101
-090101000902010009080100090201000901010009020100090101000907010009030100
-0902010009010100097301010908010009060100090101000901010009020100093c0100
-0600010006000000060a01000600000006030202010103030101020206050100001a0100
-000a01000000010000180102007f06010100060004030000060201000600040406000000
-060302020101030101010202060308000909080209030802090308010900080009020802
-09a908000100090a01000903010409030101090401010905010009020104090201020904
-0101090201040903010009050101090401010902010009070100091a0101090b01000902
-010409020102090401010902010409030100090501010904010109020100091701010909
-010209030102090301010900010009020102090a01020903010209020100090701000904
-01020902010009730101090801040903010109030102093d010106000000060c01000600
-0000060202020101030301010202060500000100002401000002010000190100007f0602
-0100040306000000060201000600040300000604020201010301010102020603080009cb
-08000100090a010009140100090601000931010009080100091a0101090c010009310100
-091801010923010509990101095801000600010006000000060a01000600000006030202
-010103030101020206050100000901010000010000030102000301020002010000000101
-000201000000010200010101000001000003010200020100000001010005010000030102
-000201000002010000700601010006000402060000000604010004030600000006030202
-01010301010102020603080009cb08000100090b01010910010109420101091b01010959
-010109c301010958010106000000060c0100060000000602020201010303010102020605
-000001000008010000000100000001000001010000020100000401000002010100010100
-000101000000010000000100000101000000010000000100000101000002010000010101
-000101000004010000020100000201000001010000020100007006020100040200000606
-0100040200000604020201010301010102020603080009cb080001000981010109590101
-09c30101095801000600010006000000060a010006000000060302020101030301010202
-060501000009010000000100000001000005010000040100000201000002010000010100
-000001000000010000010100000001000000010000050100000101000008010000020100
-000201000002010000010100007006010100060004010000060601000600040206000000
-0603020201010301010102020603080009cb08000100098101010959010109c301010958
-010106000000060c01000600000006020202010103030101020206050000010000080100
-000001000000010000020103000401000002010000020100000101000000010200010100
-000001000000010000020103000101000008010000020104000201000001010000700602
-0100040106000000060601000600040100000604020201010301010102020603080009cb
-08000100098101010959010109c30101095801000600010006000000060a010006000000
-060302020101030301010202060501000009010000000100000001000001010000020100
-000401000002010000020100000101000005010000000100000001000001010000020100
-000101000008010000020100000701000000010000700601010006000400060000000608
-01000401060000000603020201010301010102020603080009cb08000100098101010959
-010109c301010958010106000000060c0100060000000602020201010303010102020605
-000001000008010000000100000001000001010000020100000401000002010000020100
-000201000001010000010100000001000000010000010100000201000001010000080100
-00020100000201000003010100710602010004000000060a010004000000060402020101
-0301010102020603080009cb08000100098101010959010109c301010958010006000100
-06000000060a010006000000060302020101030301010202060501000009010000000100
-000001000002010300040100000201000002010000030101000201000000010000000100
-000201030001010000080100000301020005010000710601010006000000060001000600
-010006000100060001000600010006000100060004000600000006030202010103010101
-0202060308cd01ff01ff010106000000060c010006000000060202020101030301010202
-060500000100005101000071060201000600010006000100060001000600010006000100
-060001000600010006000000060402020101030101010202060308cd01ff01ff01000600
-010006000000060a01000600000006030202010103030101020206050100004f01000000
-01000072060101000600040e060000000603020201010301010102020603080009cb0800
-0100098101010959010109c301010958010106000000060c010006000000060202020101
-030301010202060500000100004f01000073060201000600000006000000060000000600
-0000060000000600000006000000060000000604020201010301010102020603080009cb
-08000100090b010109550101091b01010959010109c30101095801000600010006000000
-060a0100060000000603020201010303010102020605010000c506010100060000000600
-000006000000060000000600000006000000060000000600010006000000060302020101
-0301010102020603080009cb08000100090a0100091c01000931010009080100091a0101
-090c0100093101000918010109c301010958010106000000060c01000600000006020202
-010103030101020206050000010000c40602010006000000060a01000600000006040202
-010103010101020206030800091a080009af08000100090a01000905010009050100090d
-01000903010209030102090a010209020104090a01010902010009070100091a0101090b
-01000903010209030102090a010209020104090a01010902010009170101091a010009a7
-01010909010209030102094401000600010006000000060a010006000000060302020101
-030301010202060501000001040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000000400000004000000040000000400000004000000040000000400000004000000
-040000020601010006000000060c01000600000006030202010103010101020206030800
-091a080009af08000100090a01000904010109040101090c010009030100090201000901
-010009020100090801000902010009010100090201000909010009010100090201000906
-0100091a0101090a01000903010009020100090101000902010009080100090201000901
-01000902010009090100090101000902010009160101091a010009a70101090801000902
-010009010100090201000943010106000000060c01000600000006020202010103030101
-020206050000010004c200010602010006000000060a0100060000000604020201010301
-010102020603080009090802090308020903080109000800090208020909080009000801
-0903080209020801090008000903080209030802097f08000100090a0100090301000900
-01000903010009000100090b010009080100090101000910010009050100090901000901
-01000903010009050100091a010109090100090801000901010009100100090501000909
-01000901010009030100091501010909010209030102090301010900010009020102090a
-010209030102090201000900010109020100090201000902010209020100090001010970
-0101090c010009050100094301000600010006000000060a010006000000060302020101
-030301010202060501000001044f0100046f010000010601010006000000060c01000600
-000006030202010103010101020206030800090808000902080009010800090208000901
-080009010801090108000902080009080801090108000901080009020800090108000900
-08000900080009010800090208000901080009020800097e08000100090a010009050100
-09050100090a010009090100090101000910010009040100090a01000901010009040100
-09040100091a01010908010009090100090101000910010009040100090a010009010100
-090401000914010109080100090201000901010009020100090101000901010109010100
-090201000908010009020100090101000902010009010101090101000901010009020100
-09010100090201000901010109010100096f0101090c0100090501000943010106000000
-060c0100060000000602020201010303010102020605000001000411010004030100042c
-0100040901000400010004180102045300010602010006000000060a0100060000000604
-020201010301010102020603080009080800090508000902080009010800090208000901
-080009020800090808000902080009050800090108000900080009000800090108000902
-080009010800098208000100090801010906010009050100090901000909010009020103
-090c010009050100090a0100090101000905010009040101091801010907010009090100
-09020103090c010009050100090a01000901010009050100091301010908010009050100
-090201000901010009020100090101000902010009080100090501000902010009010100
-090501000902010009010100090201000901010009730101090a01010904010109440100
-0600010006000000060a0100060000000603020201010303010102020605010000010410
-010004030100042c01000408010004020100041901000452010000010601010006000000
-060c01000600000006030202010103010101020206030800090808000905080009020800
-090108000902080009010804090808000902080009020803090108000900080009000800
-0901080409020802097f08000100090a01000905010009050100090a0100090701000903
-010009020100090a010009060100090a0100090101000904010009040100091a01010908
-0100090701000903010009020100090a010009060100090a010009010100090401000914
-010109080100090501000902010009010100090201000901010409090102090201040901
-01000906010009000100090201040901010009730101090c010009050100094301010600
-0000060c0100060000000602020201010303010102020605000001000409010204020104
-040101000400010104030102040201000400010104090100040001010403010204030101
-040001000402010204020100040001020401010104000100040301020402010004000101
-04050100040301020402010004020100044400010602010006000000060a010006000000
-060402020101030101010202060308000908080009050800090208000901080009020800
-09010800090c080009020800090108000902080009010800090008000900080009010800
-09090800097e08000100090a01000905010009050100090b010009050100090401000902
-01000909010009060100090b0100090101000903010009050100091a0101090901000905
-010009040100090201000909010009060100090b01000901010009030100091501010908
-010009050100090201000901010009020100090101000910010009010100090501000906
-010009000100090201000905010009730101090c01000905010009430100060001000600
-0000060a0100060000000603020201010303010102020605010000010407010004020100
-040301000403010104010100040101000402010004010101040101000408010104010100
-040101000402010004010100040101010401010004020100040101000400010004000100
-040101000400010004000100040101000402010004010101040101000404010004020100
-0402010004010100040201000443010000010601010006000000060c0100060000000603
-020201010301010102020603080009080800090208000901080009020800090108000901
-080109010800090208000908080009020800090108000902080009010800090008000900
-080009010800090208000901080009020800097e08000100090a01000905010009050100
-090501010904010009030100090501000902010009030101090201000907010009050101
-09030100090101000902010009060100091a0101090a0100090301000905010009020100
-090301010902010009070100090501010903010009010100090201000916010109080100
-090201000901010009020100090101000901010109010100090201000908010009020100
-090101000902010009010100090701000903010009020100090101000973010109080100
-0902010009010100090201000943010106000000060c0100060000000602020201010303
-010102020605000001000408010004020100040301000403010004020100040101000402
-010004010100040c01000402010004010100040201000401010004020100040101000402
-010004010100040001000400010004010100040001000400010004050100040101000408
-010004020100040201000402010004010100044400010602010006000000060a01000600
-000006040202010103010101020206030800090908020903080209030801090008000902
-08020909080009020800090208030901080009000800090008000902080209030802097f
-08000100090a010009030104090101040903010109050100090201040902010209040101
-090201040903010009050101090401010902010009070100091a0101090b010009020104
-090201020904010109020104090301000905010109040101090201000917010109090102
-09030102090301010900010009020102090a010209030102090201000907010009040102
-09020100097301010909010209030102094401000600010006000000060a010006000000
-060302020101030301010202060501000001040701000402010004030100040301000402
-01000401010404010100040c010004020100040101000402010004010100040201000401
-010404010100040001020401010004000100040001000402010304010100040801000402
-010404020100040101000443010000010601010006000000060c01000600000006030202
-0101030101010202060308000923080509a108000100090a010009140100090601000931
-010009080100091a0101090c010009310100091801010923010509990101095801010600
-0000060c0100060000000602020201010303010102020605000001000408010004020100
-0403010004030100040201000401010004050100040c0100040201000401010004020100
-040101000402010004010100040501000405010004000100040001000401010004020100
-0401010004080100040201000407010004000100044400010602010006000000060a0100
-060000000604020201010301010102020603080009cb08000100090b0101091001010942
-0101091b01010959010109c30101095801000600010006000000060a0100060000000603
-020201010303010102020605010000010407010004020100040301000403010004020100
-040101000402010004010100040c01000402010004010100040201000401010004010101
-040101000402010004020100040101000401010004000100040001000401010004020100
-04010100040801000402010004020100040301010444010000010601010006000000060c
-0100060000000603020201010301010102020603080009cb080001000981010109590101
-09c301010958010106000000060c01000600000006020202010103030101020206050000
-0100040901020405010104010100040201000402010204020100040c0100040201000402
-010204030101040001000402010204040101040201000400010004000100040201030401
-0100040801000403010204050100044500010602010006000000060a0100060000000604
-020201010301010102020603080009cb08000100098101010959010109c3010109580100
-0600010006000000060a0100060000000603020201010303010102020605010000010429
-0105044a01000444010000010601010006000000060c0100060000000603020201010301
-010102020603080009cb08000100098101010959010109c301010958010106000000060c
-010006000000060202020101030301010202060500000100047801000400010004460001
-0602010006000000060a0100060000000604020201010301010102020603080009cb0800
-0100098101010959010109c30101095801000600010006000000060a0100060000000603
-02020101030301010202060501000001047801000446010000010601010006000000060c
-0100060000000603020201010301010102020603080009cb080001000981010109590101
-09c301010958010106000000060c01000600000006020202010103030101020206050000
-010004c200010602010006000000060a0100060000000604020201010301010102020603
-08cd01ff01ff01000600010006000000060a010006000000060302020101030301010202
-060501000001040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000400
-010004000100040001000400010004000100040001000400010004000100040001000001
-0601010006000000060c010006000000060302020101030101010202060308cd01ff01ff
-010106000000060c01000600000006020202010103030101020206050000010000c40602
-010006000000060a0100060000000604020201010301010102020603080009cb08000100
-098101010959010109c30101095801000600010006000000060a01000600000006030202
-01010303010102020605010000c50601010006000000060c010006000000060302020101
-0301010102020603080009cb08000100090b0101094e0101092201010959010109c30101
-0958010106000000060c01000600000006020202010103030101020206050000010000c4
-0602010006000000060a0100060000000604020201010301010102020603080009cb0800
-0100090a010009150100093101000908010009210101090c0100093101000918010109c3
-0101095801000600010006000000060a0100060000000603020201010303010102020605
-010000c50601010006000000060c01000600000006030202010103010101020206030800
-091d08000908080009a208000100090a010009040102090c01000903010209030102090b
-010009030104090a0101090201000907010009210101090b01000903010209030102090b
-010009030104090a0101090201000917010109180100090a010009220102097701010909
-0102094b010106000000060c010006000000060202020101030301010202060500000100
-00c40602010006000000060a01000600000006040202010103010101020206030800091d
-080009ac08000100090a01000903010009020100090a0100090301000902010009010100
-090201000909010109030100090201000909010009010100090201000906010009210101
-090a01000903010009020100090101000902010009090101090301000902010009090100
-09010100090201000916010109180100090a010009240100097701010908010009020100
-094a01000600010006000000060a01000600000006030202010103030101020206050100
-00c50601010006000000060c010006000000060302020101030101010202060308000909
-080209030802090308020902080009010800090308020903080209030802099408000100
-090a01000903010009020100090901000908010009010100090c01000900010009070100
-0909010009010100090301000905010009210101090901000908010009010100090c0100
-090001000907010009090100090101000903010009150101090801000900010109030102
-090201040908010009010100090301020902010009000101090201000900010109030102
-0905010009770101090c0100094a010106000000060c0100060000000602020201010303
-0101020206050000010000c40602010006000000060a0100060000000604020201010301
-010102020603080009080800090208000901080009020800090108000902080009010800
-090008000906080009020800090208000901080009020800099308000100090a01000903
-010009020100090801000909010009010100090e010009060100090a0100090101000904
-01000904010009210101090801000909010009010100090e010009060100090a01000901
-010009040100091401010908010109010100090101000902010009030100090a01000900
-010009030100090201000901010109010100090101010901010009010100090201000904
-010009770101090c0100094a01000600010006000000060a010006000000060302020101
-0303010102020605010000c50601010006000000060c0100060000000603020201010301
-010102020603080009080800090508000902080009010800090208000901080109070800
-090208000902080009010800099708000100090801010905010209080100090901000902
-0103090b010009060100090a0100090101000905010009040101091f0101090701000909
-010009020103090b010009060100090a0100090101000905010009130101090801000902
-0100090101000902010009030100090a0101090401000902010009010100090501000902
-010009010100090201000904010009770101090b0100094b010106000000060c01000600
-000006020202010103030101020206050000010000c40602010006000000060a01000600
-000006040202010103010101020206030800090808000905080009020800090108000902
-080009010801090708000902080409020802099408000100090a01000903010009020100
-09080100090701000903010009020100090a010009060100090a01000901010009040100
-090401000921010109080100090701000903010009020100090a010009060100090a0100
-09010100090401000914010109080100090201000901010409030100090a010109040104
-090101000905010009020100090101040904010009770101090a0100094c010006000100
-06000000060a0100060000000603020201010303010102020605010000c5060101000600
-0000060c0100060000000603020201010301010102020603080009080800090508000902
-080009010800090208000901080009000800090608000902080009090800099308000100
-090a0100090301000902010009090100090501000904010009020100090a010009050100
-090b01000901010009030100090501000921010109090100090501000904010009020100
-090a010009050100090b0100090101000903010009150101090801000902010009010100
-09070100090a010009000100090301000905010009050100090201000901010009080100
-0977010109090100094d010106000000060c010006000000060202020101030301010202
-06050000010000c40602010006000000060a010006000000060402020101030101010202
-060308000908080009020800090108000902080009010800090208000901080009010800
-0905080009020800090208000901080009020800099308000100090a0100090301000902
-010009030101090401000903010009050100090201000903010109040100090501000905
-01010903010009010100090201000906010009210101090a010009030100090501000902
-010009030101090401000905010009050101090301000901010009020100091601010908
-010009020100090101000902010009030100090a01000901010009020100090201000901
-010009050100090201000901010009020100090401000977010109080100094e01000600
-010006000000060a0100060000000603020201010303010102020605010000c506010100
-06000000060c010006000000060302020101030101010202060308000909080209030802
-090308020902080009020800090408000903080209030802099408000100090a01000904
-010209040101090501000902010409020102090401010902010409030100090501010904
-0101090201000907010009210101090b0100090201040902010209040101090201040903
-010009050101090401010902010009170101090801000902010009020102090501010908
-010009020100090201020902010009050100090201000902010209050100097701010908
-0104094a010106000000060c010006000000060202020101030301010202060500000100
-00c40602010006000000060a0100060000000604020201010301010102020603080009cb
-08000100090a0100090d010009060100093101000908010009210101090c010009310100
-09180101091c010509a00101095801000600010006000000060a01000600000006030202
-01010303010102020605010000c50601010006000000060c010006000000060302020101
-0301010102020603080009cb08000100090b010109090101094201010922010109590101
-09c301010958010106000000060c01000600000006020202010103030101020206050000
-010000c40602010006000000060a01000600000006040202010103010101020206030800
-09cb08000100098101010959010109c30101095801000600010006000000060a01000600
-00000603020201010303010102020605010000c50601010006000000060c010006000000
-0603020201010301010102020603080009cb08000100098101010959010109c301010958
-010106000000060c01000600000006020202010103030101020206050000010000c40602
-010006000000060a0100060000000604020201010301010102020603080009cb08000100
-098101010959010109c30101095801000600010006000000060a01000600000006030202
-01010303010102020605010000c50601010006000000060c010006000000060302020101
-0301010102020603080009cb08000100098101010959010109c301010958010106000000
-060c01000600000006020202010103030101020206050000010000c40602010006000000
-060a0100060000000604020201010301010102020603080009cb08000100098101010959
-010109c30101095801000600010006000000060a01000600000006030202010103030101
-02020605010000c50601010006000000060c010006000000060302020101030101010202
-060308cd01ff01ff010106000000060c0100060000000602020201010303010102020605
-0000010000c40602010006000000060a0100060000000604020201010301010102020603
-01ff01ff01ce0600010006000000060a0100060000000603020201010303010102020605
-010000c50601010006000000060c01000600000006030202010103010101020206030100
-00cb0101008101010059010100c301010058010106000000060c01000600000006020202
-010103030101020206050000010000c40602010006000000060a01000600000006040202
-01010301010102020603010000cb0101008101010059010100c301010058010006000100
-06000000060a0100060000000603020201010303010102020605010000c5060101000600
-0000060c0100060000000603020201010301010102020603010000cb010100810101000c
-0100003101000018010100c301010058010106000000060c010006000000060202020101
-03030101020206050000010000c40602010006000000060a010006000000060402020101
-030101010202060301000010010200090100000d0102000a010200100100007b01010081
-0101000b01000003010200030102000b010000050100000c010100020100001701010010
-010200090100000d010200930101000a0101004b01000600010006000000060a01000600
-00000603020201010303010102020605010000c50601010006000000060c010006000000
-060302020101030101010202060301000012010000090100000f0100000c010000100100
-007b010100810101000a0100000301000002010000010100000201000009010100040101
-000b01000001010000020100001601010012010000090100000f01000093010100090100
-00010100004a010106000000060c01000600000006020202010103030101020206050000
-010000c40602010006000000060a01000600000006040202010103010101020206030100
-0009010100000100000401000003010200020100000001010003010200050100000c0100
-000301020003010200020100000101000003010200710101008101010009010000080100
-00010100000c0100000001000003010000000100000b0100000101000003010000150101
-000901010000010000040100000301020002010000000101000301020005010000090100
-0000010100030102000201010000010000030102000a0102000301020002010000000101
-0002010000020100000201020002010000000101003f01010009010000010100004a0100
-0600010006000000060a0100060000000603020201010303010102020605010000c50601
-010006000000060c01000600000006030202010103010101020206030100000801000001
-01010004010000020100000201000001010100010100000101000002010000040100000c
-010000020100000201000001010000020100000101000000010000030100000201000070
-010100810101000801000009010000010100000e010000050100000b0100000101000004
-010000140101000801000001010100040100000201000002010000010101000101000001
-010000020100000401000009010100010100000101000002010000010100000001000000
-010000010100000201000008010000020100000101000002010000010101000101000001
-01000002010000010100000201000001010100010100003e01010009010000010100004a
-010106000000060c01000600000006020202010103030101020206050000010000c40602
-010006000000060a01000600000006040202010103010101020206030100000801000002
-010000040100000201000002010000010100000201000005010000040100000c01000002
-010000020100000101000005010100040100007401010081010100070100000901000002
-0103000b010000050100000b010000010100000501000013010100080100000201000004
-010000020100000201000001010000020100000501000004010000090100000201000005
-010000010100000001000000010000010100000201000008010000050100000201000001
-01000005010000020100000101000002010000010100004201010009010000010100004a
-01000600010006000000060a0100060000000603020201010303010102020605010000c5
-0601010006000000060c0100060000000603020201010301010102020603010000080100
-0002010000040100000201000002010000010100000201000002010300040100000c0100
-000201000002010000010100000501010005010200710101008101010008010000070100
-0003010000020100000a010000050100000b010000010100000401000014010100080100
-000201000004010000020100000201000001010000020100000201030004010000090100
-000201000002010300010100000001000000010000010104000901020002010400010100
-00060100000001000002010400010100004201010009010000010100004a010106000000
-060c01000600000006020202010103030101020206050000010000c40602010006000000
-060a01000600000006040202010103010101020206030100000801000002010000040100
-00020100000201000001010000020100000101000002010000040100000c010000020100
-000201000001010000050100000001000007010000700101008101010009010000050100
-0004010000020100000a010000050100000b010000010100000301000015010100080100
-000201000004010000020100000201000001010000020100000101000002010000040100
-000901000002010000010100000201000001010000000100000001000001010000100100
-000101000005010000060100000001000002010000050100004201010009010000010100
-004a01000600010006000000060a01000600000006030202010103030101020206050100
-00c50601010006000000060c010006000000060302020101030101010202060301000008
-010000010101000401000002010000020100000101010001010000010100000201000004
-0100000c0100000201000002010000010100000201000001010000010100000201000002
-01000070010100810101000a010000030100000501000002010000030101000401000005
-010000050101000301000001010000020100001601010008010000010101000401000002
-010000020100000101010001010000010100000201000004010000090100000201000001
-010000020100000101000000010000000100000101000002010000080100000201000001
-010000020100000101000007010000030100000201000001010000420101000901000001
-0100004a010106000000060c010006000000060202020101030301010202060500000100
-00c40602010006000000060a010006000000060402020101030101010202060301000009
-010100000100000401000003010200020100000001010003010300040100000c01000003
-0102000301020002010000020100000201020071010100810101000b0100000201040002
-010200040101000201040001010400030101000401010002010000170101000901010000
-010000040100000301020002010000000101000301030004010000090100000201000002
-010300010100000001000000010000020102000a01020003010200020100000701000004
-01020002010000420101000a0101004b01000600010006000000060a0100060000000603
-020201010303010102020605010000c50601010006000000060c01000600000006030202
-010103010101020206030100000c0100002301050093010100810101000c010000310100
-00180101000c010000230105001c0105006801010058010106000000060c010006000000
-06020202010103030101020206050000010000c40602010006000000060a010006000000
-06040202010103010101020206030100000801000002010000bd01010081010100590101
-000801000002010000b50101005801000600010006000000060a01000600000006030202
-01010303010102020605010000c50601010006000000060c010006000000060302020101
-030101010202060301000009010200be010100810101005901010009010200b601010058
-010106000000060c01000600000006020202010103030101020206050000010000c40602
-010006000000060a0100060000000604020201010301010102020603010000cb01010081
-01010059010100c30101005801000600010006000000060a010006000000060302020101
-0303010102020605010000c50601010006000000060c0100060000000603020201010301
-010102020603010000cb0101008101010059010100c301010058010106000000060c0100
-0600000006020202010103030101020206050000010000c40602010006000000060a0100
-060000000604020201010301010102020603010000cb0101008101010059010100c30101
-005801000600010006000000060a01000600000006030202010103030101020206050100
-00c50601010006000000060c0100060000000603020201010301010102020603010000cb
-0101008101010059010100c301010058010106000000060c010006000000060202020101
-03030101020206050000010000c40602010006000000060a010006000000060402020101
-030101010202060301ff01ff01ce0600010006000000060a010006000000060302020101
-0303010102020605010000c50601010006000000060c0100060000000603020201010301
-01010202060301ff01ff01cf06000000060c010006000000060202020101030301010202
-06050000010000c40602010006000000060a010006000000060402020101030101010202
-0603010000cb0101008101010059010100c30101005801000600010006000000060a0100
-060000000603020201010303010102020605010000c50601010006000000060c01000600
-00000603020201010301010102020603010000cb0101008101010059010100c301010058
-010106000000060c01000600000006020202010103030101020206050000010000c40602
-010006000000060a0100060000000604020201010301010102020603010000cb01010081
-0101000c0100003101000018010100c30101005801000600010006000000060a01000600
-00000603020201010303010102020605010000c50601010006000000060c010006000000
-060302020101030101010202060301000010010200090100000d0102009b010100810101
-000b01000003010200030102000b010000050100000c0101000201000017010100100102
-00090100000d010200930101000a0101004b010106000000060c01000600000006020202
-010103030101020206050000010000c40602010006000000060a01000600000006040202
-0101030101010202060301000012010000090100000f0100009b010100810101000a0100
-000301000002010000010100000201000009010100040101000b01000001010000020100
-001601010012010000090100000f0100009301010009010000010100004a010006000100
-06000000060a0100060000000603020201010303010102020605010000c5060101000600
-0000060c0100060000000603020201010301010102020603010000090101000001000004
-010000030102000201000000010100030102000501000009010000000101000301020002
-01010000010000030102000301020071010100810101000901000008010000010100000c
-0100000001000003010000000100000b0100000101000003010000150101000901010000
-010000040100000301020002010000000101000301020005010000090100000001010003
-0102000201010000010000030102000a0102000301020002010000000101000201000002
-0100000201020002010000000101003f01010009010000010100004a010106000000060c
-01000600000006020202010103030101020206050000010000c40602010006000000060a
-010006000000060402020101030101010202060301000008010000010101000401000002
-010000020100000101010001010000010100000201000004010000090101000101000001
-010000020100000101000000010000000100000101000002010000010100000201000070
-010100810101000801000009010000010100000e010000050100000b0100000101000004
-010000140101000801000001010100040100000201000002010000010101000101000001
-010000020100000401000009010100010100000101000002010000010100000001000000
-010000010100000201000008010000020100000101000002010000010101000101000001
-01000002010000010100000201000001010100010100003e01010009010000010100004a
-01000600010006000000060a0100060000000603020201010303010102020605010000c5
-0601010006000000060c0100060000000603020201010301010102020603010000080100
-000201000004010000020100000201000001010000020100000501000004010000090100
-000201000005010000010100000001000000010000010100000201000001010000740101
-00810101000701000009010000020103000b010000050100000b01000001010000050100
-001301010008010000020100000401000002010000020100000101000002010000050100
-000401000009010000020100000501000001010000000100000001000001010000020100
-000801000005010000020100000101000005010000020100000101000002010000010100
-004201010009010000010100004a010106000000060c0100060000000602020201010303
-0101020206050000010000c40602010006000000060a0100060000000604020201010301
-010102020603010000080100000201000004010000020100000201000001010000020100
-000201030004010000090100000201000002010300010100000001000000010000010104
-00020102007101010081010100080100000701000003010000020100000a010000050100
-000b01000001010000040100001401010008010000020100000401000002010000020100
-000101000002010000020103000401000009010000020100000201030001010000000100
-000001000001010400090102000201040001010000060100000001000002010400010100
-004201010009010000010100004a01000600010006000000060a01000600000006030202
-01010303010102020605010000c50601010006000000060c010006000000060302020101
-030101010202060301000008010000020100000401000002010000020100000101000002
-010000010100000201000004010000090100000201000001010000020100000101000000
-010000000100000101000009010000700101008101010009010000050100000401000002
-0100000a010000050100000b010000010100000301000015010100080100000201000004
-010000020100000201000001010000020100000101000002010000040100000901000002
-010000010100000201000001010000000100000001000001010000100100000101000005
-010000060100000001000002010000050100004201010009010000010100004a01010600
-0000060c01000600000006020202010103030101020206050000010000c4060201000600
-0000060a0100060000000604020201010301010102020603010000080100000101010004
-010000020100000201000001010100010100000101000002010000040100000901000002
-010000010100000201000001010000000100000001000001010000020100000101000002
-01000070010100810101000a010000030100000501000002010000030101000401000005
-010000050101000301000001010000020100001601010008010000010101000401000002
-010000020100000101010001010000010100000201000004010000090100000201000001
-010000020100000101000000010000000100000101000002010000080100000201000001
-010000020100000101000007010000030100000201000001010000420101000901000001
-0100004a01000600010006000000060a0100060000000603020201010303010102020605
-010000c50601010006000000060c01000600000006030202010103010101020206030100
-000901010000010000040100000301020002010000000101000301030004010000090100
-000201000002010300010100000001000000010000020102000301020071010100810101
-000b01000002010400020102000401010002010400010104000301010004010100020100
-001701010009010100000100000401000003010200020100000001010003010300040100
-00090100000201000002010300010100000001000000010000020102000a010200030102
-0002010000070100000401020002010000420101000a0101004b010106000000060c0100
-0600000006020202010103030101020206050000010000c40602010006000000060a0100
-0600000006040202010103010101020206030100000c0100002301050093010100810101
-000c01000031010000180101000c010000230105001c0105006801010058010006000100
-06000000060a0100060000000603020201010303010102020605010000c5060101000600
-0000060c01000600000006030202010103010101020206030100000801000002010000bd
-01010081010100590101000801000002010000b501010058010106000000060c01000600
-000006020202010103030101020206050000010000c40602010006000000060a01000600
-0000060402020101030101010202060301000009010200be010100810101005901010009
-010200b60101005801000600010006000000060a01000600000006030202010103030101
-02020605010000c50601010006000000060c010006000000060302020101030101010202
-0603010000cb0101008101010059010100c301010058010106000000060c010006000000
-06020202010103030101020206050000010000c40602010006000000060a010006000000
-0604020201010301010102020603010000cb0101008101010059010100c3010100580100
-0600010006000000060a0100060000000603020201010303010102020605010000c50601
-010006000000060c0100060000000603020201010301010102020603010000cb01010081
-01010059010100c301010058010106000000060c01000600000006020202010103030101
-020206050000010000c40602010006000000060a01000600000006040202010103010101
-02020603010000cb0101008101010059010100c30101005801000600010006000000060a
-0100060000000603020201010303010102020605010000c50601010006000000060c0100
-06000000060302020101030101010202060301ff01ff01cf06000000060c010006000000
-06020202010103030101020206050000010000c40602010006000000060a010006000000
-060402020101030101010202060301ff01ff01ce0600010006000000060a010006000000
-0603020201010303010102020605010000c50601010006000000060c0100060000000603
-020201010301010102020603010000cb0101008101010059010100c30101005801010600
-0000060c01000600000006020202010103030101020206050000010000c4060201000600
-0000060a0100060000000604020201010301010102020603010000cb0101008101010059
-010100c30101005801000600010006000000060a01000600000006030202010103030101
-02020605010000c50601010006000000060c010006000000060302020101030101010202
-0603010000cb010100810101000c0100003101000018010100c301010058010106000000
-060c01000600000006020202010103030101020206050000010000c40602010006000000
-060a010006000000060402020101030101010202060301000010010200090100000d0102
-004301000056010100810101000b01000003010200030102000b010000050100000c0101
-00020100001701010010010200090100000d010200930101000a0101004b010006000100
-06000000060a0100060000000603020201010303010102020605010000c5060101000600
-0000060c010006000000060302020101030101010202060301000012010000090100000f
-0100004301000056010100810101000a0100000301000002010000010100000201000009
-010100040101000b01000001010000020100001601010012010000090100000f01000093
-01010009010000010100004a010106000000060c01000600000006020202010103030101
-020206050000010000c40602010006000000060a01000600000006040202010103010101
-020206030100000901010000010000040100000301020002010000000101000301020005
-010000090100000001010003010200020101000001000003010200030102000a01020002
-010000020100000101040054010100810101000901000008010000010100000c01000000
-01000003010000000100000b010000010100000301000015010100090101000001000004
-010000030102000201000000010100030102000501000009010000000101000301020002
-01010000010000030102000a010200030102000201000000010100020100000201000002
-01020002010000000101003f01010009010000010100004a01000600010006000000060a
-0100060000000603020201010303010102020605010000c50601010006000000060c0100
-060000000603020201010301010102020603010000080100000101010004010000020100
-000201000001010100010100000101000002010000040100000901010001010000010100
-000201000001010000000100000001000001010000020100000101000002010000080100
-000201000001010000020100000301000056010100810101000801000009010000010100
-000e010000050100000b0100000101000004010000140101000801000001010100040100
-000201000002010000010101000101000001010000020100000401000009010100010100
-000101000002010000010100000001000000010000010100000201000008010000020100
-000101000002010000010101000101000001010000020100000101000002010000010101
-00010100003e01010009010000010100004a010106000000060c01000600000006020202
-010103030101020206050000010000c40602010006000000060a01000600000006040202
-010103010101020206030100000801000002010000040100000201000002010000010100
-000201000005010000040100000901000002010000050100000101000000010000000100
-000101000002010000010100000c01000002010000020100000001000004010000560101
-00810101000701000009010000020103000b010000050100000b01000001010000050100
-001301010008010000020100000401000002010000020100000101000002010000050100
-000401000009010000020100000501000001010000000100000001000001010000020100
-000801000005010000020100000101000005010000020100000101000002010000010100
-004201010009010000010100004a01000600010006000000060a01000600000006030202
-01010303010102020605010000c50601010006000000060c010006000000060302020101
-030101010202060301000008010000020100000401000002010000020100000101000002
-010000020103000401000009010000020100000201030001010000000100000001000001
-010400020102000901040003010000050100005601010081010100080100000701000003
-010000020100000a010000050100000b0100000101000004010000140101000801000002
-010000040100000201000002010000010100000201000002010300040100000901000002
-010000020103000101000000010000000100000101040009010200020104000101000006
-0100000001000002010400010100004201010009010000010100004a010106000000060c
-01000600000006020202010103030101020206050000010000c40602010006000000060a
-010006000000060402020101030101010202060301000008010000020100000401000002
-010000020100000101000002010000010100000201000004010000090100000201000001
-010000020100000101000000010000000100000101000009010000080100000601000000
-010000040100005601010081010100090100000501000004010000020100000a01000005
-0100000b0100000101000003010000150101000801000002010000040100000201000002
-010000010100000201000001010000020100000401000009010000020100000101000002
-010000010100000001000000010000010100001001000001010000050100000601000000
-01000002010000050100004201010009010000010100004a01000600010006000000060a
-0100060000000603020201010303010102020605010000c50601010006000000060c0100
-060000000603020201010301010102020603010000080100000101010004010000020100
-000201000001010100010100000101000002010000040100000901000002010000010100
-000201000001010000000100000001000001010000020100000101000002010000080100
-000201000001010000020100000301000056010100810101000a01000003010000050100
-000201000003010100040100000501000005010100030100000101000002010000160101
-000801000001010100040100000201000002010000010101000101000001010000020100
-000401000009010000020100000101000002010000010100000001000000010000010100
-000201000008010000020100000101000002010000010100000701000003010000020100
-00010100004201010009010000010100004a010106000000060c01000600000006020202
-010103030101020206050000010000c40602010006000000060a01000600000006040202
-010103010101020206030100000901010000010000040100000301020002010000000101
-000301030004010000090100000201000002010300010100000001000000010000020102
-00030102000a01020002010000020100000401010054010100810101000b010000020104
-000201020004010100020104000101040003010100040101000201000017010100090101
-000001000004010000030102000201000000010100030103000401000009010000020100
-0002010300010100000001000000010000020102000a0102000301020002010000070100
-000401020002010000420101000a0101004b01000600010006000000060a010006000000
-0603020201010303010102020605010000c50601010006000000060c0100060000000603
-0202010103010101020206030100000c010000230105002301050069010100810101000c
-01000031010000180101000c010000230105001c0105006801010058010106000000060c
-01000600000006020202010103030101020206050000010000c40602010006000000060a
-01000600000006040202010103010101020206030100000801000002010000bd01010081
-010100590101000801000002010000b50101005801000600010006000000060a01000600
-00000603020201010303010102020605010000c50601010006000000060c010006000000
-060302020101030101010202060301000009010200be0101008101010059010100090102
-00b601010058010106000000060c01000600000006020202010103030101020206050000
-010000c40602010006000000060a01000600000006040202010103010101020206030100
-00cb0101008101010059010100c30101005801000600010006000000060a010006000000
-0603020201010303010102020605010000c50601010006000000060c0100060000000603
-020201010301010102020603010000cb0101008101010059010100c30101005801010600
-0000060c01000600000006020202010103030101020206050000010000c4060201000600
-0000060a0100060000000604020201010301010102020603010000cb0101008101010059
-010100c30101005801000600010006000000060a01000600000006030202010103030101
-02020605010000c50601010006000000060c010006000000060302020101030101010202
-0603010000cb0101008101010059010100c301010058010106000000060c010006000000
-06020202010103030101020206050000010000c40602010006000000060a010006000000
-060402020101030101010202060301ff01ff01ce0600010006000000060a010006000000
-0603020201010303010102020605010000c50601010006000000060c0100060000000603
-02020101030101010202060301ff01ff01cf06000000060c010006000000060202020101
-03030101020206050000010000c40602010006000000060a010006000000060402020101
-0301010102020603010000cb0101008101010059010100c3010100580100060001000600
-0000060a0100060000000603020201010303010102020605010000c50601010006000000
-060c0100060000000603020201010301010102020603010000cb01010081010100590101
-00c301010058010106000000060c01000600000006020202010103030101020206050000
-010000c40602010006000000060a01000600000006040202010103010101020206030100
-00cb010100810101000c0100003101000018010100c30101005801000600010006000000
-060a0100060000000603020201010303010102020605010000c50601010006000000060c
-01000600000006030202010103010101020206030100000b010000120100001f01000089
-010100810101000b01000003010200030102000b010000040102000b0101000201000017
-0101000b010000120100000e010000010100008f0101000a0101004b010106000000060c
-01000600000006020202010103030101020206050000010000c40602010006000000060a
-01000600000006040202010103010101020206030100001f0100001f0100008901010081
-0101000a0100000301000002010000010100000201000009010100030100000201000009
-0100000101000002010000160101001f0100000e010000010100008f0101000901000001
-0100004a01000600010006000000060a0100060000000603020201010303010102020605
-010000c50601010006000000060c01000600000006030202010103010101020206030100
-000901020002010000000101000301020002010400090102000301020003010200020100
-0000010100030102007f010100810101000901000008010000010100000c010000000100
-000701000009010000010100000301000015010100090102000201000000010100030102
-0002010400090101000001000001010000000101008c01010009010000010100004a0101
-06000000060c01000600000006020202010103030101020206050000010000c406020100
-06000000060a01000600000006040202010103010101020206030100000b010000020101
-00010100000101000002010000030100000a010000020100000101000002010000010100
-0002010000010101000101000001010000020100007e0101008101010008010000090100
-00010100000e01000007010000090100000101000004010000140101000b010000020101
-00010100000101000002010000030100000a0100000101010001010100010100008b0101
-0009010000010100004a01000600010006000000060a0100060000000603020201010303
-010102020605010000c50601010006000000060c01000600000006030202010103010101
-020206030100000b01000002010000020100000101000002010000030100000a01000009
-01000001010000050100000201000001010000020100007e010100810101000701000009
-010000020103000b010000060100000a0100000101000005010000130101000b01000002
-010000020100000101000002010000030100000a0100000201000001010000020100008b
-01010009010000010100004a010106000000060c01000600000006020202010103030101
-020206050000010000c40602010006000000060a01000600000006040202010103010101
-020206030100000b010000020100000201000001010400030100000a0100000601030001
-0100000501000002010000010104007e0101008101010008010000070100000301000002
-0100000a010000050100000b0100000101000004010000140101000b0100000201000002
-01000001010400030100000a0100000201000001010000020100008b0101000901000001
-0100004a01000600010006000000060a0100060000000603020201010303010102020605
-010000c50601010006000000060c01000600000006030202010103010101020206030100
-000b010000020100000201000001010000070100000a0100000501000002010000010100
-000501000002010000010100008201010081010100090100000501000004010000020100
-000a010000040100000c0100000101000003010000150101000b01000002010000020100
-0001010000070100000a0100000201000001010000020100008b01010009010000010100
-004a010106000000060c01000600000006020202010103030101020206050000010000c4
-0602010006000000060a01000600000006040202010103010101020206030100000b0100
-0002010000020100000101000002010000030100000a0100000201000001010000020100
-000101000002010000010100000201000001010000020100007e010100810101000a0100
-000301000005010000020100000301010004010000030100000701010003010000010100
-0002010000160101000b01000002010000020100000101000002010000030100000a0100
-000101010001010100010100008b01010009010000010100004a01000600010006000000
-060a0100060000000603020201010303010102020605010000c50601010006000000060c
-01000600000006030202010103010101020206030100000b010000020100000201000002
-010200050101000901020003010300020102000201000002010000020102007f01010081
-0101000b0100000201040002010200040101000201040001010400030101000401010002
-010000170101000b01000002010000020100000201020005010100090101000001000001
-010000000101008c0101000a0101004b010106000000060c010006000000060202020101
-03030101020206050000010000c40602010006000000060a010006000000060402020101
-030101010202060301000023010500a1010100810101000c010000310100001801010023
-010500990101005801000600010006000000060a01000600000006030202010103030101
-02020605010000c50601010006000000060c010006000000060302020101030101010202
-0603010000cb0101008101010059010100c301010058010106000000060c010006000000
-06020202010103030101020206050000010000c40602010006000000060a010006000000
-0604020201010301010102020603010000cb0101008101010059010100c3010100580100
-0600010006000000060a0100060000000603020201010303010102020605010000c50601
-010006000000060c0100060000000603020201010301010102020603010000cb01010081
-01010059010100c301010058010106000000060c01000600000006020202010103030101
-020206050000010000c40602010006000000060a01000600000006040202010103010101
-02020603010000cb0101008101010059010100c30101005801000600010006000000060a
-0100060000000603020201010303010102020605010000c50601010006000000060c0100
-060000000603020201010301010102020603010000cb0101008101010059010100c30101
-0058010106000000060c01000600000006020202010103030101020206050000010000c4
-0602010006000000060a0100060000000604020201010301010102020603010000cb0101
-008101010059010100c30101005801000600010006000000060a01000600000006030202
-01010303010102020605010000c50601010006000000060c010006000000060302020101
-030101010202060301ff01ff01cf06000000060c01000600000006020202010103030101
-020206050000010000c40602010006000000060a01000600000006040202010103010101
-0202060301ff01ff01ce0600010006000000060a01000600000006030202010103030101
-02020605010000c50601010006000000060c010006000000060302020101030101010202
-0603010000cb0101008101010059010100c301010058010106000000060c010006000000
-06020202010103030101020206050000010000c40602010006000000060a010006000000
-0604020201010301010102020603010000cb0101008101010059010100c3010100580100
-0600010006000000060a0100060000000603020201010303010102020605010000c50601
-010006000000060c0100060000000603020201010301010102020603010000cb01010081
-0101000c0100003101000018010100c301010058010106000000060c0100060000000602
-0202010103030101020206050000010000c40602010006000000060a0100060000000604
-0202010103010101020206030100000b010000120100000e010000010100009701010081
-0101000b01000003010200030102000b010000040102000b01010002010000170101000b
-010000120100000e010000010100008f0101000a01000004010200440100060001000600
-0000060a0100060000000603020201010303010102020605010000c50601010006000000
-060c01000600000006030202010103010101020206030100001f0100000e010000010100
-0097010100810101000a0100000301000002010000010100000201000009010100030100
-0002010000090100000101000002010000160101001f0100000e010000010100008f0101
-0009010100030100000201000043010106000000060c0100060000000602020201010303
-0101020206050000010000c40602010006000000060a0100060000000604020201010301
-010102020603010000090102000201000000010100030102000201040009010100000100
-00010100000001010094010100810101000901000008010000010100000c010000000100
-000701000009010000010100000301000015010100090102000201000000010100030102
-0002010400090101000001000001010000000101008c0101000801000000010000030100
-00020100004301000600010006000000060a010006000000060302020101030301010202
-0605010000c50601010006000000060c0100060000000603020201010301010102020603
-0100000b01000002010100010100000101000002010000030100000a0100000101010001
-0101000101000093010100810101000801000009010000010100000e0100000701000009
-0100000101000004010000140101000b0100000201010001010000010100000201000003
-0100000a0100000101010001010100010100008b0101000a010000030100000201000043
-010106000000060c01000600000006020202010103030101020206050000010000c40602
-010006000000060a01000600000006040202010103010101020206030100000b01000002
-010000020100000101000002010000030100000a01000002010000010100000201000093
-010100810101000701000009010000020103000b010000060100000a0100000101000005
-010000130101000b01000002010000020100000101000002010000030100000a01000002
-01000001010000020100008b0101000a010000040103004301000600010006000000060a
-0100060000000603020201010303010102020605010000c50601010006000000060c0100
-0600000006030202010103010101020206030100000b0100000201000002010000010104
-00030100000a010000020100000101000002010000930101008101010008010000070100
-0003010000020100000a010000050100000b0100000101000004010000140101000b0100
-00020100000201000001010400030100000a0100000201000001010000020100008b0101
-000a0100000701000043010106000000060c010006000000060202020101030301010202
-06050000010000c40602010006000000060a010006000000060402020101030101010202
-06030100000b010000020100000201000001010000070100000a01000002010000010100
-00020100009301010081010100090100000501000004010000020100000a010000040100
-000c0100000101000003010000150101000b010000020100000201000001010000070100
-000a0100000201000001010000020100008b0101000a0100000701000043010006000100
-06000000060a0100060000000603020201010303010102020605010000c5060101000600
-0000060c01000600000006030202010103010101020206030100000b0100000201000002
-0100000101000002010000030100000a0100000101010001010100010100009301010081
-0101000a0100000301000005010000020100000301010004010000030100000701010003
-0100000101000002010000160101000b0100000201000002010000010100000201000003
-0100000a0100000101010001010100010100008b0101000a010000030100000201000043
-010106000000060c01000600000006020202010103030101020206050000010000c40602
-010006000000060a01000600000006040202010103010101020206030100000b01000002
-010000020100000201020005010100090101000001000001010000000101009401010081
-0101000b0100000201040002010200040101000201040001010400030101000401010002
-010000170101000b01000002010000020100000201020005010100090101000001000001
-010000000101008c01010008010400020102004401000600010006000000060a01000600
-00000603020201010303010102020605010000c50601010006000000060c010006000000
-060302020101030101010202060301000023010500a1010100810101000c010000310100
-0018010100230105009901010058010106000000060c0100060000000602020201010303
-0101020206050000010000c40602010006000000060a0100060000000604020201010301
-010102020603010000cb0101008101010059010100c30101005801000600010006000000
-060a0100060000000603020201010303010102020605010000c50601010006000000060c
-0100060000000603020201010301010102020603010000cb0101008101010059010100c3
-01010058010106000000060c010006000000060202020101030301010202060500000100
-00c40602010006000000060a0100060000000604020201010301010102020603010000cb
-0101008101010059010100c30101005801000600010006000000060a0100060000000603
-020201010303010102020605010000c50601010006000000060c01000600000006030202
-01010301010102020603010000cb0101008101010059010100c301010058010106000000
-060c01000600000006020202010103030101020206050000010000c40602010006000000
-060a0100060000000604020201010301010102020603010000cb01010081010100590101
-00c30101005801000600010006000000060a010006000000060302020101030301010202
-0605010000c50601010006000000060c0100060000000603020201010301010102020603
-010000cb0101008101010059010100c301010058010106000000060c0100060000000602
-0202010103030101020206050000010000c40602010006000000060a0100060000000604
-02020101030101010202060301ff01ff01ce0600010006000000060a0100060000000603
-020201010303010102020605010000c50601010006000000060c01000600000006030202
-0101030101010202060301ff01ff01cf06000000060c0100060000000602020201010303
-0101020206050000010000c40602010006000000060a0100060000000604020201010301
-010102020603010000cb0101008101010059010100c30101005801000600010006000000
-060a0100060000000603020201010303010102020605010000c50601010006000000060c
-0100060000000603020201010301010102020603010000cb0101008101010059010100c3
-01010058010106000000060c010006000000060202020101030301010202060500000100
-00c40602010006000000060a0100060000000604020201010301010102020603010000cb
-010100810101000c0100003101000018010100c30101005801000600010006000000060a
-0100060000000603020201010303010102020605010000c50601010006000000060c0100
-0600000006030202010103010101020206030100000b010000120100000a010000150100
-0087010100810101000b01000003010200030102000b010000040102000b010100020100
-00170101000b010000120100000e010000010100008f0101000c0100004a010106000000
-060c01000600000006020202010103030101020206050000010000c40602010006000000
-060a01000600000006040202010103010101020206030100001f0100000a010000150100
-0087010100810101000a0100000301000002010000010100000201000009010100030100
-0002010000090100000101000002010000160101001f0100000e010000010100008f0101
-000b0101004a01000600010006000000060a010006000000060302020101030301010202
-0605010000c50601010006000000060c0100060000000603020201010301010102020603
-010000090102000201000000010100030102000201040008010000000101000301020003
-01020002010400020102007f010100810101000901000008010000010100000c01000000
-010000070100000901000001010000030100001501010009010200020100000001010003
-01020002010400090101000001000001010000000101008c0101000a010000000100004a
-010106000000060c01000600000006020202010103030101020206050000010000c40602
-010006000000060a01000600000006040202010103010101020206030100000b01000002
-010100010100000101000002010000030100000a01010001010000010100000201000001
-010000020100000301000003010000020100007e01010081010100080100000901000001
-0100000e01000007010000090100000101000004010000140101000b0100000201010001
-0100000101000002010000030100000a0100000101010001010100010100008b01010009
-010000010100004a01000600010006000000060a01000600000006030202010103030101
-02020605010000c50601010006000000060c010006000000060302020101030101010202
-06030100000b01000002010000020100000101000002010000030100000a010000020100
-000101000002010000010100000701000003010000820101008101010007010000090100
-00020103000b010000060100000a0100000101000005010000130101000b010000020100
-00020100000101000002010000030100000a0100000201000001010000020100008b0101
-0008010000020100004a010106000000060c010006000000060202020101030301010202
-06050000010000c40602010006000000060a010006000000060402020101030101010202
-06030100000b010000020100000201000001010400030100000a01000002010000010100
-00020100000201020004010000040102007f010100810101000801000007010000030100
-00020100000a010000050100000b0100000101000004010000140101000b010000020100
-000201000001010400030100000a0100000201000001010000020100008b010100080100
-00020100004a01000600010006000000060a010006000000060302020101030301010202
-0605010000c50601010006000000060c0100060000000603020201010301010102020603
-0100000b010000020100000201000001010000070100000a010000020100000101000002
-0100000501000003010000070100007e0101008101010009010000050100000401000002
-0100000a010000040100000c0100000101000003010000150101000b0100000201000002
-01000001010000070100000a0100000201000001010000020100008b0101000801050049
-010106000000060c01000600000006020202010103030101020206050000010000c40602
-010006000000060a01000600000006040202010103010101020206030100000b01000002
-010000020100000101000002010000030100000a01000002010000010100000201000001
-010000020100000301000003010000020100007e010100810101000a0100000301000005
-010000020100000301010004010000030100000701010003010000010100000201000016
-0101000b01000002010000020100000101000002010000030100000a0100000101010001
-010100010100008b0101000c0100004a01000600010006000000060a0100060000000603
-020201010303010102020605010000c50601010006000000060c01000600000006030202
-010103010101020206030100000b01000002010000020100000201020005010100080100
-0002010000020102000301020005010100020102007f010100810101000b010000020104
-0002010200040101000201040001010400030101000401010002010000170101000b0100
-0002010000020100000201020005010100090101000001000001010000000101008c0101
-000c0100004a010106000000060c01000600000006020202010103030101020206050000
-010000c40602010006000000060a01000600000006040202010103010101020206030100
-0023010500a1010100810101000c01000031010000180101002301050099010100580100
-0600010006000000060a0100060000000603020201010303010102020605010000c50601
-010006000000060001000600010006000100060001000600010006000100060001000600
-00000603020201010301010102020603010000cb0101008101010059010100c301010058
-010106000000060c01000600000006020202010103030101020206050000010000c40602
-010006000100060001000600010006000100060001000600010006000100060000000604
-020201010301010102020603010000cb0101008101010059010100c30101005801000600
-010006000000060a0100060000000603020201010303010102020605010000c506010100
-0600040e060000000603020201010301010102020603010000cb01010081010100590101
-00c301010058010106000000060c01000600000006020202010103030101020206050000
-010000c40602010006000000060000000600000006000000060000000600000006000000
-060000000604020201010301010102020603010000cb0101008101010059010100c30101
-005801000600010006000000060a01000600000006030202010103030101020206050100
-00c506010100060004000600000006000000060000000600000006000000060000000600
-0100060000000603020201010301010102020603010000cb0101008101010059010100c3
-01010058010106000000060c010006000000060202020101030301010202060500000100
-00c40602010004000000060a0100040000000604020201010301010102020603010000cb
-0101008101010059010100c30101005801000600010006000000060a0100060000000603
-020201010303010102020605010000c50601010006000401000006080100060004000600
-0000060302020101030101010202060301ff01ff01cf06000000060c0100060000000602
-0202010103030101020206050000010000c4060201000401060000000606010006000401
-0000060402020101030101010202060301ff01ff01ce0600010006000000060a01000600
-00000603020201010303010102020605010000c506010100060004020600000006060100
-0401060000000603020201010301010102020603010000cb0101008101010059010100c3
-01010058010106000000060c010006000000060202020101030301010202060500000100
-00c4060201000402000006060100040200000604020201010301010102020603010000cb
-0101008101010059010100c30101005801000600010006000000060a0100060000000603
-020201010303010102020605010000c50601010006000403000006040100060004020600
-00000603020201010301010102020603010000cb010100810101000c0100003101000018
-010100c301010058010106000000060c0100060000000602020201010303010102020605
-0000010000c4060201000403060000000602010006000403000006040202010103010101
-0202060301000028010000040100000b0100008e010100810101000b0100000301020003
-0102000b010000030104000a0101000201000017010100180100000a0100002201020077
-0101000a0100004c01000600010006000000060a01000600000006030202010103030101
-02020605010000c506010100060004040600000006020100040306000000060302020101
-030101010202060301000028010000110100008e010100810101000a0100000301000002
-010000010100000201000009010100030100000201000009010000010100000201000016
-010100180100000a0100002401000077010100090101004c010106000000060c01000600
-000006020202010103030101020206050000010000c40602010004040000060201000404
-00000604020201010301010102020603010000090102000201000002010000020102000a
-010100000100000201020003010200020104008c01010081010100090100000801000001
-0100000c0100000001000007010000090100000101000003010000150101000801000000
-010100030102000201040008010000010100000301020002010000000101000201000000
-01010003010200050100007701010008010000000100004c01000600010006000000060a
-0100060000000603020201010303010102020605010000c5060101000600040500000600
-010006000404060000000603020201010301010102020603010000080100000201000001
-010000020100000101000002010000080100000101010004010000020100000201000003
-0100008e010100810101000801000009010000010100000e010000060100000a01000001
-010000040100001401010008010100010100000101000002010000030100000a01000000
-010000030100000201000001010100010100000101010001010000010100000201000004
-010000770101000a0100004c010106000000060c01000600000006020202010103030101
-020206050000010000c40602010004050600010006000405000006040202010103010101
-02020603010000080100000601000001010000010100000c010000020100000401000002
-010000070100008e010100810101000701000009010000020103000b010000060100000a
-01000001010000050100001301010008010000020100000101000002010000030100000a
-010100040100000201000001010000050100000201000001010000020100000401000077
-0101000a0100004c01000600010006000000060a01000600000006030202010103030101
-02020605010000c506010100060004060600010004050600000006030202010103010101
-020206030100000901020003010000010100000201020009010000020100000401000003
-010200040100008e01010081010100080100000701000003010000020100000a01000006
-0100000a010000010100000401000014010100080100000201000001010400030100000a
-010100040104000101000005010000020100000101040004010000770101000a0100004c
-010106000000060c010006000000060202020101030301010202060500c6060201000406
-01000406000006040202010103010101020206030100000c010000030100000001000005
-01000008010000020100000401000006010000030100008e010100810101000901000005
-01000004010000020100000a010000050100000b01000001010000030100001501010008
-0100000201000001010000070100000a0100000001000003010000050100000501000002
-0100000101000008010000770101000a0100004c01000600010006000000060a01000600
-000006030202010103030101020206ce0100060000000600000006000000060000000600
-000006000000060000000600000006000000060302020101030101010202060301000008
-010000020100000301010002010000020100000801000001010100040100000201000002
-010000030100008e010100810101000a0100000301000005010000020100000301010004
-010000050100000501010003010000010100000201000016010100080100000201000001
-01000002010000030100000a010000010100000201000002010000010100000501000002
-010000010100000201000004010000770101000a0100004c010106000000060c01000600
-000006020202010103030101020206cf0000060000000600000006000000060000000600
-000006000000060000000600000006040202010103010101020206030100000901020005
-010000030102000a010100000100000401000003010200050101008c010100810101000b
-010000020104000201020004010100020104000301000005010100040101000201000017
-010100080100000201000002010200050101000801000002010000020102000201000005
-01000002010000020102000501000077010100080104004a01000600010006000000060a
-010006000000060302020101030301010202060401000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000613
-0202010103010101020206030100001201000008010500a8010100810101000c01000031
-010000180101001c010500a001010058010106000000060c010006000000060202020101
-030301010202060301000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600000006120202010103010101
-020206030100000f01000000010000b80101008101010059010100c30101005801000600
-010006000000060a01000600000006030202010103030101020206040100040d06000400
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600040006000000040c00000613020201010301
-01010202060301000010010000b90101008101010059010100c301010058010106000000
-060c010006000000060202020101030301010202060301000600040b0000060001000400
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-00000600000006000000060000000600010004000000060000000600040a060000000612
-020201010301010102020603010000cb0101008101010059010100c30101005801000600
-010006000000060a01000600000006030202010103030101020206040100040906000000
-06000100060004000600000006a601000600040006000000060000000600000004080000
-0613020201010301010102020603010000cb0101008101010059010100c3010100580101
-06000000060c010006000000060202020101030301010202060301000600040700000600
-0000060201000400000006a8010004000000060200000600000006000406060000000612
-020201010301010102020603010000cb0101008101010059010100c30101005801000600
-010006000000060a01000600000006030202010103030101020206040100040506000000
-0600000006020100060004000600000006a6010006000400060000000604000006000000
-040400000613020201010301010102020603010000cb0101008101010059010100c30101
-0058010106000000060c0100060000000602020201010303010102020603010006000403
-000006000000060601000400000006a80100040000000606000006000000060004020600
-0000061202020101030101010202060301ff01ff01ce0600010006000000060a01000600
-000006030202010103030101020206040100040106000000060000000606010006000400
-0600000006a6010006000400060000000608000006000000040000000613020201010301
-01010202060301ff01ff01cf06000000060c010006000000060202020101030301010202
-060301000600010006000100060a01000400000006a8010004000000060a010006000100
-060000000612020201010301010102020603010000cb0101008101010059010100c30101
-005801000600010006000000060a01000600000006030202010103030101020206040100
-0401060001000600010006060100060004000600000006a6010006000400060000000608
-010006000100040000000613020201010301010102020603010000cb0101008101010059
-010100c301010058010106000000060c0100060000000602020201010303010102020603
-010006000403010006000100060601000400000006a80100040000000606010006000100
-06000402060000000612020201010301010102020603010000cb01010081010100590101
-00c30101005801000600010006000000060a010006000000060302020101030301010202
-060401000405060001000600010006020100060004000600000006a60100060004000600
-00000604010006000100040400000613020201010301010102020603010000cb01010081
-01010059010100c301010058010106000000060c01000600000006020202010103030101
-02020603010006000407010006000100060201000400000006a801000400000006020100
-0600010006000406060000000612020201010301010102020603010000cb010100810101
-0059010100c30101005801000600010006000000060a0100060000000603020201010303
-010102020604010004090600010006000100060004000600000006a60100060004000600
-00000600010006000100040800000613020201010301010102020603010000cb01010081
-01010059010100c301010058010106000000060c01000600000006020202010103030101
-0202060301000600040b0100060001000400000006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-04000000060001000600040a060000000612020201010301010102020603010000cb0101
-008101010059010100c30101005801000600010006000000060a01000600000006030202
-010103030101020206040100040d06000400060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-040006000100040c00000613020201010301010102020603010000cb0101008101010059
-010100c301010058010106000000060c0100060000000602020201010303000406030100
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-06000000060000000600000006000000061200040301010102020603010000cb01010081
-01010059010100c30101005801000600010006000000060a010006000000060302020101
-030300000202050006040000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000061300000202050003010101
-02020603010000cb0101008101010059010100c301010058010106000000060c01000600
-0000060202020101030300000202050006e50000020205000301010102020603010000cb
-0101008101010059010100c30101005801000600010006000000060a0100060000000603
-02020101030300000202050006e50000020205000301010102020603010000cb01010081
-01010059010100c301010058010106000000060c01000600000006020202010103030000
-0202050006e50000020205000301010102020603010000cb0101008101010059010100c3
-0101005801000600010006000000060a0100060000000603020201010303000002020500
-06e50000020205000301010102020603010000cb0101008101010059010100c301010058
-010106000000060c0100060000000602020201010303000002020500000502d900060202
-05000301010102020603010000cb0101008101010059010100c301010058010006000100
-06000000060a010006000000060302020101030300000208050002d90000020805000301
-010102020603010000cb0101008101010059010100c301010058010106000000060c0100
-06000000060202020101030300000208050002d900000208050003010101020206030100
-00cb0101008101010059010100c30101005801000600010006000000060a010006000000
-060302020101030300000208050001d90000020805000301010102020603010000cb0101
-008101010059010100c30101005801010600000006000100060001000600010006000100
-0600010006000100060001000600000006020202010103030000050901d9000005090301
-010102020603010000cb0101008101010059010100c30101005801000600010006000100
-0600010006000100060001000600010006000100060001000600000006030202010103f5
-01010202060301ff01ff01cf0600040e0600000006020202010103f501010202060301ff
-01ff01ce06000100040e000006030202010103f5010102020603010000cb010100810101
-0059010100c30101005801010600040e0600000006020202010103f50101020206030100
-00cb0101008101010059010100c301010058010006000100040e000006030202010103f5
-010102020603010000cb0101008101010059010100c30101005801010600040e06000000
-06020202010103f5010102020603010000cb0101008101010059010100c3010100580100
-06000100040e000006030202010103f5010102020603010000cb01010081010100590101
-00c30101005801010600040e0600000006020202010103f5010102020603010000cb0101
-008101010059010100c301010058010006000100040e000006030202010103f501010202
-0603010000cb0101008101010059010100c30101005801010600040e0600000006020202
-010103f5010102020603010000cb0101008101010059010100c301010058010006000100
-040e000006030202010103f5010102020603010000cb0101008101010059010100c30101
-005801010600040e0600000006020202010103f5010102020603010000cb010100810101
-0059010100c301010058010006000100040e000006030202010103f50101020206030100
-00cb0101008101010059010100c30101005801010600040e0600000006020202010103f5
-010102020603010000cb0101008101010059010100c301010058010006000100040e0000
-06030202010103f5010102020603010000cb0101008101010059010100c3010100580101
-0600040e0600000006020202010103f5010102020603010000cb01010081010100590101
-00c301010058010006000100040e000006030202010103f5010102020603010000cb0101
-008101010059010100c30101005801010600040e0600000006020202010103f501010202
-0603010000cb0101008101010059010100c301010058010006000100040e000006030202
-010103f5010102020603010000cb0101008101010059010100c30101005801010600040e
-0600000006020202010103f5010102020603010000cb0101008101010059010100c30101
-0058010006000100040e000006030202010103f5010102020603010000cb010100810101
-0059010100c30101005801010600040e0600000006020202010103f501010202060301ff
-01ff01ce06000100040e000006030202010103f501010202060301ff01ff01cf06000000
-060000000600000006000000060000000600000006000000060000000600000006020202
-010103f5010102020603010000cb0101008101010059010100c301010058010006000100
-040000000600000006000000060000000600000006000000060000000600000006030202
-010103f5010102020603010000cb0101008101010059010100c301010058010106000400
-0600000006080100060004000600000006020202010103f5010102020603010000cb0101
-008101010059010100c30101005801000600010004010600000006080100040000000603
-0202010103f5010102020603010000cb0101008101010059010100c30101005801010600
-040100000608010004010600000006020202010103f5010102020603010000cb01010081
-01010059010100c301010058010006000100040200000606010006000401000006030202
-010103f5010102020603010000cb0101008101010059010100c301010058010106000402
-0600000006040100060004020600000006020202010103f5010102020603010000cb0101
-008101010059010100c30101005801000600010004030600000006040100040200000603
-0202010103f5010102020603010000cb0101008101010059010100c30101005801010600
-040300000604010004030600000006020202010103f5010102020603010000cb01010081
-01010059010100c301010058010006000100040400000602010006000403000006030202
-010103f5010102020603010000cb0101008101010059010100c301010058010106000404
-0600000006000100060004040600000006020202010103f5010102020603010000cb0101
-008101010059010100c30101005801000600010004050600010006000100040400000603
-0202010103f5010102020603010000cb0101008101010059010100c30101005801010600
-040500000600010004050600000006020202010103f5010102020603010000cb01010081
-01010059010100c3010100580100060001000406010006000405000006030202010103f5
-010102020603010000cb0101008101010059010100c30101005801010600040606000406
-0600000006020202010103f5010102020603010000cb0101008101010059010100c30101
-005801000600010006000000060000000600000006000000060000000600000006000000
-0600000006030202010103f5010102020603010000cb0101008101010059010100c30101
-005801010600000006000000060000000600000006000000060000000600000006000000
-0600000006020202010103f5010102020603010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-06000100060001000600010006000100060001000600010006110202010103f501010202
-060201000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006000100060001000600010006000100060001000600010006000100
-060001000600010006120202010103f50101020206030100040d06000400060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-0000040000000600040c0600000006110202010103f501010202060201000600040b0000
-060001000400000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060000000600000006000000060000000600000006000000
-060000000600000006000000060004000600000006000000040a000006120202010103f5
-010102020603010004090600000006000100060004000600000006ff06ff06ac01000400
-00000600000006000000060004080600000006110202010103f501010202060201000600
-0407000006000000060201000400000006ff06ff06ac0100060004000600000006020000
-060000000406000006120202010103f50101020206030100040506000000060000000602
-0100060004000600000006ff06ff06ac0100040000000604000006000000060004040600
-000006110202010103f50101020206020100060004030000060000000606010004000000
-06ff06ff06ac0100060004000600000006060000060000000402000006120202010103f5
-01010202060301000401060000000600000006060100060004000600000006ff06ff06ac
-0100040000000608000006000000060004000600000006110202010103f5010102020602
-01000600010006000100060a01000400000006ff06ff06ac010006000400060000000608
-0100060001000600000006120202010103f5010102020603010004010600010006000100
-06060100060004000600000006ff06ff06ac010004000000060801000600010006000400
-0600000006110202010103f5010102020602010006000403010006000100060601000400
-000006ff06ff06ac01000600040006000000060601000600010004020000061202020101
-03f501010202060301000405060001000600010006020100060004000600000006ff06ff
-06ac0100040000000604010006000100060004040600000006110202010103f501010202
-0602010006000407010006000100060201000400000006ff06ff06ac0100060004000600
-000006020100060001000406000006120202010103f50101020206030100040906000100
-06000100060004000600000006ff06ff06ac010004000000060001000600010006000408
-0600000006110202010103f501010202060201000600040b010006000100040000000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-0100060004000600000006000100040a000006120202010103f5000406030100040d0600
-040006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-010006000100060001000600010006000100060001000600010006000100060001000600
-01000600010006000100040000000600040c060000000611000403f50000020205000602
-010006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000061200000202050003f50000020205000603000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000060000000600
-000006000000060000000600000006000000060000000600000006000000061100000202
-050003f500000202050006ff06ff06e800000202050003f500000202050006ff06ff06e8
-00000202050003f500000202050006ff06ff06e800000202050003f50000020205000005
-02ff02ff02dc00060202050003f500000208050002ff02ff02dc00000208050003f50000
-0208050002ff02ff02dc00000208050003f500000208050001ff01ff01dc000002080500
-03f50000050901ff01ff01dc0000050903ff03ff03ff03ff03ff03ff03ff03d3
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 21 400 186
-%%EOF
diff --git a/lib/tv/doc/src/tv_start_pid_sorted.gif b/lib/tv/doc/src/tv_start_pid_sorted.gif
deleted file mode 100644
index 390f98541f..0000000000
--- a/lib/tv/doc/src/tv_start_pid_sorted.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_pid_sorted.ps b/lib/tv/doc/src/tv_start_pid_sorted.ps
deleted file mode 100644
index 13ef2ed027..0000000000
--- a/lib/tv/doc/src/tv_start_pid_sorted.ps
+++ /dev/null
@@ -1,1853 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_pid_sorted.eps)
-%%CreationDate: (Mon Mar 19 17:15:26 2001)
-%%BoundingBox: 0 0 377 205
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 377 205
-userdict begin
-%%BeginData:
-DisplayImage
-0 0
-377.000000 205.000000
-12
-755 410
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-aab6aa
-e7e7e7
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff
-02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202
-04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff
-02d000000202040000000202040002080000020d040002f6010302110103023801010206
-0101024001010230010102ff020400000202040000000202040002080000020d040002f6
-010102020107020001010203010102010101020e0105020001070201010302070100020b
-01010206010102400101020c0104021e010102ff02040000020204000000020204000208
-0000020d040002f6010102050101020301010203010102010101020e0101020701010203
-01010201010102050101020b010102060101024e010102020101021d010102ff02040000
-0202040000000202040002080000020204060203040002f6010102050101020301010203
-010102010101020e01010207010102030101020801040201010302030101020001010203
-010102020103020301040206010302030101020001010207010102000101020101010203
-010302030101020201010200010102020101020101030202010102000101020101010203
-010302020101020001010201010102020103020201010202010102f30000020204000000
-04030208000002020400030400000203040002f601010205010102040101020201000202
-0101020e0101020701010203010202080101020201010201010102020102020001010202
-010102010101020101010201010102090101020101010202010202000101020601020200
-010202000101020101010201010102020101020201020200010102010101020001010200
-010102020102020001020200010102010101020101010201010102000101020101010201
-010102010101020101010202010102f3000004030101020b000002030400030200000204
-040002f6010102050101020401010201010102020101020e010402040101020401030206
-010102060101020201010201010102020101020101010201010102010102020801010201
-010102020101020101010206010102010101020101010205010102020101020201010201
-010102010101020001010200010102020101020101010201010102050101020101020203
-01010201010102010101020101010202010002f70103020b000002030400030200000204
-040002f6010102050101020501010200010002030101020e010102070101020601020205
-010102030104020201010201010102020101020101050202010302060101020101010202
-010102010101020601010201010102010101020201040202010102020101020101010201
-010102000101020001010202010102010101020101010202010402010101020401010201
-0105020201010200010102f70103020b000002040400030000000205040002f601010205
-01010205010302030101020e010102070101020701010205010102020101020101010202
-010102010101020201010201010102080102020501010201010102020101020101010206
-010102010101020101010201010102010101020201010202010102010101020101010201
-010102000101020101010201010102010101020101010201010102010101020401010201
-0101020601010200010002f80103020b000002040400030000000205040002f601010205
-01010206010102040101020e010102070101020301010201010102050101020201010201
-010102020101020101010202010102010101020201000205010102050101020101010202
-010102010101020601010201010102010101020101010201010102020101020201010201
-010102020101020701010201010102010101020101010201010102010101020401010201
-0101020201000203010202f80103020b0000020500000206040002f60101020501010206
-010102040101020e01050203010102040103020701020201010202000101020101040203
-010102020103020201040207010302030101020101010206010102010101020101010202
-010202000101020101010202010102010101020301050202010102010101020101010202
-0102020001010200010102040101020201030204010102f90103020b0000020d040002f6
-01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000
-020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff
-02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff
-02ee01030202050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050002020103020200000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050001000202010302020500000005ff05ff05e401000500020201030202000005ff05ff
-05e601000202010302020500000005ff05ff05e401000500020201030202000005ff05ff
-05e601000202010302020500000005ff05ff05e4010005000202010302020000050c0604
-0504060005030602051f0600050206000504060005270602050b06000506060005ff05ff
-0535060005020600050906020514010002020103020205000000050b0600050f0600051f
-060005020600052c060005020600050a060005ff05ff053d060005020600050b06000513
-010005000202010302020000050c06000506060205050600050306020518060005020600
-050206020503060205020600050206000517060005020600050106000500060105020604
-050206020503060205020600050006010503060205ff05ff052006000502060005020602
-050506000502060005000601050d010002020103020205000000050b0600050806000505
-060005020600050206000518060005000600050506000502060005020600050106000502
-060005170600050206000501060105010600050306000506060005020600050206000501
-060105010600050106000502060005ff05ff051f06000502060005010600050206000504
-06000502060105010600050b010005000202010302020000050c06030505060005050600
-050206000502060005180600050006000505060005020600050206000501060005000600
-050006000517060005020600050106000502060005030600050606000502060005020600
-05010600050206000501060005ff05ff0523060405010600050206000504060005020600
-05020600050c010002020103020205000000050b06000508060005050600050206040518
-060005000600050506000502060405010600050006000500060005170600050206000501
-0600050206000503060005060600050206000502060005010600050206000502060205ff
-05ff052006000502060005010604050406000502060005020600050b0100050002020103
-02020000050c0600050806000505060005020600051d0600050606000502060005050600
-050006000500060005170600050206000501060005020600050306000506060005020600
-0502060005010600050206000505060005ff05ff051f0600050206000501060005080600
-0502060005020600050c010002020103020205000000050b060005080600050506000502
-060005020600051906000506060005020600050206000501060005000600050006000517
-060005020600050106010501060005030600050606000502060005020600050106000502
-0600050106000502060005ff05ff051f0600050206000501060005020600050406000502
-060105010600050b010005000202010302020000050c0600050806000505060005030602
-051a06000506060005030602050306000500060005190602050206000500060105050601
-050406000503060205020600050206000502060205ff05ff052006000502060005020602
-050506000502060005000601050d0100020201030202050000000576060005ff05ff055b
-0600050f010005000202010302020000050b0606052a0606052a06060500060005ff05ff
-05450606050e06000510010002020103020205000000050a0606052a0606052a06060500
-060005ff05ff05450606050e0600050f01000500020201030202000005ff05ff05e60100
-0202010302020500000005ff05ff05e401000500020201030202000005ff05ff05e60100
-020201030202050000000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050002020103020200000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010002020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff
-05ff05e802020103020205ff05ff05e8020201030202051c01020504010305c101020504
-0103051a0102057f01010505010205f001020504010305190101052f020201030202050e
-01060508010005060101050f010205010102059b01060508010005060101051001050504
-0101054d010205240104050d0101051e0102052401020501010205930106050801000506
-0101051101030535020201030202050e0100050101010500010005070101050601000511
-010105010100059d0100050101010500010005070101050601000513010105060100054d
-0101050001010524010105000101050c0100051e01010500010105240101050101000595
-010005010101050001000507010105060100051101010501010105340202010302020510
-010105030103050201030503010105030103050801020500010105010103050001010500
-01000500010005020103058b010105030103050201030503010105030103050a01010503
-0104054c0101050101050500010305000102050201030501010105000102050701010501
-01010500010305030104051d010105010105050001030500010205020103050101010500
-010205070102050001010501010305000101050001000500010005020103058301010503
-010305020103050301010503010305090101050101000500010305020105050101030521
-020201030202051001010506010105000101050101010502010105020101050101010507
-0100050001000500010005050101050001050500010105010101058a0101050601010500
-010105010101050201010502010105010101050901010502010105010101054c01000502
-010105000101050201000500010205000101050001010501010105010102050001000507
-010105010101050201010502010105010101051d01000502010105000101050201000500
-010205000101050001010501010105010102050001000507010005000100050001000505
-010105000105050001010501010105820101050601010500010105010101050201010502
-010105010101050801020504010105020101050001010501010105010101052002020103
-020205100100050401040500010105010101050201010501010605070100050001020502
-0104050001010500010005000107058a0100050401040500010105010101050201010501
-0106050901010501010105020101054b0101050201000501010105000100050001000500
-01010501010805010101050a0103050401010501010105020101051c0101050201000501
-01010500010005000100050001010501010805010101050a010005000102050201040500
-010105000100050001070582010005040104050001010501010105020101050101060509
-01020503010105040101050101060520020201030202050f010105020101050101010500
-0101050201010501010105020101050b0101050001010501010105010101050101000500
-01000500010005000101058e010105020101050101010500010105020101050101010502
-0101050d01010502010105010101054c0101050101010501010205000100050101000502
-01000500010105050101050a0101050601010502010105010101051d0101050101010501
-01020500010005010100050201000500010105050101050a010105000101050101010501
-010105010100050001000500010005000101058601010502010105010101050001010502
-01010501010105020101050b010105010101050201010503010105030101052502020103
-0202050f0101050201010501010105000101050101010502010105020101050101010507
-01000501010105010101050101010500010105000100050001000500010105010101058a
-010105020101050101010500010105010101050201010502010105010101050901010502
-010105010101054c01010500010105020103050101010501010105000101050101010501
-0101050a0101050601010502010105010101051d01010500010105020103050101010501
-0101050001010501010105010101050a0100050101010501010105010101050001010500
-010005000100050001010501010105820101050201010501010105000101050101010502
-010105020101050101010507010105010101050201010502010205000101050001010501
-01010521020201030202050e01030502010a050101050501010305070102050001010502
-0107050001000500010105000103058a01030502010a0501010505010103050801050501
-0105054c0102050301010500010005000103050001020500010305010104050701030503
-010505010105051d01020503010105000100050001030500010205000103050101040507
-01020500010105020107050001000500010105000103058201030502010a050101050501
-010305090103050101050500010505010103052202020103020205ff05ff05e802020103
-020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103
-020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103
-0202050201ff01ff01e205020202010302020503010000cb0101008101010059010100c3
-010100580101050001000500010005000100050001000500010005000100050001000500
-01000500000005020202010302020503010000cb0101008101010059010100c301010058
-010005000100030601000306000005030202010302020503010000cb010100810101000c
-0100002301000026010100c3010100580101050003050000050003060500000005020202
-0103020205030100001f0100000a0100009e010100810101000b01000004010100090104
-000a01010002010000250101001e0102000501000012010000060100002e010000120102
-0003010200310101000a0100000501010044010005000100030505000100050003050000
-050302020103020205030100001f0100000a0100009e010100810101000a010000040100
-0001010000080100000d0100000101000002010000240101002001000019010000360100
-001401000005010000310101000901010004010000010100004301010500030405000000
-050001000305050000000502020201030202050301000009010200030102000901040002
-01020002010000000101009b01010081010100090100000501000001010000080100000d
-010000010100000301000023010100090102000201000000010100020100000001010005
-01000003010200030102000301020002010400020102000301020002010000000101000a
-010200030102000201000000010100020104000101000000010100030102000501000005
-010000030102000201000000010100230101000801000000010000040100000101000043
-010005000100030400000502010003040000050302020103020205030100000801000002
-01000001010000020100000a010000030100000201000001010100010100009a01010081
-010100080100000601000001010000080103000a01000001010000040100002201010008
-010000020100000101010001010000010101000101000004010000050100000201000002
-010000010100000201000003010000060100000201000002010000010101000101000008
-010000020100000101000002010000010101000101000003010000030101000101000001
-01000002010000040100000501000002010000020100000101010001010000220101000a
-010000040100000101000043010105000303000005020100050003040500000005020202
-0103020205030100000c010000010100000e0100000701000001010000020100009a0101
-00810101000701000007010000010100000c010000090100000101000005010000210101
-000c01000001010000020100000101000002010000040100000501000002010000090100
-000301000006010000020100000201000001010000020100000801000005010000020100
-000101000002010000030100000301000005010000020100000401000005010000020100
-000201000001010000260101000a01000004010000010100004301000500010003030500
-0000050201000500030300000503020201030202050301000009010300010100000e0100
-000401030001010000020100009a010100810101000801000006010000010100000c0100
-000901000001010000040100002201010009010300010100000201000001010000020100
-000401000005010000020100000601030003010000060100000201000002010000010100
-000201000008010000050100000201000001010000020100000301000003010000050100
-000201000004010000050100000201040001010000260101000a01000004010000010100
-004301010500030205000000050401000303050000000502020201030202050301000008
-01000002010000010100000e010000030100000201000001010000020100009a01010081
-010100090100000501000001010000080100000201000009010000010100000301000023
-010100080100000201000001010000020100000101000002010000040100000501000002
-010000050100000201000003010000060100000201000002010000010100000201000008
-010000050100000201000001010000020100000301000003010000050100000201000004
-010000050100000201000005010000260101000a01000004010000010100004301000500
-010003020000050601000302000005030202010302020503010000080100000201000001
-010000020100000a010000030100000201000001010100010100009a010100810101000a
-010000040100000101000003010100020100000201000003010100030100000101000002
-010000240101000801000002010000010101000101000001010100010100000401000005
-010000020100000201000001010000020100000301000006010000020100000201000001
-010000020100000801000002010000010100000201000001010000020100000301000003
-01000005010000020100000401000005010000020100000201000001010000260101000a
-010000040100000101000043010105000301000005060100050003020500000005020202
-01030202050301000009010300020102000c0101000201030001010000000101009b0101
-00810101000b010000040101000401010003010200040101000401010002010000250101
-000901030001010000000101000201000000010100050100000501000003010200030103
-000401010004010000030102000201000002010000090102000301020002010000020100
-000401010001010000060102000501000005010000030102000201000026010100080104
-000301010044010005000100030105000000050601000500030100000503020201030202
-050301000015010500af010100810101000c01000023010000260101000f010000050100
-003c01050068010100580101050003000500000005080100030105000000050202020103
-02020503010000cb01010081010100590101000f01000005010000ab0101005801000500
-010003000000050a01000300000005030202010302020503010000cb0101008101010059
-0101000f01000005010000ab010100580101050000000500010005000100050001000500
-01000500010005000100050003000500000005020202010302020503010000cb01010081
-01010059010100c301010058010005000100050001000500010005000100050001000500
-010005000100050001000500000005030202010302020503010000cb0101008101010059
-010100c30101005801010500030e0500000005020202010302020503010000cb01010081
-01010059010100c301010058010005000100050000000500000005000000050000000500
-000005000000050000000500000005030202010302020503010000cb0101008101010059
-010100c30101005801010500000005000000050000000500000005000000050000000500
-000005000100050000000502020201030202050301ff01ff01ce0500010005000000050a
-0100050000000503020201030202050301ff01ff01cf05000000050c0100050000000502
-0202010302020503010000cb0101008101010059010100c3010100580100050001000500
-0000050a01000500000005030202010302020503010000cb0101008101010059010100c3
-01010058010105000000050c01000500000005020202010302020503010000cb01010081
-0101000c0100002a0100001f010100c30101005801000500010005000000050a01000500
-00000503020201030202050301000010010200090100000d0102000a010200100100007b
-010100810101000b010000040101000b010000050100000c010100020100001e01010010
-010200090100000d010200930101000a0101004b010105000000050c0100050000000502
-020201030202050301000012010000090100000f0100000c010000100100007b01010081
-0101000a010000040100000101000009010100040101000b01000001010000020100001d
-01010012010000090100000f0100009301010009010000010100004a0100050001000500
-0000050a0100050000000503020201030202050301000009010100000100000401000003
-010200020100000001010003010200050100000c01000003010200030102000201000001
-010000030102007101010081010100090100000501000001010000080100000001000003
-010000000100000b01000001010000030100001c01010009010100000100000401000003
-010200020100000001010003010200050100000901000000010100030102000201010000
-010000030102000a01020003010200020100000001010002010000020100000201020002
-010000000101003f01010009010000010100004a010105000000050c0100050000000502
-020201030202050301000008010000010101000401000002010000020100000101010001
-0100000101000002010000040100000c0100000201000002010000010100000201000001
-01000000010000030100000201000070010100810101000801000006010000010100000a
-010000050100000b01000001010000040100001b01010008010000010101000401000002
-010000020100000101010001010000010100000201000004010000090101000101000001
-010000020100000101000000010000000100000101000002010000080100000201000001
-010000020100000101010001010000010100000201000001010000020100000101010001
-0100003e01010009010000010100004a01000500010005000000050a0100050000000503
-020201030202050301000008010000020100000401000002010000020100000101000002
-01000005010000040100000c010000020100000201000001010000050101000401000074
-010100810101000701000007010000010100000a010000050100000b0100000101000005
-0100001a0101000801000002010000040100000201000002010000010100000201000005
-010000040100000901000002010000050100000101000000010000000100000101000002
-010000080100000501000002010000010100000501000002010000010100000201000001
-0100004201010009010000010100004a010105000000050c010005000000050202020103
-020205030100000801000002010000040100000201000002010000010100000201000002
-010300040100000c01000002010000020100000101000005010100050102007101010081
-0101000801000006010000010100000a010000050100000b01000001010000040100001b
-010100080100000201000004010000020100000201000001010000020100000201030004
-010000090100000201000002010300010100000001000000010000010104000901020002
-01040001010000060100000001000002010400010100004201010009010000010100004a
-01000500010005000000050a010005000000050302020103020205030100000801000002
-01000004010000020100000201000001010000020100000101000002010000040100000c
-010000020100000201000001010000050100000001000007010000700101008101010009
-01000005010000010100000a010000050100000b01000001010000030100001c01010008
-010000020100000401000002010000020100000101000002010000010100000201000004
-010000090100000201000001010000020100000101000000010000000100000101000010
-010000010100000501000006010000000100000201000005010000420101000901000001
-0100004a010105000000050c010005000000050202020103020205030100000801000001
-01010004010000020100000201000001010100010100000101000002010000040100000c
-010000020100000201000001010000020100000101000001010000020100000201000070
-010100810101000a01000004010000010100000301010004010000050100000501010003
-01000001010000020100001d010100080100000101010004010000020100000201000001
-010100010100000101000002010000040100000901000002010000010100000201000001
-010000000100000001000001010000020100000801000002010000010100000201000001
-010000070100000301000002010000010100004201010009010000010100004a01000500
-010005000000050a01000500000005030202010302020503010000090101000001000004
-01000003010200020100000001010003010300040100000c010000030102000301020002
-010000020100000201020071010100810101000b01000004010100040101000201040001
-0104000301010004010100020100001e0101000901010000010000040100000301020002
-010000000101000301030004010000090100000201000002010300010100000001000000
-010000020102000a0102000301020002010000070100000401020002010000420101000a
-0101004b010105000000050c010005000000050202020103020205030100000c01000023
-01050093010100810101000c0100002a0100001f0101000c010000230105001c01050068
-0101005801000500010005000000050a0100050000000503020201030202050301000008
-01000002010000bd01010081010100590101000801000002010000b50101005801010500
-0000050c0100050000000502020201030202050301000009010200be0101008101010059
-01010009010200b60101005801000500010005000000050a010005000000050302020103
-02020503010000cb0101008101010059010100c301010058010105000000050c01000500
-000005020202010302020503010000cb0101008101010059010100c30101005801000500
-010005000000050a01000500000005030202010302020503010000cb0101008101010059
-010100c301010058010105000000050c01000500000005020202010302020503010000cb
-0101008101010059010100c30101005801000500010005000000050a0100050000000503
-020201030202050301ff01ff01cf05000000050c01000500000005020202010302020503
-01ff01ff01ce0500010005000000050a01000500000005030202010302020503010000cb
-0101008101010059010100c301010058010105000000050c010005000000050202020103
-02020503010000cb0101008101010059010100c30101005801000500010005000000050a
-01000500000005030202010302020503010000cb010100810101000c0100002a0100001f
-010100c301010058010105000000050c0100050000000502020201030202050301000010
-010200090100000d0102009b010100810101000b010000040101000b010000050100000c
-010100020100001e01010010010200090100000d010200930101000a0101004b01000500
-010005000000050a0100050000000503020201030202050301000012010000090100000f
-0100009b010100810101000a010000040100000101000009010100040101000b01000001
-010000020100001d01010012010000090100000f0100009301010009010000010100004a
-010105000000050c01000500000005020202010302020503010000090101000001000004
-010000030102000201000000010100030102000501000009010000000101000301020002
-010100000100000301020003010200710101008101010009010000050100000101000008
-0100000001000003010000000100000b01000001010000030100001c0101000901010000
-010000040100000301020002010000000101000301020005010000090100000001010003
-0102000201010000010000030102000a0102000301020002010000000101000201000002
-0100000201020002010000000101003f01010009010000010100004a0100050001000500
-0000050a0100050000000503020201030202050301000008010000010101000401000002
-010000020100000101010001010000010100000201000004010000090101000101000001
-010000020100000101000000010000000100000101000002010000010100000201000070
-010100810101000801000006010000010100000a010000050100000b0100000101000004
-0100001b0101000801000001010100040100000201000002010000010101000101000001
-010000020100000401000009010100010100000101000002010000010100000001000000
-010000010100000201000008010000020100000101000002010000010101000101000001
-01000002010000010100000201000001010100010100003e01010009010000010100004a
-010105000000050c01000500000005020202010302020503010000080100000201000004
-010000020100000201000001010000020100000501000004010000090100000201000005
-010000010100000001000000010000010100000201000001010000740101008101010007
-01000007010000010100000a010000050100000b01000001010000050100001a01010008
-010000020100000401000002010000020100000101000002010000050100000401000009
-010000020100000501000001010000000100000001000001010000020100000801000005
-010000020100000101000005010000020100000101000002010000010100004201010009
-010000010100004a01000500010005000000050a01000500000005030202010302020503
-010000080100000201000004010000020100000201000001010000020100000201030004
-010000090100000201000002010300010100000001000000010000010104000201020071
-010100810101000801000006010000010100000a010000050100000b0100000101000004
-0100001b0101000801000002010000040100000201000002010000010100000201000002
-010300040100000901000002010000020103000101000000010000000100000101040009
-010200020104000101000006010000000100000201040001010000420101000901000001
-0100004a010105000000050c010005000000050202020103020205030100000801000002
-010000040100000201000002010000010100000201000001010000020100000401000009
-010000020100000101000002010000010100000001000000010000010100000901000070
-010100810101000901000005010000010100000a010000050100000b0100000101000003
-0100001c0101000801000002010000040100000201000002010000010100000201000001
-010000020100000401000009010000020100000101000002010000010100000001000000
-010000010100001001000001010000050100000601000000010000020100000501000042
-01010009010000010100004a01000500010005000000050a010005000000050302020103
-020205030100000801000001010100040100000201000002010000010101000101000001
-010000020100000401000009010000020100000101000002010000010100000001000000
-0100000101000002010000010100000201000070010100810101000a0100000401000001
-010000030101000401000005010000050101000301000001010000020100001d01010008
-010000010101000401000002010000020100000101010001010000010100000201000004
-010000090100000201000001010000020100000101000000010000000100000101000002
-010000080100000201000001010000020100000101000007010000030100000201000001
-0100004201010009010000010100004a010105000000050c010005000000050202020103
-020205030100000901010000010000040100000301020002010000000101000301030004
-010000090100000201000002010300010100000001000000010000020102000301020071
-010100810101000b01000004010100040101000201040001010400030101000401010002
-0100001e0101000901010000010000040100000301020002010000000101000301030004
-010000090100000201000002010300010100000001000000010000020102000a01020003
-01020002010000070100000401020002010000420101000a0101004b0100050001000500
-0000050a010005000000050302020103020205030100000c010000230105009301010081
-0101000c0100002a0100001f0101000c010000230105001c010500680101005801010500
-0000050c010005000000050202020103020205030100000801000002010000bd01010081
-010100590101000801000002010000b50101005801000500010005000000050a01000500
-00000503020201030202050301000009010200be010100810101005901010009010200b6
-01010058010105000000050c01000500000005020202010302020503010000cb01010081
-01010059010100c30101005801000500010005000000050a010005000000050302020103
-02020503010000cb0101008101010059010100c301010058010105000000050c01000500
-000005020202010302020503010000cb0101008101010059010100c30101005801000500
-010005000000050a01000500000005030202010302020503010000cb0101008101010059
-010100c301010058010105000000050c0100050000000502020201030202050301ff01ff
-01ce0500010005000000050a0100050000000503020201030202050301ff01ff01cf0500
-0000050c01000500000005020202010302020503010000cb0101008101010059010100c3
-0101005801000500010005000000050a01000500000005030202010302020503010000cb
-0101008101010059010100c301010058010105000000050c010005000000050202020103
-02020503010000cb010100810101000c0100002a0100001f010100c30101005801000500
-010005000000050a0100050000000503020201030202050301000010010200090100000d
-0102004301000056010100810101000b010000040101000b010000050100000c01010002
-0100001e01010010010200090100000d010200930101000a0101004b010105000000050c
-0100050000000502020201030202050301000012010000090100000f0100004301000056
-010100810101000a010000040100000101000009010100040101000b0100000101000002
-0100001d01010012010000090100000f0100009301010009010000010100004a01000500
-010005000000050a01000500000005030202010302020503010000090101000001000004
-010000030102000201000000010100030102000501000009010000000101000301020002
-0101000001000003010200030102000a0102000201000002010000010104005401010081
-010100090100000501000001010000080100000001000003010000000100000b01000001
-010000030100001c01010009010100000100000401000003010200020100000001010003
-010200050100000901000000010100030102000201010000010000030102000a01020003
-010200020100000001010002010000020100000201020002010000000101003f01010009
-010000010100004a010105000000050c0100050000000502020201030202050301000008
-010000010101000401000002010000020100000101010001010000010100000201000004
-010000090101000101000001010000020100000101000000010000000100000101000002
-010000010100000201000008010000020100000101000002010000030100005601010081
-0101000801000006010000010100000a010000050100000b01000001010000040100001b
-010100080100000101010004010000020100000201000001010100010100000101000002
-010000040100000901010001010000010100000201000001010000000100000001000001
-010000020100000801000002010000010100000201000001010100010100000101000002
-010000010100000201000001010100010100003e01010009010000010100004a01000500
-010005000000050a01000500000005030202010302020503010000080100000201000004
-010000020100000201000001010000020100000501000004010000090100000201000005
-0100000101000000010000000100000101000002010000010100000c0100000201000002
-010000000100000401000056010100810101000701000007010000010100000a01000005
-0100000b01000001010000050100001a0101000801000002010000040100000201000002
-010000010100000201000005010000040100000901000002010000050100000101000000
-010000000100000101000002010000080100000501000002010000010100000501000002
-0100000101000002010000010100004201010009010000010100004a010105000000050c
-010005000000050202020103020205030100000801000002010000040100000201000002
-010000010100000201000002010300040100000901000002010000020103000101000000
-010000000100000101040002010200090104000301000005010000560101008101010008
-01000006010000010100000a010000050100000b01000001010000040100001b01010008
-010000020100000401000002010000020100000101000002010000020103000401000009
-010000020100000201030001010000000100000001000001010400090102000201040001
-010000060100000001000002010400010100004201010009010000010100004a01000500
-010005000000050a01000500000005030202010302020503010000080100000201000004
-010000020100000201000001010000020100000101000002010000040100000901000002
-010000010100000201000001010000000100000001000001010000090100000801000006
-010000000100000401000056010100810101000901000005010000010100000a01000005
-0100000b01000001010000030100001c0101000801000002010000040100000201000002
-010000010100000201000001010000020100000401000009010000020100000101000002
-010000010100000001000000010000010100001001000001010000050100000601000000
-01000002010000050100004201010009010000010100004a010105000000050c01000500
-000005020202010302020503010000080100000101010004010000020100000201000001
-010100010100000101000002010000040100000901000002010000010100000201000001
-010000000100000001000001010000020100000101000002010000080100000201000001
-010000020100000301000056010100810101000a01000004010000010100000301010004
-01000005010000050101000301000001010000020100001d010100080100000101010004
-010000020100000201000001010100010100000101000002010000040100000901000002
-010000010100000201000001010000000100000001000001010000020100000801000002
-010000010100000201000001010000070100000301000002010000010100004201010009
-010000010100004a01000500010005000000050a01000500000005030202010302020503
-010000090101000001000004010000030102000201000000010100030103000401000009
-010000020100000201030001010000000100000001000002010200030102000a01020002
-010000020100000401010054010100810101000b01000004010100040101000201040001
-0104000301010004010100020100001e0101000901010000010000040100000301020002
-010000000101000301030004010000090100000201000002010300010100000001000000
-010000020102000a0102000301020002010000070100000401020002010000420101000a
-0101004b010105000000050c010005000000050202020103020205030100000c01000023
-0105002301050069010100810101000c0100002a0100001f0101000c010000230105001c
-010500680101005801000500010005000000050a01000500000005030202010302020503
-0100000801000002010000bd01010081010100590101000801000002010000b501010058
-010105000000050c0100050000000502020201030202050301000009010200be01010081
-0101005901010009010200b60101005801000500010005000000050a0100050000000503
-0202010302020503010000cb0101008101010059010100c301010058010105000000050c
-01000500000005020202010302020503010000cb0101008101010059010100c301010058
-01000500010005000000050a01000500000005030202010302020503010000cb01010081
-01010059010100c301010058010105000000050c01000500000005020202010302020503
-010000cb0101008101010059010100c30101005801000500010005000000050a01000500
-00000503020201030202050301ff01ff01cf05000000050c010005000000050202020103
-0202050301ff01ff01ce0500010005000000050a01000500000005030202010302020503
-010000cb0101008101010059010100c301010058010105000000050c0100050000000502
-0202010302020503010000cb0101008101010059010100c3010100580100050001000500
-0000050a01000500000005030202010302020503010000cb010100810101000c0100002a
-0100001f010100c301010058010105000000050c01000500000005020202010302020503
-0100000b010000120100001f01000089010100810101000b010000040101000b01000004
-0102000b010100020100001e0101000b010000120100000e010000010100008f0101000a
-0101004b01000500010005000000050a010005000000050302020103020205030100001f
-0100001f01000089010100810101000a0100000401000001010000090101000301000002
-0100000901000001010000020100001d0101001f0100000e010000010100008f01010009
-010000010100004a010105000000050c0100050000000502020201030202050301000009
-010200020100000001010003010200020104000901020003010200030102000201000000
-010100030102007f01010081010100090100000501000001010000080100000001000007
-0100000901000001010000030100001c0101000901020002010000000101000301020002
-010400090101000001000001010000000101008c01010009010000010100004a01000500
-010005000000050a010005000000050302020103020205030100000b0100000201010001
-0100000101000002010000030100000a0100000201000001010000020100000101000002
-010000010101000101000001010000020100007e01010081010100080100000601000001
-0100000a010000070100000901000001010000040100001b0101000b0100000201010001
-0100000101000002010000030100000a0100000101010001010100010100008b01010009
-010000010100004a010105000000050c010005000000050202020103020205030100000b
-01000002010000020100000101000002010000030100000a010000090100000101000005
-0100000201000001010000020100007e010100810101000701000007010000010100000a
-010000060100000a01000001010000050100001a0101000b010000020100000201000001
-01000002010000030100000a0100000201000001010000020100008b0101000901000001
-0100004a01000500010005000000050a010005000000050302020103020205030100000b
-010000020100000201000001010400030100000a01000006010300010100000501000002
-010000010104007e010100810101000801000006010000010100000a010000050100000b
-01000001010000040100001b0101000b010000020100000201000001010400030100000a
-0100000201000001010000020100008b01010009010000010100004a010105000000050c
-010005000000050202020103020205030100000b01000002010000020100000101000007
-0100000a0100000501000002010000010100000501000002010000010100008201010081
-0101000901000005010000010100000a010000040100000c01000001010000030100001c
-0101000b010000020100000201000001010000070100000a010000020100000101000002
-0100008b01010009010000010100004a01000500010005000000050a0100050000000503
-02020103020205030100000b01000002010000020100000101000002010000030100000a
-010000020100000101000002010000010100000201000001010000020100000101000002
-0100007e010100810101000a010000040100000101000003010100040100000301000007
-0101000301000001010000020100001d0101000b01000002010000020100000101000002
-010000030100000a0100000101010001010100010100008b01010009010000010100004a
-010105000000050c010005000000050202020103020205030100000b0100000201000002
-01000002010200050101000901020003010300020102000201000002010000020102007f
-010100810101000b01000004010100040101000201040001010400030101000401010002
-0100001e0101000b01000002010000020100000201020005010100090101000001000001
-010000000101008c0101000a0101004b01000500010005000000050a0100050000000503
-020201030202050301000023010500a1010100810101000c0100002a0100001f01010023
-0105009901010058010105000000050c01000500000005020202010302020503010000cb
-0101008101010059010100c30101005801000500010005000000050a0100050000000503
-0202010302020503010000cb0101008101010059010100c301010058010105000000050c
-01000500000005020202010302020503010000cb0101008101010059010100c301010058
-01000500010005000000050a01000500000005030202010302020503010000cb01010081
-01010059010100c301010058010105000000050c01000500000005020202010302020503
-010000cb0101008101010059010100c30101005801000500010005000000050a01000500
-000005030202010302020503010000cb0101008101010059010100c30101005801010500
-0000050c0100050000000502020201030202050301ff01ff01ce0500010005000000050a
-0100050000000503020201030202050301ff01ff01cf05000000050c0100050000000502
-0202010302020503010000cb0101008101010059010100c3010100580100050001000500
-0000050a01000500000005030202010302020503010000cb0101008101010059010100c3
-01010058010105000000050c01000500000005020202010302020503010000cb01010081
-0101000c0100002a0100001f010100c30101005801000500010005000000050a01000500
-0000050302020103020205030100000b010000120100000e010000010100009701010081
-0101000b010000040101000b010000040102000b010100020100001e0101000b01000012
-0100000e010000010100008f0101000a0100000401020044010105000000050c01000500
-0000050202020103020205030100001f0100000e0100000101000097010100810101000a
-01000004010000010100000901010003010000020100000901000001010000020100001d
-0101001f0100000e010000010100008f0101000901010003010000020100004301000500
-010005000000050a01000500000005030202010302020503010000090102000201000000
-010100030102000201040009010100000100000101000000010100940101008101010009
-01000005010000010100000801000000010000070100000901000001010000030100001c
-010100090102000201000000010100030102000201040009010100000100000101000000
-0101008c0101000801000000010000030100000201000043010105000000050c01000500
-0000050202020103020205030100000b0100000201010001010000010100000201000003
-0100000a0100000101010001010100010100009301010081010100080100000601000001
-0100000a010000070100000901000001010000040100001b0101000b0100000201010001
-0100000101000002010000030100000a0100000101010001010100010100008b0101000a
-01000003010000020100004301000500010005000000050a010005000000050302020103
-020205030100000b01000002010000020100000101000002010000030100000a01000002
-010000010100000201000093010100810101000701000007010000010100000a01000006
-0100000a01000001010000050100001a0101000b01000002010000020100000101000002
-010000030100000a0100000201000001010000020100008b0101000a0100000401030043
-010105000000050c010005000000050202020103020205030100000b0100000201000002
-01000001010400030100000a010000020100000101000002010000930101008101010008
-01000006010000010100000a010000050100000b01000001010000040100001b0101000b
-010000020100000201000001010400030100000a0100000201000001010000020100008b
-0101000a010000070100004301000500010005000000050a010005000000050302020103
-020205030100000b010000020100000201000001010000070100000a0100000201000001
-0100000201000093010100810101000901000005010000010100000a010000040100000c
-01000001010000030100001c0101000b010000020100000201000001010000070100000a
-0100000201000001010000020100008b0101000a0100000701000043010105000000050c
-010005000000050202020103020205030100000b01000002010000020100000101000002
-010000030100000a01000001010100010101000101000093010100810101000a01000004
-01000001010000030101000401000003010000070101000301000001010000020100001d
-0101000b01000002010000020100000101000002010000030100000a0100000101010001
-010100010100008b0101000a01000003010000020100004301000500010005000000050a
-010005000000050302020103020205030100000b01000002010000020100000201020005
-0101000901010000010000010100000001010094010100810101000b0100000401010004
-01010002010400010104000301010004010100020100001e0101000b0100000201000002
-0100000201020005010100090101000001000001010000000101008c0101000801040002
-01020044010105000000050c0100050000000502020201030202050301000023010500a1
-010100810101000c0100002a0100001f0101002301050099010100580100050001000500
-0000050a01000500000005030202010302020503010000cb0101008101010059010100c3
-01010058010105000000050c01000500000005020202010302020503010000cb01010081
-01010059010100c30101005801000500010005000000050a010005000000050302020103
-02020503010000cb0101008101010059010100c301010058010105000000050c01000500
-000005020202010302020503010000cb0101008101010059010100c30101005801000500
-010005000000050a01000500000005030202010302020503010000cb0101008101010059
-010100c301010058010105000000050c01000500000005020202010302020503010000cb
-0101008101010059010100c30101005801000500010005000000050a0100050000000503
-020201030202050301ff01ff01cf05000000050c01000500000005020202010302020503
-01ff01ff01ce0500010005000000050a01000500000005030202010302020503010000cb
-0101008101010059010100c301010058010105000000050c010005000000050202020103
-02020503010000cb0101008101010059010100c30101005801000500010005000000050a
-01000500000005030202010302020503010000cb010100810101000c0100002a0100001f
-010100c301010058010105000000050c010005000000050202020103020205030100000b
-010000120100000a0100001501000087010100810101000b010000040101000b01000004
-0102000b010100020100001e0101000b010000120100000e010000010100008f0101000c
-0100004a01000500010005000000050a010005000000050302020103020205030100001f
-0100000a0100001501000087010100810101000a01000004010000010100000901010003
-010000020100000901000001010000020100001d0101001f0100000e010000010100008f
-0101000b0101004a010105000000050c0100050000000502020201030202050301000009
-010200020100000001010003010200020104000801000000010100030102000301020002
-010400020102007f01010081010100090100000501000001010000080100000001000007
-0100000901000001010000030100001c0101000901020002010000000101000301020002
-010400090101000001000001010000000101008c0101000a010000000100004a01000500
-010005000000050001000500010005000100050001000500010005000100050000000503
-02020103020205030100000b01000002010100010100000101000002010000030100000a
-01010001010000010100000201000001010000020100000301000003010000020100007e
-010100810101000801000006010000010100000a01000007010000090100000101000004
-0100001b0101000b01000002010100010100000101000002010000030100000a01000001
-01010001010100010100008b01010009010000010100004a010105000000050001000500
-010005000100050001000500010005000100050001000500000005020202010302020503
-0100000b01000002010000020100000101000002010000030100000a0100000201000001
-010000020100000101000007010000030100008201010081010100070100000701000001
-0100000a010000060100000a01000001010000050100001a0101000b0100000201000002
-0100000101000002010000030100000a0100000201000001010000020100008b01010008
-010000020100004a010005000100030e0000050302020103020205030100000b01000002
-0100000201000001010400030100000a0100000201000001010000020100000201020004
-010000040102007f010100810101000801000006010000010100000a010000050100000b
-01000001010000040100001b0101000b010000020100000201000001010400030100000a
-0100000201000001010000020100008b01010008010000020100004a01010500030e0500
-0000050202020103020205030100000b010000020100000201000001010000070100000a
-0100000201000001010000020100000501000003010000070100007e0101008101010009
-01000005010000010100000a010000040100000c01000001010000030100001c0101000b
-010000020100000201000001010000070100000a0100000201000001010000020100008b
-0101000801050049010005000100030e0000050302020103020205030100000b01000002
-010000020100000101000002010000030100000a01000002010000010100000201000001
-010000020100000301000003010000020100007e010100810101000a0100000401000001
-010000030101000401000003010000070101000301000001010000020100001d0101000b
-01000002010000020100000101000002010000030100000a010000010101000101010001
-0100008b0101000c0100004a01010500030e05000000050202020103020205030100000b
-010000020100000201000002010200050101000801000002010000020102000301020005
-010100020102007f010100810101000b0100000401010004010100020104000101040003
-01010004010100020100001e0101000b0100000201000002010000020102000501010009
-0101000001000001010000000101008c0101000c0100004a010005000100030e00000503
-020201030202050301000023010500a1010100810101000c0100002a0100001f01010023
-010500990101005801010500030e0500000005020202010302020503010000cb01010081
-01010059010100c301010058010005000100030e000005030202010302020503010000cb
-0101008101010059010100c30101005801010500030e0500000005020202010302020503
-010000cb0101008101010059010100c301010058010005000100030e0000050302020103
-02020503010000cb0101008101010059010100c30101005801010500030e050000000502
-0202010302020503010000cb0101008101010059010100c301010058010005000100030e
-000005030202010302020503010000cb0101008101010059010100c30101005801010500
-030e050000000502020201030202050301ff01ff01ce05000100030e0000050302020103
-0202050307cd01ff01ff01010500030e0500000005020202010302020503070008cb0700
-0100088101010859010108c301010858010005000100030e000005030202010302020503
-070008cb07000100080b010108470101082901010859010108c30101085801010500030e
-0500000005020202010302020503070008cb07000100080a010008150100082a01000808
-010008280101080c0100082a0100081f010108c301010858010005000100030e00000503
-02020103020205030700081d07000808070008a207000100080a010008040102080c0100
-08040101080b010008030104080a0101080201000807010008280101080b010008040101
-080b010008030104080a010108020100081e010108180100080a01000822010208770101
-080a0100084c01010500030e05000000050202020103020205030700081d070008ac0700
-0100080a01000803010008020100080a0100080401000801010008090101080301000802
-01000809010008010100080201000806010008280101080a010008040100080101000809
-01010803010008020100080901000801010008020100081d010108180100080a01000824
-01000877010108090101084c010005000100030e00000503020201030202050307000809
-070208030702080307020802070008010700080307020803070208030702089407000100
-080a01000803010008020100080901000805010008010100080801000800010008070100
-080901000801010008030100080501000828010108090100080501000801010008080100
-0800010008070100080901000801010008030100081c0101080801000800010108030102
-080201040808010008010100080301020802010008000101080201000800010108030102
-08050100087701010808010008000100084c01010500030e050000000502020201030202
-050307000808070008020700080107000802070008010700080207000801070008000700
-0806070008020700080207000801070008020700089307000100080a0100080301000802
-0100080801000806010008010100080a010008060100080a010008010100080401000804
-010008280101080801000806010008010100080a010008060100080a0100080101000804
-0100081b01010808010108010100080101000802010008030100080a0100080001000803
-010008020100080101010801010008010101080101000801010008020100080401000877
-0101080a0100084c010005000100030e0000050302020103020205030700080807000805
-070008020700080107000802070008010701080707000802070008020700080107000897
-070001000808010108050102080801000807010008010100080a010008060100080a0100
-08010100080501000804010108260101080701000807010008010100080a010008060100
-080a01000801010008050100081a01010808010008020100080101000802010008030100
-080a01010804010008020100080101000805010008020100080101000802010008040100
-08770101080a0100084c01010500030e0500000005020202010302020503070008080700
-080507000802070008010700080207000801070108070700080207040802070208940700
-0100080a01000803010008020100080801000806010008010100080a010008060100080a
-010008010100080401000804010008280101080801000806010008010100080a01000806
-0100080a01000801010008040100081b010108080100080201000801010408030100080a
-010108040104080101000805010008020100080101040804010008770101080a0100084c
-010005000100030e00000503020201030202050307000808070008050700080207000801
-0700080207000801070008000700080607000802070008090700089307000100080a0100
-0803010008020100080901000805010008010100080a010008050100080b010008010100
-080301000805010008280101080901000805010008010100080a010008050100080b0100
-0801010008030100081c010108080100080201000801010008070100080a010008000100
-08030100080501000805010008020100080101000808010008770101080a0100084c0101
-0500030e0500000005020202010302020503070008080700080207000801070008020700
-080107000802070008010700080107000805070008020700080207000801070008020700
-089307000100080a01000803010008020100080301010804010008040100080101000803
-01010804010008050100080501010803010008010100080201000806010008280101080a
-010008040100080101000803010108040100080501000805010108030100080101000802
-0100081d01010808010008020100080101000802010008030100080a0100080101000802
-01000802010008010100080501000802010008010100080201000804010008770101080a
-0100084c010005000100030e000005030202010302020503070008090702080307020803
-07020802070008020700080407000803070208030702089407000100080a010008040102
-080401010805010008040101080401010802010408030100080501010804010108020100
-0807010008280101080b0100080401010804010108020104080301000805010108040101
-08020100081e010108080100080201000802010208050101080801000802010008020102
-08020100080501000802010008020102080501000877010108080104084a01010500030e
-0500000005020202010302020503070008cb07000100080a0100080d010008060100082a
-01000808010008280101080c0100082a0100081f0101081c010508a00101085801000500
-0100030e000005030202010302020503070008cb07000100080b010108090101083b0101
-082901010859010108c30101085801010500030e05000000050202020103020205030700
-08cb07000100088101010859010108c301010858010005000100030e0000050302020103
-02020503070008cb07000100088101010859010108c30101085801010500030e05000000
-05020202010302020503070008cb07000100088101010859010108c30101085801000500
-0100030e000005030202010302020503070008cb07000100088101010859010108c30101
-085801010500030e0500000005020202010302020503070008cb07000100088101010859
-010108c301010858010005000100030e00000503020201030202050307cd01ff01ff0101
-0500030e050000000502020201030202050301ff01ff01ce05000100030e000005030202
-010302020503010000cb0101008101010059010100c30101005801010500030e05000000
-05020202010302020503010000cb0101008101010059010100c301010058010005000100
-030e000005030202010302020503010000cb010100810101000c0100002a0100001f0101
-00c30101005801010500030e050000000502020201030202050301000028010000040100
-000b0100008e010100810101000b010000040101000b010000030104000a010100020100
-001e010100180100000a01000022010200770101000a0101004b010005000100030e0000
-0503020201030202050301000028010000110100008e010100810101000a010000040100
-00010100000901010003010000020100000901000001010000020100001d010100180100
-000a010000240100007701010009010000010100004a01010500030e0500000005020202
-010302020503010000090102000201000002010000020102000a01010000010000020102
-0003010200020104008c0101008101010009010000050100000101000008010000000100
-00070100000901000001010000030100001c010100080100000001010003010200020104
-000801000001010000030102000201000000010100020100000001010003010200050100
-007701010009010000010100004a010005000100030e0000050302020103020205030100
-000801000002010000010100000201000001010000020100000801000001010100040100
-000201000002010000030100008e010100810101000801000006010000010100000a0100
-00060100000a01000001010000040100001b010100080101000101000001010000020100
-00030100000a010000000100000301000002010000010101000101000001010100010100
-000101000002010000040100007701010009010000010100004a01010500030e05000000
-05020202010302020503010000080100000601000001010000010100000c010000020100
-000401000002010000070100008e010100810101000701000007010000010100000a0100
-00060100000a01000001010000050100001a010100080100000201000001010000020100
-00030100000a010100040100000201000001010000050100000201000001010000020100
-00040100007701010009010000010100004a010005000100030e00000503020201030202
-050301000009010200030100000101000002010200090100000201000004010000030102
-00040100008e010100810101000801000006010000010100000a010000060100000a0100
-0001010000040100001b010100080100000201000001010400030100000a010100040104
-0001010000050100000201000001010400040100007701010009010000010100004a0101
-0500030e05000000050202020103020205030100000c0100000301000000010000050100
-0008010000020100000401000006010000030100008e0101008101010009010000050100
-00010100000a010000050100000b01000001010000030100001c01010008010000020100
-0001010000070100000a0100000001000003010000050100000501000002010000010100
-00080100007701010009010000010100004a010005000100030e00000503020201030202
-050301000008010000020100000301010002010000020100000801000001010100040100
-000201000002010000030100008e010100810101000a0100000401000001010000030101
-000401000005010000050101000301000001010000020100001d01010008010000020100
-000101000002010000030100000a01000001010000020100000201000001010000050100
-00020100000101000002010000040100007701010009010000010100004a01010500030e
-05000000050202020103020205030100000901020005010000030102000a010100000100
-000401000003010200050101008c010100810101000b0100000401010004010100020104
-00030100000501010004010100020100001e010100080100000201000002010200050101
-000801000002010000020102000201000005010000020100000201020005010000770101
-000a0101004b010005000100030e00000503020201030202050301000012010000080105
-00a8010100810101000c0100002a0100001f0101001c010500a00101005801010500030e
-05000000050202020103020205030100000f01000000010000b801010081010100590101
-00c301010058010005000100030e00000503020201030202050301000010010000b90101
-008101010059010100c30101005801010500030e05000000050202020103020205030100
-00cb0101008101010059010100c301010058010005000100030e00000503020201030202
-0503010000cb0101008101010059010100c30101005801010500030e0500000005020202
-010302020503010000cb0101008101010059010100c301010058010005000100030e0000
-05030202010302020503010000cb0101008101010059010100c30101005801010500030e
-050000000502020201030202050301ff01ff01ce05000100030e00000503020201030202
-050307cd01ff01ff01010500030e0500000005020202010302020503070008cb07000100
-088101010859010108c301010858010005000100030e0000050302020103020205030700
-08cb07000100080b0101084e0101082201010859010108c30101085801010500030e0500
-000005020202010302020503070008cb07000100080a0100081c0100082a010008080100
-08210101080c0100082a0100081f010108c301010858010005000100030e000005030202
-0103020205030700081a070008af07000100080a01000805010008050101080c01000804
-0101080a010208020104080a0101080201000807010008210101080b010008040101080a
-010208020104080a010108020100081e0101081a010008a7010108090102080201040802
-0102083d01010500030e05000000050202020103020205030700081a070008af07000100
-080a0100080401010804010008010100080a010008040100080101000808010008020100
-08010100080201000809010008010100080201000806010008210101080a010008040100
-0801010008080100080201000801010008020100080901000801010008020100081d0101
-081a010008a701010808010008020100080101000805010008020100083c010005000100
-030e00000503020201030202050307000809070208030702080307010800070008020702
-08a907000100080a01000803010008000100080401000801010008090100080501000801
-0100080c0100080501000809010008010100080301000805010008210101080901000805
-010008010100080c010008050100080901000801010008030100081c0101080901020803
-0102080301010800010008020102080a0102080301020802010008000101080201000802
-010008020102080201000800010108700101080c01000801010008090100083c01010500
-030e05000000050202020103020205030700080807000802070008010700080207000801
-070008010701080107000802070008a807000100080a0100080501000804010008010100
-080801000806010008010100080c010008040100080a0100080101000804010008040100
-08210101080801000806010008010100080c010008040100080a01000801010008040100
-081b01010808010008020100080101000802010008010100080101010801010008020100
-080801000802010008010100080201000801010108010100080101000802010008010100
-080201000801010108010100086f0101080c01000801010308060100083c010005000100
-030e00000503020201030202050307000808070008050700080207000801070008020700
-080107000802070008a80700010008080101080601000804010008010100080701000807
-010008010100080b010008050100080a0100080101000805010008040101081f01010807
-01000807010008010100080b010008050100080a01000801010008050100081a01010808
-010008050100080201000801010008020100080101000802010008080100080501000802
-010008010100080501000802010008010100080201000801010008730101080b01000806
-010008040100083d01010500030e05000000050202020103020205030700080807000805
-07000802070008010700080207000801070408a807000100080a01000805010008040100
-08010100080801000806010008010100080a010008060100080a01000801010008040100
-0804010008210101080801000806010008010100080a010008060100080a010008010100
-08040100081b010108080100080501000802010008010100080201000801010408090102
-08020104080101000806010008000100080201040801010008730101080a010008070100
-08030100083e010005000100030e00000503020201030202050307000808070008050700
-0802070008010700080207000801070008ac07000100080a010008050100080401000801
-01000809010008050100080101000809010008060100080b010008010100080301000805
-0100082101010809010008050100080101000809010008060100080b0100080101000803
-0100081c0101080801000805010008020100080101000802010008010100081001000801
-010008050100080601000800010008020100080501000873010108090100080401000802
-010008020100083f01010500030e05000000050202020103020205030700080807000802
-070008010700080207000801070008010701080107000802070008a807000100080a0100
-080501000804010008010100080301010804010008040100080101000803010108020100
-08070100080501010803010008010100080201000806010008210101080a010008040100
-0801010008030101080201000807010008050101080301000801010008020100081d0101
-080801000802010008010100080201000801010008010101080101000802010008080100
-080201000801010008020100080101000807010008030100080201000801010008730101
-080801000805010008020100080101000840010005000100030e00000503020201030202
-05030700080907020803070208030701080007000802070208a907000100080a01000803
-010408030101080401010805010008040101080401010802010408030100080501010804
-0101080201000807010008210101080b0100080401010804010108020104080301000805
-01010804010108020100081e01010809010208030102080301010800010008020102080a
-010208030102080201000807010008040102080201000873010108080104080201020802
-0104083c01010500030e0500000005020202010302020503070008cb07000100080a0100
-0814010008060100082a01000808010008210101080c0100082a0100081f010108230105
-089901010858010005000100030e000005030202010302020503070008cb07000100080b
-010108100101083b0101082201010859010108c30101085801010500030e050000000502
-0202010302020503070008cb07000100088101010859010108c301010858010005000100
-030e000005030202010302020503070008cb07000100088101010859010108c301010858
-01010500030e0500000005020202010302020503070008cb070001000881010108590101
-08c301010858010005000100030e000005030202010302020503070008cb070001000881
-01010859010108c30101085801010500030e0500000005020202010302020503070008cb
-07000100088101010859010108c301010858010005000100030e00000503020201030202
-050307cd01ff01ff01010500030e050000000502020201030202050307cd01ff01ff0100
-05000100030e000005030202010302020503070008cb07000100088101010859010108c3
-0101085801010500030e0500000005020202010302020503070008cb07000100080b0101
-084e0101082201010859010108c301010858010005000100030e00000503020201030202
-0503070008cb07000100080a0100081c0100082a01000808010008210101080c0100082a
-0100081f010108c30101085801010500030e05000000050202020103020205030700081a
-070008af07000100080a01000805010008050100080d010008040101080a010208020104
-080a0101080201000807010008210101080b010008040101080a010208020104080a0101
-08020100081e0101081a010008a7010108090102080301020844010005000100030e0000
-050302020103020205030700081a070008af07000100080a01000804010108040101080c
-010008040100080101000808010008020100080101000802010008090100080101000802
-01000806010008210101080a010008040100080101000808010008020100080101000802
-0100080901000801010008020100081d0101081a010008a7010108080100080201000801
-010008020100084301010500030e05000000050202020103020205030700080907020803
-070208030701080007000802070208090700080007010803070208020701080007000803
-070208030702087f07000100080a010008030100080001000803010008000100080b0100
-0805010008010100080c0100080501000809010008010100080301000805010008210101
-080901000805010008010100080c010008050100080901000801010008030100081c0101
-0809010208030102080301010800010008020102080a0102080301020802010008000101
-080201000802010008020102080201000800010108700101080c01000805010008430100
-05000100030e000005030202010302020503070008080700080207000801070008020700
-080107000801070108010700080207000808070108010700080107000802070008010700
-080007000800070008010700080207000801070008020700087e07000100080a01000805
-010008050100080a01000806010008010100080c010008040100080a0100080101000804
-01000804010008210101080801000806010008010100080c010008040100080a01000801
-010008040100081b01010808010008020100080101000802010008010100080101010801
-010008020100080801000802010008010100080201000801010108010100080101000802
-010008010100080201000801010108010100086f0101080c010008050100084301010500
-030e05000000050202020103020205030700080807000805070008020700080107000802
-070008010700080207000808070008020700080507000801070008000700080007000801
-070008020700080107000882070001000808010108060100080501000809010008070100
-08010100080b010008050100080a0100080101000805010008040101081f010108070100
-0807010008010100080b010008050100080a01000801010008050100081a010108080100
-080501000802010008010100080201000801010008020100080801000805010008020100
-08010100080501000802010008010100080201000801010008730101080a010108040101
-0844010005000100030e0000050302020103020205030700080807000805070008020700
-080107000802070008010704080807000802070008020703080107000800070008000700
-0801070408020702087f07000100080a01000805010008050100080a0100080601000801
-0100080a010008060100080a010008010100080401000804010008210101080801000806
-010008010100080a010008060100080a01000801010008040100081b0101080801000805
-010008020100080101000802010008010104080901020802010408010100080601000800
-0100080201040801010008730101080c010008050100084301010500030e050000000502
-02020103020205030700080807000805070008020700080107000802070008010700080c
-07000802070008010700080207000801070008000700080007000801070008090700087e
-07000100080a01000805010008050100080b010008050100080101000809010008060100
-080b01000801010008030100080501000821010108090100080501000801010008090100
-08060100080b01000801010008030100081c010108080100080501000802010008010100
-080201000801010008100100080101000805010008060100080001000802010008050100
-08730101080c0100080501000843010005000100030e0000050302020103020205030700
-080807000802070008010700080207000801070008010701080107000802070008080700
-080207000801070008020700080107000800070008000700080107000802070008010700
-08020700087e07000100080a010008050100080501000805010108040100080401000801
-010008030101080201000807010008050101080301000801010008020100080601000821
-0101080a0100080401000801010008030101080201000807010008050101080301000801
-010008020100081d01010808010008020100080101000802010008010100080101010801
-010008020100080801000802010008010100080201000801010008070100080301000802
-0100080101000873010108080100080201000801010008020100084301010500030e0500
-000005020202010302020503070008090702080307020803070108000700080207020809
-070008020700080207030801070008000700080007000802070208030702087f07000100
-080a01000803010408010104080301010805010008040101080401010802010408030100
-0805010108040101080201000807010008210101080b0100080401010804010108020104
-08030100080501010804010108020100081e010108090102080301020803010108000100
-08020102080a010208030102080201000807010008040102080201000873010108090102
-080301020844010005000100030e00000503020201030202050307000823070508a10700
-0100080a01000814010008060100082a01000808010008210101080c0100082a0100081f
-01010823010508990101085801010500030e0500000005020202010302020503070008cb
-07000100080b010108100101083b0101082201010859010108c301010858010005000100
-030e000005030202010302020503070008cb07000100088101010859010108c301010858
-01010500030e0500000005020202010302020503070008cb070001000881010108590101
-08c301010858010005000100030e000005030202010302020503070008cb070001000881
-01010859010108c30101085801010500030e0500000005020202010302020503070008cb
-07000100088101010859010108c301010858010005000100030e00000503020201030202
-0503070008cb07000100088101010859010108c30101085801010500030e050000000502
-020201030202050307cd01ff01ff010005000100030e00000503020201030202050301ff
-01ff01cf0500030e0500000005020202010302020503010000cb01010081010100590101
-00c301010058010005000100030e000005030202010302020503010000cb010100810101
-0059010100c30101005801010500030e0500000005020202010302020503010000cb0101
-00810101000c0100002a0100001f010100c301010058010005000100030e000005030202
-0103020205030100003d0100000a0100000a010000060102006a010100810101000b0100
-00040101000a010200030102000b010100020100001e010100c30101000a0101004b0101
-0500030e05000000050202020103020205030100003d0100000a0100000a010000080100
-006a010100810101000a0100000401000001010000080100000201000001010000020100
-000901000001010000020100001d010100c301010009010000010100004a010005000100
-030e00000503020201030202050301000008010100000100000201000002010000080100
-000001010003010200020101000001000003010200030101000001000008010400020102
-000201000000010100050100000301020063010100810101000901000005010000010100
-000c010000050100000901000001010000030100001c010100c301010009010000010100
-004a01010500030e05000000050202020103020205030100000801000000010000000100
-000101000002010000080101000101000001010000020100000101000000010000000100
-00010100000201000001010000010101000a010000030100000201000001010100010100
-0004010000020100000201000062010100810101000801000006010000010100000c0100
-00050100000901000001010000040100001b010100c301010009010000010100004a0100
-05000100030e000005030202010302020503010000080100000001000000010000020100
-000101000008010000020100000501000001010000000100000001000001010000020100
-0001010000020100000a0100000701000001010000020100000401000002010000020100
-0062010100810101000701000007010000010100000a010100040101000a010000010100
-00050100001a010100c301010009010000010100004a01010500030e0500000005020202
-010302020503010000080100000001000000010000020100000101000008010000020100
-00020103000101000000010000000100000101040001010000020100000a010000040103
-000101000002010000040100000201040062010100810101000801000006010000010100
-000c010000050100000901000001010000040100001b010100c301010009010000010100
-004a010005000100030e0000050302020103020205030100000801000000010000000100
-000301000000010000080100000201000001010000020100000101000000010000000100
-000101000005010000020100000a01000003010000020100000101000002010000040100
-000201000066010100810101000901000005010000010100000c01000005010000090100
-0001010000030100001c010100c301010009010000010100004a01010500030e05000000
-050202020103020205030100000801000000010000000100000301010009010000020100
-000101000002010000010100000001000000010000010100000201000001010000010101
-000a01000003010000020100000101010001010000040100000201000002010000620101
-00810101000a010000040100000101000003010100020100000201000001010000020100
-00030101000301000001010000020100001d010100c301010009010000010100004a0100
-05000100030e000005030202010302020503010000080100000001000000010000040100
-000901000002010000020103000101000000010000000100000201020003010100000100
-000b010100020103000101000000010100050100000301020063010100810101000b0100
-00040101000401010003010200030102000401010004010100020100001e010100c30101
-000a0101004b01010500030e050000000502020201030202050301000012010000010105
-002301050085010100810101000c0100002a0100001f010100c301010058010005000100
-030e0000050302020103020205030100000f01000000010000b801010081010100590101
-00c30101005801010500030e050000000502020201030202050301000010010000b90101
-008101010059010100c301010058010005000100030e0000050302020103020205030100
-00cb0101008101010059010100c30101005801010500030e050000000502020201030202
-0503010000cb0101008101010059010100c301010058010005000100030e000005030202
-010302020503010000cb0101008101010059010100c30101005801010500030e05000000
-05020202010302020503010000cb0101008101010059010100c301010058010005000100
-030e00000503020201030202050301ff01ff01cf0500030e050000000502020201030202
-050307cd01ff01ff010005000100030e000005030202010302020503070000cb07000100
-008101010059010100c30101005801010500030e05000000050202020103020205030700
-00cb07000100000b0101004e0101002201010059010100c301010058010005000100030e
-000005030202010302020503070000cb07000100000a0100001c0100002a010000080100
-00210101000c0100002a0100001f010100c30101005801010500030e0500000005020202
-0103020205030700001f0700000a070000060702009407000100000a0100000401020003
-0102000c010000040101000a010200030102000b0101000201000007010000210101000b
-010000040101000a010200030102000b010100020100001e010100c30101000a0101004b
-010005000100030e0000050302020103020205030700001f0700000a0700000807000094
-07000100000a010000030100000201000001010000020100000a01000004010000010100
-000801000002010000010100000201000009010000010100000201000006010000210101
-000a01000004010000010100000801000002010000010100000201000009010000010100
-00020100001d010100c301010009010000010100004a01010500030e0500000005020202
-010302020503070000080701000007000002070000020700000807040002070200020700
-000007010005070000030702008d07000100000a01000007010000050100000901000005
-010000010100000c01000005010000090100000101000003010000050100002101010009
-01000005010000010100000c010000050100000901000001010000030100001c010100c3
-01010009010000010100004a010005000100030e00000503020201030202050307000008
-070000000700000007000001070000020700000a07000003070000020700000107010001
-0700000407000002070000020700008c07000100000a0100000701000005010000080100
-0006010000010100000c0100000501000009010000010100000401000004010000210101
-000801000006010000010100000c010000050100000901000001010000040100001b0101
-00c301010009010000010100004a01010500030e05000000050202020103020205030700
-0008070000000700000007000002070000010700000a0700000707000001070000020700
-000407000002070000020700008c07000100000801010007010000050100000801000007
-010000010100000a010100040101000a0100000101000005010000040101001f01010007
-01000007010000010100000a010100040101000a01000001010000050100001a010100c3
-01010009010000010100004a010005000100030e00000503020201030202050307000008
-070000000700000007000002070000010700000a07000004070300010700000207000004
-070000020704008c07000100000a01000005010000050100000a01000006010000010100
-000c01000005010000090100000101000004010000040100002101010008010000060100
-00010100000c010000050100000901000001010000040100001b010100c3010100090100
-00010100004a01010500030e050000000502020201030202050307000008070000000700
-000007000003070000000700000a07000003070000020700000107000002070000040700
-00020700009007000100000a01000004010000050100000c01000005010000010100000c
-010000050100000901000001010000030100000501000021010100090100000501000001
-0100000c010000050100000901000001010000030100001c010100c30101000901000001
-0100004a010005000100030e000005030202010302020503070000080700000007000000
-070000030701000b07000003070000020700000107010001070000040700000207000002
-0700008c07000100000a0100000301000005010000070101000401000004010000010100
-000301010002010000020100000101000002010000030101000301000001010000020100
-0006010000210101000a0100000401000001010000030101000201000002010000010100
-0002010000030101000301000001010000020100001d010100c301010009010000010100
-004a01010500030e05000000050202020103020205030700000807000000070000000700
-00040700000c07010002070300010700000007010005070000030702008d07000100000a
-010000030104000101040003010100050100000401010004010100030102000301020004
-010100040101000201000007010000210101000b01000004010100040101000301020003
-0102000401010004010100020100001e010100c30101000a0101004b010005000100030e
-0000050302020103020205030700001207000001070500af07000100000a010000140100
-00060100002a01000008010000210101000c0100002a0100001f010100c3010100580101
-0500030e05000000050202020103020205030700000f07000000070000b807000100000b
-010100100101003b0101002201010059010100c301010058010005000100030e00000503
-020201030202050307000010070000b907000100008101010059010100c3010100580101
-0500030e0500000005020202010302020503070000cb07000100008101010059010100c3
-01010058010005000100030e000005030202010302020503070000cb0700010000810101
-0059010100c30101005801010500030e0500000005020202010302020503070000cb0700
-0100008101010059010100c301010058010005000100030e000005030202010302020503
-070000cb07000100008101010059010100c30101005801010500030e0500000005020202
-01030202050307cd01ff01ff010005000100030e00000503020201030202050307cd01ff
-01ff01010500000005000000050000000500000005000000050000000500000005000000
-0500000005020202010302020503070000cb07000100008101010059010100c301010058
-010005000100030000000500000005000000050000000500000005000000050000000500
-000005030202010302020503070000cb07000100000b0101004e01010022010100590101
-00c301010058010105000300050000000508010005000300050000000502020201030202
-0503070000cb07000100000a0100001c0100002a01000008010000210101000c0100002a
-0100001f010100c301010058010005000100030105000000050801000300000005030202
-010302020503070000cb07000100000a01000005010000040102000c010000040101000d
-010000020102000b0101000201000007010000210101000b010000040101000d01000002
-0102000b010100020100001e0101002001010018010000150100006f0101000a01000005
-010100040101003d01010500030100000508010003010500000005020202010302020503
-070000cb07000100000a0100000401010003010000020100000a01000004010000010100
-000b010100010100000201000009010000010100000201000006010000210101000a0100
-0004010000010100000b01010001010000020100000901000001010000020100001d0101
-001f0100001a010000150100006f01010009010100040100000101000002010000010100
-003c01000500010003020000050601000500030100000503020201030202050307000009
-070100000700000207020009070000000701000307020002070100000700000307020003
-0702008d07000100000a0100000301000000010000070100000901000005010000010100
-000a01000000010000050100000901000001010000030100000501000021010100090100
-0005010000010100000a01000000010000050100000901000001010000030100001c0101
-000901010000010000020102000b01000003010000000101000301020002010000000101
-000201040002010200020100000001010003010100000100006f01010008010000000100
-00040100000101000002010000010100003c010105000302050000000504010005000302
-050000000502020201030202050307000008070000010701000107000002070000080701
-000107000001070000020700000107000000070000000700000107000002070000010700
-00020700008c07000100000a010000050100000701000008010000060100000101000009
-010000010100000501000009010000010100000401000004010000210101000801000006
-010000010100000901000001010000050100000901000001010000040100001b01010008
-010000010101000101000002010000080104000101010001010000010100000201000001
-01010001010000030100000301000002010000010101000101000001010000010101006f
-0101000a010000040100000101000002010000010100003c010005000100030305000000
-0504010003020000050302020103020205030700000807000002070000010700000c0700
-000207000005070000010700000007000000070000010700000207000001070000900700
-010000080101000601000006010000080100000701000001010000080100000201000003
-0101000a0100000101000005010000040101001f01010007010000070100000101000008
-01000002010000030101000a01000001010000050100001a010100080100000201000001
-0100000e0100000301000005010000020100000101000002010000030100000301000002
-010000010100000201000001010000020100006f0101000a010000040100000101000002
-010000010100003c01010500030300000504010003030500000005020202010302020503
-070000080700000207000002070200090700000207000002070300010700000007000000
-07000001070400020702008d07000100000a01000005010000050100000a010000060100
-000101000008010000020100000501000009010000010100000401000004010000210101
-000801000006010000010100000801000002010000050100000901000001010000040100
-001b0101000801000002010000020102000b010000030100000501000002010000010100
-00020100000301000003010400010100000201000001010000020100006f0101000a0100
-00040100000101000002010000010100003c010005000100030400000502010005000303
-000005030202010302020503070000080700000207000005070000080700000207000001
-0700000207000001070000000700000007000001070000090700008c07000100000a0100
-0005010000040100000c0100000501000001010000080105000401000009010000010100
-000301000005010000210101000901000005010000010100000801050004010000090100
-0001010000030100001c0101000801000002010000050100000a01000003010000050100
-000201000001010000020100000301000003010000050100000201000001010000020100
-006f0101000a010000040100000101000002010000010100003c01010500030405000000
-050001000500030405000000050202020103020205030700000807000001070100010700
-000207000008070000020700000107000002070000010700000007000000070000010700
-000207000001070000020700008c07000100000a01000005010000030100000701010004
-010000040100000101000003010100060100000101000002010000030101000301000001
-0100000201000006010000210101000a0100000401000001010000030101000601000001
-01000002010000030101000301000001010000020100001d010100080100000101010001
-010000020100000a01000003010000050100000201000001010000020100000301000003
-01000002010000010100000201000001010000010101006f0101000a0100000401000001
-01000002010000010100003c010005000100030505000100050001000304000005030202
-010302020503070000090701000007000002070200090700000207000002070300010700
-00000700000007000002070200030702008d07000100000a010000030104000101040003
-010100050100000401010004010100060100000201020004010100040101000201000007
-010000210101000b01000004010100040101000601000002010200040101000401010002
-0100001e0101000901010000010000020102000b01000003010000060102000201000002
-0100000401010002010200020100000201000002010100000100006f0101000801040003
-010100040101003d01010500030500000500010003050500000005020202010302020503
-0700000c07000007070500af07000100000a01000014010000060100002a010000080100
-00210101000c0100002a0100001f0101000c01000007010500a701010058010005000100
-03060100050003050000050302020103020205030700000807000002070000bd07000100
-000b010100100101003b01010022010100590101000801000002010000b5010100580101
-0500030605000306050000000502020201030202050307000009070200be070001000081
-0101005901010009010200b6010100580100050001000500000005000000050000000500
-00000500000005000000050000000500000005030202010302020503070000cb07000100
-008101010059010100c30101005801010500000005000000050000000500000005000000
-050000000500000005000000050000000502020201030202050301000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005110202
-010302020502010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100051202020103020205030100030d05000300050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-0000030000000500030c050000000511020201030202050201000500030b000005000100
-030000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500000005000000050003000500000005000000030a0000051202020103020205030100
-03090500000005000100050003000500000005ff05ff05ac010003000000050000000500
-000005000308050000000511020201030202050201000500030700000500000005020100
-0300000005ff05ff05ac0100050003000500000005020000050000000306000005120202
-01030202050301000305050000000500000005020100050003000500000005ff05ff05ac
-010003000000050400000500000005000304050000000511020201030202050201000500
-0303000005000000050601000300000005ff05ff05ac0100050003000500000005060000
-050000000302000005120202010302020503010003010500000005000000050601000500
-03000500000005ff05ff05ac010003000000050800000500000005000300050000000511
-020201030202050201000500010005000100050a01000300000005ff05ff05ac01000500
-030005000000050801000500010005000000051202020103020205030100030105000100
-0500010005060100050003000500000005ff05ff05ac0100030000000508010005000100
-050003000500000005110202010302020502010005000303010005000100050601000300
-000005ff05ff05ac01000500030005000000050601000500010003020000051202020103
-0202050301000305050001000500010005020100050003000500000005ff05ff05ac0100
-030000000504010005000100050003040500000005110202010302020502010005000307
-010005000100050201000300000005ff05ff05ac01000500030005000000050201000500
-010003060000051202020103020205030100030905000100050001000500030005000000
-05ff05ff05ac010003000000050001000500010005000308050000000511020201030202
-050201000500030b01000500010003000000050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-01000500010005000100050001000500010005000100050003000500000005000100030a
-0000051202020101000405030100030d0500030005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-05000100050001000500010005000100050001000500010005000100030000000500030c
-050000000511000502020400050201000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005120000020204000000020204000503
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000051100000202040000000202040005ff05ff05e800000202040000000202
-040005ff05ff05e800000202040000000202040005ff05ff05e800000202040000000202
-0400000502ff02ff02dc00060202040000000208040002ff02ff02dc0000020804000000
-0208040002ff02ff02dc00000208040000000208040001ff01ff01dc0000020804000000
-040901ff01ff01dc00000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 0 377 205
-%%EOF
diff --git a/lib/tv/doc/src/tv_start_system.gif b/lib/tv/doc/src/tv_start_system.gif
deleted file mode 100644
index 3d9502b00c..0000000000
--- a/lib/tv/doc/src/tv_start_system.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_system.ps b/lib/tv/doc/src/tv_start_system.ps
deleted file mode 100644
index 5c115328c5..0000000000
--- a/lib/tv/doc/src/tv_start_system.ps
+++ /dev/null
@@ -1,1330 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_system.eps)
-%%CreationDate: (Mon Mar 19 17:15:27 2001)
-%%BoundingBox: 0 0 377 205
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 377 205
-userdict begin
-%%BeginData:
-DisplayImage
-0 0
-377.000000 205.000000
-12
-755 410
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-828282
-aab6aa
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff
-02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202
-04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff
-02d000000202040000000202040002080000020d040002f6010302110103023801010206
-0101024001010230010102ff020400000202040000000202040002080000020d040002f6
-010102020107020001010203010102010101020e0105020001070201010302070100020b
-01010206010102400101020c0104021e010102ff02040000020204000000020204000208
-0000020d040002f6010102050101020301010203010102010101020e0101020701010203
-01010201010102050101020b010102060101024e010102020101021d010102ff02040000
-0202040000000202040002080000020204060203040002f6010102050101020301010203
-010102010101020e01010207010102030101020801040201010302030101020001010203
-010102020103020301040206010302030101020001010207010102000101020101010203
-010302030101020201010200010102020101020101030202010102000101020101010203
-010302020101020001010201010102020103020201010202010102f30000020204000000
-04030208000002020400030400000203040002f601010205010102040101020201000202
-0101020e0101020701010203010202080101020201010201010102020102020001010202
-010102010101020101010201010102090101020101010202010202000101020601020200
-010202000101020101010201010102020101020201020200010102010101020001010200
-010102020102020001020200010102010101020101010201010102000101020101010201
-010102010101020101010202010102f3000004030101020b000002030400030200000204
-040002f6010102050101020401010201010102020101020e010402040101020401030206
-010102060101020201010201010102020101020101010201010102010102020801010201
-010102020101020101010206010102010101020101010205010102020101020201010201
-010102010101020001010200010102020101020101010201010102050101020101020203
-01010201010102010101020101010202010002f70103020b000002030400030200000204
-040002f6010102050101020501010200010002030101020e010102070101020601020205
-010102030104020201010201010102020101020101050202010302060101020101010202
-010102010101020601010201010102010101020201040202010102020101020101010201
-010102000101020001010202010102010101020101010202010402010101020401010201
-0105020201010200010102f70103020b000002040400030000000205040002f601010205
-01010205010302030101020e010102070101020701010205010102020101020101010202
-010102010101020201010201010102080102020501010201010102020101020101010206
-010102010101020101010201010102010101020201010202010102010101020101010201
-010102000101020101010201010102010101020101010201010102010101020401010201
-0101020601010200010002f80103020b000002040400030000000205040002f601010205
-01010206010102040101020e010102070101020301010201010102050101020201010201
-010102020101020101010202010102010101020201000205010102050101020101010202
-010102010101020601010201010102010101020101010201010102020101020201010201
-010102020101020701010201010102010101020101010201010102010101020401010201
-0101020201000203010202f80103020b0000020500000206040002f60101020501010206
-010102040101020e01050203010102040103020701020201010202000101020101040203
-010102020103020201040207010302030101020101010206010102010101020101010202
-010202000101020101010202010102010101020301050202010102010101020101010202
-0102020001010200010102040101020201030204010102f90103020b0000020d040002f6
-01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000
-020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff
-02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff
-02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff
-05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
-0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202
-010302020001050b06040504060005030602051f0600050206000504060005270602050b
-06000506060005ff05ff053506000502060005090602051307010202010302020001050b
-0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502
-0600050b0600051307010202010302020001050b06000506060205050600050306020518
-060005020600050206020503060205020600050206000517060005020600050106000500
-060105020604050206020503060205020600050006010503060205ff05ff052006000502
-060005020602050506000502060005000601050c07010202010302020001050b06000508
-060005050600050206000502060005180600050006000505060005020600050206000501
-060005020600051706000502060005010601050106000503060005060600050206000502
-06000501060105010600050106000502060005ff05ff051f060005020600050106000502
-0600050406000502060105010600050b07010202010302020001050b0603050506000505
-060005020600050206000518060005000600050506000502060005020600050106000500
-060005000600051706000502060005010600050206000503060005060600050206000502
-060005010600050206000501060005ff05ff052306040501060005020600050406000502
-060005020600050b07010202010302020001050b06000508060005050600050206040518
-060005000600050506000502060405010600050006000500060005170600050206000501
-0600050206000503060005060600050206000502060005010600050206000502060205ff
-05ff052006000502060005010604050406000502060005020600050b0701020201030202
-0001050b0600050806000505060005020600051d06000506060005020600050506000500
-060005000600051706000502060005010600050206000503060005060600050206000502
-060005010600050206000505060005ff05ff051f06000502060005010600050806000502
-060005020600050b07010202010302020001050b06000508060005050600050206000502
-060005190600050606000502060005020600050106000500060005000600051706000502
-060005010601050106000503060005060600050206000502060005010600050206000501
-06000502060005ff05ff051f060005020600050106000502060005040600050206010501
-0600050b07010202010302020001050b0600050806000505060005030602051a06000506
-060005030602050306000500060005190602050206000500060105050601050406000503
-060205020600050206000502060205ff05ff052006000502060005020602050506000502
-060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202
-010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f
-07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e
-0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
-0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103
-0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103
-05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202
-01030202050e01060508010005060101050f010205010102059b01060508010005060101
-0510010505040101054d010205240104050d0101051e0102052401020501010205930106
-0508010005060101051101030535020201030202050e0100050101010500010005070101
-050601000511010105010100059d01000501010105000100050701010506010005130101
-05060100054d0101050001010524010105000101050c0100051e01010500010105240101
-050101000595010005010101050001000507010105060100051101010501010105340202
-010302020510010105030103050201030503010105030103050801020500010105010103
-05000101050001000500010005020103058b010105030103050201030503010105030103
-050a010105030104054c0101050101050500010305000102050201030501010105000102
-05070101050101010500010305030104051d010105010105050001030500010205020103
-050101010500010205070102050001010501010305000101050001000500010005020103
-058301010503010305020103050301010503010305090101050101000500010305020105
-050101030521020201030202051001010506010105000101050101010502010105020101
-0501010105070100050001000500010005050101050001050500010105010101058a0101
-050601010500010105010101050201010502010105010101050901010502010105010101
-054c01000502010105000101050201000500010205000101050001010501010105010102
-050001000507010105010101050201010502010105010101051d01000502010105000101
-050201000500010205000101050001010501010105010102050001000507010005000100
-050001000505010105000105050001010501010105820101050601010500010105010101
-050201010502010105010101050801020504010105020101050001010501010105010101
-052002020103020205100100050401040500010105010101050201010501010605070100
-0500010205020104050001010500010005000107058a0100050401040500010105010101
-0502010105010106050901010501010105020101054b0101050201000501010105000100
-05000100050001010501010805010101050a0103050401010501010105020101051c0101
-05020100050101010500010005000100050001010501010805010101050a010005000102
-050201040500010105000100050001070582010005040104050001010501010105020101
-05010106050901020503010105040101050101060520020201030202050f010105020101
-0501010105000101050201010501010105020101050b0101050001010501010105010101
-05010100050001000500010005000101058e010105020101050101010500010105020101
-0501010105020101050d01010502010105010101054c0101050101010501010205000100
-05010100050201000500010105050101050a0101050601010502010105010101051d0101
-05010101050101020500010005010100050201000500010105050101050a010105000101
-050101010501010105010100050001000500010005000101058601010502010105010101
-05000101050201010501010105020101050b010105010101050201010503010105030101
-0525020201030202050f0101050201010501010105000101050101010502010105020101
-050101010507010005010101050101010501010105000101050001000500010005000101
-05010101058a010105020101050101010500010105010101050201010502010105010101
-050901010502010105010101054c01010500010105020103050101010501010105000101
-0501010105010101050a0101050601010502010105010101051d01010500010105020103
-0501010105010101050001010501010105010101050a0100050101010501010105010101
-050001010500010005000100050001010501010105820101050201010501010105000101
-050101010502010105020101050101010507010105010101050201010502010205000101
-05000101050101010521020201030202050e01030502010a050101050501010305070102
-0500010105020107050001000500010105000103058a01030502010a0501010505010103
-0508010505010105054c0102050301010500010005000103050001020500010305010104
-050701030503010505010105051d01020503010105000100050001030500010205000103
-05010104050701020500010105020107050001000500010105000103058201030502010a
-050101050501010305090103050101050500010505010103052202020103020205ff05ff
-05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
-05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
-05e8020201030202050201ff01ff01e205020202010302020503010000cb010100810101
-0059010100c30101005801000711000005020202010302020503010000cb010100810101
-0059010100c30101005801000701030607000306000105020202010302020503010000cb
-010100810101000c0100002301000026010100c301010058010007010305000007000306
-0001050202020103020205030100001f0100000a0100009e010100810101000b01000004
-010100090104000a01010002010000250101001e0102000501000012010000060100002e
-010000120102000301020031010100080104004a01000701030500000701030500010502
-02020103020205030100001f0100000a0100009e010100810101000a0100000401000001
-010000080100000d01000001010000020100002401010020010000190100003601000014
-010000050100003101010008010000020100004a01000701030400010701030500010502
-02020103020205030100000901020003010200090104000201020002010000000101009b
-01010081010100090100000501000001010000080100000d010000010100000301000023
-010100090102000201000000010100020100000001010005010000030102000301020003
-01020002010400020102000301020002010000000101000a010200030102000201000000
-010100020104000101000000010100030102000501000005010000030102000201000000
-010100230101000c0100004a010007010304000105000701030400010502020201030202
-0503010000080100000201000001010000020100000a0100000301000002010000010101
-00010100009a01010081010100080100000601000001010000080103000a010000010100
-000401000022010100080100000201000001010100010100000101010001010000040100
-000501000002010000020100000101000002010000030100000601000002010000020100
-000101010001010000080100000201000001010000020100000101010001010000030100
-000301010001010000010100000201000004010000050100000201000002010000010101
-0001010000220101000b0100004b01000701030300010501070103040001050202020103
-020205030100000c010000010100000e0100000701000001010000020100009a01010081
-0101000701000007010000010100000c010000090100000101000005010000210101000c
-010000010100000201000001010000020100000401000005010000020100000901000003
-010000060100000201000002010000010100000201000008010000050100000201000001
-010000020100000301000003010000050100000201000004010000050100000201000002
-01000001010000260101000b0100004b0100070103030001050207010303000105020202
-01030202050301000009010300010100000e0100000401030001010000020100009a0101
-00810101000801000006010000010100000c010000090100000101000004010000220101
-000901030001010000020100000101000002010000040100000501000002010000060103
-000301000006010000020100000201000001010000020100000801000005010000020100
-000101000002010000030100000301000005010000020100000401000005010000020104
-0001010000260101000b0100004b01000701030200010503070103030001050202020103
-020205030100000801000002010000010100000e01000003010000020100000101000002
-0100009a0101008101010009010000050100000101000008010000020100000901000001
-010000030100002301010008010000020100000101000002010000010100000201000004
-010000050100000201000005010000020100000301000006010000020100000201000001
-010000020100000801000005010000020100000101000002010000030100000301000005
-0100000201000004010000050100000201000005010000260101000a0100004c01000701
-030200010504070103020001050202020103020205030100000801000002010000010100
-00020100000a010000030100000201000001010100010100009a010100810101000a0100
-000401000001010000030101000201000002010000030101000301000001010000020100
-002401010008010000020100000101010001010000010101000101000004010000050100
-000201000002010000010100000201000003010000060100000201000002010000010100
-000201000008010000020100000101000002010000010100000201000003010000030100
-0005010000020100000401000005010000020100000201000001010000260101000a0100
-004c01000701030100010505070103020001050202020103020205030100000901030002
-0102000c0101000201030001010000000101009b010100810101000b0100000401010004
-010100030102000401010004010100020100002501010009010300010100000001010002
-010000000101000501000005010000030102000301030004010100040100000301020002
-010000020100000901020003010200020100000201000004010100010100000601020005
-010000050100000301020002010000260101000a0100004c010007010301000105060701
-030100010502020201030202050301000015010500af010100810101000c010000230100
-00260101000f010000050100003c01050068010100580100070103000001050707010301
-000105020202010302020503010000cb01010081010100590101000f01000005010000ab
-010100580100070103000001050807010300000105020202010302020503010000cb0101
-0081010100590101000f01000005010000ab01010058010007010001070b030000010502
-0202010302020503010000cb0101008101010059010100c301010058010007010000070d
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-030e000105020202010302020503010000cb0101008101010059010100c3010100580100
-0701001005020202010302020503010000cb0101008101010059010100c3010100580100
-0701000d070000010502020201030202050301ff01ff01ce07010001050a070100010502
-020201030202050301ff01ff01ce07010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb010100810101000c0100002a0100001f010100c30101
-0058010007010001050a070100010502020201030202050301000010010200090100000d
-0102000a010200100100007b010100810101000b010000040101000b010000050100000c
-010100020100001e01010010010200090100000d010200930101000a0101004b01000701
-0001050a070100010502020201030202050301000012010000090100000f0100000c0100
-00100100007b010100810101000a010000040100000101000009010100040101000b0100
-0001010000020100001d01010012010000090100000f0100009301010009010000010100
-004a010007010001050a0701000105020202010302020503010000090101000001000004
-01000003010200020100000001010003010200050100000c010000030102000301020002
-010000010100000301020071010100810101000901000005010000010100000801000000
-01000003010000000100000b01000001010000030100001c010100090101000001000004
-010000030102000201000000010100030102000501000009010000000101000301020002
-01010000010000030102000a010200030102000201000000010100020100000201000002
-01020002010000000101003f01010009010000010100004a010007010001050a07010001
-050202020103020205030100000801000001010100040100000201000002010000010101
-00010100000101000002010000040100000c010000020100000201000001010000020100
-000101000000010000030100000201000070010100810101000801000006010000010100
-000a010000050100000b01000001010000040100001b0101000801000001010100040100
-000201000002010000010101000101000001010000020100000401000009010100010100
-000101000002010000010100000001000000010000010100000201000008010000020100
-000101000002010000010101000101000001010000020100000101000002010000010101
-00010100003e01010009010000010100004a010007010001050a07010001050202020103
-020205030100000801000002010000040100000201000002010000010100000201000005
-010000040100000c01000002010000020100000101000005010100040100007401010081
-0101000701000007010000010100000a010000050100000b01000001010000050100001a
-010100080100000201000004010000020100000201000001010000020100000501000004
-010000090100000201000005010000010100000001000000010000010100000201000008
-010000050100000201000001010000050100000201000001010000020100000101000042
-01010009010000010100004a010007010001050a07010001050202020103020205030100
-000801000002010000040100000201000002010000010100000201000002010300040100
-000c01000002010000020100000101000005010100050102007101010081010100080100
-0006010000010100000a010000050100000b01000001010000040100001b010100080100
-000201000004010000020100000201000001010000020100000201030004010000090100
-000201000002010300010100000001000000010000010104000901020002010400010100
-00060100000001000002010400010100004201010009010000010100004a010007010001
-050a07010001050202020103020205030100000801000002010000040100000201000002
-01000001010000020100000101000002010000040100000c010000020100000201000001
-01000005010000000100000701000070010100810101000901000005010000010100000a
-010000050100000b01000001010000030100001c01010008010000020100000401000002
-010000020100000101000002010000010100000201000004010000090100000201000001
-010000020100000101000000010000000100000101000010010000010100000501000006
-0100000001000002010000050100004201010009010000010100004a010007010001050a
-070100010502020201030202050301000008010000010101000401000002010000020100
-0001010100010100000101000002010000040100000c0100000201000002010000010100
-00020100000101000001010000020100000201000070010100810101000a010000040100
-0001010000030101000401000005010000050101000301000001010000020100001d0101
-000801000001010100040100000201000002010000010101000101000001010000020100
-000401000009010000020100000101000002010000010100000001000000010000010100
-000201000008010000020100000101000002010000010100000701000003010000020100
-00010100004201010009010000010100004a010007010001050a07010001050202020103
-020205030100000901010000010000040100000301020002010000000101000301030004
-0100000c010000030102000301020002010000020100000201020071010100810101000b
-010000040101000401010002010400010104000301010004010100020100001e01010009
-010100000100000401000003010200020100000001010003010300040100000901000002
-01000002010300010100000001000000010000020102000a010200030102000201000007
-0100000401020002010000420101000a0101004b010007010001050a0701000105020202
-0103020205030100000c0100002301050093010100810101000c0100002a0100001f0101
-000c010000230105001c0105006801010058010007010001050a07010001050202020103
-020205030100000801000002010000bd01010081010100590101000801000002010000b5
-01010058010007010001050a070100010502020201030202050301000009010200be0101
-00810101005901010009010200b601010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a070100010502020201030202050301ff01ff01ce0701
-0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb010100810101000c0100002a
-0100001f010100c301010058010007010001050a07010001050202020103020205030100
-0010010200090100000d0102009b010100810101000b010000040101000b010000050100
-000c010100020100001e01010010010200090100000d010200930101000a0101004b0100
-07010001050a070100010502020201030202050301000012010000090100000f0100009b
-010100810101000a010000040100000101000009010100040101000b0100000101000002
-0100001d01010012010000090100000f0100009301010009010000010100004a01000701
-0001050a0701000105020202010302020503010000090101000001000004010000030102
-000201000000010100030102000501000009010000000101000301020002010100000100
-000301020003010200710101008101010009010000050100000101000008010000000100
-0003010000000100000b01000001010000030100001c0101000901010000010000040100
-000301020002010000000101000301020005010000090100000001010003010200020101
-0000010000030102000a0102000301020002010000000101000201000002010000020102
-0002010000000101003f01010009010000010100004a010007010001050a070100010502
-020201030202050301000008010000010101000401000002010000020100000101010001
-010000010100000201000004010000090101000101000001010000020100000101000000
-010000000100000101000002010000010100000201000070010100810101000801000006
-010000010100000a010000050100000b01000001010000040100001b0101000801000001
-010100040100000201000002010000010101000101000001010000020100000401000009
-010100010100000101000002010000010100000001000000010000010100000201000008
-010000020100000101000002010000010101000101000001010000020100000101000002
-01000001010100010100003e01010009010000010100004a010007010001050a07010001
-050202020103020205030100000801000002010000040100000201000002010000010100
-000201000005010000040100000901000002010000050100000101000000010000000100
-0001010000020100000101000074010100810101000701000007010000010100000a0100
-00050100000b01000001010000050100001a010100080100000201000004010000020100
-000201000001010000020100000501000004010000090100000201000005010000010100
-000001000000010000010100000201000008010000050100000201000001010000050100
-00020100000101000002010000010100004201010009010000010100004a010007010001
-050a07010001050202020103020205030100000801000002010000040100000201000002
-010000010100000201000002010300040100000901000002010000020103000101000000
-01000000010000010104000201020071010100810101000801000006010000010100000a
-010000050100000b01000001010000040100001b01010008010000020100000401000002
-010000020100000101000002010000020103000401000009010000020100000201030001
-010000000100000001000001010400090102000201040001010000060100000001000002
-010400010100004201010009010000010100004a010007010001050a0701000105020202
-010302020503010000080100000201000004010000020100000201000001010000020100
-000101000002010000040100000901000002010000010100000201000001010000000100
-0000010000010100000901000070010100810101000901000005010000010100000a0100
-00050100000b01000001010000030100001c010100080100000201000004010000020100
-000201000001010000020100000101000002010000040100000901000002010000010100
-000201000001010000000100000001000001010000100100000101000005010000060100
-000001000002010000050100004201010009010000010100004a010007010001050a0701
-000105020202010302020503010000080100000101010004010000020100000201000001
-010100010100000101000002010000040100000901000002010000010100000201000001
-01000000010000000100000101000002010000010100000201000070010100810101000a
-010000040100000101000003010100040100000501000005010100030100000101000002
-0100001d0101000801000001010100040100000201000002010000010101000101000001
-010000020100000401000009010000020100000101000002010000010100000001000000
-010000010100000201000008010000020100000101000002010000010100000701000003
-01000002010000010100004201010009010000010100004a010007010001050a07010001
-050202020103020205030100000901010000010000040100000301020002010000000101
-000301030004010000090100000201000002010300010100000001000000010000020102
-000301020071010100810101000b01000004010100040101000201040001010400030101
-0004010100020100001e0101000901010000010000040100000301020002010000000101
-000301030004010000090100000201000002010300010100000001000000010000020102
-000a0102000301020002010000070100000401020002010000420101000a0101004b0100
-07010001050a07010001050202020103020205030100000c010000230105009301010081
-0101000c0100002a0100001f0101000c010000230105001c010500680101005801000701
-0001050a07010001050202020103020205030100000801000002010000bd010100810101
-00590101000801000002010000b501010058010007010001050a07010001050202020103
-0202050301000009010200be010100810101005901010009010200b60101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb0101008101010059010100c301010058010007010001050a0701000105020202
-01030202050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff
-01ce07010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb010100810101000c0100002a0100001f010100c301010058010007010001050a0701
-00010502020201030202050301000010010200090100000d010200430100005601010081
-0101000b010000040101000b010000050100000c010100020100001e0101001001020009
-0100000d010200930101000a0101004b010007010001050a070100010502020201030202
-050301000012010000090100000f0100004301000056010100810101000a010000040100
-000101000009010100040101000b01000001010000020100001d01010012010000090100
-000f0100009301010009010000010100004a010007010001050a07010001050202020103
-020205030100000901010000010000040100000301020002010000000101000301020005
-010000090100000001010003010200020101000001000003010200030102000a01020002
-010000020100000101040054010100810101000901000005010000010100000801000000
-01000003010000000100000b01000001010000030100001c010100090101000001000004
-010000030102000201000000010100030102000501000009010000000101000301020002
-01010000010000030102000a010200030102000201000000010100020100000201000002
-01020002010000000101003f01010009010000010100004a010007010001050a07010001
-050202020103020205030100000801000001010100040100000201000002010000010101
-000101000001010000020100000401000009010100010100000101000002010000010100
-000001000000010000010100000201000001010000020100000801000002010000010100
-00020100000301000056010100810101000801000006010000010100000a010000050100
-000b01000001010000040100001b01010008010000010101000401000002010000020100
-000101010001010000010100000201000004010000090101000101000001010000020100
-000101000000010000000100000101000002010000080100000201000001010000020100
-0001010100010100000101000002010000010100000201000001010100010100003e0101
-0009010000010100004a010007010001050a070100010502020201030202050301000008
-010000020100000401000002010000020100000101000002010000050100000401000009
-01000002010000050100000101000000010000000100000101000002010000010100000c
-010000020100000201000000010000040100005601010081010100070100000701000001
-0100000a010000050100000b01000001010000050100001a010100080100000201000004
-010000020100000201000001010000020100000501000004010000090100000201000005
-010000010100000001000000010000010100000201000008010000050100000201000001
-01000005010000020100000101000002010000010100004201010009010000010100004a
-010007010001050a07010001050202020103020205030100000801000002010000040100
-000201000002010000010100000201000002010300040100000901000002010000020103
-000101000000010000000100000101040002010200090104000301000005010000560101
-00810101000801000006010000010100000a010000050100000b01000001010000040100
-001b01010008010000020100000401000002010000020100000101000002010000020103
-000401000009010000020100000201030001010000000100000001000001010400090102
-000201040001010000060100000001000002010400010100004201010009010000010100
-004a010007010001050a0701000105020202010302020503010000080100000201000004
-010000020100000201000001010000020100000101000002010000040100000901000002
-010000010100000201000001010000000100000001000001010000090100000801000006
-010000000100000401000056010100810101000901000005010000010100000a01000005
-0100000b01000001010000030100001c0101000801000002010000040100000201000002
-010000010100000201000001010000020100000401000009010000020100000101000002
-010000010100000001000000010000010100001001000001010000050100000601000000
-01000002010000050100004201010009010000010100004a010007010001050a07010001
-050202020103020205030100000801000001010100040100000201000002010000010101
-000101000001010000020100000401000009010000020100000101000002010000010100
-000001000000010000010100000201000001010000020100000801000002010000010100
-00020100000301000056010100810101000a010000040100000101000003010100040100
-0005010000050101000301000001010000020100001d0101000801000001010100040100
-000201000002010000010101000101000001010000020100000401000009010000020100
-000101000002010000010100000001000000010000010100000201000008010000020100
-000101000002010000010100000701000003010000020100000101000042010100090100
-00010100004a010007010001050a07010001050202020103020205030100000901010000
-010000040100000301020002010000000101000301030004010000090100000201000002
-01030001010000000100000001000002010200030102000a010200020100000201000004
-01010054010100810101000b010000040101000401010002010400010104000301010004
-010100020100001e01010009010100000100000401000003010200020100000001010003
-01030004010000090100000201000002010300010100000001000000010000020102000a
-0102000301020002010000070100000401020002010000420101000a0101004b01000701
-0001050a07010001050202020103020205030100000c0100002301050023010500690101
-00810101000c0100002a0100001f0101000c010000230105001c01050068010100580100
-07010001050a07010001050202020103020205030100000801000002010000bd01010081
-010100590101000801000002010000b501010058010007010001050a0701000105020202
-01030202050301000009010200be010100810101005901010009010200b6010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-020201030202050301ff01ff01ce07010001050a070100010502020201030202050308cd
-01ff01ff010007010001050a0701000105020202010302020503080000cb080001000081
-01010059010100c301010058010007010001050a07010001050202020103020205030800
-00cb08000100000b0101004e0101002201010059010100c301010058010007010001050a
-0701000105020202010302020503080000cb08000100000a0100001c0100002a01000008
-010000210101000c0100002a0100001f010100c301010058010007010001050a07010001
-05020202010302020503080000cb08000100000a01000005010000040102000c01000004
-0101000d010000020102000b0101000201000007010000210101000b010000040101000d
-010000020102000b010100020100001e0101002001010018010000150100006f01010008
-0104000301010044010007010001050a0701000105020202010302020503080000cb0800
-0100000a0100000401010003010000020100000a01000004010000010100000b01010001
-0100000201000009010000010100000201000006010000210101000a0100000401000001
-0100000b01010001010000020100000901000001010000020100001d0101001f0100001a
-010000150100006f0101000801000002010000020100000101000043010007010001050a
-070100010502020201030202050308000009080100000800000208020009080000000801
-0003080200020801000008000003080200030802008d08000100000a0100000301000000
-010000070100000901000005010000010100000a01000000010000050100000901000001
-0100000301000005010000210101000901000005010000010100000a0100000001000005
-0100000901000001010000030100001c0101000901010000010000020102000b01000003
-010000000101000301020002010000000101000201040002010200020100000001010003
-010100000100006f0101000c010000020100000101000043010007010001050a07010001
-050202020103020205030800000808000001080100010800000208000008080100010800
-000108000002080000010800000008000000080000010800000208000001080000020800
-008c08000100000a01000005010000070100000801000006010000010100000901000001
-010000050100000901000001010000040100000401000021010100080100000601000001
-0100000901000001010000050100000901000001010000040100001b0101000801000001
-010100010100000201000008010400010101000101000001010000020100000101010001
-010000030100000301000002010000010101000101000001010000010101006f0101000b
-010000030100000101000043010007010001050a07010001050202020103020205030800
-000808000002080000010800000c08000002080000050800000108000000080000000800
-000108000002080000010800009008000100000801010006010000060100000801000007
-010000010100000801000002010000030101000a0100000101000005010000040101001f
-0101000701000007010000010100000801000002010000030101000a0100000101000005
-0100001a0101000801000002010000010100000e01000003010000050100000201000001
-01000002010000030100000301000002010000010100000201000001010000020100006f
-0101000b010000030100000101000043010007010001050a070100010502020201030202
-050308000008080000020800000208020009080000020800000208030001080000000800
-000008000001080400020802008d08000100000a01000005010000050100000a01000006
-010000010100000801000002010000050100000901000001010000040100000401000021
-010100080100000601000001010000080100000201000005010000090100000101000004
-0100001b0101000801000002010000020102000b01000003010000050100000201000001
-010000020100000301000003010400010100000201000001010000020100006f0101000b
-010000030100000101000043010007010001050a07010001050202020103020205030800
-000808000002080000050800000808000002080000010800000208000001080000000800
-000008000001080000090800008c08000100000a01000005010000040100000c01000005
-010000010100000801050004010000090100000101000003010000050100002101010009
-010000050100000101000008010500040100000901000001010000030100001c01010008
-01000002010000050100000a010000030100000501000002010000010100000201000003
-01000003010000050100000201000001010000020100006f0101000a0100000401000001
-01000043010007010001050a070100010502020201030202050308000008080000010801
-000108000002080000080800000208000001080000020800000108000000080000000800
-00010800000208000001080000020800008c08000100000a010000050100000301000007
-010100040100000401000001010000030101000601000001010000020100000301010003
-010000010100000201000006010000210101000a01000004010000010100000301010006
-0100000101000002010000030101000301000001010000020100001d0101000801000001
-01010001010000020100000a010000030100000501000002010000010100000201000003
-0100000301000002010000010100000201000001010000010101006f0101000a01000004
-0100000101000043010007010001050a0701000105020202010302020503080000090801
-000008000002080200090800000208000002080300010800000008000000080000020802
-00030802008d08000100000a010000030104000101040003010100050100000401010004
-010100060100000201020004010100040101000201000007010000210101000b01000004
-0101000401010006010000020102000401010004010100020100001e0101000901010000
-010000020102000b01000003010000060102000201000002010000040101000201020002
-0100000201000002010100000100006f0101000a0100000501010044010007010001050a
-07010001050202020103020205030800000c08000007080500af08000100000a01000014
-010000060100002a01000008010000210101000c0100002a0100001f0101000c01000007
-010500a701010058010007010001050a0701000105020202010302020503080000080800
-0002080000bd08000100000b010100100101003b01010022010100590101000801000002
-010000b501010058010007010001050a0701000105020202010302020503080000090802
-00be0800010000810101005901010009010200b601010058010007010001050a07010001
-05020202010302020503080000cb08000100008101010059010100c30101005801000701
-0001050a0701000105020202010302020503080000cb08000100008101010059010100c3
-01010058010007010001050a0701000105020202010302020503080000cb080001000081
-01010059010100c301010058010007010001050a07010001050202020103020205030800
-00cb08000100008101010059010100c301010058010007010001050a0701000105020202
-01030202050308cd01ff01ff010007010001050a070100010502020201030202050308cd
-01ff01ff010007010001050a0701000105020202010302020503080000cb080001000081
-01010059010100c301010058010007010001050a07010001050202020103020205030800
-00cb08000100000b0101004e0101002201010059010100c301010058010007010001050a
-0701000105020202010302020503080000cb08000100000a0100001c0100002a01000008
-010000210101000c0100002a0100001f010100c301010058010007010001050a07010001
-05020202010302020503080000110800000308000010080000010800009e08000100000a
-01000005010000040102000c010000040101000d010000050100000a0101000201000007
-010000210101000b010000040101000d010000050100000a010100020100001e010100c3
-0101000a0100000401020044010007010001050a07010001050202020103020205030800
-00110800000308000010080000010800009e08000100000a010000040101000301000002
-0100000a01000004010000010100000b0101000401010009010000010100000201000006
-010000210101000a01000004010000010100000b01010004010100090100000101000002
-0100001d010100c301010009010100030100000201000043010007010001050a07010001
-0502020201030202050308000009080100000800000108040001080000010800000a0801
-000008000001080000000801009b08000100000a01000003010000000100000701000009
-01000005010000010100000a010000000100000301000000010000090100000101000003
-01000005010000210101000901000005010000010100000a010000000100000301000000
-0100000901000001010000030100001c010100c301010008010000000100000301000002
-01000043010007010001050a070100010502020201030202050308000008080000010801
-000308000003080000000800000a0800000108010001080100010800009a08000100000a
-010000050100000701000008010000060100000101000009010000010100000201000001
-010000090100000101000004010000040100002101010008010000060100000101000009
-0100000101000002010000010100000901000001010000040100001b010100c30101000a
-010000030100000201000043010007010001050a07010001050202020103020205030800
-00080800000208000003080000030801000b0800000208000001080000020800009a0800
-010000080101000601000005010100080100000701000001010000080100000201000001
-01000002010000090100000101000005010000040101001f010100070100000701000001
-010000080100000201000001010000020100000901000001010000050100001a010100c3
-0101000a0100000401030043010007010001050a07010001050202020103020205030800
-00080800000208000003080000030801000b0800000208000001080000020800009a0800
-0100000a0100000501000007010000080100000601000001010000080100000201000001
-010000020100000901000001010000040100000401000021010100080100000601000001
-010000080100000201000001010000020100000901000001010000040100001b010100c3
-0101000a0100000701000043010007010001050a07010001050202020103020205030800
-0008080000020800000308000003080000000800000a0800000208000001080000020800
-009a08000100000a01000005010000070100000901000005010000010100000801050000
-010500080100000101000003010000050100002101010009010000050100000101000008
-010500000105000801000001010000030100001c010100c30101000a0100000701000043
-010007010001050a07010001050202020103020205030800000808000001080100030800
-000308000001080000090800000108010001080100010800009a08000100000a01000005
-010000030100000201000003010100040100000401000001010000030101000601000005
-0100000301010003010000010100000201000006010000210101000a0100000401000001
-010000030101000601000005010000030101000301000001010000020100001d010100c3
-0101000a010000030100000201000043010007010001050a070100010502020201030202
-050308000009080100000800000408010001080000020800000908010000080000010800
-00000801009b08000100000a010000030104000201020004010100050100000401010004
-010100060100000501000003010100040101000201000007010000210101000b01000004
-0101000401010006010000050100000301010004010100020100001e010100c301010008
-0104000201020044010007010001050a07010001050202020103020205030800000c0800
-000e080500a808000100000a01000014010000060100002a01000008010000210101000c
-0100002a0100001f010100c301010058010007010001050a070100010502020201030202
-05030800000808000002080000bd08000100000b010100100101003b0101002201010059
-010100c301010058010007010001050a0701000105020202010302020503080000090802
-00be08000100008101010059010100c301010058010007010001050a0701000105020202
-010302020503080000cb08000100008101010059010100c301010058010007010001050a
-0701000105020202010302020503080000cb08000100008101010059010100c301010058
-010007010001050a0701000105020202010302020503080000cb08000100008101010059
-010100c301010058010007010001050a0701000105020202010302020503080000cb0800
-0100008101010059010100c301010058010007010001050a070100010502020201030202
-050308cd01ff01ff010007010001050a070100010502020201030202050308cd01ff01ff
-010007010001050a0701000105020202010302020503080000cb08000100008101010059
-010100c301010058010007010001050a0701000105020202010302020503080000cb0800
-0100000b0101004e0101002201010059010100c301010058010007010001050a07010001
-05020202010302020503080000cb08000100000a0100001c0100002a0100000801000021
-0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202
-010302020503080000110800000308000010080000010800009e08000100000a01000005
-010000070100000b010000040101000d010000050100000a010100020100000701000021
-0101000b010000040101000d010000050100000a010100020100001e010100c30101000c
-0100000201020044010007010001050a0701000105020202010302020503080000110800
-000308000010080000010800009e08000100000a01000004010100060101000a01000004
-010000010100000b0101000401010009010000010100000201000006010000210101000a
-01000004010000010100000b010100040101000901000001010000020100001d010100c3
-0101000b010100010100000201000043010007010001050a070100010502020201030202
-050308000009080100000800000108040001080000010800000a08010000080000010800
-00000801009b08000100000a010000030100000001000005010000000100000901000005
-010000010100000a01000000010000030100000001000009010000010100000301000005
-010000210101000901000005010000010100000a01000000010000030100000001000009
-01000001010000030100001c010100c30101000a01000000010000050100004301000701
-0001050a0701000105020202010302020503080000080800000108010003080000030800
-00000800000a0800000108010001080100010800009a08000100000a0100000501000004
-010000010100000801000006010000010100000901000001010000020100000101000009
-010000010100000401000004010000210101000801000006010000010100000901000001
-01000002010000010100000901000001010000040100001b010100c30101000901000001
-0100000501000043010007010001050a0701000105020202010302020503080000080800
-000208000003080000030801000b0800000208000001080000020800009a080001000008
-010100060100000301000002010000070100000701000001010000080100000201000001
-01000002010000090100000101000005010000040101001f010100070100000701000001
-010000080100000201000001010000020100000901000001010000050100001a010100c3
-01010008010000020100000301010044010007010001050a070100010502020201030202
-0503080000080800000208000003080000030801000b0800000208000001080000020800
-009a08000100000a01000005010000030100000201000008010000060100000101000008
-010000020100000101000002010000090100000101000004010000040100002101010008
-010000060100000101000008010000020100000101000002010000090100000101000004
-0100001b010100c301010008010000020100000501000043010007010001050a07010001
-0502020201030202050308000008080000020800000308000003080000000800000a0800
-000208000001080000020800009a08000100000a01000005010000030105000801000005
-010000010100000801050000010500080100000101000003010000050100002101010009
-010000050100000101000008010500000105000801000001010000030100001c010100c3
-010100080105000401000043010007010001050a07010001050202020103020205030800
-000808000001080100030800000308000001080000090800000108010001080100010800
-009a08000100000a01000005010000070100000301010004010000040100000101000003
-01010006010000050100000301010003010000010100000201000006010000210101000a
-010000040100000101000003010100060100000501000003010100030100000101000002
-0100001d010100c30101000c010000010100000201000043010007010001050a07010001
-050202020103020205030800000908010000080000040801000108000002080000090801
-000008000001080000000801009b08000100000a01000003010400050100000301010005
-010000040101000401010006010000050100000301010004010100020100000701000021
-0101000b010000040101000401010006010000050100000301010004010100020100001e
-010100c30101000c0100000201020044010007010001050a070100010502020201030202
-05030800000c0800000e080500a808000100000a01000014010000060100002a01000008
-010000210101000c0100002a0100001f010100c301010058010007010001050a07010001
-050202020103020205030800000808000002080000bd08000100000b010100100101003b
-0101002201010059010100c301010058010007010001050a070100010502020201030202
-050308000009080200be08000100008101010059010100c301010058010007010001050a
-0701000105020202010302020503080000cb08000100008101010059010100c301010058
-010007010001050a0701000105020202010302020503080000cb08000100008101010059
-010100c301010058010007010001050a0701000105020202010302020503080000cb0800
-0100008101010059010100c301010058010007010001050a070100010502020201030202
-0503080000cb08000100008101010059010100c301010058010007010001050a07010001
-0502020201030202050308cd01ff01ff010007010001050a070100010502020201030202
-050308cd01ff01ff010007010001050a0701000105020202010302020503080000cb0800
-0100008101010059010100c301010058010007010001050a070100010502020201030202
-0503080000cb08000100000b0101004e0101002201010059010100c30101005801000701
-0001050a0701000105020202010302020503080000cb08000100000a0100001c0100002a
-01000008010000210101000c0100002a0100001f010100c301010058010007010001050a
-0701000105020202010302020503080000110800000308000010080000010800009e0800
-0100000a01000005010000030104000b010000040101000d010000050100000a01010002
-01000007010000210101000b010000040101000d010000050100000a010100020100001e
-010100c3010100090102000301020044010007010001050a070100010502020201030202
-0503080000110800000308000010080000010800009e08000100000a0100000401010003
-0100000e01000004010000010100000b0101000401010009010000010100000201000006
-010000210101000a01000004010000010100000b01010004010100090100000101000002
-0100001d010100c30101000801000002010000010100000201000043010007010001050a
-070100010502020201030202050308000009080100000800000108040001080000010800
-000a0801000008000001080000000801009b08000100000a010000030100000001000003
-0100000d01000005010000010100000a0100000001000003010000000100000901000001
-0100000301000005010000210101000901000005010000010100000a0100000001000003
-010000000100000901000001010000030100001c010100c30101000c0100000501000043
-010007010001050a07010001050202020103020205030800000808000001080100030800
-0003080000000800000a0800000108010001080100010800009a08000100000a01000005
-010000030103000901000006010000010100000901000001010000020100000101000009
-010000010100000401000004010000210101000801000006010000010100000901000001
-01000002010000010100000901000001010000040100001b010100c30101000c01000005
-01000043010007010001050a070100010502020201030202050308000008080000020800
-0003080000030801000b0800000208000001080000020800009a08000100000801010006
-010000070100000701000007010000010100000801000002010000010100000201000009
-0100000101000005010000040101001f0101000701000007010000010100000801000002
-01000001010000020100000901000001010000050100001a010100c30101000a01010004
-01010044010007010001050a070100010502020201030202050308000008080000020800
-0003080000030801000b0800000208000001080000020800009a08000100000a01000005
-010000070100000801000006010000010100000801000002010000010100000201000009
-010000010100000401000004010000210101000801000006010000010100000801000002
-01000001010000020100000901000001010000040100001b010100c30101000c01000005
-01000043010007010001050a070100010502020201030202050308000008080000020800
-000308000003080000000800000a0800000208000001080000020800009a08000100000a
-010000050100000301000002010000090100000501000001010000080105000001050008
-010000010100000301000005010000210101000901000005010000010100000801050000
-0105000801000001010000030100001c010100c30101000c010000050100004301000701
-0001050a0701000105020202010302020503080000080800000108010003080000030800
-0001080000090800000108010001080100010800009a08000100000a0100000501000003
-010000020100000301010004010000040100000101000003010100060100000501000003
-01010003010000010100000201000006010000210101000a010000040100000101000003
-0101000601000005010000030101000301000001010000020100001d010100c301010008
-01000002010000010100000201000043010007010001050a070100010502020201030202
-050308000009080100000800000408010001080000020800000908010000080000010800
-00000801009b08000100000a010000030104000201020004010100050100000401010004
-010100060100000501000003010100040101000201000007010000210101000b01000004
-0101000401010006010000050100000301010004010100020100001e010100c301010009
-0102000301020044010007010001050a07010001050202020103020205030800000c0800
-000e080500a808000100000a01000014010000060100002a01000008010000210101000c
-0100002a0100001f010100c301010058010007010001050a070100010502020201030202
-05030800000808000002080000bd08000100000b010100100101003b0101002201010059
-010100c301010058010007010001050a0701000105020202010302020503080000090802
-00be08000100008101010059010100c301010058010007010001050a0701000105020202
-010302020503080000cb08000100008101010059010100c301010058010007010001050a
-0701000105020202010302020503080000cb08000100008101010059010100c301010058
-010007010001050a0701000105020202010302020503080000cb08000100008101010059
-010100c301010058010007010001050a0701000105020202010302020503080000cb0800
-0100008101010059010100c301010058010007010001050a070100010502020201030202
-050308cd01ff01ff010007010001050a070100010502020201030202050308cd01ff01ff
-010007010001050a0701000105020202010302020503080000cb08000100008101010059
-010100c301010058010007010001050a0701000105020202010302020503080000cb0800
-0100000b0101004e0101002201010059010100c301010058010007010001050a07010001
-05020202010302020503080000cb08000100000a0100001c0100002a0100000801000021
-0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202
-010302020503080000110800000308000010080000010800009e08000100000a01000005
-010000040102000c010000040101000d010000050100000a010100020100000701000021
-0101000b010000040101000d010000050100000a010100020100001e010100c30101000a
-0101004b010007010001050a070100010502020201030202050308000011080000030800
-0010080000010800009e08000100000a0100000401010003010000020100000a01000004
-010000010100000b0101000401010009010000010100000201000006010000210101000a
-01000004010000010100000b010100040101000901000001010000020100001d010100c3
-01010009010000010100004a010007010001050a07010001050202020103020205030800
-0009080100000800000108040001080000010800000a0801000008000001080000000801
-009b08000100000a0100000301000000010000030100000d01000005010000010100000a
-010000000100000301000000010000090100000101000003010000050100002101010009
-01000005010000010100000a010000000100000301000000010000090100000101000003
-0100001c010100c301010009010000010100004a010007010001050a0701000105020202
-01030202050308000008080000010801000308000003080000000800000a080000010801
-0001080100010800009a08000100000a01000005010000030100000c0100000601000001
-010000090100000101000002010000010100000901000001010000040100000401000021
-010100080100000601000001010000090100000101000002010000010100000901000001
-010000040100001b010100c301010009010000010100004a010007010001050a07010001
-05020202010302020503080000080800000208000003080000030801000b080000020800
-0001080000020800009a0800010000080101000601000003010300080100000701000001
-01000008010000020100000101000002010000090100000101000005010000040101001f
-010100070100000701000001010000080100000201000001010000020100000901000001
-010000050100001a010100c301010009010000010100004a010007010001050a07010001
-05020202010302020503080000080800000208000003080000030801000b080000020800
-0001080000020800009a08000100000a0100000501000003010000020100000801000006
-010000010100000801000002010000010100000201000009010000010100000401000004
-010000210101000801000006010000010100000801000002010000010100000201000009
-01000001010000040100001b010100c301010009010000010100004a010007010001050a
-070100010502020201030202050308000008080000020800000308000003080000000800
-000a0800000208000001080000020800009a08000100000a010000050100000301000002
-010000090100000501000001010000080105000001050008010000010100000301000005
-010000210101000901000005010000010100000801050000010500080100000101000003
-0100001c010100c301010009010000010100004a010007010001050a0701000105020202
-010302020503080000080800000108010003080000030800000108000009080000010801
-0001080100010800009a08000100000a0100000501000003010000020100000301010004
-010000040100000101000003010100060100000501000003010100030100000101000002
-01000006010000210101000a010000040100000101000003010100060100000501000003
-0101000301000001010000020100001d010100c301010009010000010100004a01000701
-0001050a0701000105020202010302020503080000090801000008000004080100010800
-0002080000090801000008000001080000000801009b08000100000a0100000301040002
-010200040101000501000004010100040101000601000005010000030101000401010002
-01000007010000210101000b010000040101000401010006010000050100000301010004
-010100020100001e010100c30101000a0101004b010007010001050a0701000105020202
-0103020205030800000c0800000e080500a808000100000a01000014010000060100002a
-01000008010000210101000c0100002a0100001f010100c301010058010007010001050a
-07010001050202020103020205030800000808000002080000bd08000100000b01010010
-0101003b0101002201010059010100c301010058010007010001050a0701000105020202
-01030202050308000009080200be08000100008101010059010100c30101005801000701
-0001050a0701000105020202010302020503080000cb08000100008101010059010100c3
-01010058010007010001050a0701000105020202010302020503080000cb080001000081
-01010059010100c301010058010007010001050a07010001050202020103020205030800
-00cb08000100008101010059010100c301010058010007010001050a0701000105020202
-010302020503080000cb08000100008101010059010100c301010058010007010001050a
-070100010502020201030202050308cd01ff01ff010007010001050a0701000105020202
-01030202050308cd01ff01ff010007010001050a07010001050202020103020205030800
-00cb08000100008101010059010100c301010058010007010001050a0701000105020202
-010302020503080000cb08000100000b0101004e0101002201010059010100c301010058
-010007010001050a0701000105020202010302020503080000cb08000100000a0100001c
-0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701
-0001050a0701000105020202010302020503080000110800000308000010080000010800
-009e08000100000a01000005010000030104000b010000040101000d010000050100000a
-0101000201000007010000210101000b010000040101000d010000050100000a01010002
-0100001e010100c3010100090102000401010044010007010001050a0701000105020202
-010302020503080000110800000308000010080000010800009e08000100000a01000004
-01010003010000020100000a01000004010000010100000b010100040101000901000001
-0100000201000006010000210101000a01000004010000010100000b0101000401010009
-01000001010000020100001d010100c30101000801000002010000020100000101000043
-010007010001050a07010001050202020103020205030800000908010000080000010804
-0001080000010800000a0801000008000001080000000801009b08000100000a01000003
-01000000010000070100000901000005010000010100000a010000000100000301000000
-01000009010000010100000301000005010000210101000901000005010000010100000a
-0100000001000003010000000100000901000001010000030100001c010100c301010008
-01000002010000020100000101000043010007010001050a070100010502020201030202
-050308000008080000010801000308000003080000000800000a08000001080100010801
-00010800009a08000100000a010000050100000601000009010000060100000101000009
-010000010100000201000001010000090100000101000004010000040100002101010008
-010000060100000101000009010000010100000201000001010000090100000101000004
-0100001b010100c30101000801000002010000020100000101000043010007010001050a
-0701000105020202010302020503080000080800000208000003080000030801000b0800
-000208000001080000020800009a08000100000801010006010000060100000801000007
-010000010100000801000002010000010100000201000009010000010100000501000004
-0101001f0101000701000007010000010100000801000002010000010100000201000009
-01000001010000050100001a010100c30101000901030002010000010100004301000701
-0001050a0701000105020202010302020503080000080800000208000003080000030801
-000b0800000208000001080000020800009a08000100000a010000050100000601000009
-010000060100000101000008010000020100000101000002010000090100000101000004
-010000040100002101010008010000060100000101000008010000020100000101000002
-0100000901000001010000040100001b010100c30101000c010000020100000101000043
-010007010001050a07010001050202020103020205030800000808000002080000030800
-0003080000000800000a0800000208000001080000020800009a08000100000a01000005
-010000050100000b01000005010000010100000801050000010500080100000101000003
-010000050100002101010009010000050100000101000008010500000105000801000001
-010000030100001c010100c30101000c010000020100000101000043010007010001050a
-070100010502020201030202050308000008080000010801000308000003080000010800
-00090800000108010001080100010800009a08000100000a010000050100000501000005
-010100040100000401000001010000030101000601000005010000030101000301000001
-0100000201000006010000210101000a0100000401000001010000030101000601000005
-010000030101000301000001010000020100001d010100c3010100080100000201000002
-0100000101000043010007010001050a0701000105020202010302020503080000090801
-0000080000040801000108000002080000090801000008000001080000000801009b0800
-0100000a0100000301040003010000050101000501000004010100040101000601000005
-01000003010100040101000201000007010000210101000b010000040101000401010006
-010000050100000301010004010100020100001e010100c3010100090102000401010044
-010007010001050a07010001050202020103020205030800000c0800000e080500a80800
-0100000a01000014010000060100002a01000008010000210101000c0100002a0100001f
-010100c301010058010007010001050a0701000105020202010302020503080000080800
-0002080000bd08000100000b010100100101003b0101002201010059010100c301010058
-010007010001050a070100010502020201030202050308000009080200be080001000081
-01010059010100c301010058010007010001050a07010001050202020103020205030800
-00cb08000100008101010059010100c301010058010007010001050a0701000105020202
-010302020503080000cb08000100008101010059010100c301010058010007010001050a
-0701000105020202010302020503080000cb08000100008101010059010100c301010058
-010007010001050a0701000105020202010302020503080000cb08000100008101010059
-010100c301010058010007010001050a070100010502020201030202050308cd01ff01ff
-010007010001050a070100010502020201030202050308cd01ff01ff010007010001050a
-0701000105020202010302020503080000cb08000100008101010059010100c301010058
-010007010001050a0701000105020202010302020503080000cb08000100000b0101004e
-0101002201010059010100c301010058010007010001050a070100010502020201030202
-0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a
-0100001f010100c301010058010007010001050a07010001050202020103020205030800
-00110800000308000010080000010800009e08000100000a01000005010000040102000c
-010000040101000d010000050100000a0101000201000007010000210101000b01000004
-0101000d010000050100000a010100020100001e010100c3010100090102000301020044
-010007010001050a07010001050202020103020205030800001108000003080000100800
-00010800009e08000100000a0100000401010003010000020100000a0100000401000001
-0100000b0101000401010009010000010100000201000006010000210101000a01000004
-010000010100000b010100040101000901000001010000020100001d010100c301010008
-01000002010000010100000201000043010007010001050a070100010502020201030202
-050308000009080100000800000108040001080000010800000a08010000080000010800
-00000801009b08000100000a010000030100000001000003010000020100000901000005
-010000010100000a01000000010000030100000001000009010000010100000301000005
-010000210101000901000005010000010100000a01000000010000030100000001000009
-01000001010000030100001c010100c3010100080100000901000043010007010001050a
-070100010502020201030202050308000008080000010801000308000003080000000800
-000a0800000108010001080100010800009a08000100000a010000050100000301000002
-010000080100000601000001010000090100000101000002010000010100000901000001
-010000040100000401000021010100080100000601000001010000090100000101000002
-010000010100000901000001010000040100001b010100c3010100080100000901000043
-010007010001050a07010001050202020103020205030800000808000002080000030800
-00030801000b0800000208000001080000020800009a0800010000080101000601000004
-010200080100000701000001010000080100000201000001010000020100000901000001
-01000005010000040101001f010100070100000701000001010000080100000201000001
-010000020100000901000001010000050100001a010100c3010100080103000501000044
-010007010001050a07010001050202020103020205030800000808000002080000030800
-00030801000b0800000208000001080000020800009a08000100000a0100000501000003
-010000020100000801000006010000010100000801000002010000010100000201000009
-010000010100000401000004010000210101000801000006010000010100000801000002
-01000001010000020100000901000001010000040100001b010100c30101000801000002
-0100000301000045010007010001050a0701000105020202010302020503080000080800
-00020800000308000003080000000800000a0800000208000001080000020800009a0800
-0100000a0100000501000003010000020100000901000005010000010100000801050000
-010500080100000101000003010000050100002101010009010000050100000101000008
-010500000105000801000001010000030100001c010100c3010100080100000201000002
-01000046010007010001050a070100010502020201030202050308000008080000010801
-00030800000308000001080000090800000108010001080100010800009a08000100000a
-010000050100000301000002010000030101000401000004010000010100000301010006
-010000050100000301010003010000010100000201000006010000210101000a01000004
-01000001010000030101000601000005010000030101000301000001010000020100001d
-010100c301010008010000020100000101000047010007010001050a0701000105020202
-010302020503080000090801000008000004080100010800000208000009080100000800
-0001080000000801009b08000100000a0100000301040002010200040101000501000004
-01010004010100060100000501000003010100040101000201000007010000210101000b
-010000040101000401010006010000050100000301010004010100020100001e010100c3
-010100090102000201040043010007010001050a07010001050202020103020205030800
-000c0800000e080500a808000100000a01000014010000060100002a0100000801000021
-0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202
-0103020205030800000808000002080000bd08000100000b010100100101003b01010022
-01010059010100c301010058010007010001050a07010001050202020103020205030800
-0009080200be08000100008101010059010100c301010058010007010001050a07010001
-05020202010302020503080000cb08000100008101010059010100c30101005801000701
-0001050a0701000105020202010302020503080000cb08000100008101010059010100c3
-01010058010007010001050a0701000105020202010302020503080000cb080001000081
-01010059010100c301010058010007010001050a07010001050202020103020205030800
-00cb08000100008101010059010100c301010058010007010001050a0701000105020202
-01030202050308cd01ff01ff010007010001050a070100010502020201030202050301ff
-01ff01ce07010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001050a0701000105020202010302020503
-010000cb010100810101000c0100002a0100001f010100c301010058010007010001050a
-07010001050202020103020205030100000b010000120100001f01000089010100810101
-000b010000040101000b010000040102000b010100020100001e0101000b010000120100
-000e010000010100008f0101000a0101004b010007010001050a07010001050202020103
-020205030100001f0100001f01000089010100810101000a010000040100000101000009
-01010003010000020100000901000001010000020100001d0101001f0100000e01000001
-0100008f01010009010000010100004a010007010001050a070100010502020201030202
-050301000009010200020100000001010003010200020104000901020003010200030102
-000201000000010100030102007f01010081010100090100000501000001010000080100
-0000010000070100000901000001010000030100001c0101000901020002010000000101
-000301020002010400090101000001000001010000000101008c01010009010000010100
-004a010007010001050a07010001050202020103020205030100000b0100000201010001
-0100000101000002010000030100000a0100000201000001010000020100000101000002
-010000010101000101000001010000020100007e01010081010100080100000601000001
-0100000a010000070100000901000001010000040100001b0101000b0100000201010001
-0100000101000002010000030100000a0100000101010001010100010100008b01010009
-010000010100004a010007010001050a07010001050202020103020205030100000b0100
-0002010000020100000101000002010000030100000a0100000901000001010000050100
-000201000001010000020100007e010100810101000701000007010000010100000a0100
-00060100000a01000001010000050100001a0101000b0100000201000002010000010100
-0002010000030100000a0100000201000001010000020100008b01010009010000010100
-004a010007010001050a07010001050202020103020205030100000b0100000201000002
-01000001010400030100000a01000006010300010100000501000002010000010104007e
-010100810101000801000006010000010100000a010000050100000b0100000101000004
-0100001b0101000b010000020100000201000001010400030100000a0100000201000001
-010000020100008b01010009010000010100004a010007010001050a0701000105020202
-0103020205030100000b010000020100000201000001010000070100000a010000050100
-000201000001010000050100000201000001010000820101008101010009010000050100
-00010100000a010000040100000c01000001010000030100001c0101000b010000020100
-000201000001010000070100000a0100000201000001010000020100008b010100090100
-00010100004a010007010001050a07010001050202020103020205030100000b01000002
-010000020100000101000002010000030100000a01000002010000010100000201000001
-01000002010000010100000201000001010000020100007e010100810101000a01000004
-01000001010000030101000401000003010000070101000301000001010000020100001d
-0101000b01000002010000020100000101000002010000030100000a0100000101010001
-010100010100008b01010009010000010100004a010007010001050a0701000105020202
-0103020205030100000b0100000201000002010000020102000501010009010200030103
-00020102000201000002010000020102007f010100810101000b01000004010100040101
-0002010400010104000301010004010100020100001e0101000b01000002010000020100
-000201020005010100090101000001000001010000000101008c0101000a0101004b0100
-07010001050a070100010502020201030202050301000023010500a1010100810101000c
-0100002a0100001f010100230105009901010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a0701000105020202010302020503010000cb0101
-008101010059010100c301010058010007010001070c0001050202020103020205030100
-00cb0101008101010059010100c301010058010007010000070d00010502020201030202
-050301ff01ff01ce0701030e00010502020201030202050301ff01ff01ce0701030e0001
-05020202010302020503010000cb0101008101010059010100c30101005801000701030e
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-030e000105020202010302020503010000cb010100810101000c0100002a0100001f0101
-00c30101005801000701030e0001050202020103020205030100000b010000120100000e
-0100000101000097010100810101000b010000040101000b010000040102000b01010002
-0100001e0101000b010000120100000e010000010100008f0101000a0100000401020044
-01000701030e0001050202020103020205030100001f0100000e01000001010000970101
-00810101000a010000040100000101000009010100030100000201000009010000010100
-00020100001d0101001f0100000e010000010100008f0101000901010003010000020100
-004301000701030e00010502020201030202050301000009010200020100000001010003
-010200020104000901010000010000010100000001010094010100810101000901000005
-010000010100000801000000010000070100000901000001010000030100001c01010009
-01020002010000000101000301020002010400090101000001000001010000000101008c
-010100080100000001000003010000020100004301000701030e00010502020201030202
-05030100000b01000002010100010100000101000002010000030100000a010000010101
-00010101000101000093010100810101000801000006010000010100000a010000070100
-000901000001010000040100001b0101000b010000020101000101000001010000020100
-00030100000a0100000101010001010100010100008b0101000a01000003010000020100
-004301000701030e0001050202020103020205030100000b010000020100000201000001
-01000002010000030100000a010000020100000101000002010000930101008101010007
-01000007010000010100000a010000060100000a01000001010000050100001a0101000b
-01000002010000020100000101000002010000030100000a010000020100000101000002
-0100008b0101000a010000040103004301000701030e0001050202020103020205030100
-000b010000020100000201000001010400030100000a0100000201000001010000020100
-0093010100810101000801000006010000010100000a010000050100000b010000010100
-00040100001b0101000b010000020100000201000001010400030100000a010000020100
-0001010000020100008b0101000a010000070100004301000701030e0001050202020103
-020205030100000b010000020100000201000001010000070100000a0100000201000001
-0100000201000093010100810101000901000005010000010100000a010000040100000c
-01000001010000030100001c0101000b010000020100000201000001010000070100000a
-0100000201000001010000020100008b0101000a010000070100004301000701030e0001
-050202020103020205030100000b01000002010000020100000101000002010000030100
-000a01000001010100010101000101000093010100810101000a01000004010000010100
-00030101000401000003010000070101000301000001010000020100001d0101000b0100
-0002010000020100000101000002010000030100000a0100000101010001010100010100
-008b0101000a01000003010000020100004301000701030e000105020202010302020503
-0100000b0100000201000002010000020102000501010009010100000100000101000000
-01010094010100810101000b010000040101000401010002010400010104000301010004
-010100020100001e0101000b010000020100000201000002010200050101000901010000
-01000001010000000101008c01010008010400020102004401000701030e000105020202
-01030202050301000023010500a1010100810101000c0100002a0100001f010100230105
-00990101005801000701030e000105020202010302020503010000cb0101008101010059
-010100c30101005801000701030e000105020202010302020503010000cb010100810101
-0059010100c30101005801000701030e000105020202010302020503010000cb01010081
-01010059010100c30101005801000701030e000105020202010302020503010000cb0101
-008101010059010100c30101005801000701030e000105020202010302020503010000cb
-0101008101010059010100c30101005801000701030e0001050202020103020205030100
-00cb0101008101010059010100c30101005801000701030e000105020202010302020503
-01ff01ff01ce0701030e00010502020201030202050301ff01ff01ce0701001005020202
-010302020503010000cb0101008101010059010100c301010058010007010300000c0700
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-03000001050807010300000105020202010302020503010000cb010100810101000c0100
-002a0100001f010100c30101005801000701030100010507070103000001050202020103
-020205030100000b010000120100000a0100001501000087010100810101000b01000004
-0101000b010000040102000b010100020100001e0101000b010000120100000e01000001
-0100008f0101000c0100004a010007010301000105060701030100010502020201030202
-05030100001f0100000a0100001501000087010100810101000a01000004010000010100
-000901010003010000020100000901000001010000020100001d0101001f0100000e0100
-00010100008f0101000b0101004a01000701030200010505070103010001050202020103
-020205030100000901020002010000000101000301020002010400080100000001010003
-0102000301020002010400020102007f0101008101010009010000050100000101000008
-01000000010000070100000901000001010000030100001c010100090102000201000000
-0101000301020002010400090101000001000001010000000101008c0101000a01000000
-0100004a01000701030200010504070103020001050202020103020205030100000b0100
-0002010100010100000101000002010000030100000a0101000101000001010000020100
-0001010000020100000301000003010000020100007e0101008101010008010000060100
-00010100000a010000070100000901000001010000040100001b0101000b010000020101
-00010100000101000002010000030100000a0100000101010001010100010100008b0101
-0009010000010100004a0100070103030001050307010302000105020202010302020503
-0100000b01000002010000020100000101000002010000030100000a0100000201000001
-010000020100000101000007010000030100008201010081010100070100000701000001
-0100000a010000060100000a01000001010000050100001a0101000b0100000201000002
-0100000101000002010000030100000a0100000201000001010000020100008b01010008
-010000020100004a01000701030300010502070103030001050202020103020205030100
-000b010000020100000201000001010400030100000a0100000201000001010000020100
-000201020004010000040102007f010100810101000801000006010000010100000a0100
-00050100000b01000001010000040100001b0101000b0100000201000002010000010104
-00030100000a0100000201000001010000020100008b01010008010000020100004a0100
-0701030400010501070103030001050202020103020205030100000b0100000201000002
-01000001010000070100000a010000020100000101000002010000050100000301000007
-0100007e010100810101000901000005010000010100000a010000040100000c01000001
-010000030100001c0101000b010000020100000201000001010000070100000a01000002
-01000001010000020100008b010100080105004901000701030400010500070103040001
-050202020103020205030100000b01000002010000020100000101000002010000030100
-000a01000002010000010100000201000001010000020100000301000003010000020100
-007e010100810101000a0100000401000001010000030101000401000003010000070101
-000301000001010000020100001d0101000b010000020100000201000001010000020100
-00030100000a0100000101010001010100010100008b0101000c0100004a010007010305
-0000070203040001050202020103020205030100000b0100000201000002010000020102
-00050101000801000002010000020102000301020005010100020102007f010100810101
-000b010000040101000401010002010400010104000301010004010100020100001e0101
-000b01000002010000020100000201020005010100090101000001000001010000000101
-008c0101000c0100004a0100070103050000070103050001050202020103020205030100
-0023010500a1010100810101000c0100002a0100001f0101002301050099010100580100
-0701030607010305000105020202010302020503010000cb0101008101010059010100c3
-0101005801000701030607000306000105020202010302020503010000cb010100810101
-0059010100c30101005801000701001005020202010302020503010000cb010100810101
-0059010100c3010100580100070000110502020201030202050207ff07ff07d305110202
-01030202050207ff07ff07d20000051102020103020205020701030d0000030000ff00ff
-00af03000001030c0001051102020103020205020701030b00010700030000ff00ff00ae
-070003000003030a00010511020201030202050207010309000207010300000105ff05ff
-05ab07010300000503080001051102020103020205020701030700030500070103000001
-05ff05ff05ab070103000001050100030306000105110202010302020502070103050003
-050207010300000105ff05ff05ab07010300000105030003030400010511020201030202
-0502070103030003050407010300000105ff05ff05ab0701030000010505000303020001
-05110202010302020502070103010003050607010300000105ff05ff05ab070103000001
-0507000303000001051102020103020205020705050807010300000105ff05ff05ab0701
-0300000105080703000105110202010302020502070103010703050607010300000105ff
-05ff05ab0701030000010507070303000001051102020103020205020701030307030504
-07010300000105ff05ff05ab070103000001050507030302000105110202010302020502
-070103050703050207010300000105ff05ff05ab07010300000105030703030400010511
-0202010302020502070103070703050007010300000105ff05ff05ab0701030000010501
-070303060001051102020103020205020701030907040300000105ff05ff05ab07010300
-0001070303080001051102020103020205020701030b07020300000107ff07ff07ad0300
-00010701030a0001051102020101000405020701030d07000300000007ff07ff07ae0300
-00000700030c000105110005020204000502070100ff00ff00d105110000020204000000
-020204000502070000ff00ff00d2051100000202040000000202040005ff05ff05e80000
-0202040000000202040005ff05ff05e800000202040000000202040005ff05ff05e80000
-02020400000002020400000502ff02ff02dc00060202040000000208040002ff02ff02dc
-00000208040000000208040002ff02ff02dc00000208040000000208040001ff01ff01dc
-0000020804000000040901ff01ff01dc00000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 0 377 205
-%%EOF
diff --git a/lib/tv/doc/src/tv_start_system_unreadable.gif b/lib/tv/doc/src/tv_start_system_unreadable.gif
deleted file mode 100644
index 38b69deb8e..0000000000
--- a/lib/tv/doc/src/tv_start_system_unreadable.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_start_system_unreadable.ps b/lib/tv/doc/src/tv_start_system_unreadable.ps
deleted file mode 100644
index 4486557837..0000000000
--- a/lib/tv/doc/src/tv_start_system_unreadable.ps
+++ /dev/null
@@ -1,1377 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_system_unreadable.eps)
-%%CreationDate: (Mon Mar 19 17:15:29 2001)
-%%BoundingBox: 0 0 377 205
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 377 205
-userdict begin
-%%BeginData:
-DisplayImage
-0 0
-377.000000 205.000000
-12
-755 410
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-828282
-aab6aa
-e7e7e7
-000000
-000000
-000000
-000000
-000000
-000000
-000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff
-02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202
-04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff
-02d000000202040000000202040002080000020d040002f6010302110103023801010206
-0101024001010230010102ff020400000202040000000202040002080000020d040002f6
-010102020107020001010203010102010101020e0105020001070201010302070100020b
-01010206010102400101020c0104021e010102ff02040000020204000000020204000208
-0000020d040002f6010102050101020301010203010102010101020e0101020701010203
-01010201010102050101020b010102060101024e010102020101021d010102ff02040000
-0202040000000202040002080000020204060203040002f6010102050101020301010203
-010102010101020e01010207010102030101020801040201010302030101020001010203
-010102020103020301040206010302030101020001010207010102000101020101010203
-010302030101020201010200010102020101020101030202010102000101020101010203
-010302020101020001010201010102020103020201010202010102f30000020204000000
-04030208000002020400030400000203040002f601010205010102040101020201000202
-0101020e0101020701010203010202080101020201010201010102020102020001010202
-010102010101020101010201010102090101020101010202010202000101020601020200
-010202000101020101010201010102020101020201020200010102010101020001010200
-010102020102020001020200010102010101020101010201010102000101020101010201
-010102010101020101010202010102f3000004030101020b000002030400030200000204
-040002f6010102050101020401010201010102020101020e010402040101020401030206
-010102060101020201010201010102020101020101010201010102010102020801010201
-010102020101020101010206010102010101020101010205010102020101020201010201
-010102010101020001010200010102020101020101010201010102050101020101020203
-01010201010102010101020101010202010002f70103020b000002030400030200000204
-040002f6010102050101020501010200010002030101020e010102070101020601020205
-010102030104020201010201010102020101020101050202010302060101020101010202
-010102010101020601010201010102010101020201040202010102020101020101010201
-010102000101020001010202010102010101020101010202010402010101020401010201
-0105020201010200010102f70103020b000002040400030000000205040002f601010205
-01010205010302030101020e010102070101020701010205010102020101020101010202
-010102010101020201010201010102080102020501010201010102020101020101010206
-010102010101020101010201010102010101020201010202010102010101020101010201
-010102000101020101010201010102010101020101010201010102010101020401010201
-0101020601010200010002f80103020b000002040400030000000205040002f601010205
-01010206010102040101020e010102070101020301010201010102050101020201010201
-010102020101020101010202010102010101020201000205010102050101020101010202
-010102010101020601010201010102010101020101010201010102020101020201010201
-010102020101020701010201010102010101020101010201010102010101020401010201
-0101020201000203010202f80103020b0000020500000206040002f60101020501010206
-010102040101020e01050203010102040103020701020201010202000101020101040203
-010102020103020201040207010302030101020101010206010102010101020101010202
-010202000101020101010202010102010101020301050202010102010101020101010202
-0102020001010200010102040101020201030204010102f90103020b0000020d040002f6
-01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000
-020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff
-02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff
-02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff
-05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
-0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202
-010302020001050b06040504060005030602051f0600050206000504060005270602050b
-06000506060005ff05ff053506000502060005090602051307010202010302020001050b
-0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502
-0600050b0600051307010202010302020001050b06000506060205050600050306020518
-060005020600050206020503060205020600050206000517060005020600050106000500
-060105020604050206020503060205020600050006010503060205ff05ff052006000502
-060005020602050506000502060005000601050c07010202010302020001050b06000508
-060005050600050206000502060005180600050006000505060005020600050206000501
-060005020600051706000502060005010601050106000503060005060600050206000502
-06000501060105010600050106000502060005ff05ff051f060005020600050106000502
-0600050406000502060105010600050b07010202010302020001050b0603050506000505
-060005020600050206000518060005000600050506000502060005020600050106000500
-060005000600051706000502060005010600050206000503060005060600050206000502
-060005010600050206000501060005ff05ff052306040501060005020600050406000502
-060005020600050b07010202010302020001050b06000508060005050600050206040518
-060005000600050506000502060405010600050006000500060005170600050206000501
-0600050206000503060005060600050206000502060005010600050206000502060205ff
-05ff052006000502060005010604050406000502060005020600050b0701020201030202
-0001050b0600050806000505060005020600051d06000506060005020600050506000500
-060005000600051706000502060005010600050206000503060005060600050206000502
-060005010600050206000505060005ff05ff051f06000502060005010600050806000502
-060005020600050b07010202010302020001050b06000508060005050600050206000502
-060005190600050606000502060005020600050106000500060005000600051706000502
-060005010601050106000503060005060600050206000502060005010600050206000501
-06000502060005ff05ff051f060005020600050106000502060005040600050206010501
-0600050b07010202010302020001050b0600050806000505060005030602051a06000506
-060005030602050306000500060005190602050206000500060105050601050406000503
-060205020600050206000502060205ff05ff052006000502060005020602050506000502
-060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202
-010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f
-07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e
-0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4
-0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103
-0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202
-0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103
-05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202
-01030202050e01060508010005060101050f010205010102059b01060508010005060101
-0510010505040101054d010205240104050d0101051e0102052401020501010205930106
-0508010005060101051101030535020201030202050e0100050101010500010005070101
-050601000511010105010100059d01000501010105000100050701010506010005130101
-05060100054d0101050001010524010105000101050c0100051e01010500010105240101
-050101000595010005010101050001000507010105060100051101010501010105340202
-010302020510010105030103050201030503010105030103050801020500010105010103
-05000101050001000500010005020103058b010105030103050201030503010105030103
-050a010105030104054c0101050101050500010305000102050201030501010105000102
-05070101050101010500010305030104051d010105010105050001030500010205020103
-050101010500010205070102050001010501010305000101050001000500010005020103
-058301010503010305020103050301010503010305090101050101000500010305020105
-050101030521020201030202051001010506010105000101050101010502010105020101
-0501010105070100050001000500010005050101050001050500010105010101058a0101
-050601010500010105010101050201010502010105010101050901010502010105010101
-054c01000502010105000101050201000500010205000101050001010501010105010102
-050001000507010105010101050201010502010105010101051d01000502010105000101
-050201000500010205000101050001010501010105010102050001000507010005000100
-050001000505010105000105050001010501010105820101050601010500010105010101
-050201010502010105010101050801020504010105020101050001010501010105010101
-052002020103020205100100050401040500010105010101050201010501010605070100
-0500010205020104050001010500010005000107058a0100050401040500010105010101
-0502010105010106050901010501010105020101054b0101050201000501010105000100
-05000100050001010501010805010101050a0103050401010501010105020101051c0101
-05020100050101010500010005000100050001010501010805010101050a010005000102
-050201040500010105000100050001070582010005040104050001010501010105020101
-05010106050901020503010105040101050101060520020201030202050f010105020101
-0501010105000101050201010501010105020101050b0101050001010501010105010101
-05010100050001000500010005000101058e010105020101050101010500010105020101
-0501010105020101050d01010502010105010101054c0101050101010501010205000100
-05010100050201000500010105050101050a0101050601010502010105010101051d0101
-05010101050101020500010005010100050201000500010105050101050a010105000101
-050101010501010105010100050001000500010005000101058601010502010105010101
-05000101050201010501010105020101050b010105010101050201010503010105030101
-0525020201030202050f0101050201010501010105000101050101010502010105020101
-050101010507010005010101050101010501010105000101050001000500010005000101
-05010101058a010105020101050101010500010105010101050201010502010105010101
-050901010502010105010101054c01010500010105020103050101010501010105000101
-0501010105010101050a0101050601010502010105010101051d01010500010105020103
-0501010105010101050001010501010105010101050a0100050101010501010105010101
-050001010500010005000100050001010501010105820101050201010501010105000101
-050101010502010105020101050101010507010105010101050201010502010205000101
-05000101050101010521020201030202050e01030502010a050101050501010305070102
-0500010105020107050001000500010105000103058a01030502010a0501010505010103
-0508010505010105054c0102050301010500010005000103050001020500010305010104
-050701030503010505010105051d01020503010105000100050001030500010205000103
-05010104050701020500010105020107050001000500010105000103058201030502010a
-050101050501010305090103050101050500010505010103052202020103020205ff05ff
-05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
-05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff
-05e8020201030202050201ff01ff01e205020202010302020503010000cb010100810101
-0059010100c30101005801000711000005020202010302020503010000cb010100810101
-0059010100c30101005801000701030607000306000105020202010302020503010000cb
-010100810101000c0100002301000026010100c301010058010007010305000007000306
-0001050202020103020205030100001f0100000a0100009e010100810101000b01000004
-010100090104000a01010002010000250101001e0102000501000012010000060100002e
-010000120102000301020031010100080104004a01000701030500000701030500010502
-02020103020205030100001f0100000a0100009e010100810101000a0100000401000001
-010000080100000d01000001010000020100002401010020010000190100003601000014
-010000050100003101010008010000020100004a01000701030400010701030500010502
-02020103020205030100000901020003010200090104000201020002010000000101009b
-01010081010100090100000501000001010000080100000d010000010100000301000023
-010100090102000201000000010100020100000001010005010000030102000301020003
-01020002010400020102000301020002010000000101000a010200030102000201000000
-010100020104000101000000010100030102000501000005010000030102000201000000
-010100230101000c0100004a010007010304000105000701030400010502020201030202
-0503010000080100000201000001010000020100000a0100000301000002010000010101
-00010100009a01010081010100080100000601000001010000080103000a010000010100
-000401000022010100080100000201000001010100010100000101010001010000040100
-000501000002010000020100000101000002010000030100000601000002010000020100
-000101010001010000080100000201000001010000020100000101010001010000030100
-000301010001010000010100000201000004010000050100000201000002010000010101
-0001010000220101000b0100004b01000701030300010501070103040001050202020103
-020205030100000c010000010100000e0100000701000001010000020100009a01010081
-0101000701000007010000010100000c010000090100000101000005010000210101000c
-010000010100000201000001010000020100000401000005010000020100000901000003
-010000060100000201000002010000010100000201000008010000050100000201000001
-010000020100000301000003010000050100000201000004010000050100000201000002
-01000001010000260101000b0100004b0100070103030001050207010303000105020202
-01030202050301000009010300010100000e0100000401030001010000020100009a0101
-00810101000801000006010000010100000c010000090100000101000004010000220101
-000901030001010000020100000101000002010000040100000501000002010000060103
-000301000006010000020100000201000001010000020100000801000005010000020100
-000101000002010000030100000301000005010000020100000401000005010000020104
-0001010000260101000b0100004b01000701030200010503070103030001050202020103
-020205030100000801000002010000010100000e01000003010000020100000101000002
-0100009a0101008101010009010000050100000101000008010000020100000901000001
-010000030100002301010008010000020100000101000002010000010100000201000004
-010000050100000201000005010000020100000301000006010000020100000201000001
-010000020100000801000005010000020100000101000002010000030100000301000005
-0100000201000004010000050100000201000005010000260101000a0100004c01000701
-030200010504070103020001050202020103020205030100000801000002010000010100
-00020100000a010000030100000201000001010100010100009a010100810101000a0100
-000401000001010000030101000201000002010000030101000301000001010000020100
-002401010008010000020100000101010001010000010101000101000004010000050100
-000201000002010000010100000201000003010000060100000201000002010000010100
-000201000008010000020100000101000002010000010100000201000003010000030100
-0005010000020100000401000005010000020100000201000001010000260101000a0100
-004c01000701030100010505070103020001050202020103020205030100000901030002
-0102000c0101000201030001010000000101009b010100810101000b0100000401010004
-010100030102000401010004010100020100002501010009010300010100000001010002
-010000000101000501000005010000030102000301030004010100040100000301020002
-010000020100000901020003010200020100000201000004010100010100000601020005
-010000050100000301020002010000260101000a0100004c010007010301000105060701
-030100010502020201030202050301000015010500af010100810101000c010000230100
-00260101000f010000050100003c01050068010100580100070103000001050707010301
-000105020202010302020503010000cb01010081010100590101000f01000005010000ab
-010100580100070103000001050807010300000105020202010302020503010000cb0101
-0081010100590101000f01000005010000ab01010058010007010001070b030000010502
-0202010302020503010000cb0101008101010059010100c301010058010007010000070d
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-030e000105020202010302020503010000cb0101008101010059010100c3010100580100
-0701001005020202010302020503010000cb0101008101010059010100c3010100580100
-0701000d070000010502020201030202050301ff01ff01ce07010001050a070100010502
-020201030202050308cd01ff01ff010007010001050a0701000105020202010302020503
-080009cb08000100098101010959010109c301010958010007010001050a070100010502
-0202010302020503080009cb08000100090b0101094e0101092201010959010109c30101
-0958010007010001050a0701000105020202010302020503080009cb08000100090a0100
-091c0100092a01000908010009210101090c0100092a0100091f010109c3010109580100
-07010001050a07010001050202020103020205030800091a080009af08000100090a0100
-0905010009050101090c010009040101090a010209020104090a01010902010009070100
-09210101090b010009040101090a010209020104090a010109020100091e0101091a0100
-09a70101090901020903010209020104093c010007010001050a07010001050202020103
-020205030800091a080009af08000100090a0100090401010904010009010100090a0100
-090401000901010009080100090201000901010009020100090901000901010009020100
-0906010009210101090a0100090401000901010009080100090201000901010009020100
-090901000901010009020100091d0101091a010009a70101090801000902010009010100
-090201000901010009020100093c010007010001050a0701000105020202010302020503
-0800090908020903080209030801090008000902080209a908000100090a010009030100
-090001000904010009010100090901000905010009010100090c01000905010009090100
-09010100090301000905010009210101090901000905010009010100090c010009050100
-090901000901010009030100091c01010909010209030102090301010900010009020102
-090a01020903010209020100090001010902010009020100090201020902010009000101
-09700101090c01000905010009050100093c010007010001050a07010001050202020103
-020205030800090808000902080009010800090208000901080009010801090108000902
-080009a808000100090a0100090501000904010009010100090801000906010009010100
-090c010009040100090a0100090101000904010009040100092101010908010009060100
-09010100090c010009040100090a01000901010009040100091b01010908010009020100
-090101000902010009010100090101010901010009020100090801000902010009010100
-090201000901010109010100090101000902010009010100090201000901010109010100
-096f0101090c01000905010009040100093d010007010001050a07010001050202020103
-0202050308000908080009050800090208000901080009020800090108000902080009a8
-0800010009080101090601000904010009010100090701000907010009010100090b0100
-09050100090a0100090101000905010009040101091f0101090701000907010009010100
-090b010009050100090a01000901010009050100091a0101090801000905010009020100
-090101000902010009010100090201000908010009050100090201000901010009050100
-0902010009010100090201000901010009730101090b01000905010009050100093d0100
-07010001050a070100010502020201030202050308000908080009050800090208000901
-0800090208000901080409a808000100090a010009050100090401000901010009080100
-0906010009010100090a010009060100090a010009010100090401000904010009210101
-090801000906010009010100090a010009060100090a01000901010009040100091b0101
-090801000905010009020100090101000902010009010104090901020902010409010100
-0906010009000100090201040901010009730101090a01000905010009060100093d0100
-07010001050a070100010502020201030202050308000908080009050800090208000901
-0800090208000901080009ac08000100090a010009050100090401000901010009090100
-09050100090101000909010009060100090b010009010100090301000905010009210101
-0909010009050100090101000909010009060100090b01000901010009030100091c0101
-090801000905010009020100090101000902010009010100091001000901010009050100
-0906010009000100090201000905010009730101090901000905010009060100093e0100
-07010001050a070100010502020201030202050308000908080009020800090108000902
-08000901080009010801090108000902080009a808000100090a01000905010009040100
-090101000903010109040100090401000901010009030101090201000907010009050101
-0903010009010100090201000906010009210101090a0100090401000901010009030101
-090201000907010009050101090301000901010009020100091d01010908010009020100
-090101000902010009010100090101010901010009020100090801000902010009010100
-090201000901010009070100090301000902010009010100097301010908010009050100
-09070100093e010007010001050a07010001050202020103020205030800090908020903
-080209030801090008000902080209a908000100090a0100090301040903010109040101
-090501000904010109040101090201040903010009050101090401010902010009070100
-09210101090b010009040101090401010902010409030100090501010904010109020100
-091e01010909010209030102090301010900010009020102090a01020903010209020100
-09070100090401020902010009730101090801040901010409030100093e010007010001
-050a0701000105020202010302020503080009cb08000100090a01000914010009060100
-092a01000908010009210101090c0100092a0100091f0101092301050999010109580100
-07010001050a0701000105020202010302020503080009cb08000100090b010109100101
-093b0101092201010959010109c301010958010007010001050a07010001050202020103
-02020503080009cb08000100098101010959010109c301010958010007010001050a0701
-000105020202010302020503080009cb08000100098101010959010109c3010109580100
-07010001050a0701000105020202010302020503080009cb080001000981010109590101
-09c301010958010007010001050a0701000105020202010302020503080009cb08000100
-098101010959010109c301010958010007010001050a0701000105020202010302020503
-080009cb08000100098101010959010109c301010958010007010001050a070100010502
-020201030202050308cd01ff01ff010007010001050a0701000105020202010302020503
-08cd01ff01ff010007010001050a0701000105020202010302020503080009cb08000100
-098101010959010109c301010958010007010001050a0701000105020202010302020503
-080009cb08000100090b0101094e0101092201010959010109c301010958010007010001
-050a0701000105020202010302020503080009cb08000100090a0100091c0100092a0100
-0908010009210101090c0100092a0100091f010109c301010958010007010001050a0701
-0001050202020103020205030800091a080009af08000100090a01000905010009050100
-090d010009040101090a010209020104090a0101090201000907010009210101090b0100
-09040101090a010209020104090a010109020100091e0101091a010009a7010109090102
-090301020944010007010001050a07010001050202020103020205030800091a080009af
-08000100090a01000904010109040101090c010009040100090101000908010009020100
-09010100090201000909010009010100090201000906010009210101090a010009040100
-0901010009080100090201000901010009020100090901000901010009020100091d0101
-091a010009a70101090801000902010009010100090201000943010007010001050a0701
-000105020202010302020503080009090802090308020903080109000800090208020909
-0800090008010903080209020801090008000903080209030802097f08000100090a0100
-09030100090001000903010009000100090b01000905010009010100090c010009050100
-0909010009010100090301000905010009210101090901000905010009010100090c0100
-09050100090901000901010009030100091c010109090102090301020903010109000100
-09020102090a010209030102090201000900010109020100090201000902010209020100
-0900010109700101090c0100090501000943010007010001050a07010001050202020103
-020205030800090808000902080009010800090208000901080009010801090108000902
-080009080801090108000901080009020800090108000900080009000800090108000902
-08000901080009020800097e08000100090a01000905010009050100090a010009060100
-09010100090c010009040100090a01000901010009040100090401000921010109080100
-0906010009010100090c010009040100090a01000901010009040100091b010109080100
-090201000901010009020100090101000901010109010100090201000908010009020100
-090101000902010009010101090101000901010009020100090101000902010009010101
-09010100096f0101090c0100090501000943010007010001050a07010001050202020103
-020205030800090808000905080009020800090108000902080009010800090208000908
-080009020800090508000901080009000800090008000901080009020800090108000982
-08000100090801010906010009050100090901000907010009010100090b010009050100
-090a0100090101000905010009040101091f0101090701000907010009010100090b0100
-09050100090a01000901010009050100091a010109080100090501000902010009010100
-090201000901010009020100090801000905010009020100090101000905010009020100
-09010100090201000901010009730101090a0101090401010944010007010001050a0701
-000105020202010302020503080009080800090508000902080009010800090208000901
-08040908080009020800090208030901080009000800090008000901080409020802097f
-08000100090a01000905010009050100090a01000906010009010100090a010009060100
-090a010009010100090401000904010009210101090801000906010009010100090a0100
-09060100090a01000901010009040100091b010109080100090501000902010009010100
-090201000901010409090102090201040901010009060100090001000902010409010100
-09730101090c0100090501000943010007010001050a0701000105020202010302020503
-0800090808000905080009020800090108000902080009010800090c0800090208000901
-0800090208000901080009000800090008000901080009090800097e08000100090a0100
-0905010009050100090b010009050100090101000909010009060100090b010009010100
-0903010009050100092101010909010009050100090101000909010009060100090b0100
-0901010009030100091c0101090801000905010009020100090101000902010009010100
-0910010009010100090501000906010009000100090201000905010009730101090c0100
-090501000943010007010001050a07010001050202020103020205030800090808000902
-080009010800090208000901080009010801090108000902080009080800090208000901
-08000902080009010800090008000900080009010800090208000901080009020800097e
-08000100090a010009050100090501000905010109040100090401000901010009030101
-0902010009070100090501010903010009010100090201000906010009210101090a0100
-090401000901010009030101090201000907010009050101090301000901010009020100
-091d01010908010009020100090101000902010009010100090101010901010009020100
-090801000902010009010100090201000901010009070100090301000902010009010100
-09730101090801000902010009010100090201000943010007010001050a070100010502
-020201030202050308000909080209030802090308010900080009020802090908000902
-0800090208030901080009000800090008000902080209030802097f08000100090a0100
-090301040901010409030101090501000904010109040101090201040903010009050101
-09040101090201000907010009210101090b010009040101090401010902010409030100
-090501010904010109020100091e01010909010209030102090301010900010009020102
-090a01020903010209020100090701000904010209020100097301010909010209030102
-0944010007010001050a070100010502020201030202050308000923080509a108000100
-090a01000914010009060100092a01000908010009210101090c0100092a0100091f0101
-09230105099901010958010007010001050a0701000105020202010302020503080009cb
-08000100090b010109100101093b0101092201010959010109c301010958010007010001
-050a0701000105020202010302020503080009cb08000100098101010959010109c30101
-0958010007010001050a0701000105020202010302020503080009cb0800010009810101
-0959010109c301010958010007010001050a0701000105020202010302020503080009cb
-08000100098101010959010109c301010958010007010001050a07010001050202020103
-02020503080009cb08000100098101010959010109c301010958010007010001050a0701
-000105020202010302020503080009cb08000100098101010959010109c3010109580100
-07010001050a070100010502020201030202050308cd01ff01ff010007010001050a0701
-00010502020201030202050308cd01ff01ff010007010001050a07010001050202020103
-02020503080009cb08000100098101010959010109c301010958010007010001050a0701
-000105020202010302020503080009cb08000100090b0101094701010929010109590101
-09c301010958010007010001050a0701000105020202010302020503080009cb08000100
-090a010009150100092a01000908010009280101090c0100092a0100091f010109c30101
-0958010007010001050a07010001050202020103020205030800091d08000908080009a2
-08000100090a010009040102090c010009040101090b010009030104090a010109020100
-0907010009280101090b010009040101090b010009030104090a010109020100091e0101
-09180100090a01000922010209770101090a0100094c010007010001050a070100010502
-02020103020205030800091d080009ac08000100090a01000903010009020100090a0100
-090401000901010009090101090301000902010009090100090101000902010009060100
-09280101090a010009040100090101000909010109030100090201000909010009010100
-09020100091d010109180100090a0100092401000977010109090101094c010007010001
-050a07010001050202020103020205030800090908020903080209030802090208000901
-0800090308020903080209030802099408000100090a0100090301000902010009090100
-090501000901010009080100090001000907010009090100090101000903010009050100
-092801010909010009050100090101000908010009000100090701000909010009010100
-09030100091c010109080100090001010903010209020104090801000901010009030102
-090201000900010109020100090001010903010209050100097701010908010009000100
-094c010007010001050a0701000105020202010302020503080009080800090208000901
-080009020800090108000902080009010800090008000906080009020800090208000901
-080009020800099308000100090a01000903010009020100090801000906010009010100
-090a010009060100090a0100090101000904010009040100092801010908010009060100
-09010100090a010009060100090a01000901010009040100091b01010908010109010100
-090101000902010009030100090a01000900010009030100090201000901010109010100
-090101010901010009010100090201000904010009770101090a0100094c010007010001
-050a07010001050202020103020205030800090808000905080009020800090108000902
-080009010801090708000902080009020800090108000997080001000908010109050102
-090801000907010009010100090a010009060100090a0100090101000905010009040101
-09260101090701000907010009010100090a010009060100090a01000901010009050100
-091a01010908010009020100090101000902010009030100090a01010904010009020100
-09010100090501000902010009010100090201000904010009770101090a0100094c0100
-07010001050a070100010502020201030202050308000908080009050800090208000901
-08000902080009010801090708000902080409020802099408000100090a010009030100
-09020100090801000906010009010100090a010009060100090a01000901010009040100
-0904010009280101090801000906010009010100090a010009060100090a010009010100
-09040100091b010109080100090201000901010409030100090a01010904010409010100
-0905010009020100090101040904010009770101090a0100094c010007010001050a0701
-000105020202010302020503080009080800090508000902080009010800090208000901
-080009000800090608000902080009090800099308000100090a01000903010009020100
-090901000905010009010100090a010009050100090b0100090101000903010009050100
-09280101090901000905010009010100090a010009050100090b01000901010009030100
-091c010109080100090201000901010009070100090a0100090001000903010009050100
-0905010009020100090101000908010009770101090a0100094c010007010001050a0701
-000105020202010302020503080009080800090208000901080009020800090108000902
-080009010800090108000905080009020800090208000901080009020800099308000100
-090a01000903010009020100090301010904010009040100090101000903010109040100
-09050100090501010903010009010100090201000906010009280101090a010009040100
-0901010009030101090401000905010009050101090301000901010009020100091d0101
-0908010009020100090101000902010009030100090a0100090101000902010009020100
-09010100090501000902010009010100090201000904010009770101090a0100094c0100
-07010001050a070100010502020201030202050308000909080209030802090308020902
-080009020800090408000903080209030802099408000100090a01000904010209040101
-090501000904010109040101090201040903010009050101090401010902010009070100
-09280101090b010009040101090401010902010409030100090501010904010109020100
-091e01010908010009020100090201020905010109080100090201000902010209020100
-090501000902010009020102090501000977010109080104094a010007010001050a0701
-000105020202010302020503080009cb08000100090a0100090d010009060100092a0100
-0908010009280101090c0100092a0100091f0101091c010509a001010958010007010001
-050a0701000105020202010302020503080009cb08000100090b010109090101093b0101
-092901010959010109c301010958010007010001050a0701000105020202010302020503
-080009cb08000100098101010959010109c301010958010007010001050a070100010502
-0202010302020503080009cb08000100098101010959010109c301010958010007010001
-050a0701000105020202010302020503080009cb08000100098101010959010109c30101
-0958010007010001050a0701000105020202010302020503080009cb0800010009810101
-0959010109c301010958010007010001050a0701000105020202010302020503080009cb
-08000100098101010959010109c301010958010007010001050a07010001050202020103
-0202050308cd01ff01ff010007010001050a070100010502020201030202050301ff01ff
-01ce07010001050a0701000105020202010302020503010000cb01010081010100590101
-00c301010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb010100810101000c0100002a0100001f010100c301010058010007010001050a0701
-00010502020201030202050301000010010200090100000d0102000a010200100100007b
-010100810101000b010000040101000b010000050100000c010100020100001e01010010
-010200090100000d010200930101000a0101004b010007010001050a0701000105020202
-01030202050301000012010000090100000f0100000c010000100100007b010100810101
-000a010000040100000101000009010100040101000b01000001010000020100001d0101
-0012010000090100000f0100009301010009010000010100004a010007010001050a0701
-000105020202010302020503010000090101000001000004010000030102000201000000
-01010003010200050100000c010000030102000301020002010000010100000301020071
-01010081010100090100000501000001010000080100000001000003010000000100000b
-01000001010000030100001c010100090101000001000004010000030102000201000000
-01010003010200050100000901000000010100030102000201010000010000030102000a
-01020003010200020100000001010002010000020100000201020002010000000101003f
-01010009010000010100004a010007010001050a07010001050202020103020205030100
-000801000001010100040100000201000002010000010101000101000001010000020100
-00040100000c010000020100000201000001010000020100000101000000010000030100
-000201000070010100810101000801000006010000010100000a010000050100000b0100
-0001010000040100001b0101000801000001010100040100000201000002010000010101
-000101000001010000020100000401000009010100010100000101000002010000010100
-000001000000010000010100000201000008010000020100000101000002010000010101
-00010100000101000002010000010100000201000001010100010100003e010100090100
-00010100004a010007010001050a07010001050202020103020205030100000801000002
-010000040100000201000002010000010100000201000005010000040100000c01000002
-010000020100000101000005010100040100007401010081010100070100000701000001
-0100000a010000050100000b01000001010000050100001a010100080100000201000004
-010000020100000201000001010000020100000501000004010000090100000201000005
-010000010100000001000000010000010100000201000008010000050100000201000001
-01000005010000020100000101000002010000010100004201010009010000010100004a
-010007010001050a07010001050202020103020205030100000801000002010000040100
-000201000002010000010100000201000002010300040100000c01000002010000020100
-0001010000050101000501020071010100810101000801000006010000010100000a0100
-00050100000b01000001010000040100001b010100080100000201000004010000020100
-000201000001010000020100000201030004010000090100000201000002010300010100
-000001000000010000010104000901020002010400010100000601000000010000020104
-00010100004201010009010000010100004a010007010001050a07010001050202020103
-020205030100000801000002010000040100000201000002010000010100000201000001
-01000002010000040100000c010000020100000201000001010000050100000001000007
-01000070010100810101000901000005010000010100000a010000050100000b01000001
-010000030100001c01010008010000020100000401000002010000020100000101000002
-010000010100000201000004010000090100000201000001010000020100000101000000
-010000000100000101000010010000010100000501000006010000000100000201000005
-0100004201010009010000010100004a010007010001050a070100010502020201030202
-050301000008010000010101000401000002010000020100000101010001010000010100
-0002010000040100000c0100000201000002010000010100000201000001010000010100
-00020100000201000070010100810101000a010000040100000101000003010100040100
-0005010000050101000301000001010000020100001d0101000801000001010100040100
-000201000002010000010101000101000001010000020100000401000009010000020100
-000101000002010000010100000001000000010000010100000201000008010000020100
-000101000002010000010100000701000003010000020100000101000042010100090100
-00010100004a010007010001050a07010001050202020103020205030100000901010000
-0100000401000003010200020100000001010003010300040100000c0100000301020003
-01020002010000020100000201020071010100810101000b010000040101000401010002
-010400010104000301010004010100020100001e01010009010100000100000401000003
-010200020100000001010003010300040100000901000002010000020103000101000000
-01000000010000020102000a010200030102000201000007010000040102000201000042
-0101000a0101004b010007010001050a07010001050202020103020205030100000c0100
-002301050093010100810101000c0100002a0100001f0101000c010000230105001c0105
-006801010058010007010001050a07010001050202020103020205030100000801000002
-010000bd01010081010100590101000801000002010000b501010058010007010001050a
-070100010502020201030202050301000009010200be0101008101010059010100090102
-00b601010058010007010001050a0701000105020202010302020503010000cb01010081
-01010059010100c301010058010007010001050a07010001050202020103020205030100
-00cb0101008101010059010100c301010058010007010001050a07010001050202020103
-02020503010000cb0101008101010059010100c301010058010007010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202
-01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb
-0101008101010059010100c301010058010007010001050a070100010502020201030202
-0503010000cb0101008101010059010100c301010058010007010001050a070100010502
-0202010302020503010000cb010100810101000c0100002a0100001f010100c301010058
-010007010001050a070100010502020201030202050301000010010200090100000d0102
-009b010100810101000b010000040101000b010000050100000c010100020100001e0101
-0010010200090100000d010200930101000a0101004b010007010001050a070100010502
-020201030202050301000012010000090100000f0100009b010100810101000a01000004
-0100000101000009010100040101000b01000001010000020100001d0101001201000009
-0100000f0100009301010009010000010100004a010007010001050a0701000105020202
-010302020503010000090101000001000004010000030102000201000000010100030102
-000501000009010000000101000301020002010100000100000301020003010200710101
-0081010100090100000501000001010000080100000001000003010000000100000b0100
-0001010000030100001c0101000901010000010000040100000301020002010000000101
-0003010200050100000901000000010100030102000201010000010000030102000a0102
-0003010200020100000001010002010000020100000201020002010000000101003f0101
-0009010000010100004a010007010001050a070100010502020201030202050301000008
-010000010101000401000002010000020100000101010001010000010100000201000004
-010000090101000101000001010000020100000101000000010000000100000101000002
-010000010100000201000070010100810101000801000006010000010100000a01000005
-0100000b01000001010000040100001b0101000801000001010100040100000201000002
-010000010101000101000001010000020100000401000009010100010100000101000002
-010000010100000001000000010000010100000201000008010000020100000101000002
-01000001010100010100000101000002010000010100000201000001010100010100003e
-01010009010000010100004a010007010001050a07010001050202020103020205030100
-000801000002010000040100000201000002010000010100000201000005010000040100
-000901000002010000050100000101000000010000000100000101000002010000010100
-0074010100810101000701000007010000010100000a010000050100000b010000010100
-00050100001a010100080100000201000004010000020100000201000001010000020100
-000501000004010000090100000201000005010000010100000001000000010000010100
-000201000008010000050100000201000001010000050100000201000001010000020100
-00010100004201010009010000010100004a010007010001050a07010001050202020103
-020205030100000801000002010000040100000201000002010000010100000201000002
-010300040100000901000002010000020103000101000000010000000100000101040002
-01020071010100810101000801000006010000010100000a010000050100000b01000001
-010000040100001b01010008010000020100000401000002010000020100000101000002
-010000020103000401000009010000020100000201030001010000000100000001000001
-010400090102000201040001010000060100000001000002010400010100004201010009
-010000010100004a010007010001050a0701000105020202010302020503010000080100
-000201000004010000020100000201000001010000020100000101000002010000040100
-000901000002010000010100000201000001010000000100000001000001010000090100
-0070010100810101000901000005010000010100000a010000050100000b010000010100
-00030100001c010100080100000201000004010000020100000201000001010000020100
-000101000002010000040100000901000002010000010100000201000001010000000100
-000001000001010000100100000101000005010000060100000001000002010000050100
-004201010009010000010100004a010007010001050a0701000105020202010302020503
-010000080100000101010004010000020100000201000001010100010100000101000002
-010000040100000901000002010000010100000201000001010000000100000001000001
-01000002010000010100000201000070010100810101000a010000040100000101000003
-0101000401000005010000050101000301000001010000020100001d0101000801000001
-010100040100000201000002010000010101000101000001010000020100000401000009
-010000020100000101000002010000010100000001000000010000010100000201000008
-010000020100000101000002010000010100000701000003010000020100000101000042
-01010009010000010100004a010007010001050a07010001050202020103020205030100
-000901010000010000040100000301020002010000000101000301030004010000090100
-000201000002010300010100000001000000010000020102000301020071010100810101
-000b010000040101000401010002010400010104000301010004010100020100001e0101
-000901010000010000040100000301020002010000000101000301030004010000090100
-000201000002010300010100000001000000010000020102000a01020003010200020100
-00070100000401020002010000420101000a0101004b010007010001050a070100010502
-02020103020205030100000c0100002301050093010100810101000c0100002a0100001f
-0101000c010000230105001c0105006801010058010007010001050a0701000105020202
-0103020205030100000801000002010000bd010100810101005901010008010000020100
-00b501010058010007010001050a070100010502020201030202050301000009010200be
-010100810101005901010009010200b601010058010007010001050a0701000105020202
-010302020503010000cb0101008101010059010100c301010058010007010001050a0701
-000105020202010302020503010000cb0101008101010059010100c30101005801000701
-0001050a0701000105020202010302020503010000cb0101008101010059010100c30101
-0058010007010001050a0701000105020202010302020503010000cb0101008101010059
-010100c301010058010007010001050a070100010502020201030202050301ff01ff01ce
-07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001
-05020202010302020503010000cb0101008101010059010100c301010058010007010001
-050a0701000105020202010302020503010000cb0101008101010059010100c301010058
-010007010001050a0701000105020202010302020503010000cb010100810101000c0100
-002a0100001f010100c301010058010007010001050a0701000105020202010302020503
-01000010010200090100000d0102004301000056010100810101000b010000040101000b
-010000050100000c010100020100001e01010010010200090100000d010200930101000a
-0101004b010007010001050a070100010502020201030202050301000012010000090100
-000f0100004301000056010100810101000a010000040100000101000009010100040101
-000b01000001010000020100001d01010012010000090100000f01000093010100090100
-00010100004a010007010001050a07010001050202020103020205030100000901010000
-010000040100000301020002010000000101000301020005010000090100000001010003
-010200020101000001000003010200030102000a01020002010000020100000101040054
-01010081010100090100000501000001010000080100000001000003010000000100000b
-01000001010000030100001c010100090101000001000004010000030102000201000000
-01010003010200050100000901000000010100030102000201010000010000030102000a
-01020003010200020100000001010002010000020100000201020002010000000101003f
-01010009010000010100004a010007010001050a07010001050202020103020205030100
-000801000001010100040100000201000002010000010101000101000001010000020100
-000401000009010100010100000101000002010000010100000001000000010000010100
-000201000001010000020100000801000002010000010100000201000003010000560101
-00810101000801000006010000010100000a010000050100000b01000001010000040100
-001b01010008010000010101000401000002010000020100000101010001010000010100
-000201000004010000090101000101000001010000020100000101000000010000000100
-000101000002010000080100000201000001010000020100000101010001010000010100
-0002010000010100000201000001010100010100003e01010009010000010100004a0100
-07010001050a070100010502020201030202050301000008010000020100000401000002
-010000020100000101000002010000050100000401000009010000020100000501000001
-01000000010000000100000101000002010000010100000c010000020100000201000000
-0100000401000056010100810101000701000007010000010100000a010000050100000b
-01000001010000050100001a010100080100000201000004010000020100000201000001
-010000020100000501000004010000090100000201000005010000010100000001000000
-010000010100000201000008010000050100000201000001010000050100000201000001
-01000002010000010100004201010009010000010100004a010007010001050a07010001
-050202020103020205030100000801000002010000040100000201000002010000010100
-000201000002010300040100000901000002010000020103000101000000010000000100
-000101040002010200090104000301000005010000560101008101010008010000060100
-00010100000a010000050100000b01000001010000040100001b01010008010000020100
-000401000002010000020100000101000002010000020103000401000009010000020100
-000201030001010000000100000001000001010400090102000201040001010000060100
-000001000002010400010100004201010009010000010100004a010007010001050a0701
-000105020202010302020503010000080100000201000004010000020100000201000001
-010000020100000101000002010000040100000901000002010000010100000201000001
-010000000100000001000001010000090100000801000006010000000100000401000056
-010100810101000901000005010000010100000a010000050100000b0100000101000003
-0100001c0101000801000002010000040100000201000002010000010100000201000001
-010000020100000401000009010000020100000101000002010000010100000001000000
-010000010100001001000001010000050100000601000000010000020100000501000042
-01010009010000010100004a010007010001050a07010001050202020103020205030100
-000801000001010100040100000201000002010000010101000101000001010000020100
-000401000009010000020100000101000002010000010100000001000000010000010100
-000201000001010000020100000801000002010000010100000201000003010000560101
-00810101000a010000040100000101000003010100040100000501000005010100030100
-0001010000020100001d0101000801000001010100040100000201000002010000010101
-000101000001010000020100000401000009010000020100000101000002010000010100
-000001000000010000010100000201000008010000020100000101000002010000010100
-00070100000301000002010000010100004201010009010000010100004a010007010001
-050a07010001050202020103020205030100000901010000010000040100000301020002
-010000000101000301030004010000090100000201000002010300010100000001000000
-01000002010200030102000a01020002010000020100000401010054010100810101000b
-010000040101000401010002010400010104000301010004010100020100001e01010009
-010100000100000401000003010200020100000001010003010300040100000901000002
-01000002010300010100000001000000010000020102000a010200030102000201000007
-0100000401020002010000420101000a0101004b010007010001050a0701000105020202
-0103020205030100000c010000230105002301050069010100810101000c0100002a0100
-001f0101000c010000230105001c0105006801010058010007010001050a070100010502
-02020103020205030100000801000002010000bd01010081010100590101000801000002
-010000b501010058010007010001050a0701000105020202010302020503010000090102
-00be010100810101005901010009010200b601010058010007010001050a070100010502
-0202010302020503010000cb0101008101010059010100c301010058010007010001050a
-0701000105020202010302020503010000cb0101008101010059010100c3010100580100
-07010001050a0701000105020202010302020503010000cb0101008101010059010100c3
-01010058010007010001050a0701000105020202010302020503010000cb010100810101
-0059010100c301010058010007010001050a070100010502020201030202050301ff01ff
-01ce07010001050a070100010502020201030202050308cd01ff01ff010007010001050a
-0701000105020202010302020503080000cb08000100008101010059010100c301010058
-010007010001050a0701000105020202010302020503080000cb08000100000b0101004e
-0101002201010059010100c301010058010007010001050a070100010502020201030202
-0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a
-0100001f010100c301010058010007010001050a07010001050202020103020205030800
-00cb08000100000a01000005010000040102000c010000040101000d010000020102000b
-0101000201000007010000210101000b010000040101000d010000020102000b01010002
-0100001e0101002001010018010000150100006f01010009010200020104004301000701
-0001050a0701000105020202010302020503080000cb08000100000a0100000401010003
-010000020100000a01000004010000010100000b01010001010000020100000901000001
-0100000201000006010000210101000a01000004010000010100000b0101000101000002
-0100000901000001010000020100001d0101001f0100001a010000150100006f01010008
-010000020100000101000047010007010001050a07010001050202020103020205030800
-000908010000080000020802000908000000080100030802000208010000080000030802
-00030802008d08000100000a010000030100000001000007010000090100000501000001
-0100000a0100000001000005010000090100000101000003010000050100002101010009
-01000005010000010100000a01000000010000050100000901000001010000030100001c
-0101000901010000010000020102000b0100000301000000010100030102000201000000
-0101000201040002010200020100000001010003010100000100006f0101000801000002
-0100000101000047010007010001050a0701000105020202010302020503080000080800
-000108010001080000020800000808010001080000010800000208000001080000000800
-0000080000010800000208000001080000020800008c08000100000a0100000501000007
-010000080100000601000001010000090100000101000005010000090100000101000004
-010000040100002101010008010000060100000101000009010000010100000501000009
-01000001010000040100001b010100080100000101010001010000020100000801040001
-010100010100000101000002010000010101000101000003010000030100000201000001
-0101000101000001010000010101006f0101000801000002010000010103004401000701
-0001050a07010001050202020103020205030800000808000002080000010800000c0800
-000208000005080000010800000008000000080000010800000208000001080000900800
-010000080101000601000006010000080100000701000001010000080100000201000003
-0101000a0100000101000005010000040101001f01010007010000070100000101000008
-01000002010000030101000a01000001010000050100001a010100080100000201000001
-0100000e0100000301000005010000020100000101000002010000030100000301000002
-010000010100000201000001010000020100006f01010009010200060100004301000701
-0001050a0701000105020202010302020503080000080800000208000002080200090800
-00020800000208030001080000000800000008000001080400020802008d08000100000a
-01000005010000050100000a010000060100000101000008010000020100000501000009
-010000010100000401000004010000210101000801000006010000010100000801000002
-010000050100000901000001010000040100001b0101000801000002010000020102000b
-010000030100000501000002010000010100000201000003010000030104000101000002
-01000001010000020100006f01010008010000020100000501000043010007010001050a
-070100010502020201030202050308000008080000020800000508000008080000020800
-00010800000208000001080000000800000008000001080000090800008c08000100000a
-01000005010000040100000c010000050100000101000008010500040100000901000001
-010000030100000501000021010100090100000501000001010000080105000401000009
-01000001010000030100001c0101000801000002010000050100000a0100000301000005
-010000020100000101000002010000030100000301000005010000020100000101000002
-0100006f0101000801000002010000010100000201000043010007010001050a07010001
-050202020103020205030800000808000001080100010800000208000008080000020800
-000108000002080000010800000008000000080000010800000208000001080000020800
-008c08000100000a01000005010000030100000701010004010000040100000101000003
-010100060100000101000002010000030101000301000001010000020100000601000021
-0101000a0100000401000001010000030101000601000001010000020100000301010003
-01000001010000020100001d010100080100000101010001010000020100000a01000003
-010000050100000201000001010000020100000301000003010000020100000101000002
-01000001010000010101006f010100080100000201000001010000020100004301000701
-0001050a0701000105020202010302020503080000090801000008000002080200090800
-00020800000208030001080000000800000008000002080200030802008d08000100000a
-010000030104000101040003010100050100000401010004010100060100000201020004
-010100040101000201000007010000210101000b01000004010100040101000601000002
-0102000401010004010100020100001e0101000901010000010000020102000b01000003
-010000060102000201000002010000040101000201020002010000020100000201010000
-0100006f010100090102000301020044010007010001050a070100010502020201030202
-05030800000c08000007080500af08000100000a01000014010000060100002a01000008
-010000210101000c0100002a0100001f0101000c01000007010500a70101005801000701
-0001050a07010001050202020103020205030800000808000002080000bd08000100000b
-010100100101003b01010022010100590101000801000002010000b50101005801000701
-0001050a070100010502020201030202050308000009080200be08000100008101010059
-01010009010200b601010058010007010001050a07010001050202020103020205030800
-00cb08000100008101010059010100c301010058010007010001050a0701000105020202
-010302020503080000cb08000100008101010059010100c301010058010007010001050a
-0701000105020202010302020503080000cb08000100008101010059010100c301010058
-010007010001050a0701000105020202010302020503080000cb08000100008101010059
-010100c301010058010007010001050a070100010502020201030202050308cd01ff01ff
-010007010001050a070100010502020201030202050308cd01ff01ff010007010001050a
-0701000105020202010302020503080000cb08000100008101010059010100c301010058
-010007010001050a0701000105020202010302020503080000cb08000100000b0101004e
-0101002201010059010100c301010058010007010001050a070100010502020201030202
-0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a
-0100001f010100c301010058010007010001050a07010001050202020103020205030800
-00110800000308000010080000010800009e08000100000a01000005010000040102000c
-010000040101000d010000050100000a0101000201000007010000210101000b01000004
-0101000d010000050100000a010100020100001e010100c30101000a0100000401020044
-010007010001050a07010001050202020103020205030800001108000003080000100800
-00010800009e08000100000a0100000401010003010000020100000a0100000401000001
-0100000b0101000401010009010000010100000201000006010000210101000a01000004
-010000010100000b010100040101000901000001010000020100001d010100c301010009
-010100030100000201000043010007010001050a07010001050202020103020205030800
-0009080100000800000108040001080000010800000a0801000008000001080000000801
-009b08000100000a0100000301000000010000070100000901000005010000010100000a
-010000000100000301000000010000090100000101000003010000050100002101010009
-01000005010000010100000a010000000100000301000000010000090100000101000003
-0100001c010100c30101000801000000010000030100000201000043010007010001050a
-070100010502020201030202050308000008080000010801000308000003080000000800
-000a0800000108010001080100010800009a08000100000a010000050100000701000008
-010000060100000101000009010000010100000201000001010000090100000101000004
-010000040100002101010008010000060100000101000009010000010100000201000001
-0100000901000001010000040100001b010100c30101000a010000030100000201000043
-010007010001050a07010001050202020103020205030800000808000002080000030800
-00030801000b0800000208000001080000020800009a0800010000080101000601000005
-010100080100000701000001010000080100000201000001010000020100000901000001
-01000005010000040101001f010100070100000701000001010000080100000201000001
-010000020100000901000001010000050100001a010100c30101000a0100000401030043
-010007010001050a07010001050202020103020205030800000808000002080000030800
-00030801000b0800000208000001080000020800009a08000100000a0100000501000007
-010000080100000601000001010000080100000201000001010000020100000901000001
-010000040100000401000021010100080100000601000001010000080100000201000001
-010000020100000901000001010000040100001b010100c30101000a0100000701000043
-010007010001050a07010001050202020103020205030800000808000002080000030800
-0003080000000800000a0800000208000001080000020800009a08000100000a01000005
-010000070100000901000005010000010100000801050000010500080100000101000003
-010000050100002101010009010000050100000101000008010500000105000801000001
-010000030100001c010100c30101000a0100000701000043010007010001050a07010001
-050202020103020205030800000808000001080100030800000308000001080000090800
-000108010001080100010800009a08000100000a01000005010000030100000201000003
-010100040100000401000001010000030101000601000005010000030101000301000001
-0100000201000006010000210101000a0100000401000001010000030101000601000005
-010000030101000301000001010000020100001d010100c30101000a0100000301000002
-01000043010007010001050a070100010502020201030202050308000009080100000800
-00040801000108000002080000090801000008000001080000000801009b08000100000a
-010000030104000201020004010100050100000401010004010100060100000501000003
-010100040101000201000007010000210101000b01000004010100040101000601000005
-0100000301010004010100020100001e010100c301010008010400020102004401000701
-0001050a07010001050202020103020205030800000c0800000e080500a808000100000a
-01000014010000060100002a01000008010000210101000c0100002a0100001f010100c3
-01010058010007010001050a070100010502020201030202050308000008080000020800
-00bd08000100000b010100100101003b0101002201010059010100c30101005801000701
-0001050a070100010502020201030202050308000009080200be08000100008101010059
-010100c301010058010007010001070c000105020202010302020503080000cb08000100
-008101010059010100c301010058010007010000070d0001050202020103020205030800
-00cb08000100008101010059010100c30101005801000701030e00010502020201030202
-0503080000cb08000100008101010059010100c30101005801000701030e000105020202
-010302020503080000cb08000100008101010059010100c30101005801000701030e0001
-0502020201030202050308cd01ff01ff01000701030e00010502020201030202050308cd
-01ff01ff01000701030e000105020202010302020503080000cb08000100008101010059
-010100c30101005801000701030e000105020202010302020503080000cb08000100000b
-0101004e0101002201010059010100c30101005801000701030e00010502020201030202
-0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a
-0100001f010100c30101005801000701030e000105020202010302020503080000110800
-000308000010080000010800009e08000100000a01000005010000070100000b01000004
-0101000d010000050100000a0101000201000007010000210101000b010000040101000d
-010000050100000a010100020100001e010100c301010008010400020102004401000701
-030e000105020202010302020503080000110800000308000010080000010800009e0800
-0100000a01000004010100060101000a01000004010000010100000b0101000401010009
-010000010100000201000006010000210101000a01000004010000010100000b01010004
-0101000901000001010000020100001d010100c301010008010000050100000201000043
-01000701030e000105020202010302020503080000090801000008000001080400010800
-00010800000a0801000008000001080000000801009b08000100000a0100000301000000
-01000005010000000100000901000005010000010100000a010000000100000301000000
-01000009010000010100000301000005010000210101000901000005010000010100000a
-0100000001000003010000000100000901000001010000030100001c010100c301010008
-01000005010000020100004301000701030e000105020202010302020503080000080800
-00010801000308000003080000000800000a0800000108010001080100010800009a0800
-0100000a0100000501000004010000010100000801000006010000010100000901000001
-010000020100000101000009010000010100000401000004010000210101000801000006
-01000001010000090100000101000002010000010100000901000001010000040100001b
-010100c30101000801030002010000020100004301000701030e00010502020201030202
-0503080000080800000208000003080000030801000b0800000208000001080000020800
-009a08000100000801010006010000030100000201000007010000070100000101000008
-010000020100000101000002010000090100000101000005010000040101001f01010007
-010000070100000101000008010000020100000101000002010000090100000101000005
-0100001a010100c30101000c010000020102004401000701030e00010502020201030202
-0503080000080800000208000003080000030801000b0800000208000001080000020800
-009a08000100000a01000005010000030100000201000008010000060100000101000008
-010000020100000101000002010000090100000101000004010000040100002101010008
-010000060100000101000008010000020100000101000002010000090100000101000004
-0100001b010100c30101000c01000001010000020100004301000701030e000105020202
-01030202050308000008080000020800000308000003080000000800000a080000020800
-0001080000020800009a08000100000a0100000501000003010500080100000501000001
-010000080105000001050008010000010100000301000005010000210101000901000005
-0100000101000008010500000105000801000001010000030100001c010100c301010008
-0100000201000001010000020100004301000701030e0001050202020103020205030800
-000808000001080100030800000308000001080000090800000108010001080100010800
-009a08000100000a01000005010000070100000301010004010000040100000101000003
-01010006010000050100000301010003010000010100000201000006010000210101000a
-010000040100000101000003010100060100000501000003010100030100000101000002
-0100001d010100c3010100080100000201000001010000020100004301000701030e0001
-050202020103020205030800000908010000080000040801000108000002080000090801
-000008000001080000000801009b08000100000a01000003010400050100000301010005
-010000040101000401010006010000050100000301010004010100020100000701000021
-0101000b010000040101000401010006010000050100000301010004010100020100001e
-010100c301010009010200030102004401000701030e0001050202020103020205030800
-000c0800000e080500a808000100000a01000014010000060100002a0100000801000021
-0101000c0100002a0100001f010100c30101005801000701030e00010502020201030202
-05030800000808000002080000bd08000100000b010100100101003b0101002201010059
-010100c30101005801000701030e00010502020201030202050308000009080200be0800
-0100008101010059010100c30101005801000701030e0001050202020103020205030800
-00cb08000100008101010059010100c30101005801000701030e00010502020201030202
-0503080000cb08000100008101010059010100c30101005801000701030e000105020202
-010302020503080000cb08000100008101010059010100c30101005801000701030e0001
-05020202010302020503080000cb08000100008101010059010100c30101005801000701
-030e00010502020201030202050308cd01ff01ff01000701030e00010502020201030202
-050308cd01ff01ff01000701030e000105020202010302020503080000cb080001000081
-01010059010100c30101005801000701030e000105020202010302020503080000cb0800
-0100000b0101004e0101002201010059010100c30101005801000701030e000105020202
-010302020503080000cb08000100000a0100001c0100002a01000008010000210101000c
-0100002a0100001f010100c30101005801000701030e0001050202020103020205030800
-00110800000308000010080000010800009e08000100000a01000005010000030104000b
-010000040101000d010000050100000a0101000201000007010000210101000b01000004
-0101000d010000050100000a010100020100001e010100c3010100090102000301020044
-01000701030e000105020202010302020503080000110800000308000010080000010800
-009e08000100000a01000004010100030100000e01000004010000010100000b01010004
-01010009010000010100000201000006010000210101000a01000004010000010100000b
-010100040101000901000001010000020100001d010100c3010100080100000201000001
-010000020100004301000701030e00010502020201030202050308000009080100000800
-000108040001080000010800000a0801000008000001080000000801009b08000100000a
-0100000301000000010000030100000d01000005010000010100000a0100000001000003
-010000000100000901000001010000030100000501000021010100090100000501000001
-0100000a0100000001000003010000000100000901000001010000030100001c010100c3
-0101000c010000050100004301000701030e000105020202010302020503080000080800
-00010801000308000003080000000800000a0800000108010001080100010800009a0800
-0100000a0100000501000003010300090100000601000001010000090100000101000002
-010000010100000901000001010000040100000401000021010100080100000601000001
-010000090100000101000002010000010100000901000001010000040100001b010100c3
-0101000c010000050100004301000701030e000105020202010302020503080000080800
-000208000003080000030801000b0800000208000001080000020800009a080001000008
-010100060100000701000007010000070100000101000008010000020100000101000002
-010000090100000101000005010000040101001f01010007010000070100000101000008
-0100000201000001010000020100000901000001010000050100001a010100c30101000a
-010100040101004401000701030e00010502020201030202050308000008080000020800
-0003080000030801000b0800000208000001080000020800009a08000100000a01000005
-010000070100000801000006010000010100000801000002010000010100000201000009
-010000010100000401000004010000210101000801000006010000010100000801000002
-01000001010000020100000901000001010000040100001b010100c30101000c01000005
-0100004301000701030e0001050202020103020205030800000808000002080000030800
-0003080000000800000a0800000208000001080000020800009a08000100000a01000005
-010000030100000201000009010000050100000101000008010500000105000801000001
-010000030100000501000021010100090100000501000001010000080105000001050008
-01000001010000030100001c010100c30101000c010000050100004301000701030e0001
-050202020103020205030800000808000001080100030800000308000001080000090800
-000108010001080100010800009a08000100000a01000005010000030100000201000003
-010100040100000401000001010000030101000601000005010000030101000301000001
-0100000201000006010000210101000a0100000401000001010000030101000601000005
-010000030101000301000001010000020100001d010100c3010100080100000201000001
-010000020100004301000701030e00010502020201030202050308000009080100000800
-00040801000108000002080000090801000008000001080000000801009b08000100000a
-010000030104000201020004010100050100000401010004010100060100000501000003
-010100040101000201000007010000210101000b01000004010100040101000601000005
-0100000301010004010100020100001e010100c301010009010200030102004401000701
-030e0001050202020103020205030800000c0800000e080500a808000100000a01000014
-010000060100002a01000008010000210101000c0100002a0100001f010100c301010058
-01000701030e0001050202020103020205030800000808000002080000bd08000100000b
-010100100101003b0101002201010059010100c30101005801000701030e000105020202
-01030202050308000009080200be08000100008101010059010100c30101005801000701
-030e000105020202010302020503080000cb08000100008101010059010100c301010058
-01000701030e000105020202010302020503080000cb08000100008101010059010100c3
-0101005801000701030e000105020202010302020503080000cb08000100008101010059
-010100c30101005801000701030e000105020202010302020503080000cb080001000081
-01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff
-01000701030e00010502020201030202050308cd01ff01ff01000701030e000105020202
-010302020503080000cb08000100008101010059010100c30101005801000701030e0001
-05020202010302020503080000cb08000100000b0101004e0101002201010059010100c3
-0101005801000701030e000105020202010302020503080000cb08000100000a0100001c
-0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701
-030e000105020202010302020503080000110800000308000010080000010800009e0800
-0100000a01000005010000040102000c010000040101000d010000050100000a01010002
-01000007010000210101000b010000040101000d010000050100000a010100020100001e
-010100c30101000a0101004b01000701030e000105020202010302020503080000110800
-000308000010080000010800009e08000100000a0100000401010003010000020100000a
-01000004010000010100000b010100040101000901000001010000020100000601000021
-0101000a01000004010000010100000b010100040101000901000001010000020100001d
-010100c301010009010000010100004a01000701030e0001050202020103020205030800
-0009080100000800000108040001080000010800000a0801000008000001080000000801
-009b08000100000a0100000301000000010000030100000d01000005010000010100000a
-010000000100000301000000010000090100000101000003010000050100002101010009
-01000005010000010100000a010000000100000301000000010000090100000101000003
-0100001c010100c301010009010000010100004a01000701030e00010502020201030202
-050308000008080000010801000308000003080000000800000a08000001080100010801
-00010800009a08000100000a01000005010000030100000c010000060100000101000009
-010000010100000201000001010000090100000101000004010000040100002101010008
-010000060100000101000009010000010100000201000001010000090100000101000004
-0100001b010100c301010009010000010100004a01000701030e00010502020201030202
-0503080000080800000208000003080000030801000b0800000208000001080000020800
-009a08000100000801010006010000030103000801000007010000010100000801000002
-0100000101000002010000090100000101000005010000040101001f0101000701000007
-01000001010000080100000201000001010000020100000901000001010000050100001a
-010100c301010009010000010100004a01000701030e0001050202020103020205030800
-00080800000208000003080000030801000b0800000208000001080000020800009a0800
-0100000a0100000501000003010000020100000801000006010000010100000801000002
-010000010100000201000009010000010100000401000004010000210101000801000006
-01000001010000080100000201000001010000020100000901000001010000040100001b
-010100c301010009010000010100004a01000701030e0001050202020103020205030800
-0008080000020800000308000003080000000800000a0800000208000001080000020800
-009a08000100000a01000005010000030100000201000009010000050100000101000008
-010500000105000801000001010000030100000501000021010100090100000501000001
-01000008010500000105000801000001010000030100001c010100c30101000901000001
-0100004a01000701030e0001050202020103020205030800000808000001080100030800
-000308000001080000090800000108010001080100010800009a08000100000a01000005
-010000030100000201000003010100040100000401000001010000030101000601000005
-0100000301010003010000010100000201000006010000210101000a0100000401000001
-010000030101000601000005010000030101000301000001010000020100001d010100c3
-01010009010000010100004a01000701030e000105020202010302020503080000090801
-0000080000040801000108000002080000090801000008000001080000000801009b0800
-0100000a0100000301040002010200040101000501000004010100040101000601000005
-01000003010100040101000201000007010000210101000b010000040101000401010006
-010000050100000301010004010100020100001e010100c30101000a0101004b01000701
-030e0001050202020103020205030800000c0800000e080500a808000100000a01000014
-010000060100002a01000008010000210101000c0100002a0100001f010100c301010058
-01000701030e0001050202020103020205030800000808000002080000bd08000100000b
-010100100101003b0101002201010059010100c30101005801000701030e000105020202
-01030202050308000009080200be08000100008101010059010100c30101005801000701
-030e000105020202010302020503080000cb08000100008101010059010100c301010058
-01000701030e000105020202010302020503080000cb08000100008101010059010100c3
-0101005801000701030e000105020202010302020503080000cb08000100008101010059
-010100c30101005801000701030e000105020202010302020503080000cb080001000081
-01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff
-01000701030e00010502020201030202050308cd01ff01ff01000701030e000105020202
-010302020503080000cb08000100008101010059010100c30101005801000701030e0001
-05020202010302020503080000cb08000100000b0101004e0101002201010059010100c3
-0101005801000701030e000105020202010302020503080000cb08000100000a0100001c
-0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701
-030e000105020202010302020503080000110800000308000010080000010800009e0800
-0100000a01000005010000030104000b010000040101000d010000050100000a01010002
-01000007010000210101000b010000040101000d010000050100000a010100020100001e
-010100c30101000a01000003010400030101003d01000701030e00010502020201030202
-0503080000110800000308000010080000010800009e08000100000a0100000401010003
-010000020100000a01000004010000010100000b01010004010100090100000101000002
-01000006010000210101000a01000004010000010100000b010100040101000901000001
-010000020100001d010100c3010100090101000301000006010000010100003c01000701
-030e00010502020201030202050308000009080100000800000108040001080000010800
-000a0801000008000001080000000801009b08000100000a010000030100000001000007
-0100000901000005010000010100000a0100000001000003010000000100000901000001
-0100000301000005010000210101000901000005010000010100000a0100000001000003
-010000000100000901000001010000030100001c010100c3010100080100000001000003
-01000006010000010100003c01000701030e000105020202010302020503080000080800
-00010801000308000003080000000800000a0800000108010001080100010800009a0800
-0100000a0100000501000006010000090100000601000001010000090100000101000002
-010000010100000901000001010000040100000401000021010100080100000601000001
-010000090100000101000002010000010100000901000001010000040100001b010100c3
-0101000a0100000301030003010000010100003c01000701030e00010502020201030202
-0503080000080800000208000003080000030801000b0800000208000001080000020800
-009a08000100000801010006010000060100000801000007010000010100000801000002
-0100000101000002010000090100000101000005010000040101001f0101000701000007
-01000001010000080100000201000001010000020100000901000001010000050100001a
-010100c30101000a0100000701000002010000010100003c01000701030e000105020202
-010302020503080000080800000208000003080000030801000b08000002080000010800
-00020800009a08000100000a010000050100000601000009010000060100000101000008
-010000020100000101000002010000090100000101000004010000040100002101010008
-010000060100000101000008010000020100000101000002010000090100000101000004
-0100001b010100c30101000a0100000701000002010000010100003c01000701030e0001
-0502020201030202050308000008080000020800000308000003080000000800000a0800
-000208000001080000020800009a08000100000a01000005010000050100000b01000005
-010000010100000801050000010500080100000101000003010000050100002101010009
-010000050100000101000008010500000105000801000001010000030100001c010100c3
-0101000a010000030100000201000002010000010100003c01000701030e000105020202
-010302020503080000080800000108010003080000030800000108000009080000010801
-0001080100010800009a08000100000a0100000501000005010000050101000401000004
-010000010100000301010006010000050100000301010003010000010100000201000006
-010000210101000a01000004010000010100000301010006010000050100000301010003
-01000001010000020100001d010100c30101000a01000003010000020100000201000001
-0100003c01000701030e0001050202020103020205030800000908010000080000040801
-000108000002080000090801000008000001080000000801009b08000100000a01000003
-010400030100000501010005010000040101000401010006010000050100000301010004
-0101000201000007010000210101000b0100000401010004010100060100000501000003
-01010004010100020100001e010100c30101000801040002010200040101003d01000701
-030e0001050202020103020205030800000c0800000e080500a808000100000a01000014
-010000060100002a01000008010000210101000c0100002a0100001f010100c301010058
-01000701030e0001050202020103020205030800000808000002080000bd08000100000b
-010100100101003b0101002201010059010100c30101005801000701030e000105020202
-01030202050308000009080200be08000100008101010059010100c30101005801000701
-030e000105020202010302020503080000cb08000100008101010059010100c301010058
-01000701030e000105020202010302020503080000cb08000100008101010059010100c3
-0101005801000701030e000105020202010302020503080000cb08000100008101010059
-010100c30101005801000701030e000105020202010302020503080000cb080001000081
-01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff
-01000701030e00010502020201030202050308cd01ff01ff010007010010050202020103
-02020503080000cb08000100008101010059010100c301010058010007010300000c0700
-000105020202010302020503080000cb08000100000b0101004e01010022010100590101
-00c3010100580100070103000001050807010300000105020202010302020503080000cb
-08000100000a0100001c0100002a01000008010000210101000c0100002a0100001f0101
-00c301010058010007010301000105070701030000010502020201030202050308000011
-0800000308000010080000010800009e08000100000a01000005010000040102000c0100
-00040101000d010000050100000a0101000201000007010000210101000b010000040101
-000d010000050100000a010100020100001e010100c30101000801040001010400430100
-070103010001050607010301000105020202010302020503080000110800000308000010
-080000010800009e08000100000a0100000401010003010000020100000a010000040100
-00010100000b0101000401010009010000010100000201000006010000210101000a0100
-0004010000010100000b010100040101000901000001010000020100001d010100c30101
-000801000002010000010100000201000043010007010302000105050701030100010502
-020201030202050308000009080100000800000108040001080000010800000a08010000
-08000001080000000801009b08000100000a010000030100000001000003010000020100
-000901000005010000010100000a01000000010000030100000001000009010000010100
-000301000005010000210101000901000005010000010100000a01000000010000030100
-00000100000901000001010000030100001c010100c30101000c01000005010000430100
-070103020001050407010302000105020202010302020503080000080800000108010003
-08000003080000000800000a0800000108010001080100010800009a08000100000a0100
-000501000003010000020100000801000006010000010100000901000001010000020100
-000101000009010000010100000401000004010000210101000801000006010000010100
-00090100000101000002010000010100000901000001010000040100001b010100c30101
-000b01000005010000440100070103030001050307010302000105020202010302020503
-080000080800000208000003080000030801000b0800000208000001080000020800009a
-080001000008010100060100000401020008010000070100000101000008010000020100
-000101000002010000090100000101000005010000040101001f01010007010000070100
-0001010000080100000201000001010000020100000901000001010000050100001a0101
-00c30101000b010000050100004401000701030300010502070103030001050202020103
-02020503080000080800000208000003080000030801000b080000020800000108000002
-0800009a08000100000a0100000501000003010000020100000801000006010000010100
-000801000002010000010100000201000009010000010100000401000004010000210101
-000801000006010000010100000801000002010000010100000201000009010000010100
-00040100001b010100c30101000b01000005010000440100070103040001050107010303
-00010502020201030202050308000008080000020800000308000003080000000800000a
-0800000208000001080000020800009a08000100000a0100000501000003010000020100
-000901000005010000010100000801050000010500080100000101000003010000050100
-002101010009010000050100000101000008010500000105000801000001010000030100
-001c010100c30101000a0100000501000045010007010304000105000701030400010502
-020201030202050308000008080000010801000308000003080000010800000908000001
-08010001080100010800009a08000100000a010000050100000301000002010000030101
-000401000004010000010100000301010006010000050100000301010003010000010100
-000201000006010000210101000a01000004010000010100000301010006010000050100
-00030101000301000001010000020100001d010100c30101000a01000005010000450100
-070103050000070203040001050202020103020205030800000908010000080000040801
-000108000002080000090801000008000001080000000801009b08000100000a01000003
-010400020102000401010005010000040101000401010006010000050100000301010004
-0101000201000007010000210101000b0100000401010004010100060100000501000003
-01010004010100020100001e010100c30101000a01000005010000450100070103050000
-070103050001050202020103020205030800000c0800000e080500a808000100000a0100
-0014010000060100002a01000008010000210101000c0100002a0100001f010100c30101
-0058010007010306070103050001050202020103020205030800000808000002080000bd
-08000100000b010100100101003b0101002201010059010100c301010058010007010306
-0700030600010502020201030202050308000009080200be080001000081010100590101
-00c30101005801000701001005020202010302020503080000cb08000100008101010059
-010100c3010100580100070000110502020201030202050207ff07ff07d3051102020103
-0202050207ff07ff07d20000051102020103020205020701030d0000030000ff00ff00af
-03000001030c0001051102020103020205020701030b00010700030000ff00ff00ae0700
-03000003030a00010511020201030202050207010309000207010300000105ff05ff05ab
-0701030000050308000105110202010302020502070103070003050007010300000105ff
-05ff05ab0701030000010501000303060001051102020103020205020701030500030502
-07010300000105ff05ff05ab070103000001050300030304000105110202010302020502
-070103030003050407010300000105ff05ff05ab07010300000105050003030200010511
-0202010302020502070103010003050607010300000105ff05ff05ab0701030000010507
-000303000001051102020103020205020705050807010300000105ff05ff05ab07010300
-000105080703000105110202010302020502070103010703050607010300000105ff05ff
-05ab07010300000105070703030000010511020201030202050207010303070305040701
-0300000105ff05ff05ab0701030000010505070303020001051102020103020205020701
-03050703050207010300000105ff05ff05ab070103000001050307030304000105110202
-010302020502070103070703050007010300000105ff05ff05ab07010300000105010703
-03060001051102020103020205020701030907040300000105ff05ff05ab070103000001
-070303080001051102020103020205020701030b07020300000107ff07ff07ad03000001
-0701030a0001051102020101000405020701030d07000300000007ff07ff07ae03000000
-0700030c000105110005020204000502070100ff00ff00d1051100000202040000000202
-04000502070000ff00ff00d2051100000202040000000202040005ff05ff05e800000202
-040000000202040005ff05ff05e800000202040000000202040005ff05ff05e800000202
-0400000002020400000502ff02ff02dc00060202040000000208040002ff02ff02dc0000
-0208040000000208040002ff02ff02dc00000208040000000208040001ff01ff01dc0000
-020804000000040901ff01ff01dc00000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 0 377 205
-%%EOF
diff --git a/lib/tv/doc/src/tv_table_browser.gif b/lib/tv/doc/src/tv_table_browser.gif
deleted file mode 100644
index 9c7cb042ff..0000000000
--- a/lib/tv/doc/src/tv_table_browser.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_table_browser.ps b/lib/tv/doc/src/tv_table_browser.ps
deleted file mode 100644
index e2b195a2e5..0000000000
--- a/lib/tv/doc/src/tv_table_browser.ps
+++ /dev/null
@@ -1,2024 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_browser.eps)
-%%CreationDate: (Mon Mar 19 17:15:30 2001)
-%%BoundingBox: 0 0 380 315
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 380 315
-userdict begin
-%%BeginData:
-DisplayImage
-0 0
-380.000000 315.000000
-12
-760 630
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-ff0000
-990000
-7f7f7f
-999999
-ff7f7f
-000000
-000000
-000000
-000000
-000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff
-02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202
-04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff
-02d500000202040000000202040002080000020d04000289010302110103023201020258
-0102020c010102010101021e010102290101020601010208010102310101022a01010230
-0101029600000202040000000202040002080000020d0400028901010202010702000101
-0203010102010101020e01050200010702010103020d0101020401010204010302030103
-020e010302060103020301030203010302060103020b0101020a01010202010102190100
-02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101
-020c0104021e0101029600000202040000000202040002080000020d0400028901010205
-0101020301010203010102010101020e0101020701010203010102010101020c01010202
-010302030101020101010201010102010101020801010201010102010101020401010201
-01010201010102010101020101010201010102040101020101010201010102060101020a
-0101020201010218010102210101020b01010206010102090101021b010202020100020d
-01010238010102020101021d010102960000020204000000020204000208000002020406
-020304000289010102050101020301010203010102010101020e01010207010102030101
-020501010209010102030101020701010201010102010101020601020202010102010101
-020801010201010102010101020101010201010102040101020101010202010202030101
-020a01010203010102020103020301030202010302010104020101010202010302030101
-02000101020a0104020101030203010102000101020301010202010302030101021a0100
-020001010201010002020103020301040202010302020101020901010200010102010101
-020301030203010102020101020001010202010102010103020201010200010102010101
-020301030202010102000101020101010202010302020101020201010285000002020400
-000004030208000002020400030400000203040002890101020501010204010102020100
-02020101020e0101020701010203010202040101020a0100020301010207010102010101
-020101010205010102040101020101010208010102010101020101010201010102010101
-02040101020101010204010102020100020b010102030101020101010201010102010101
-020101010200010102010101020101010203010102010101020101010202010202000101
-020a01010202010102010101020201020200010102020101020101010201010102020101
-021a01000200010102010100020101010201010102010101020101010201010102010101
-020101010209010202000102020001010201010102010101020201010202010202000101
-020101010200010102000101020201020200010202000101020101010201010102010101
-0200010102010101020101010201010102010101020201010285000004030101020b0000
-0203040003020000020404000289010102050101020401010201010102020101020e0104
-0204010102040103020d0101020401010205010202020101020101010204010102050101
-020101010207010102020101020101010202010402040101020101010205010102020101
-020901010203010102010101020101010201010102080101020101010203010102010101
-020101010202010102010101020a01010206010102020101020101010202010102010101
-0201010102020101021a0100020001020200010002010101020101010201010102010101
-0201010102010101020d0101020101010201010102050101020201010202010102010101
-020101010200010102000101020201010201010102010101020501010201010202030101
-0201010102010101020101010202010002890103020b0000020304000302000002040400
-0289010102050101020501010200010002030101020e01010207010102060102020e0100
-020301010207010102010101020101010205010102040101020101010206010102030101
-020101010205010102040101020101010204010102020100020b01010203010102010101
-020101010201010102050104020101010203010102010101020101010202010102010101
-020a0101020301040202010102010101020201010201010502020101021a010002010101
-020001000201010102010101020101010201010102010105020d01010201010102010101
-020201040202010102020101020101010201010102000101020001010202010102010101
-0201010102020104020101010204010102010105020201010200010102890103020b0000
-02040400030000000205040002890101020501010205010302030101020e010102070101
-02070101020d010102030101020701010201010102010101020601020202010102010101
-0205010102040101020101010205010102040101020101010202010202030101020a0101
-020301010201010102010101020101010204010102010101020101010203010102010101
-020101010202010102010101020a01010202010102010101020201010201010102020101
-0201010102060101021a0100020201020201010102010101020101010201010102010101
-021101010201010102010101020101010201010102020101020201010201010102010101
-020101010200010102010101020101010201010102010101020101010201010102040101
-020101010206010102000100028a0103020b000002040400030000000205040002890101
-020501010206010102040101020e01010207010102030101020101010201010102080101
-020401010203010102010101020101010201010102010101020401010201010102010101
-020101010200010502010101020101010201010102010101020101010200010102010101
-0201010102060101020a0101020201010201010102010101020101010202010002000101
-02010101020101010203010102010101020101010202010102010101020a010102020101
-02010101020201010201010102020101020101010202010002010101021b010002020102
-020101010201010102010101020001020201010102020100020101010209010102010101
-020101010201010102010101020201010202010102010101020201010207010102010101
-0201010102010101020101010201010102040101020101010202010002030102028a0103
-020b0000020500000206040002890101020501010206010102040101020e010502030101
-020401030202010102080101020401010204010302030103020201010209010302020101
-0200010502020103020301030202010102010103020b0101020a01010202010102020103
-0203010302020102020001010201010202010101020201030203010102010101020b0102
-020101020200010102010104020301010202010302020101021b01000203010102020103
-020301010200010102020103020201010209010102010101020101010202010202000101
-020101010202010102010101020301050202010102010101020101010202010202000101
-02000101020401010202010302040101028b0103020b0000020d04000289010302110103
-0232010202190100023d0102020c01010237010602230101029e0101028c0103020b0000
-020d040002f2010002ff02540101028c0103020b0000020d040002ff02ff02d70103020c
-040d02ff02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec0400
-020201030202000004ff04ff04ec0202010302ff02ff02f3010302020500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000202010302020000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000202010302020500000005ff05ff05ea01000202010302020000
-05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000
-05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000
-050c06040504060005030602051f06040505060005040600050406000519060005020600
-0504060005270602050b06000506060005ff05ff05080600050206000509060205130100
-050002020103020205000000050b0600050f0600051f060005090600050a060005190600
-05020600052c060005020600050a060005ff05ff0510060005020600050b060005140100
-0202010302020000050c0600050606020505060005030602051806000506060105000600
-050206020502060405170600050206000502060205030602050206000502060005170600
-050206000501060005000601050206040502060205030602050206000500060105030602
-05ff05f306000502060005020602050506000502060005000601050c0100050002020103
-020205000000050b06000508060005050600050206000502060005170600050506000501
-06010504060005040600051a060005000600050506000502060005020600050106000502
-060005170600050206000501060105010600050306000506060005020600050206000501
-060105010600050106000502060005ff05f2060005020600050106000502060005040600
-0502060105010600050c01000202010302020000050c0603050506000505060005020600
-050206000517060305020600050206000504060005040600051a06000500060005050600
-050206000502060005010600050006000500060005170600050206000501060005020600
-0503060005060600050206000502060005010600050206000501060005ff05f606040501
-060005020600050406000502060005020600050b0100050002020103020205000000050b
-06000508060005050600050206040517060005050600050206000504060005040600051a
-060005000600050506000502060405010600050006000500060005170600050206000501
-0600050206000503060005060600050206000502060005010600050206000502060205ff
-05f306000502060005010604050406000502060005020600050c01000202010302020000
-050c0600050806000505060005020600051b060005050600050206000504060005040600
-051b06000506060005020600050506000500060005000600051706000502060005010600
-050206000503060005060600050206000502060005010600050206000505060005ff05f2
-06000502060005010600050806000502060005020600050b010005000202010302020500
-0000050b0600050806000505060005020600050206000517060005050600050106010504
-060005040600051b06000506060005020600050206000501060005000600050006000517
-060005020600050106010501060005030600050606000502060005020600050106000502
-0600050106000502060005ff05f206000502060005010600050206000504060005020601
-05010600050c01000202010302020000050c060005080600050506000503060205180604
-050206010500060005040600050506010519060005060600050306020503060005000600
-051906020502060005000601050506010504060005030602050206000502060005020602
-05ff05f306000502060005020602050506000502060005000601050c0100050002020103
-02020500000005a8060005ff05ff052e0600051001000202010302020000050b0606052a
-0606052a0606052a06060500060005ff05ff05180606050e0600050f0100050002020103
-020205000000050a0606052a0606052a0606052a06060500060005ff05ff05180606050e
-060005100100020201030202000005ff05ff05ea010005000202010302020500000005ff
-05ff05ea0100020201030202000005ff05ff05ea01000500020201030202050000000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100020201030202000005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-01000500010005000100050002020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-020201030202053600000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000051a00000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050100000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050100000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000051a00000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000051a00000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000051a00000500000005000000050000000500000005000000050000000500
-00000500000005000000050000000500000005ff05a50202010302020535000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500010005180000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000100000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-010000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050001000518000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500010005180000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000100051800000500000005000000050000000500000005000000
-0500000005000000050000000500000005000000050000000500010005ff05a402020103
-02020536000005140100051a00000514010005010000051401000501000005140100051a
-000005140100051a000005140100051a00000514010005ff05a502020103020205350000
-051601000518000005160100000005160100000005160100051800000516010005180000
-05160100051800000516010005ff05a40202010302020536000005140100051a00000514
-010005010000051401000501000005140100051a000005140100051a000005140100051a
-00000514010005ff05a50202010302020535000005050602050306020506010005180000
-051601000000051601000000051601000518000005160100051800000516010005180000
-0516010005ff05a402020103020205360000050406020503060205050100051a00000514
-010005010000051401000501000005140100051a00000506060405080100051a00000508
-060105090100051a0000050806030507010005ff05a50202010302020535000005040604
-050106040505010005180000051006000504010000000510060005040100000005040600
-051001000518000005050608050701000518000005080603050901000518000005070607
-0506010005ff05a402020103020205360000050306000501060105010600050106010504
-0100051a0000050f06000503010005010000050f0600050301000501000005030600050f
-0100051a00000503060a05050100051a00000507060305080100051a0000050506030501
-06030504010005ff05a5020201030202053500000503060d0504010005180000050d0600
-0501060005040100000005040600050a06000504010000000504060005010600050d0100
-051800000504060305020603050601000518000005090601050a01000518000005060602
-050306020505010005ff05a4020201030202053600000501060005000603050006020500
-060405020100051a0000050c060005010600050301000501000005030600050a06000503
-0100050100000503060005010600050c0100051a0000050206030504060305040100051a
-000005140100051a000005050602050306020504010005ff05a502020103020205350000
-050206000500060305000602050006040503010005180000050a06000501060005010600
-050401000000050406000504060005040600050401000000050406000501060005010600
-050a01000518000005030602050306070503010005180000050706040509010005180000
-05070601050206020506010005ff05a40202010302020536000005010600050006030500
-06020500060405020100051a000005090600050106000501060005030100050100000503
-06000504060005040600050301000501000005030600050106000501060005090100051a
-0000050206020504060505030100051a00000507060305080100051a0000050a06020506
-010005ff05a5020201030202053500000502060005000603050006020500060405030100
-051800000507060005010600050106000501060005040100000005040600050406000501
-060005010600050401000000050406000501060005010600050106000507010005180000
-05030602050506030505010005180000050906020509010005180000050a060205080100
-05ff05a40202010302020536000005010600050006070500060405020100051a00000506
-060005010600050106000501060005030100050100000503060005040600050106000501
-060005030100050100000503060005010600050106000501060005060100051a00000502
-06030505060105050100051a00000508060205080100051a0000050806020508010005ff
-05a502020103020205350000050206000500060405010600050006040503010005180000
-050406000501060005010600050106000501060005040100000005040600050106000501
-060005010600050106000504010000000504060005010600050106000501060005010600
-050401000518000005040603050d01000518000005090602050901000518000005090602
-0509010005ff05a402020103020205360000050106060501060605020100051a00000503
-060005010600050106000501060005010600050301000501000005030600050106000501
-060005010600050106000503010005010000050306000501060005010600050106000501
-060005030100051a00000503060905060100051a00000508060205080100051a00000514
-010005ff05a5020201030202053500000502060005000602050506000500060205030100
-051800000504060005010600050106000501060005010600050401000000050406000501
-060005010600050106000501060005040100000005040600050106000501060005010600
-050106000504010005180000050506070508010005180000050806040508010005180000
-050906020509010005ff05a4020201030202053600000501060005000602050506000500
-060205020100051a00000503060005010600050106000501060005010600050301000501
-000005030600050106000501060005010600050106000503010005010000050306000501
-060005010600050106000501060005030100051a00000506060405080100051a00000506
-060605060100051a0000050806020508010005ff05a50202010302020535000005020604
-050506040503010005180000051601000000051601000000051601000518000005160100
-0518000005160100051800000516010005ff05a40202010302020536000005140100051a
-00000514010005010000051401000501000005140100051a000005140100051a00000514
-0100051a00000514010005ff05a502020103020205350000051601000518000005160100
-000005160100000005160100051800000516010005180000051601000518000005160100
-05ff05a40202010302020536000005140100051a00000514010005010000051401000501
-000005140100051a000005140100051a000005140100051a00000514010005ff05a50202
-010302020535000005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005180000050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-000005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010000000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000518000005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005180000050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100051800000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005ff05a402020103020205360100050001000500010005000100050001000500
-0100050001000500010005000100050001000500010005000100051a0100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005010100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005010100050001000500010005000100050001000500
-0100050001000500010005000100050001000500010005000100051a0100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0100051a0100050001000500010005000100050001000500010005000100050001000500
-0100050001000500010005000100051a0100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005ff05a5020201030202
-05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
-05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
-05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
-05ff05ff05ed02020103020205ff05ff05ed020201030202050301ff01ff01e505030202
-01030202050301ff01ff01d1050000000500000005000000050000000500000005000000
-050000000500000005000000050001000503020201030202050301ff01ff01d100000500
-000005000000050000000500000005000000050000000500000005000000050001010503
-020201030202050301020aff0aff0acb010205000000050e010005000100050302020103
-0202050301020aff0aff0aca000001020000051001010503020201030202050301020a01
-00ff00ff00c9010205000000050e0100050001000503020201030202050301020a0100ff
-00ff00c901020000051001010503020201030202050301020a0100ff00ff00c901020500
-0000050e0100050001000503020201030202050301020a0100ff00ff00c9010200000510
-01010503020201030202050301020a0100ff00ff00c9010205000000050e010005000100
-0503020201030202050301020a0100ff00ff00c9010200000502010a0502010105030202
-01030202050301020a0100ff00ff00c90102050000000502010805020100050001000503
-020201030202050301020a0100ff00ff00c9010200000504010605040101050302020103
-0202050301020a0100ff00ff00c901020500000005040104050401000500010005030202
-01030202050301020a0100ff00ff00c90102000005060102050601010503020201030202
-050301020a0100ff00ff00c9010205000000050601000506010005000100050302020103
-0202050301020a0100ff00ff00c901020000051001010503020201030202050301020a01
-00ff00ff00c9010205000000050e0100050001000503020201030202050301020a0100ff
-00ff00c901020000051001010503020201030202050301020a0100ff00ff00c901020500
-0000050e0100050001000503020201030202050301020a0100ff00ff00c9010200000510
-01010503020201030202050301020a0100ff00ff00c9010205000000050e010005000100
-0503020201030202050301020a0000ff00ff00ca01020000051001010503020201030202
-050301ff01ff01d105000000050001000500010005000100050001000500010005000100
-0500010005000100050001000503020201030202050301ff01ff01d10000050001000500
-010005000100050001000500010005000100050001000500010005000101050302020103
-0202050301ff01ff01e5050302020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-020201030202050301ff01ff01e505030202010302020503010005ff05ff05970100054a
-01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103
-0202050301000562010705ff05ff052c0100054a01000503020201030202050301000561
-01020503010205ff05ff052b0100054a0100050302020103020205030100056101010505
-010105ff05ff052b0100054a0100050302020103020205030100056101020503010205ff
-05ff052b0100054a01000503020201030202050301000562010705ff05ff052c0100054a
-01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103
-0202050301000565010105ff05ff052f0100054a01000503020201030202050301000565
-010105ff05ff052f0100054a01000503020201030202050301000565010105ff05ff052f
-0100054a01000503020201030202050301000565010105ff05ff052f0100054a01000503
-020201030202050301000565010105ff05ff052f0100054a010005030202010302020503
-01000565010105ff05ff052f0100054a0100050302020103020205030100056101010500
-010205ff05ff052f0100054a0100050302020103020205030100056101010500010205ff
-05ff052f0100054a01000503020201030202050301000561010505ff05ff052f0100054a
-01000503020201030202050301000561010505ff05ff052f0100054a0100050302020103
-020205030100056101020500010105ff05ff052f0100054a010005030202010302020503
-010005ff05ff05970100054a01000503020201030202050301ff01ff0199054a01000503
-020201030202050301000536000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000009040500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000904050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000090405000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000009040500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000904050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500000005000000050000000500000005000000050000000904050000000100050c0100
-050001000500010005000100050001000500010005000100050001000500010005000100
-052a01000503020201030202050301000535000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000903
-010000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050009030100000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500090301000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000903010000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050009030100000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-05000000050009030100000005000100050d010005000100050001000500010005000100
-05000100050001000500010005000100052b010005030202010302020503010005360000
-055e01000901010205000000055c01000901010205000000055c01000901010205000000
-055c01000901010205000000055c01000901010205000000055c01000901010205000000
-0100050c0100050000000500000005000000050000000500000005000000050000000500
-000005000000052a010005030202010302020503010005350000052d0100052f01000500
-090101020000052b0102052d01000500090101020000052b0102052d0100050009010102
-0000052d0100052d01000500090101020000052a0104052c01000500090101020000052c
-0102052c0100050009010102000005000100050d01000500000005000000050000000500
-000005000000050000000500000005000000052b01000503020201030202050301000536
-0000052a01020530010009010102050000000529010005020100052d0100090101020500
-00000529010005020100052d01000901010205000000052b0101052e0100090101020500
-000005290100053101000901010205000000052a01000530010009010102050000000100
-050c010005000000050c010005000000052a010005030202010302020503010005350000
-052d0100052f01000500090101020000052a010005020100052c01000500090101020000
-052e0100052c01000500090101020000052b010005000100052d01000500090101020000
-052a0100053001000500090101020000052a010005300100050009010102000005000100
-050d010005000000050a010005000000052b010005030202010302020503010005360000
-052c01000530010009010102050000000529010005020100052d01000901010205000000
-052d0100052d01000901010205000000052a010005000100052e01000901010205000000
-05290100053101000901010205000000052901000531010009010102050000000100050c
-010005000000050c010005000000052a010005030202010302020503010005350000052d
-0100052f01000500090101020000052d0100052d01000500090101020000052c0101052d
-01000500090101020000052a010005010100052d01000500090101020000052a0103052d
-01000500090101020000052a0103052d0100050009010102000005000100050d01000500
-0000050a010005000000052b010005030202010302020503010005360000052c01000530
-01000901010205000000052b0100052f01000901010205000000052d0100052d01000901
-0102050000000528010005020100052e01000901010205000000052d0100052d01000901
-0102050000000529010005020100052d010009010102050000000100050c010005000000
-050c010005000000052a010005030202010302020503010005350000052d0100052f0100
-0500090101020000052b0100052f01000500090101020000052e0100052c010005000901
-0102000005290105052c01000500090101020000052e0100052c01000500090101020000
-052a010005020100052c0100050009010102000005000100050d010005000000050a0100
-05000000052b010005030202010302020503010005360000052c01000530010009010102
-050000000529010005020100052d010009010102050000000529010005020100052d0100
-0901010205000000052c0100052e010009010102050000000528010005030100052d0100
-09010102050000000529010005020100052d010009010102050000000100050c01000500
-0000050c010005000000052a010005030202010302020503010005350000052b0104052d
-01000500090101020000052a0104052c01000500090101020000052b0102052d01000500
-090101020000052c0102052c01000500090101020000052a0103052d0100050009010102
-0000052b0102052d0100050009010102000005000100050d010005000000050a01000500
-0000052b010005030202010302020503010005360000055e01000901010205000000055c
-01000901010205000000055c01000901010205000000055c01000901010205000000055c
-01000901010205000000055c010009010102050000000100050c010005000000050c0100
-05000000052a010005030202010302020503010005350000055e01000500090101020000
-055c01000500090101020000055c01000500090101020000055c01000500090101020000
-055c01000500090101020000055c0100050009010102000005000100050d010005000000
-050a010005000000052b010005030202010302020503010005360000055e010009010102
-05000000055c01000901010205000000055c01000901010205000000055c010009010102
-05000000055c01000901010205000000055c010009010102050000000100050701000503
-010005000000050c010005000000052a010005030202010302020503010005350000055e
-01000500090101020000055c01000500090101020000055c01000500090101020000055c
-01000500090101020000055c01000500090101020000055c010005000901010200000500
-0100050601010504010005000000050a010005000000052b010005030202010302020503
-010005360000055e01000901010205000000055c01000901010205000000055c01000901
-010205000000055c01000901010205000000055c01000901010205000000055c01000901
-010205000000010005050100050001000503010005000000050001000500010005000100
-0500010005000100050001000500010005000000052a0100050302020103020205030100
-05350000055e01000500090101020000055c01000500090101020000055c010005000901
-01020000055c01000500090101020000055c01000500090101020000055c010005000901
-010200000500010005070100050401000500000005000000050000000500000005000000
-050000000500000005000000052b01000503020201030202050301000536000005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010009010102050000000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100090101020500000005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000901010205000000050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010009010102050000000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-090101020500000005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000901010205000000010005070100050301000500
-0000050c010005000000052a010005030202010302020503010005350000050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050009000103000005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500090001030000050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000900010300000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050009000103000005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-090001030000050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000900010300000500010005070100050401000500
-0000050a010005000000052b01000503020201030202050301000b360063010000630100
-0063010000630100006301000063010000020100050701000503010005000000050c0100
-05000000052a01000503020201030202050301000b350800006301000063010000630100
-00630100006301000063010000020100050701000504010005000000050a010005000000
-052b01000503020201030202050301000b01073208010063010000630100006301000063
-0100006301000063010000020100050501040501010005000000050c010005000000052a
-01000503020201030202050301000b010732080100630100006301000063010000630100
-006301000063010000020100050d010005000000050a010005000000052b010005030202
-01030202050301000b010717010007190801006301000063010000630100006301000063
-01000063010000020100050c010005000000050c010005000000052a0100050302020103
-0202050301000b010715010207190801000f010200030102004901000007010000230100
-000b010200030102001f01000063010000630100006301000063010000020100050d0100
-05000000050a010005000000052b01000503020201030202050301000b01071701000719
-08010011010000050100004901000007010000230100000d010000050100001f01000063
-010000630100006301000063010000020100050c010005000000050c010005000000052a
-01000503020201030202050301000b010717010007190801000801020005010000050100
-000301020042010000070100000001010003010200020100000001010002010000000101
-000301020002010400010100000201000004010000050100001f01000063010000630100
-006301000063010000020100050d010005000000050a010005000000052b010005030202
-01030202050301000b010717010007190801000701000002010000040100000501000002
-010000020100004101000007010100010100000101000002010000010101000101000001
-01010001010000010100000201000003010000030100000201000004010000050100001f
-01000063010000630100006301000063010000020100050c010005000000050c01000500
-0000052a01000503020201030202050301000b0107170100071908010007010000020100
-000401000005010000020100000201000041010000070100000201000001010000020100
-000101000005010000020100000101000007010000030100000201000004010000050100
-001f01000063010000630100006301000063010000020100050d010005000000050a0100
-05000000052b01000503020201030202050301000b010717010007190801000701000002
-010000040100000501000002010400410100000701000002010000010100000201000001
-01000005010000020100000201020004010000030100000201000004010000050100001f
-01000063010000630100006301000063010000020100050c010005000000050001000500
-0100050001000500010005000100050001000500010005000000052a0100050302020103
-0202050301000b0107170100071908010007010000020100000401000005010000020100
-004501000007010000020100000101000002010000010100000501000002010000050100
-0003010000030100000201000004010000050100001f0100006301000063010000630100
-0063010000020100050d0100050001000500010005000100050001000500010005000100
-0500010005000000052b01000503020201030202050301000b0107150104071708010007
-010000020100000401000005010000020100000201000041010000070100000201000001
-010000020100000101000005010000020100000101000002010000030100000301000001
-01010004010000050100001f01000063010000630100006301000063010000020100050c
-01000500030e05000000052a01000503020201030202050301000b010732080100080102
-000501000005010000030102004201000007010000020100000201020002010000050100
-00020100000201020005010100020101000001000004010000050100001f010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b01073208010063010000630100006301000063010000630100006301000002
-0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
-00630100006301000063010000630100006301000063010000020100050d0100030e0000
-052b01000503020201030202050301000b01073208010063010000630100006301000063
-0100006301000063010000020100050c01000500030e05000000052a0100050302020103
-0202050301000b0107320801006301000063010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000b01073208010063
-0100006301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a01000503020201030202050301000b0108340063010000630100006301000063
-0100006301000063010000020100050d0100030e0000052b010005030202010302020503
-01000b00083501ff01ff0161050c01000500030e05000000052a01000503020201030202
-050301000b3600630100006301000063010000630100006301000063010000020100050d
-0100030e0000052b01000503020201030202050301000b35080000630100006301000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b01073208010063010000630100006301000063010000630100
-0063010000020100050d0100030e0000052b01000503020201030202050301000b010732
-080100630100006301000063010000630100006301000063010000020100050c01000500
-030e05000000052a01000503020201030202050301000b01071601020718080100630100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-0503020201030202050301000b01071501000702010007170801001f0100000301020003
-010200340100000f0102005001000063010000630100006301000063010000020100050c
-01000500030e05000000052a01000503020201030202050301000b010715010007020100
-071708010026010000050100003401000011010000500100006301000063010000630100
-0063010000020100050d0100030e0000052b01000503020201030202050301000b010715
-010007020100071708010008010100000100000101000002010000010100000001010003
-0102000501000005010000030102002d0100000801020005010000020100000201000002
-010200030102000301020002010000000101002d01000063010000630100006301000063
-010000020100050c01000500030e05000000052a01000503020201030202050301000b01
-071801000718080100070100000101010001010000020100000101010001010000040100
-00050100000501000002010000020100002c010000070100000201000004010000020100
-000201000001010000020100000101000002010000010100000201000001010100010100
-002c01000063010000630100006301000063010000020100050d0100030e0000052b0100
-0503020201030202050301000b0107170100071908010007010000020100000101000002
-0100000101000002010000040100000501000005010000060100002c0100000701000008
-01000002010000020100000101000005010000050100000201000001010000020100002c
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-01000503020201030202050301000b0107160100071a0801000701000002010000010100
-00020100000101000002010000040100000501000005010000030103002c010000080102
-0005010000020100000201000002010200030102000201040001010000020100002c0100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-01030202050301000b010715010007020100071708010007010000020100000101000002
-010000010100000201000004010000050100000501000002010000020100002c0100000b
-01000004010000020100000201000005010000050100000101000005010000020100002c
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-01000503020201030202050301000b010715010407170801000701000001010100010100
-0001010100010100000201000004010000050100000501000002010000020100002c0100
-000701000002010000040100000201000001010100010100000201000001010000020100
-00010100000201000001010000020100002c010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000b01073208010008
-010100000100000201010000010000010100000201000004010000050100000501000003
-0103002c0100000801020005010000030101000001000002010200030102000301020002
-010000020100002c01000063010000630100006301000063010000020100050c01000500
-030e05000000052a01000503020201030202050301000b0107320801000b010000560100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-0503020201030202050301000b0107320801000701000002010000560100006301000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b01073208010008010200570100006301000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-0b010732080100630100006301000063010000630100006301000063010000020100050c
-01000500030e05000000052a01000503020201030202050301000b010732080100630100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-0503020201030202050301000b0108340063010000630100006301000063010000630100
-0063010000020100050c01000500030e05000000052a0100050302020103020205030100
-0b00083501ff01ff0161050d0100030e0000052b01000503020201030202050301000b36
-00630100006301000063010000630100006301000063010000020100050c01000500030e
-05000000052a01000503020201030202050301000b350800006301000063010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b01073208010063010000630100006301000063010000630100006301000002
-0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
-00630100006301000063010000630100006301000063010000020100050d0100030e0000
-052b01000503020201030202050301000b01071601020718080100630100006301000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b010715010007020100071708010063010000070100005a0100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-01030202050301000b0107190100071708010063010000070100005a0100006301000063
-0100006301000063010000020100050c01000500030e05000000052a0100050302020103
-0202050301000b0107190100071708010008010200020100000001010002010000000101
-000301020042010000070100000001010002010000000101000301020002010100000100
-000201010000010000030102003401000063010000630100006301000063010000020100
-050d0100030e0000052b01000503020201030202050301000b0107170101071808010007
-010000020100000101010001010000010101000101000001010000020100004101000007
-010100010100000101010001010000010100000201000001010000000100000001000001
-010000000100000001000001010000020100003301000063010000630100006301000063
-010000020100050c01000500030e05000000052a01000503020201030202050301000b01
-0719010007170801000b0100000101000002010000010100000201000005010000410100
-000701000002010000010100000501000002010000010100000001000000010000010100
-000001000000010000050100003301000063010000630100006301000063010000020100
-050d0100030e0000052b01000503020201030202050301000b0107190100071708010008
-010300010100000201000001010000020100000201030041010000070100000201000001
-010000050100000201000001010000000100000001000001010000000100000001000002
-0103003301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a01000503020201030202050301000b0107150100070201000717080100070100
-000201000001010000020100000101000002010000010100000201000041010000070100
-000201000001010000050100000201000001010000000100000001000001010000000100
-000001000001010000020100003301000063010000630100006301000063010000020100
-050d0100030e0000052b01000503020201030202050301000b0107160102071808010007
-010000020100000101000002010000010100000201000001010000020100004101000007
-010100010100000101000005010000020100000101000000010000000100000101000000
-010000000100000101000002010000330100006301000063010000630100006301000002
-0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
-000801030001010000020100000101000002010000020103004101000007010000000101
-000201000006010200020100000001000000010000010100000001000000010000020103
-003301000063010000630100006301000063010000020100050d0100030e0000052b0100
-0503020201030202050301000b0107320801006301000063010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-01000b010732080100630100006301000063010000630100006301000063010000020100
-050d0100030e0000052b01000503020201030202050301000b0107320801006301000063
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-01000503020201030202050301000b010732080100630100006301000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-0b010732080100630100006301000063010000630100006301000063010000020100050c
-01000500030e05000000052a01000503020201030202050301000b010834006301000063
-01000063010000630100006301000063010000020100050d0100030e0000052b01000503
-020201030202050301000b00083501ff01ff0161050c01000500030e05000000052a0100
-0503020201030202050301000b3600630100006301000063010000630100006301000063
-010000020100050d0100030e0000052b01000503020201030202050301000b3508000063
-0100006301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a01000503020201030202050301000b0107320801006301000063010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b01073208010063010000630100006301000063010000630100006301000002
-0100050c01000500030e05000000052a01000503020201030202050301000b0107180100
-0718080100630100006301000063010000630100006301000063010000020100050d0100
-030e0000052b01000503020201030202050301000b010717010107180801001001000006
-010000490100000e0100001c0100000b010200030102001f010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-01000b010716010007000100071808010010010000510100000e0100001c0100000d0100
-00050100001f01000063010000630100006301000063010000020100050d0100030e0000
-052b01000503020201030202050301000b01071601000700010007180801000801020002
-010400020102000201000000010100030102003b01000008010200020100000101000003
-01020002010000000101000301020002010400010100000201000004010000050100001f
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-01000503020201030202050301000b010715010007010100071808010007010000020100
-000301000006010000020101000101000001010000020100003a01000007010000020100
-000101000000010000030100000201000001010100010100000101000002010000030100
-00030100000201000004010000050100001f010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000b01071401000702
-010007180801000701000007010000060100000201000002010000050100003a01000007
-010000050101000801000001010000020100000101000007010000030100000201000004
-010000050100001f01000063010000630100006301000063010000020100050c01000500
-030e05000000052a01000503020201030202050301000b01071401050717080100080102
-0004010000060100000201000002010000020103003a0100000801020002010100050103
-0001010000020100000201020004010000030100000201000004010000050100001f0100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-01030202050301000b010718010007180801000b01000003010000060100000201000002
-01000001010000020100003a0100000b0100000101000000010000030100000201000001
-010000020100000501000003010000030100000201000004010000050100001f01000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b01071701020717080100070100000201000003010000060100
-00020100000201000001010000020100003a010000070100000201000001010000010100
-000201000002010000010100000201000001010000020100000301000003010000010101
-0004010000050100001f01000063010000630100006301000063010000020100050d0100
-030e0000052b01000503020201030202050301000b010732080100080102000501010004
-0100000201000002010000020103003a0100000801020002010000020100000201030001
-010000020100000201020005010100020101000001000004010000050100001f01000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b01073208010063010000630100006301000063010000630100
-0063010000020100050d0100030e0000052b01000503020201030202050301000b010732
-080100630100006301000063010000630100006301000063010000020100050c01000500
-030e05000000052a01000503020201030202050301000b01073208010063010000630100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-01030202050301000b010732080100630100006301000063010000630100006301000063
-010000020100050c01000500030e05000000052a01000503020201030202050301000b01
-0732080100630100006301000063010000630100006301000063010000020100050d0100
-030e0000052b01000503020201030202050301000b010834006301000063010000630100
-00630100006301000063010000020100050c01000500030e05000000052a010005030202
-01030202050301000b00083501ff01ff0161050d0100030e0000052b0100050302020103
-0202050301000b3600630100006301000063010000630100006301000063010000020100
-050c01000500030e05000000052a01000503020201030202050301000b35080000630100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-0503020201030202050301000b0107320801006301000063010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-01000b010732080100630100006301000063010000630100006301000063010000020100
-050d0100030e0000052b01000503020201030202050301000b0107150104071708010063
-0100006301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a01000503020201030202050301000b0107150100071b080100070100000e0100
-0014010000340100002b0102003401000063010000630100006301000063010000020100
-050d0100030e0000052b01000503020201030202050301000b0107150100071b08010007
-0100000e0100004a0100002d010000340100006301000063010000630100006301000002
-0100050c01000500030e05000000052a01000503020201030202050301000b0107150100
-071b08010007010000010100000301020002010400020102000201000000010100030102
-000201000000010100030102002601000007010000020100000101000000010100020100
-0000010100030102000301020005010000030102002d0100006301000063010000630100
-0063010000020100050d0100030e0000052b01000503020201030202050301000b010715
-010307180801000701000000010000030100000201000003010000030100000201000001
-010100010100000401000002010100010100000101000002010000250100000701000002
-010000010101000101000001010100010100000101000002010000010100000201000004
-01000002010000020100002c01000063010000630100006301000063010000020100050c
-01000500030e05000000052a01000503020201030202050301000b010719010007170801
-000701010008010000030100000701000001010000080100000201000002010000050100
-002501000007010000020100000101000002010000010100000201000001010000090100
-0004010000060100002c01000063010000630100006301000063010000020100050d0100
-030e0000052b01000503020201030202050301000b010719010007170801000701010005
-010300030100000401030001010000080100000201000002010000020103002501000007
-010000020100000101000002010000010100000201000002010200030103000401000003
-0103002c01000063010000630100006301000063010000020100050c01000500030e0500
-0000052a01000503020201030202050301000b0107140100070301000717080100070100
-000001000003010000020100000301000003010000020100000101000008010000020100
-000201000001010000020100002501000007010000020100000101000002010000010100
-00020100000501000001010000020100000401000002010000020100002c010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b01071501030718080100070100000101000002010000020100000301000003
-010000020100000101000008010000020100000201000001010000020100002501000007
-010000010101000101010001010000010101000101000001010000020100000101000002
-0100000401000002010000020100002c0100006301000063010000630100006301000002
-0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
-000701000002010000020103000401010002010300010100000801000002010000020100
-000201030025010000080101000001000001010000000101000201000000010100030102
-000301030004010000030103002c01000063010000630100006301000063010000020100
-050d0100030e0000052b01000503020201030202050301000b010732080100630100000e
-010000050100004c01000063010000630100006301000063010000020100050c01000500
-030e05000000052a01000503020201030202050301000b010732080100630100000e0100
-00050100004c01000063010000630100006301000063010000020100050d0100030e0000
-052b01000503020201030202050301000b010732080100630100000e010000050100004c
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-01000503020201030202050301000b010732080100630100006301000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-0b010732080100630100006301000063010000630100006301000063010000020100050c
-01000500030e05000000052a01000503020201030202050301000b010834006301000063
-01000063010000630100006301000063010000020100050d0100030e0000052b01000503
-020201030202050301000b00083501ff01ff0161050c01000500030e05000000052a0100
-0503020201030202050301000b3600630100006301000063010000630100006301000063
-010000020100050d0100030e0000052b01000503020201030202050301000b3508000063
-0100006301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a01000503020201030202050301000b0107320801006301000063010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b01073208010063010000630100006301000063010000630100006301000002
-0100050c01000500030e05000000052a01000503020201030202050301000b0107170102
-0717080100630100006301000063010000630100006301000063010000020100050d0100
-030e0000052b01000503020201030202050301000b0107160100071a0801000a0100001a
-01010004010000340100000f0102000c010000020100003e010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-01000b0107150100071b080100250100003c01000011010000100100003e010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b0107150100071b080100080102000301020003010200030102000401000004
-010200020100000001010003010200260100000801020005010000020100000201000002
-01020002010000010100003b01000063010000630100006301000063010000020100050c
-01000500030e05000000052a01000503020201030202050301000b010715010307180801
-000a01000002010000020100000101000002010000010100000201000001010400040100
-000201010001010000010100000201000025010000070100000201000004010000020100
-00020100000401000002010000000100003c010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000b01071501000702
-010007170801000a01000002010000020100000101000005010000020100000301000006
-01000002010000020100000101000002010000250100000b010000040100000201000002
-01000004010000020101003d01000063010000630100006301000063010000020100050c
-01000500030e05000000052a01000503020201030202050301000b010715010007020100
-07170801000a010000020100000201000002010200020104000301000006010000020100
-000201000001010400250100000801030004010000030100000001000005010000020101
-003d01000063010000630100006301000063010000020100050d0100030e0000052b0100
-0503020201030202050301000b01071501000702010007170801000a0100000201000002
-010000050100000101000007010000060100000201000002010000010100002901000007
-010000020100000401000003010000000100000501000002010000000100003c01000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b010716010207180801000a0100000201000002010000010100
-000201000001010000020100000301000006010000020100000201000001010000020100
-0025010000070100000201000004010000040100000601000002010000010100003b0100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-01030202050301000b0107320801000a0100000301020003010200030102000401000006
-010000020100000201000002010200260100000801030004010000040100000601000002
-010000020100003a01000063010000630100006301000063010000020100050c01000500
-030e05000000052a01000503020201030202050301000b0107320801000a010000570100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-0503020201030202050301000b0107320801000701000001010000570100006301000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b01073208010008010100580100006301000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-0b010732080100630100006301000063010000630100006301000063010000020100050c
-01000500030e05000000052a01000503020201030202050301000b010732080100630100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-0503020201030202050301000b0108340063010000630100006301000063010000630100
-0063010000020100050c01000500030e05000000052a0100050302020103020205030100
-0b00083501ff01ff0161050d0100030e0000052b01000503020201030202050301000b36
-00630100006301000063010000630100006301000063010000020100050c01000500030e
-05000000052a01000503020201030202050301000b350800006301000063010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b01073208010063010000630100006301000063010000630100006301000002
-0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
-00630100006301000063010000630100006301000063010000020100050d0100030e0000
-052b01000503020201030202050301000b01071501040717080100630100006301000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b01071501000702010007170801000a010100130100000b0100
-000201000030010000250100000b01020003010200260100006301000063010000630100
-0063010000020100050d0100030e0000052b01000503020201030202050301000b010718
-0100071808010009010000150100000f01000030010000250100000d0100000501000026
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-01000503020201030202050301000b010718010007180801000901000003010000000101
-0003010200030101000001000001010000000101000301020002010000010100002d0100
-000701000000010100030102000201000000010100020100000001010002010400010100
-000201000004010000050100002601000063010000630100006301000063010000020100
-050d0100030e0000052b01000503020201030202050301000b0107180100071808010007
-010400010101000101000001010000020100000101000001010100010101000101000004
-01000002010000000100002e010000070101000101000001010000020100000101010001
-010000010101000101000003010000030100000201000004010000050100002601000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b01071801000718080100090100000301000005010000020100
-0001010000020100000101000008010000020101002f0100000701000002010000010100
-000201000001010000050100000701000003010000020100000401000005010000260100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-01030202050301000b010717010007190801000901000003010000050104000101000002
-0100000101000008010000020101002f0100000701000002010000010100000201000001
-010000050100000701000003010000020100000401000005010000260100006301000063
-0100006301000063010000020100050c01000500030e05000000052a0100050302020103
-0202050301000b0107170100071908010009010000030100000501000005010000020100
-00010100000801000002010000000100002e010000070100000201000001010000020100
-000101000005010000070100000301000002010000040100000501000026010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b01071701000719080100090100000301000005010000020100000101000001
-010100010100000801000002010000010100002d01000007010000020100000101000002
-010000010100000501000007010000030100000101010004010000050100002601000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b01073208010009010000030100000601020003010100000100
-00010100000801000002010000020100002c010000070100000201000002010200020100
-000501000008010100020101000001000004010000050100002601000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-0b010732080100630100006301000063010000630100006301000063010000020100050c
-01000500030e05000000052a01000503020201030202050301000b010732080100630100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-0503020201030202050301000b0107320801006301000063010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-01000b010732080100630100006301000063010000630100006301000063010000020100
-050d0100030e0000052b01000503020201030202050301000b0107320801006301000063
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-01000503020201030202050301000b010834006301000063010000630100006301000063
-01000063010000020100050d0100030e0000052b01000503020201030202050301000b00
-083501ff01ff0161050c01000500030e05000000052a0100050302020103020205030100
-0b3600630100006301000063010000630100006301000063010000020100050d0100030e
-0000052b01000503020201030202050301000b3508000063010000630100006301000063
-0100006301000063010000020100050c01000500030e05000000052a0100050302020103
-0202050301000b0107320801006301000063010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000b01073208010063
-0100006301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a01000503020201030202050301000b0107160102071808010063010000630100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-01030202050301000b010715010007020100071708010063010000070100000f0100000b
-01000006010000100100002201000063010000630100006301000063010000020100050c
-01000500030e05000000052a01000503020201030202050301000b010715010007020100
-071708010063010000070100001c01000018010000220100006301000063010000630100
-0063010000020100050d0100030e0000052b01000503020201030202050301000b010715
-010007020100071708010007010000000101000301020002010000000101004901000007
-010000010100000201000000010100030102000301020002010400020102000201000000
-010100030102000201000000010100030102000201000000010100030101000001000009
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-01000503020201030202050301000b010716010207180801000701010001010000010100
-000201000001010100010100004801000007010000000100000301010001010000040100
-000201000002010000030100000601000002010100010100000101000002010000010101
-000101000001010000020100000101010001010000010100000101010009010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b01071501000702010007170801000701000002010000010100000201000001
-0100004c0100000701010004010000080100000201000007010000060100000201000002
-010000010100000201000001010000020100000101000002010000010100000501000002
-0100000901000063010000630100006301000063010000020100050c01000500030e0500
-0000052a01000503020201030202050301000b0107150100070201000717080100070100
-000201000001010400010100004c01000007010100040100000801000003010200040100
-000601000002010000020100000101040001010000020100000101040001010000050100
-00020100000901000063010000630100006301000063010000020100050d0100030e0000
-052b01000503020201030202050301000b01071501000702010007170801000701000002
-01000001010000050100004c010000070100000001000003010000080100000601000003
-010000060100000201000002010000010100000501000002010000010100000501000005
-010000020100000901000063010000630100006301000063010000020100050c01000500
-030e05000000052a01000503020201030202050301000b01071601020718080100070101
-00010100000101000002010000010100004c010000070100000101000002010000080100
-000201000002010000030100000601000002010000020100000101000002010000010101
-000101000001010000020100000101000005010000010101000901000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-0b010732080100070100000001010003010200020100004c010000070100000201000001
-010000080100000301020005010100040100000201000002010000020102000201000000
-010100030102000201000006010100000100000901000063010000630100006301000063
-010000020100050c01000500030e05000000052a01000503020201030202050301000b01
-0732080100070100005a0100005801000009010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000b01073208010007
-0100005a0100005401000002010000090100006301000063010000630100006301000002
-0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
-00070100005a010000550102000a01000063010000630100006301000063010000020100
-050d0100030e0000052b01000503020201030202050301000b0107320801006301000063
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-01000503020201030202050301000b010732080100630100006301000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-0b01083400630100006301000063010000630100006301000063010000020100050c0100
-0500030e05000000052a01000503020201030202050301000b00083501ff01ff0161050d
-0100030e0000052b01000503020201030202050301000b36006301000063010000630100
-00630100006301000063010000020100050c01000500030e05000000052a010005030202
-01030202050301000b350800006301000063010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000b01073208010063
-0100006301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a01000503020201030202050301000b0107320801006301000063010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b01071601020718080100630100006301000063010000630100006301000063
-010000020100050c01000500030e05000000052a01000503020201030202050301000b01
-071501000702010007170801001f01000042010000120100001701020034010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b01071501000702010007170801006301000012010000190100003401000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b01071501000702010007170801000701010000010000030102
-00020100000001010003010200030102003b010000080102000301010000010000020102
-000201000000010100020100000001010005010000030102000201000000010100260100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-01030202050301000b010715010007020100071708010007010000000100000001000001
-0100000201000001010100010100000401000002010000020100003a0100000701000002
-010000010100000101010001010000020100000101010001010000010101000101000004
-010000020100000201000001010100010100002501000063010000630100006301000063
-010000020100050c01000500030e05000000052a01000503020201030202050301000b01
-071601030717080100070100000001000000010000050100000101000008010000060100
-003a01000007010000020100000101000002010000010100000201000001010000020100
-000101000002010000040100000601000001010000020100002501000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-0b0107190100071708010007010000000100000001000002010300010100000801000003
-0103003a0100000701000002010000010100000201000001010400010100000201000001
-010000020100000401000003010300010100000201000025010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-01000b010718010007180801000701000000010000000100000101000002010000010100
-000801000002010000020100003a01000007010000020100000101000002010000010100
-000501000002010000010100000201000004010000020100000201000001010000020100
-002501000063010000630100006301000063010000020100050d0100030e0000052b0100
-0503020201030202050301000b0107150102071908010007010000000100000001000001
-01000002010000010100000801000002010000020100003a010000070100000201000001
-010000010101000101000002010000010100000201000001010100010100000401000002
-010000020100000101000002010000250100006301000063010000630100006301000002
-0100050c01000500030e05000000052a01000503020201030202050301000b0107320801
-00070100000001000000010000020103000101000008010000030103003a010000080102
-000301010000010000020102000201000002010000010100000001010005010000030103
-0001010000020100002501000063010000630100006301000063010000020100050d0100
-030e0000052b01000503020201030202050301000b01073208010063010000230100003e
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-01000503020201030202050301000b01073208010063010000230100003e010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000b01073208010063010000230100003e01000063010000630100006301000063
-010000020100050c01000500030e05000000052a01000503020201030202050301000b01
-0732080100630100006301000063010000630100006301000063010000020100050d0100
-030e0000052b01000503020201030202050301000b010732080100630100006301000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000b01083400630100006301000063010000630100006301000063
-010000020100050d0100030e0000052b01000503020201030202050301000b00083501ff
-01ff0161050c01000500030e05000000052a010005030202010302020503010005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000063
-0100006301000063010000630100006301000063010000020100050d0100030e0000052b
-010005030202010302020503010000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050001000063010000630100006301000063010000630100
-0063010000020100050c01000500030e05000000052a0100050302020103020205030100
-050000000532010005000063010000630100006301000063010000630100006301000002
-0100050d0100030e0000052b010005030202010302020503010000000534010000630100
-006301000063010000630100006301000063010000020100050c01000500030e05000000
-052a01000503020201030202050301000500000005130100050401020515010005000063
-0100006301000063010000630100006301000063010000020100050d0100030e0000052b
-010005030202010302020503010000000512010205030100050201000515010000630100
-006301000063010000630100006301000063010000020100050c01000500030e05000000
-052a01000503020201030202050301000500000005130100050301000502010005140100
-050000630100006301000063010000630100006301000063010000020100050d0100030e
-0000052b0100050302020103020205030100000005140100050301000502010005150100
-00630100006301000063010000630100006301000063010000020100050c01000500030e
-05000000052a010005030202010302020503010005000000051301000503010005020100
-05140100050000630100006301000063010000630100006301000063010000020100050d
-0100030e0000052b01000503020201030202050301000000051401000503010005020100
-0515010000630100006301000063010000630100006301000063010000020100050c0100
-0500030e05000000052a0100050302020103020205030100050000000513010005030100
-050201000514010005000063010000630100006301000063010000630100006301000002
-0100050d0100030e0000052b010005030202010302020503010000000514010005030100
-050201000515010000630100006301000063010000630100006301000063010000020100
-050c01000500030e05000000052a01000503020201030202050301000500000005110104
-050201020515010005000063010000630100006301000063010000630100006301000002
-0100050d0100030e0000052b010005030202010302020503010000000534010000630100
-006301000063010000630100006301000063010000020100050c01000500030e05000000
-052a01000503020201030202050301000500000005320100050000630100006301000063
-010000630100006301000063010000020100050d0100030e0000052b0100050302020103
-020205030100000005340100006301000063010000630100006301000063010000630100
-00020100050c01000500030e05000000052a010005030202010302020503010005000000
-05320100050000630100006301000063010000630100006301000063010000020100050d
-0100030e0000052b01000503020201030202050301000000053401000063010000630100
-0063010000630100006301000063010000020100050c01000500030e05000000052a0100
-050302020103020205030100050000000532010005000063010000630100006301000063
-0100006301000063010000020100050d0100030e0000052b010005030202010302020503
-010000000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010000630100006301000063010000630100006301000063010000020100050c0100
-0500030e05000000052a0100050302020103020205030100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001ff01ff0161050d0100
-030e0000052b010005030202010302020503010005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000063010000630100006301000063
-0100006301000063010000020100050c01000500030e05000000052a0100050302020103
-020205030100000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500010000630100006301000063010000630100006301000063010000020100
-050d0100030e0000052b0100050302020103020205030100050000000532010005000063
-0100006301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a0100050302020103020205030100000005340100006301000063010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000500000005130100050501000516010005000063010000630100006301000063
-0100006301000063010000020100050c01000500030e05000000052a0100050302020103
-020205030100000005120102050301020517010000630100006301000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-050000000513010005050100051601000500006301000063010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-010000000514010005050100051701000063010000630100006301000063010000630100
-0063010000020100050d0100030e0000052b010005030202010302020503010005000000
-051301000505010005160100050000630100006301000063010000630100006301000063
-010000020100050c01000500030e05000000052a01000503020201030202050301000000
-051401000505010005170100006301000063010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000500000005130100
-050501000516010005000063010000630100006301000063010000630100006301000002
-0100050c01000500030e05000000052a0100050302020103020205030100000005140100
-050501000517010000630100006301000063010000630100006301000063010000020100
-050d0100030e0000052b0100050302020103020205030100050000000511010405010104
-05140100050000630100006301000063010000630100006301000063010000020100050c
-01000500030e05000000052a010005030202010302020503010000000534010000630100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-050302020103020205030100050000000532010005000063010000630100006301000063
-0100006301000063010000020100050c01000500030e05000000052a0100050302020103
-020205030100000005340100006301000063010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000500000005320100
-050000630100006301000063010000630100006301000063010000020100050c01000500
-030e05000000052a01000503020201030202050301000000053401000063010000630100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-010302020503010005000000053201000500006301000063010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-010000000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010000630100006301000063010000630100006301000063010000020100050d0100
-030e0000052b010005030202010302020503010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005000100050001000500010005000100050001ff01ff0161050c01000500030e
-05000000052a010005030202010302020503010005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000063010000630100006301000063
-0100006301000063010000020100050d0100030e0000052b010005030202010302020503
-010000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500010000630100006301000063010000630100006301000063010000020100050c0100
-0500030e05000000052a0100050302020103020205030100050000000532010005000063
-0100006301000063010000630100006301000063010000020100050d0100030e0000052b
-010005030202010302020503010000000534010000630100006301000063010000630100
-006301000063010000020100050c01000500030e05000000052a01000503020201030202
-050301000500000005130100050401020515010005000063010000630100006301000063
-0100006301000063010000020100050d0100030e0000052b010005030202010302020503
-010000000512010205030100050201000515010000630100006301000063010000630100
-006301000063010000020100050c01000500030e05000000052a01000503020201030202
-050301000500000005130100050301000502010005140100050000630100006301000063
-010000630100006301000063010000020100050d0100030e0000052b0100050302020103
-020205030100000005140100050301000502010005150100006301000063010000630100
-00630100006301000063010000020100050c01000500030e05000000052a010005030202
-010302020503010005000000051301000506010005150100050000630100006301000063
-010000630100006301000063010000020100050d0100030e0000052b0100050302020103
-020205030100000005140100050501000517010000630100006301000063010000630100
-006301000063010000020100050c01000500030e05000000052a01000503020201030202
-050301000500000005130100050401000517010005000063010000630100006301000063
-0100006301000063010000020100050d0100030e0000052b010005030202010302020503
-010000000514010005030100050201000515010000630100006301000063010000630100
-006301000063010000020100050c01000500030e05000000052a01000503020201030202
-050301000500000005110104050101040514010005000063010000630100006301000063
-0100006301000063010000020100050d0100030e0000052b010005030202010302020503
-010000000534010000630100006301000063010000630100006301000063010000020100
-050c01000500030e05000000052a01000503020201030202050301000500000005320100
-050000630100006301000063010000630100006301000063010000020100050d0100030e
-0000052b0100050302020103020205030100000005340100006301000063010000630100
-00630100006301000063010000020100050c01000500030e05000000052a010005030202
-010302020503010005000000053201000500006301000063010000630100006301000063
-01000063010000020100050d0100030e0000052b01000503020201030202050301000000
-0534010000630100006301000063010000630100006301000063010000020100050c0100
-0500030e05000000052a0100050302020103020205030100050000000532010005000063
-0100006301000063010000630100006301000063010000020100050d0100030e0000052b
-010005030202010302020503010000000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000063010000630100006301000063010000630100
-0063010000020100050c01000500030e05000000052a0100050302020103020205030100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001ff01ff0161050d0100030e0000052b010005030202010302020503010005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000063
-0100006301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a0100050302020103020205030100000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500010000630100006301000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-050000000532010005000063010000630100006301000063010000630100006301000002
-0100050c01000500030e05000000052a0100050302020103020205030100000005340100
-00630100006301000063010000630100006301000063010000020100050d0100030e0000
-052b01000503020201030202050301000500000005130100050401020515010005000063
-0100006301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a0100050302020103020205030100000005120102050301000502010005150100
-00630100006301000063010000630100006301000063010000020100050d0100030e0000
-052b01000503020201030202050301000500000005130100050701000514010005000063
-0100006301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a0100050302020103020205030100000005140100050701000515010000630100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-050302020103020205030100050000000513010005050101051501000500006301000063
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-010005030202010302020503010000000514010005070100051501000063010000630100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-010302020503010005000000051301000507010005140100050000630100006301000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000000051401000503010005020100051501000063010000630100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-010302020503010005000000051101040502010205150100050000630100006301000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000000053401000063010000630100006301000063010000630100
-0063010000020100050d0100030e0000052b010005030202010302020503010005000000
-05320100050000630100006301000063010000630100006301000063010000020100050c
-01000500030e05000000052a010005030202010302020503010000000534010000630100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-050302020103020205030100050000000532010005000063010000630100006301000063
-0100006301000063010000020100050c01000500030e05000000052a0100050302020103
-020205030100000005340100006301000063010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000500000005320100
-050000630100006301000063010000630100006301000063010000020100050c01000500
-030e05000000052a01000503020201030202050301000000050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100006301000063010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-05000100050001ff01ff0161050c01000500030e05000000052a01000503020201030202
-050301000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-05000000050000630100006301000063010000630100006301000063010000020100050d
-0100030e0000052b01000503020201030202050301000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000100006301000063010000630100
-00630100006301000063010000020100050c01000500030e05000000052a010005030202
-010302020503010005000000053201000500006301000063010000630100006301000063
-01000063010000020100050d0100030e0000052b01000503020201030202050301000000
-0534010000630100006301000063010000630100006301000063010000020100050c0100
-0500030e05000000052a0100050302020103020205030100050000000513010005060100
-05150100050000630100006301000063010000630100006301000063010000020100050d
-0100030e0000052b01000503020201030202050301000000051201020505010105160100
-00630100006301000063010000630100006301000063010000020100050c01000500030e
-05000000052a010005030202010302020503010005000000051301000504010005000100
-05150100050000630100006301000063010000630100006301000063010000020100050d
-0100030e0000052b01000503020201030202050301000000051401000504010005000100
-0516010000630100006301000063010000630100006301000063010000020100050c0100
-0500030e05000000052a0100050302020103020205030100050000000513010005030100
-050101000515010005000063010000630100006301000063010000630100006301000002
-0100050d0100030e0000052b010005030202010302020503010000000514010005020100
-050201000516010000630100006301000063010000630100006301000063010000020100
-050c01000500030e05000000052a01000503020201030202050301000500000005130100
-050201050514010005000063010000630100006301000063010000630100006301000002
-0100050d0100030e0000052b010005030202010302020503010000000514010005060100
-0516010000630100006301000063010000630100006301000063010000020100050c0100
-0500030e05000000052a0100050302020103020205030100050000000511010405030102
-05140100050000630100006301000063010000630100006301000063010000020100050d
-0100030e0000052b01000503020201030202050301000000053401000063010000630100
-0063010000630100006301000063010000020100050c01000500030e05000000052a0100
-050302020103020205030100050000000532010005000063010000630100006301000063
-0100006301000063010000020100050d0100030e0000052b010005030202010302020503
-010000000534010000630100006301000063010000630100006301000063010000020100
-050c01000500030e05000000052a01000503020201030202050301000500000005320100
-050000630100006301000063010000630100006301000063010000020100050d0100030e
-0000052b0100050302020103020205030100000005340100006301000063010000630100
-00630100006301000063010000020100050c01000500030e05000000052a010005030202
-010302020503010005000000053201000500006301000063010000630100006301000063
-01000063010000020100050d0100030e0000052b01000503020201030202050301000000
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-00630100006301000063010000630100006301000063010000020100050c01000500030e
-05000000052a010005030202010302020503010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005000100050001000500010005000100050001ff01ff0161050d0100030e0000
-052b01000503020201030202050301000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500006301000063010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-010000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500010000630100006301000063010000630100006301000063010000020100050d0100
-030e0000052b010005030202010302020503010005000000053201000500006301000063
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-010005030202010302020503010000000534010000630100006301000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-050000000513010005030104051401000500006301000063010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-010000000512010205030100051901000063010000630100006301000063010000630100
-0063010000020100050d0100030e0000052b010005030202010302020503010005000000
-051301000503010005180100050000630100006301000063010000630100006301000063
-010000020100050c01000500030e05000000052a01000503020201030202050301000000
-051401000503010005190100006301000063010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000500000005130100
-050301030515010005000063010000630100006301000063010000630100006301000002
-0100050c01000500030e05000000052a0100050302020103020205030100000005140100
-050701000515010000630100006301000063010000630100006301000063010000020100
-050d0100030e0000052b0100050302020103020205030100050000000513010005070100
-05140100050000630100006301000063010000630100006301000063010000020100050c
-01000500030e05000000052a010005030202010302020503010000000514010005020100
-050301000515010000630100006301000063010000630100006301000063010000020100
-050d0100030e0000052b0100050302020103020205030100050000000511010405010103
-05150100050000630100006301000063010000630100006301000063010000020100050c
-01000500030e05000000052a010005030202010302020503010000000534010000630100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-050302020103020205030100050000000532010005000063010000630100006301000063
-0100006301000063010000020100050c01000500030e05000000052a0100050302020103
-020205030100000005340100006301000063010000630100006301000063010000630100
-00020100050d0100030e0000052b01000503020201030202050301000500000005320100
-050000630100006301000063010000630100006301000063010000020100050c01000500
-030e05000000052a01000503020201030202050301000000053401000063010000630100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-010302020503010005000000053201000500006301000063010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-010000000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010000630100006301000063010000630100006301000063010000020100050d0100
-030e0000052b010005030202010302020503010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005000100050001000500010005000100050001ff01ff0161050c01000500030e
-05000000052a010005030202010302020503010005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000063010000630100006301000063
-0100006301000063010000020100050d0100030e0000052b010005030202010302020503
-010000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500010000630100006301000063010000630100006301000063010000020100050c0100
-0500030e05000000052a0100050302020103020205030100050000000532010005000063
-0100006301000063010000630100006301000063010000020100050d0100030e0000052b
-010005030202010302020503010000000534010000630100006301000063010000630100
-006301000063010000020100050c01000500030e05000000052a01000503020201030202
-050301000500000005130100050501020514010005000063010000630100006301000063
-0100006301000063010000020100050d0100030e0000052b010005030202010302020503
-010000000512010205040100051801000063010000630100006301000063010000630100
-0063010000020100050c01000500030e05000000052a0100050302020103020205030100
-050000000513010005030100051801000500006301000063010000630100006301000063
-01000063010000020100050d0100030e0000052b01000503020201030202050301000000
-051401000503010005190100006301000063010000630100006301000063010000630100
-00020100050c01000500030e05000000052a010005030202010302020503010005000000
-051301000503010305150100050000630100006301000063010000630100006301000063
-010000020100050d0100030e0000052b0100050302020103020205030100000005140100
-050301000502010005150100006301000063010000630100006301000063010000630100
-00020100050c01000500030e05000000052a010005030202010302020503010005000000
-051301000503010005020100051401000500006301000063010000630100006301000063
-01000063010000020100050d0100030e0000052b01000503020201030202050301000000
-051401000503010005020100051501000063010000630100006301000063010000630100
-0063010000020100050c01000500030e05000000052a0100050302020103020205030100
-050000000511010405020102051501000500006301000063010000630100006301000063
-01000063010000020100050d0100030e0000052b01000503020201030202050301000000
-0534010000630100006301000063010000630100006301000063010000020100050c0100
-0500030e05000000052a0100050302020103020205030100050000000532010005000063
-0100006301000063010000630100006301000063010000020100050d0100030e0000052b
-010005030202010302020503010000000534010000630100006301000063010000630100
-006301000063010000020100050c01000500030e05000000052a01000503020201030202
-050301000500000005320100050000630100006301000063010000630100006301000063
-010000020100050d0100030e0000052b0100050302020103020205030100000005340100
-00630100006301000063010000630100006301000063010000020100050c01000500030e
-05000000052a010005030202010302020503010005000000053201000500006301000063
-01000063010000630100006301000063010000020100050d0100030e0000052b01000503
-020201030202050301000000050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100006301000063010000630100006301000063010000630100
-00020100050c01000500030e05000000052a010005030202010302020503010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005000100050001000500010005000100050001000500010005000100050001ff
-01ff0161050d0100030e0000052b01000503020201030202050301000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500006301000063
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-010005030202010302020503010000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050001000063010000630100006301000063010000630100
-0063010000020100050d0100030e0000052b010005030202010302020503010005000000
-05320100050000630100006301000063010000630100006301000063010000020100050c
-01000500030e05000000052a010005030202010302020503010000000534010000630100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-050302020103020205030100050000000513010005030104051401000500006301000063
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-010005030202010302020503010000000512010205030100050201000515010000630100
-006301000063010000630100006301000063010000020100050d0100030e0000052b0100
-050302020103020205030100050000000513010005060100051501000500006301000063
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-010005030202010302020503010000000514010005060100051601000063010000630100
-0063010000630100006301000063010000020100050d0100030e0000052b010005030202
-010302020503010005000000051301000506010005150100050000630100006301000063
-010000630100006301000063010000020100050c01000500030e05000000052a01000503
-020201030202050301000000051401000506010005160100006301000063010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000500000005130100050501000516010005000063010000630100006301000063
-0100006301000063010000020100050c01000500030e05000000052a0100050302020103
-020205030100000005140100050501000517010000630100006301000063010000630100
-006301000063010000020100050d0100030e0000052b0100050302020103020205030100
-050000000511010405030100051601000500006301000063010000630100006301000063
-01000063010000020100050c01000500030e05000000052a010005030202010302020503
-010000000534010000630100006301000063010000630100006301000063010000020100
-050d0100030e0000052b0100050302020103020205030100050000000532010005000063
-0100006301000063010000630100006301000063010000020100050c01000500030e0500
-0000052a0100050302020103020205030100000005340100006301000063010000630100
-00630100006301000063010000020100050d0100030e0000052b01000503020201030202
-050301000500000005320100050000630100006301000063010000630100006301000063
-010000020100050c01000500030e05000000052a01000503020201030202050301000000
-0534010000630100006301000063010000630100006301000063010000020100050d0100
-030e0000052b010005030202010302020503010005000000053201000500006301000063
-01000063010000630100006301000063010000020100050c01000500030e05000000052a
-010005030202010302020503010000000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000063010000630100006301000063010000630100
-0063010000020100050d0100030e0000052b010005030202010302020503010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005000100050001000500010005000100050001000500010005000100050001ff
-01ff0161050c01000500030e05000000052a010005030202010302020503010005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000063
-0100006301000063010000630100006301000063010000020100050d0100030e0000052b
-010005030202010302020503010000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050001000063010000630100006301000063010000630100
-0063010000020100050c01000500030e05000000052a0100050302020103020205030100
-050000000532010005000063010000630100006301000063010000630100006301000002
-0100050d0100030e0000052b010005030202010302020503010000000534010000630100
-006301000063010000630100006301000063010000020100050c01000500030e05000000
-052a01000503020201030202050301000500000005130100050401020515010005000063
-0100006301000063010000630100006301000063010000020100050d0100030e0000052b
-010005030202010302020503010000000512010205030100050201000515010000630100
-006301000063010000630100006301000063010000020100050c01000500000005000000
-05000000050000000500000005000000050000000500000005000000052a010005030202
-01030202050301ff01ff0199050d00000500000005000000050000000500000005000000
-050000000500000005000000052b010005030202010302020503010005ff05ff05e30100
-05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff
-05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100
-05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
-0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202
-01030202050301000549010005ff05ff0598010005030202010302020503010005480101
-05ff05ff05980100050302020103020205030100054701000500010005ff05ff05980100
-0503020201030202050301000549010005ff05ff05980100050302020103020205030100
-0549010005ff05ff059801000503020201030202050301000549010005ff05ff05980100
-0503020201030202050301000549010005ff05ff05980100050302020103020205030100
-0549010005ff05ff059801000503020201030202050301000547010405ff05ff05960100
-05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff
-05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100
-05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
-050301000538010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005000100050001000500010005000100050001000500010005000100054b0100
-050302020103020205030100053701000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005000000054a0100050302020103020205030100053801000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500000005000000050000000500000003ff03ff033e0000054b01000503020201030202
-050301000537010005000000050000000500000005000000050000000500000005000000
-0500000005000000050000000500000005000000050000000500000005000000050003ff
-03ff033e05000000054a01000503020201030202050301000538010005000000050c0000
-050c010003ff03ff033e0000054b01000503020201030202050301000537010005000000
-050c0100050c0100050003ff03ff033e05000000054a0100050302020103020205030100
-0538010005000000050c0000050c010003ff03ff033e0000054b01000503020201030202
-050301000537010005000000050c0100050c0100050003ff03ff033e05000000054a0100
-0503020201030202050301000538010005000000050c0000050c010003ff03ff033e0000
-054b01000503020201030202050301000537010005000000050c0100050c0100050003ff
-03ff033e05000000054a01000503020201030202050301000538010005000000050c0000
-050c010003ff03ff033e0000054b01000503020201030202050301000537010005000000
-050c0100050c0100050003ff03ff033e05000000054a0100050302020103020205030100
-0538010005000000050c0000050c010003ff03ff033e0000054b01000503020201030202
-050301000537010005000000050c0100050c0100050003ff03ff033e05000000054a0100
-0503020201030202050301000538010005000000050c0000050c010003ff03ff033e0000
-054b01000503020201030202050301000537010005000000050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005000100050003ff03ff033e05000000054a0100050302020103020205030100
-053801000500010005000100050001000500010005000100050001000500010005000100
-0500010005000100050001000500010005000100050001000500010003ff03ff033e0000
-054b01000503020201030202050301000537010005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000054a01000503020201030202050301000538000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500000005000000050000000500000005000000054b0100050302020103020205030100
-05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
-0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202
-010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100
-05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff
-05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100
-05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
-0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202
-010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100
-05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff
-05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100
-05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
-0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202
-010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100
-05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff
-05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100
-05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202
-0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202
-010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100
-05030202010100040503010005ff05ff05e301000503000502020400050301ff01ff01e5
-050300000202040000000202040005ff05ff05ed00000202040000000202040005ff05ff
-05ed00000202040000000202040005ff05ff05ed00000202040000000202040005ff05ff
-05ed000002020400000002020400000502ff02ff02e100060202040000000208040002ff
-02ff02e100000208040000000208040002ff02ff02e100000208040000000208040001ff
-01ff01e10000020804000000040901ff01ff01e100000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 0 380 315
-%%EOF
diff --git a/lib/tv/doc/src/tv_table_browser_updated.gif b/lib/tv/doc/src/tv_table_browser_updated.gif
deleted file mode 100644
index 547497487d..0000000000
--- a/lib/tv/doc/src/tv_table_browser_updated.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_table_browser_updated.ps b/lib/tv/doc/src/tv_table_browser_updated.ps
deleted file mode 100644
index 0a944565e8..0000000000
--- a/lib/tv/doc/src/tv_table_browser_updated.ps
+++ /dev/null
@@ -1,2124 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_browser_updated.eps)
-%%CreationDate: (Mon Mar 19 17:15:32 2001)
-%%BoundingBox: 0 0 380 315
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 380 315
-userdict begin
-%%BeginData:
-DisplayImage
-0 0
-380.000000 315.000000
-12
-760 630
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-d9d9d9
-b22222
-00ff00
-ff0000
-990000
-7f7f7f
-999999
-ff7f7f
-009900
-7fff7f
-000000
-000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff
-02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202
-04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff
-02d500000202040000000202040002080000020d04000289010302110103023201020258
-0102020c010102010101021e010102290101020601010208010102310101022a01010230
-0101029600000202040000000202040002080000020d0400028901010202010702000101
-0203010102010101020e01050200010702010103020d0101020401010204010302030103
-020e010302060103020301030203010302060103020b0101020a01010202010102190100
-02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101
-020c0104021e0101029600000202040000000202040002080000020d0400028901010205
-0101020301010203010102010101020e0101020701010203010102010101020c01010202
-010302030101020101010201010102010101020801010201010102010101020401010201
-01010201010102010101020101010201010102040101020101010201010102060101020a
-0101020201010218010102210101020b01010206010102090101021b010202020100020d
-01010238010102020101021d010102960000020204000000020204000208000002020406
-020304000289010102050101020301010203010102010101020e01010207010102030101
-020501010209010102030101020701010201010102010101020601020202010102010101
-020801010201010102010101020101010201010102040101020101010202010202030101
-020a01010203010102020103020301030202010302010104020101010202010302030101
-02000101020a0104020101030203010102000101020301010202010302030101021a0100
-020001010201010002020103020301040202010302020101020901010200010102010101
-020301030203010102020101020001010202010102010103020201010200010102010101
-020301030202010102000101020101010202010302020101020201010285000002020400
-000004030208000002020400030400000203040002890101020501010204010102020100
-02020101020e0101020701010203010202040101020a0100020301010207010102010101
-020101010205010102040101020101010208010102010101020101010201010102010101
-02040101020101010204010102020100020b010102030101020101010201010102010101
-020101010200010102010101020101010203010102010101020101010202010202000101
-020a01010202010102010101020201020200010102020101020101010201010102020101
-021a01000200010102010100020101010201010102010101020101010201010102010101
-020101010209010202000102020001010201010102010101020201010202010202000101
-020101010200010102000101020201020200010202000101020101010201010102010101
-0200010102010101020101010201010102010101020201010285000004030101020b0000
-0203040003020000020404000289010102050101020401010201010102020101020e0104
-0204010102040103020d0101020401010205010202020101020101010204010102050101
-020101010207010102020101020101010202010402040101020101010205010102020101
-020901010203010102010101020101010201010102080101020101010203010102010101
-020101010202010102010101020a01010206010102020101020101010202010102010101
-0201010102020101021a0100020001020200010002010101020101010201010102010101
-0201010102010101020d0101020101010201010102050101020201010202010102010101
-020101010200010102000101020201010201010102010101020501010201010202030101
-0201010102010101020101010202010002890103020b0000020304000302000002040400
-0289010102050101020501010200010002030101020e01010207010102060102020e0100
-020301010207010102010101020101010205010102040101020101010206010102030101
-020101010205010102040101020101010204010102020100020b01010203010102010101
-020101010201010102050104020101010203010102010101020101010202010102010101
-020a0101020301040202010102010101020201010201010502020101021a010002010101
-020001000201010102010101020101010201010102010105020d01010201010102010101
-020201040202010102020101020101010201010102000101020001010202010102010101
-0201010102020104020101010204010102010105020201010200010102890103020b0000
-02040400030000000205040002890101020501010205010302030101020e010102070101
-02070101020d010102030101020701010201010102010101020601020202010102010101
-0205010102040101020101010205010102040101020101010202010202030101020a0101
-020301010201010102010101020101010204010102010101020101010203010102010101
-020101010202010102010101020a01010202010102010101020201010201010102020101
-0201010102060101021a0100020201020201010102010101020101010201010102010101
-021101010201010102010101020101010201010102020101020201010201010102010101
-020101010200010102010101020101010201010102010101020101010201010102040101
-020101010206010102000100028a0103020b000002040400030000000205040002890101
-020501010206010102040101020e01010207010102030101020101010201010102080101
-020401010203010102010101020101010201010102010101020401010201010102010101
-020101010200010502010101020101010201010102010101020101010200010102010101
-0201010102060101020a0101020201010201010102010101020101010202010002000101
-02010101020101010203010102010101020101010202010102010101020a010102020101
-02010101020201010201010102020101020101010202010002010101021b010002020102
-020101010201010102010101020001020201010102020100020101010209010102010101
-020101010201010102010101020201010202010102010101020201010207010102010101
-0201010102010101020101010201010102040101020101010202010002030102028a0103
-020b0000020500000206040002890101020501010206010102040101020e010502030101
-020401030202010102080101020401010204010302030103020201010209010302020101
-0200010502020103020301030202010102010103020b0101020a01010202010102020103
-0203010302020102020001010201010202010101020201030203010102010101020b0102
-020101020200010102010104020301010202010302020101021b01000203010102020103
-020301010200010102020103020201010209010102010101020101010202010202000101
-020101010202010102010101020301050202010102010101020101010202010202000101
-02000101020401010202010302040101028b0103020b0000020d04000289010302110103
-0232010202190100023d0102020c01010237010602230101029e0101028c0103020b0000
-020d040002f2010002ff02540101028c0103020b0000020d040002ff02ff02d70103020c
-040d02ff02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec0400
-020201030202000004ff04ff04ec0202010302ff02ff02f3010302020500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000202010302020000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000202010302020500000005ff05ff05ea01000202010302020000
-05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000
-05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000
-050c06040504060005030602051f06040505060005040600050406000519060005020600
-0504060005270602050b06000506060005ff05ff05080600050206000509060205130100
-050002020103020205000000050b0600050f0600051f060005090600050a060005190600
-05020600052c060005020600050a060005ff05ff0510060005020600050b060005140100
-0202010302020000050c0600050606020505060005030602051806000506060105000600
-050206020502060405170600050206000502060205030602050206000502060005170600
-050206000501060005000601050206040502060205030602050206000500060105030602
-05ff05f306000502060005020602050506000502060005000601050c0100050002020103
-020205000000050b06000508060005050600050206000502060005170600050506000501
-06010504060005040600051a060005000600050506000502060005020600050106000502
-060005170600050206000501060105010600050306000506060005020600050206000501
-060105010600050106000502060005ff05f2060005020600050106000502060005040600
-0502060105010600050c01000202010302020000050c0603050506000505060005020600
-050206000517060305020600050206000504060005040600051a06000500060005050600
-050206000502060005010600050006000500060005170600050206000501060005020600
-0503060005060600050206000502060005010600050206000501060005ff05f606040501
-060005020600050406000502060005020600050b0100050002020103020205000000050b
-06000508060005050600050206040517060005050600050206000504060005040600051a
-060005000600050506000502060405010600050006000500060005170600050206000501
-0600050206000503060005060600050206000502060005010600050206000502060205ff
-05f306000502060005010604050406000502060005020600050c01000202010302020000
-050c0600050806000505060005020600051b060005050600050206000504060005040600
-051b06000506060005020600050506000500060005000600051706000502060005010600
-050206000503060005060600050206000502060005010600050206000505060005ff05f2
-06000502060005010600050806000502060005020600050b010005000202010302020500
-0000050b0600050806000505060005020600050206000517060005050600050106010504
-060005040600051b06000506060005020600050206000501060005000600050006000517
-060005020600050106010501060005030600050606000502060005020600050106000502
-0600050106000502060005ff05f206000502060005010600050206000504060005020601
-05010600050c01000202010302020000050c060005080600050506000503060205180604
-050206010500060005040600050506010519060005060600050306020503060005000600
-051906020502060005000601050506010504060005030602050206000502060005020602
-05ff05f306000502060005020602050506000502060005000601050c0100050002020103
-02020500000005a8060005ff05ff052e0600051001000202010302020000050b0606052a
-0606052a0606052a06060500060005ff05ff05180606050e0600050f0100050002020103
-020205000000050a0606052a0606052a0606052a06060500060005ff05ff05180606050e
-060005100100020201030202000005ff05ff05ea010005000202010302020500000005ff
-05ff05ea0100020201030202000005ff05ff05ea01000500020201030202050000000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100020201030202000005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-01000500010005000100050002020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-020201030202053600000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000051a00000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050100000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050100000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000051a00000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000051a00000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000051a00000500000005000000050000000500000005000000050000000500
-00000500000005000000050000000500000005ff05a50202010302020535000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500010005180000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000100000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-010000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050001000518000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500010005180000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000100051800000500000005000000050000000500000005000000
-0500000005000000050000000500000005000000050000000500010005ff05a402020103
-02020536000005140100051a00000514010005010000051401000501000005140100051a
-000005140100051a000005140100051a00000514010005ff05a502020103020205350000
-051601000518000005160100000005160100000005160100051800000516010005180000
-05160100051800000516010005ff05a40202010302020536000005140100051a00000514
-010005010000051401000501000005140100051a000005140100051a000005140100051a
-00000514010005ff05a50202010302020535000005050602050306020506010005180000
-051601000000051601000000051601000518000005160100051800000516010005180000
-0516010005ff05a402020103020205360000050406020503060205050100051a00000514
-010005010000051401000501000005140100051a00000506060405080100051a00000508
-060105090100051a0000050806030507010005ff05a50202010302020535000005040604
-050106040505010005180000051006000504010000000510060005040100000005040600
-051001000518000005050608050701000518000005080603050901000518000005070607
-0506010005ff05a402020103020205360000050306000501060105010600050106010504
-0100051a0000050f06000503010005010000050f0600050301000501000005030600050f
-0100051a00000503060a05050100051a00000507060305080100051a0000050506030501
-06030504010005ff05a5020201030202053500000503060d0504010005180000050d0600
-0501060005040100000005040600050a06000504010000000504060005010600050d0100
-051800000504060305020603050601000518000005090601050a01000518000005060602
-050306020505010005ff05a4020201030202053600000501060005000603050006020500
-060405020100051a0000050c060005010600050301000501000005030600050a06000503
-0100050100000503060005010600050c0100051a0000050206030504060305040100051a
-000005140100051a000005050602050306020504010005ff05a502020103020205350000
-050206000500060305000602050006040503010005180000050a06000501060005010600
-050401000000050406000504060005040600050401000000050406000501060005010600
-050a01000518000005030602050306070503010005180000050706040509010005180000
-05070601050206020506010005ff05a40202010302020536000005010600050006030500
-06020500060405020100051a000005090600050106000501060005030100050100000503
-06000504060005040600050301000501000005030600050106000501060005090100051a
-0000050206020504060505030100051a00000507060305080100051a0000050a06020506
-010005ff05a5020201030202053500000502060005000603050006020500060405030100
-051800000507060005010600050106000501060005040100000005040600050406000501
-060005010600050401000000050406000501060005010600050106000507010005180000
-05030602050506030505010005180000050906020509010005180000050a060205080100
-05ff05a40202010302020536000005010600050006070500060405020100051a00000506
-060005010600050106000501060005030100050100000503060005040600050106000501
-060005030100050100000503060005010600050106000501060005060100051a00000502
-06030505060105050100051a00000508060205080100051a0000050806020508010005ff
-05a502020103020205350000050206000500060405010600050006040503010005180000
-050406000501060005010600050106000501060005040100000005040600050106000501
-060005010600050106000504010000000504060005010600050106000501060005010600
-050401000518000005040603050d01000518000005090602050901000518000005090602
-0509010005ff05a402020103020205360000050106060501060605020100051a00000503
-060005010600050106000501060005010600050301000501000005030600050106000501
-060005010600050106000503010005010000050306000501060005010600050106000501
-060005030100051a00000503060905060100051a00000508060205080100051a00000514
-010005ff05a5020201030202053500000502060005000602050506000500060205030100
-051800000504060005010600050106000501060005010600050401000000050406000501
-060005010600050106000501060005040100000005040600050106000501060005010600
-050106000504010005180000050506070508010005180000050806040508010005180000
-050906020509010005ff05a4020201030202053600000501060005000602050506000500
-060205020100051a00000503060005010600050106000501060005010600050301000501
-000005030600050106000501060005010600050106000503010005010000050306000501
-060005010600050106000501060005030100051a00000506060405080100051a00000506
-060605060100051a0000050806020508010005ff05a50202010302020535000005020604
-050506040503010005180000051601000000051601000000051601000518000005160100
-0518000005160100051800000516010005ff05a40202010302020536000005140100051a
-00000514010005010000051401000501000005140100051a000005140100051a00000514
-0100051a00000514010005ff05a502020103020205350000051601000518000005160100
-000005160100000005160100051800000516010005180000051601000518000005160100
-05ff05a40202010302020536000005140100051a00000514010005010000051401000501
-000005140100051a000005140100051a000005140100051a00000514010005ff05a50202
-010302020535000005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005180000050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-000005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010000000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000518000005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005180000050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100051800000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005ff05a402020103020205360100050001000500010005000100050001000500
-0100050001000500010005000100050001000500010005000100051a0100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005010100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005010100050001000500010005000100050001000500
-0100050001000500010005000100050001000500010005000100051a0100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0100051a0100050001000500010005000100050001000500010005000100050001000500
-0100050001000500010005000100051a0100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005ff05a5020201030202
-05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
-05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
-05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202
-05ff05ff05ed02020103020205ff05ff05ed020201030202050301ff01ff01e505030202
-01030202050301ff01ff01d1050000000500000005000000050000000500000005000000
-050000000500000005000000050001000503020201030202050301ff01ff01d100000500
-000005000000050000000500000005000000050000000500000005000000050001010503
-020201030202050301020bff0bff0bcb010205000000050e010005000100050302020103
-0202050301020bff0bff0bca000001020000051001010503020201030202050301020b01
-00ff00ff00c9010205000000050e0100050001000503020201030202050301020b0100ff
-00ff00c901020000051001010503020201030202050301020b0100ff00ff00c901020500
-0000050e0100050001000503020201030202050301020b0100ff00ff00c9010200000510
-01010503020201030202050301020b0100ff00ff00c9010205000000050e010005000100
-0503020201030202050301020b0100ff00ff00c9010200000502010a0502010105030202
-01030202050301020b0100ff00ff00c90102050000000502010805020100050001000503
-020201030202050301020b0100ff00ff00c9010200000504010605040101050302020103
-0202050301020b0100ff00ff00c901020500000005040104050401000500010005030202
-01030202050301020b0100ff00ff00c90102000005060102050601010503020201030202
-050301020b0100ff00ff00c9010205000000050601000506010005000100050302020103
-0202050301020b0100ff00ff00c901020000051001010503020201030202050301020b01
-00ff00ff00c9010205000000050e0100050001000503020201030202050301020b0100ff
-00ff00c901020000051001010503020201030202050301020b0100ff00ff00c901020500
-0000050e0100050001000503020201030202050301020b0100ff00ff00c9010200000510
-01010503020201030202050301020b0100ff00ff00c9010205000000050e010005000100
-0503020201030202050301020b0000ff00ff00ca01020000051001010503020201030202
-050301ff01ff01d105000000050001000500010005000100050001000500010005000100
-0500010005000100050001000503020201030202050301ff01ff01d10000050001000500
-010005000100050001000500010005000100050001000500010005000101050302020103
-0202050301ff01ff01e5050302020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed
-020201030202050301ff01ff01e505030202010302020503010005ff05ff05970100054a
-01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103
-0202050301000562010705ff05ff052c0100054a01000503020201030202050301000561
-01020503010205ff05ff052b0100054a0100050302020103020205030100056101010505
-010105ff05ff052b0100054a0100050302020103020205030100056101020503010205ff
-05ff052b0100054a01000503020201030202050301000562010705ff05ff052c0100054a
-01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103
-0202050301000565010105ff05ff052f0100054a01000503020201030202050301000565
-010105ff05ff052f0100054a01000503020201030202050301000565010105ff05ff052f
-0100054a01000503020201030202050301000565010105ff05ff052f0100054a01000503
-020201030202050301000565010105ff05ff052f0100054a010005030202010302020503
-01000565010105ff05ff052f0100054a0100050302020103020205030100056101010500
-010205ff05ff052f0100054a0100050302020103020205030100056101010500010205ff
-05ff052f0100054a01000503020201030202050301000561010505ff05ff052f0100054a
-01000503020201030202050301000561010505ff05ff052f0100054a0100050302020103
-020205030100056101020500010105ff05ff052f0100054a010005030202010302020503
-010005ff05ff05970100054a01000503020201030202050301ff01ff0199054a01000503
-020201030202050301000536000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-00000500000005000000050000000500000005000000050000000a040500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000a04050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-0000050000000500000005000000050000000a0405000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-05000000050000000500000005000000050000000500000005000000050000000a040500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000a04050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500000005000000050000000500000005000000050000000a0405000000010005140100
-050001000500010005000100050001000500010005000100050001000500010005240100
-050302020103020205030100053500000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500000005000000050000000500000005000000050000000500000005000a0301000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000a03010000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-05000000050000000500000005000000050000000500000005000a030100000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-0500000005000a0301000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000a03010000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-05000a030100000005000100051301000500010005000100050001000500010005000100
-050001000500010005000100050000000523010005030202010302020503010005360000
-055e01000a01010205000000055c01000a01010205000000055c01000a01010205000000
-055c01000a01010205000000055c01000a01010205000000055c01000a01010205000000
-010005140100050000000500000005000000050000000500000005000000050000000500
-00000524010005030202010302020503010005350000052d0100052f010005000a010102
-0000052b0102052d010005000a0101020000052b0102052d010005000a0101020000052d
-0100052d010005000a0101020000052a0104052c010005000a0101020000052c0102052c
-010005000a01010200000500010005130100050000000500000005000000050000000500
-000005000000050000000500010005000000052301000503020201030202050301000536
-0000052a0102053001000a010102050000000529010005020100052d01000a0101020500
-00000529010005020100052d01000a01010205000000052b0101052e01000a0101020500
-000005290100053101000a01010205000000052a0100053001000a010102050000000100
-0514010005000000050a0100050000000524010005030202010302020503010005350000
-052d0100052f010005000a0101020000052a010005020100052c010005000a0101020000
-052e0100052c010005000a0101020000052b010005000100052d010005000a0101020000
-052a01000530010005000a0101020000052a01000530010005000a010102000005000100
-0513010005000000050c0100050000000523010005030202010302020503010005360000
-052c0100053001000a010102050000000529010005020100052d01000a01010205000000
-052d0100052d01000a01010205000000052a010005000100052e01000a01010205000000
-05290100053101000a0101020500000005290100053101000a0101020500000001000514
-010005000000050a0100050000000524010005030202010302020503010005350000052d
-0100052f010005000a0101020000052d0100052d010005000a0101020000052c0101052d
-010005000a0101020000052a010005010100052d010005000a0101020000052a0103052d
-010005000a0101020000052a0103052d010005000a010102000005000100051301000500
-0000050c0100050000000523010005030202010302020503010005360000052c01000530
-01000a01010205000000052b0100052f01000a01010205000000052d0100052d01000a01
-0102050000000528010005020100052e01000a01010205000000052d0100052d01000a01
-0102050000000529010005020100052d01000a0101020500000001000514010005000000
-050a0100050000000524010005030202010302020503010005350000052d0100052f0100
-05000a0101020000052b0100052f010005000a0101020000052e0100052c010005000a01
-0102000005290105052c010005000a0101020000052e0100052c010005000a0101020000
-052a010005020100052c010005000a0101020000050001000513010005000000050c0100
-050000000523010005030202010302020503010005360000052c0100053001000a010102
-050000000529010005020100052d01000a010102050000000529010005020100052d0100
-0a01010205000000052c0100052e01000a010102050000000528010005030100052d0100
-0a010102050000000529010005020100052d01000a010102050000000100051401000500
-0000050a0100050000000524010005030202010302020503010005350000052b0104052d
-010005000a0101020000052a0104052c010005000a0101020000052b0102052d01000500
-0a0101020000052c0102052c010005000a0101020000052a0103052d010005000a010102
-0000052b0102052d010005000a0101020000050001000513010005000000050c01000500
-00000523010005030202010302020503010005360000055e01000a01010205000000055c
-01000a01010205000000055c01000a01010205000000055c01000a01010205000000055c
-01000a01010205000000055c01000a0101020500000001000514010005000000050a0100
-050000000524010005030202010302020503010005350000055e010005000a0101020000
-055c010005000a0101020000055c010005000a0101020000055c010005000a0101020000
-055c010005000a0101020000055c010005000a0101020000050001000513010005000000
-050c0100050000000523010005030202010302020503010005360000055e01000a010102
-05000000055c01000a01010205000000055c01000a01010205000000055c01000a010102
-05000000055c01000a01010205000000055c01000a010102050000000100050e01000504
-010005000000050a0100050000000524010005030202010302020503010005350000055e
-010005000a0101020000055c010005000a0101020000055c010005000a0101020000055c
-010005000a0101020000055c010005000a0101020000055c010005000a01010200000500
-0100050d01010503010005000000050c0100050000000523010005030202010302020503
-010005360000055e01000a01010205000000055c01000a01010205000000055c01000a01
-010205000000055c01000a01010205000000055c01000a01010205000000055c01000a01
-0102050000000100050c0100050001000504010005000000050001000500010005000100
-050001000500010005000100050000000524010005030202010302020503010005350000
-055e010005000a0101020000055c010005000a0101020000055c010005000a0101020000
-055c010005000a0101020000055c010005000a0101020000055c010005000a0101020000
-05000100050e010005030100050000000500000005000000050000000500000005000000
-050000000500010005000000052301000503020201030202050301000536000005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-05000100050001000a010102050000000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005000100050001000500010005000100050001000a0101020500000005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000a01010205000000050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-05000100050001000500010005000100050001000a010102050000000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0a0101020500000005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000a010102050000000100050e0100050401000500
-0000050a0100050000000524010005030202010302020503010005350000050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-01000500010005000a000103000005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0100050001000500010005000100050001000500010005000a0001030000050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000a00010300000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-01000500010005000100050001000500010005000a000103000005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0a0001030000050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000a000103000005000100050e0100050301000500
-0000050c0100050000000523010005030202010302020503010005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000063010000630100
-0063010000630100006301000063010000020100050e01000504010005000000050a0100
-050000000524010005030202010302020503010000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050001000063010000630100006301000063
-0100006301000063010000020100050e01000503010005000000050c0100050000000523
-010005030202010302020503010005000000053201000500006301000063010000630100
-00630100006301000063010000020100050c01040502010005000000050a010005000000
-052401000503020201030202050301000000053401000063010000630100006301000063
-01000063010000630100000201000513010005000000050c010005000000052301000503
-020201030202050301000500000005170100051901000500006301000063010000630100
-006301000063010000630100000201000514010005000000050a01000500000005240100
-050302020103020205030100000005160102051a0100000f010200030102004901000007
-010000230100000b010200030102001f0100006301000063010000630100006301000002
-01000513010005000000050c010005000000052301000503020201030202050301000500
-0000051701000519010005000011010000050100004901000007010000230100000d0100
-00050100001f010000630100006301000063010000630100000201000514010005000000
-050a01000500000005240100050302020103020205030100000005180100051a01000008
-010200050100000501000003010200420100000701000000010100030102000201000000
-01010002010000000101000301020002010400010100000201000004010000050100001f
-010000630100006301000063010000630100000201000513010005000000050c01000500
-000005230100050302020103020205030100050000000517010005190100050000070100
-000201000004010000050100000201000002010000410100000701010001010000010100
-000201000001010100010100000101010001010000010100000201000003010000030100
-000201000004010000050100001f01000063010000630100006301000063010000020100
-0514010005000000050a0100050000000524010005030202010302020503010000000518
-0100051a0100000701000002010000040100000501000002010000020100004101000007
-010000020100000101000002010000010100000501000002010000010100000701000003
-0100000201000004010000050100001f0100006301000063010000630100006301000002
-01000513010005000000050c010005000000052301000503020201030202050301000500
-000005170100051901000500000701000002010000040100000501000002010400410100
-000701000002010000010100000201000001010000050100000201000002010200040100
-00030100000201000004010000050100001f010000630100006301000063010000630100
-000201000514010005000000050001000500010005000100050001000500010005000100
-0500000005240100050302020103020205030100000005180100051a0100000701000002
-010000040100000501000002010000450100000701000002010000010100000201000001
-01000005010000020100000501000003010000030100000201000004010000050100001f
-010000630100006301000063010000630100000201000513010005000000050001000500
-010005000100050001000500010005000100050001000500000005230100050302020103
-020205030100050000000515010405170100050000070100000201000004010000050100
-000201000002010000410100000701000002010000010100000201000001010000050100
-0002010000010100000201000003010000030100000101010004010000050100001f0100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-010302020503010000000534010000080102000501000005010000030102004201000007
-010000020100000201020002010000050100000201000002010200050101000201010000
-01000004010000050100001f010000630100006301000063010000630100000201000513
-01000500030e050000000523010005030202010302020503010005000000053201000500
-0063010000630100006301000063010000630100006301000002010005140100030e0000
-052401000503020201030202050301000000053401000063010000630100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-020205030100050000000532010005000063010000630100006301000063010000630100
-006301000002010005140100030e00000524010005030202010302020503010000000534
-010000630100006301000063010000630100006301000063010000020100051301000500
-030e05000000052301000503020201030202050301000500000005320100050000630100
-00630100006301000063010000630100006301000002010005140100030e000005240100
-050302020103020205030100000005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010000630100006301000063010000630100006301000063
-010000020100051301000500030e05000000052301000503020201030202050301000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-01ff01ff016105140100030e000005240100050302020103020205030100050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000630100
-006301000063010000630100006301000063010000020100051301000500030e05000000
-052301000503020201030202050301000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000100006301000063010000630100006301000063
-0100006301000002010005140100030e0000052401000503020201030202050301000500
-000005320100050000630100006301000063010000630100006301000063010000020100
-051301000500030e05000000052301000503020201030202050301000000053401000063
-010000630100006301000063010000630100006301000002010005140100030e00000524
-010005030202010302020503010005000000051601020518010005000063010000630100
-0063010000630100006301000063010000020100051301000500030e0500000005230100
-0503020201030202050301000000051601000502010005180100001f0100000301020003
-010200340100000f01020050010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000500000005150100050201000517
-010005000026010000050100003401000011010000500100006301000063010000630100
-0063010000020100051301000500030e0500000005230100050302020103020205030100
-000005160100050201000518010000080101000001000001010000020100000101000000
-010100030102000501000005010000030102002d01000008010200050100000201000002
-01000002010200030102000301020002010000000101002d010000630100006301000063
-0100006301000002010005140100030e0000052401000503020201030202050301000500
-000005180100051801000500000701000001010100010100000201000001010100010100
-0004010000050100000501000002010000020100002c0100000701000002010000040100
-000201000002010000010100000201000001010000020100000101000002010000010101
-00010100002c01000063010000630100006301000063010000020100051301000500030e
-0500000005230100050302020103020205030100000005180100051a0100000701000002
-01000001010000020100000101000002010000040100000501000005010000060100002c
-010000070100000801000002010000020100000101000005010000050100000201000001
-010000020100002c0100006301000063010000630100006301000002010005140100030e
-0000052401000503020201030202050301000500000005160100051a0100050000070100
-000201000001010000020100000101000002010000040100000501000005010000030103
-002c01000008010200050100000201000002010000020102000301020002010400010100
-00020100002c01000063010000630100006301000063010000020100051301000500030e
-050000000523010005030202010302020503010000000516010005020100051801000007
-010000020100000101000002010000010100000201000004010000050100000501000002
-010000020100002c0100000b010000040100000201000002010000050100000501000001
-01000005010000020100002c010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000500000005150104051701000500
-000701000001010100010100000101010001010000020100000401000005010000050100
-0002010000020100002c0100000701000002010000040100000201000001010100010100
-00020100000101000002010000010100000201000001010000020100002c010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-010302020503010000000534010000080101000001000002010100000100000101000002
-010000040100000501000005010000030103002c01000008010200050100000301010000
-01000002010200030102000301020002010000020100002c010000630100006301000063
-0100006301000002010005140100030e0000052401000503020201030202050301000500
-0000053201000500000b0100005601000063010000630100006301000063010000630100
-00020100051301000500030e050000000523010005030202010302020503010000000534
-010000070100000201000056010000630100006301000063010000630100006301000002
-010005140100030e00000524010005030202010302020503010005000000053201000500
-000801020057010000630100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100000005340100006301000063
-0100006301000063010000630100006301000002010005140100030e0000052401000503
-020201030202050301000500000005320100050000630100006301000063010000630100
-006301000063010000020100051301000500030e05000000052301000503020201030202
-050301000000050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100006301000063010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-01000500010005000100050001000500010005000100050001ff01ff0161051301000500
-030e05000000052301000503020201030202050301000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500006301000063010000630100
-0063010000630100006301000002010005140100030e0000052401000503020201030202
-050301000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000100006301000063010000630100006301000063010000630100000201000513
-01000500030e050000000523010005030202010302020503010005000000053201000500
-0063010000630100006301000063010000630100006301000002010005140100030e0000
-052401000503020201030202050301000000053401000063010000630100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-020205030100050000000516010205180100050000630100006301000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-00000516010005020100051801000063010000070100005a010000630100006301000063
-01000063010000020100051301000500030e050000000523010005030202010302020503
-010005000000051901000517010005000063010000070100005a01000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-0000051a0100051801000008010200020100000001010002010000000101000301020042
-010000070100000001010002010000000101000301020002010100000100000201010000
-010000030102003401000063010000630100006301000063010000020100051301000500
-030e05000000052301000503020201030202050301000500000005170101051801000500
-000701000002010000010101000101000001010100010100000101000002010000410100
-000701010001010000010101000101000001010000020100000101000000010000000100
-000101000000010000000100000101000002010000330100006301000063010000630100
-006301000002010005140100030e0000052401000503020201030202050301000000051a
-010005180100000b01000001010000020100000101000002010000050100004101000007
-010000020100000101000005010000020100000101000000010000000100000101000000
-010000000100000501000033010000630100006301000063010000630100000201000513
-01000500030e050000000523010005030202010302020503010005000000051901000517
-010005000008010300010100000201000001010000020100000201030041010000070100
-000201000001010000050100000201000001010000000100000001000001010000000100
-000001000002010300330100006301000063010000630100006301000002010005140100
-030e00000524010005030202010302020503010000000516010005020100051801000007
-010000020100000101000002010000010100000201000001010000020100004101000007
-010000020100000101000005010000020100000101000000010000000100000101000000
-010000000100000101000002010000330100006301000063010000630100006301000002
-0100051301000500030e0500000005230100050302020103020205030100050000000516
-010205180100050000070100000201000001010000020100000101000002010000010100
-000201000041010000070101000101000001010000050100000201000001010000000100
-000001000001010000000100000001000001010000020100003301000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-000005340100000801030001010000020100000101000002010000020103004101000007
-010000000101000201000006010200020100000001000000010000010100000001000000
-010000020103003301000063010000630100006301000063010000020100051301000500
-030e05000000052301000503020201030202050301000500000005320100050000630100
-00630100006301000063010000630100006301000002010005140100030e000005240100
-050302020103020205030100000005340100006301000063010000630100006301000063
-01000063010000020100051301000500030e050000000523010005030202010302020503
-010005000000053201000500006301000063010000630100006301000063010000630100
-0002010005140100030e0000052401000503020201030202050301000000053401000063
-0100006301000063010000630100006301000063010000020100051301000500030e0500
-000005230100050302020103020205030100050000000532010005000063010000630100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-010302020503010000000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000063010000630100006301000063010000630100006301000002
-0100051301000500030e0500000005230100050302020103020205030100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001ff01ff
-016105140100030e00000524010005030202010302020503010005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000063010000630100
-0063010000630100006301000063010000020100051301000500030e0500000005230100
-050302020103020205030100000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500010000630100006301000063010000630100006301000063
-01000002010005140100030e000005240100050302020103020205030100050000000532
-010005000063010000630100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100000005340100006301000063
-0100006301000063010000630100006301000002010005140100030e0000052401000503
-020201030202050301000500000005180100051801000500006301000063010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-010302020503010000000518010105190100001001000006010000490100000e0100001c
-0100000b010200030102001f010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000500000005160100050001000518
-010005000010010000510100000e0100001c0100000d010000050100001f010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-010302020503010000000517010005000100051901000008010200020104000201020002
-01000000010100030102003b010000080102000201000001010000030102000201000000
-0101000301020002010400010100000201000004010000050100001f0100006301000063
-010000630100006301000002010005140100030e00000524010005030202010302020503
-010005000000051501000501010005180100050000070100000201000003010000060100
-00020101000101000001010000020100003a010000070100000201000001010000000100
-000301000002010000010101000101000001010000020100000301000003010000020100
-0004010000050100001f0100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100000005150100050201000519
-0100000701000007010000060100000201000002010000050100003a0100000701000005
-010100080100000101000002010000010100000701000003010000020100000401000005
-0100001f0100006301000063010000630100006301000002010005140100030e00000524
-010005030202010302020503010005000000051401050517010005000008010200040100
-00060100000201000002010000020103003a010000080102000201010005010300010100
-00020100000201020004010000030100000201000004010000050100001f010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-010302020503010000000519010005190100000b01000003010000060100000201000002
-01000001010000020100003a0100000b0100000101000000010000030100000201000001
-010000020100000501000003010000030100000201000004010000050100001f01000063
-01000063010000630100006301000002010005140100030e000005240100050302020103
-020205030100050000000517010205170100050000070100000201000003010000060100
-00020100000201000001010000020100003a010000070100000201000001010000010100
-000201000002010000010100000201000001010000020100000301000003010000010101
-0004010000050100001f0100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100000005340100000801020005
-010100040100000201000002010000020103003a01000008010200020100000201000002
-01030001010000020100000201020005010100020101000001000004010000050100001f
-0100006301000063010000630100006301000002010005140100030e0000052401000503
-020201030202050301000500000005320100050000630100006301000063010000630100
-006301000063010000020100051301000500030e05000000052301000503020201030202
-050301000000053401000063010000630100006301000063010000630100006301000002
-010005140100030e00000524010005030202010302020503010005000000053201000500
-00630100006301000063010000630100006301000063010000020100051301000500030e
-050000000523010005030202010302020503010000000534010000630100006301000063
-01000063010000630100006301000002010005140100030e000005240100050302020103
-020205030100050000000532010005000063010000630100006301000063010000630100
-0063010000020100051301000500030e0500000005230100050302020103020205030100
-000005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-01000063010000630100006301000063010000630100006301000002010005140100030e
-000005240100050302020103020205030100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001ff01ff0161051301000500030e0500
-0000052301000503020201030202050301000a3600630100006301000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-0a3501000063010000630100006301000063010000630100006301000002010005130100
-0500030e05000000052301000503020201030202050301000a0101340063010000630100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-01030202050301000a010134006301000063010000630100006301000063010000630100
-00020100051301000500030e05000000052301000503020201030202050301000a010115
-000401190063010000630100006301000063010000630100006301000002010005140100
-030e0000052401000503020201030202050301000a0101150000011d00070100000e0100
-0014010000340100002b0102003401000063010000630100006301000063010000020100
-051301000500030e05000000052301000503020201030202050301000a0101150000011d
-00070100000e0100004a0100002d01000034010000630100006301000063010000630100
-0002010005140100030e0000052401000503020201030202050301000a0101150000011d
-000701000001010000030102000201040002010200020100000001010003010200020100
-000001010003010200260100000701000002010000010100000001010002010000000101
-00030102000301020005010000030102002d010000630100006301000063010000630100
-00020100051301000500030e05000000052301000503020201030202050301000a010115
-0003011a0007010000000100000301000002010000030100000301000002010000010101
-000101000004010000020101000101000001010000020100002501000007010000020100
-000101010001010000010101000101000001010000020100000101000002010000040100
-0002010000020100002c0100006301000063010000630100006301000002010005140100
-030e0000052401000503020201030202050301000a010119000001190007010100080100
-000301000007010000010100000801000002010000020100000501000025010000070100
-000201000001010000020100000101000002010000010100000901000004010000060100
-002c01000063010000630100006301000063010000020100051301000500030e05000000
-052301000503020201030202050301000a01011900000119000701010005010300030100
-000401030001010000080100000201000002010000020103002501000007010000020100
-0001010000020100000101000002010000020102000301030004010000030103002c0100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-01030202050301000a010114000001030000011900070100000001000003010000020100
-000301000003010000020100000101000008010000020100000201000001010000020100
-002501000007010000020100000101000002010000010100000201000005010000010100
-00020100000401000002010000020100002c010000630100006301000063010000630100
-00020100051301000500030e05000000052301000503020201030202050301000a010115
-0003011a0007010000010100000201000002010000030100000301000002010000010100
-000801000002010000020100000101000002010000250100000701000001010100010101
-000101000001010100010100000101000002010000010100000201000004010000020100
-00020100002c0100006301000063010000630100006301000002010005140100030e0000
-052401000503020201030202050301000a01013400070100000201000002010300040101
-000201030001010000080100000201000002010000020103002501000008010100000100
-0001010000000101000201000000010100030102000301030004010000030103002c0100
-0063010000630100006301000063010000020100051301000500030e0500000005230100
-0503020201030202050301000a01013400630100000e010000050100004c010000630100
-0063010000630100006301000002010005140100030e0000052401000503020201030202
-050301000a01013400630100000e010000050100004c0100006301000063010000630100
-0063010000020100051301000500030e0500000005230100050302020103020205030100
-0a01013400630100000e010000050100004c010000630100006301000063010000630100
-0002010005140100030e0000052401000503020201030202050301000a01013400630100
-006301000063010000630100006301000063010000020100051301000500030e05000000
-052301000503020201030202050301000a01013400630100006301000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-0a0101340063010000630100006301000063010000630100006301000002010005130100
-0500030e05000000052301000503020201030202050301000a0001ff01ff019705140100
-030e00000524010005030202010302020503010005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000063010000630100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-020205030100000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500010000630100006301000063010000630100006301000063010000020100
-05140100030e000005240100050302020103020205030100050000000532010005000063
-0100006301000063010000630100006301000063010000020100051301000500030e0500
-000005230100050302020103020205030100000005340100006301000063010000630100
-0063010000630100006301000002010005140100030e0000052401000503020201030202
-050301000500000005170102051701000500006301000063010000630100006301000063
-01000063010000020100051301000500030e050000000523010005030202010302020503
-0100000005170100051b0100000a0100001a01010004010000340100000f0102000c0100
-00020100003e0100006301000063010000630100006301000002010005140100030e0000
-052401000503020201030202050301000500000005150100051b0100050000250100003c
-01000011010000100100003e010000630100006301000063010000630100000201000513
-01000500030e0500000005230100050302020103020205030100000005160100051c0100
-000801020003010200030102000301020004010000040102000201000000010100030102
-0026010000080102000501000002010000020100000201020002010000010100003b0100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-01030202050301000500000005150103051801000500000a010000020100000201000001
-010000020100000101000002010000010104000401000002010100010100000101000002
-010000250100000701000002010000040100000201000002010000040100000201000000
-0100003c01000063010000630100006301000063010000020100051301000500030e0500
-0000052301000503020201030202050301000000051601000502010005180100000a0100
-000201000002010000010100000501000002010000030100000601000002010000020100
-000101000002010000250100000b01000004010000020100000201000004010000020101
-003d0100006301000063010000630100006301000002010005140100030e000005240100
-050302020103020205030100050000000515010005020100051701000500000a01000002
-010000020100000201020002010400030100000601000002010000020100000101040025
-0100000801030004010000030100000001000005010000020101003d0100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-0202050301000000051601000502010005180100000a0100000201000002010000050100
-000101000007010000060100000201000002010000010100002901000007010000020100
-000401000003010000000100000501000002010000000100003c01000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-0500000005160102051801000500000a0100000201000002010000010100000201000001
-010000020100000301000006010000020100000201000001010000020100002501000007
-0100000201000004010000040100000601000002010000010100003b0100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-020205030100000005340100000a01000003010200030102000301020004010000060100
-000201000002010000020102002601000008010300040100000401000006010000020100
-00020100003a0100006301000063010000630100006301000002010005140100030e0000
-0524010005030202010302020503010005000000053201000500000a0100005701000063
-01000063010000630100006301000063010000020100051301000500030e050000000523
-010005030202010302020503010000000534010000070100000101000057010000630100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-010302020503010005000000053201000500000801010058010000630100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-020205030100000005340100006301000063010000630100006301000063010000630100
-0002010005140100030e0000052401000503020201030202050301000500000005320100
-050000630100006301000063010000630100006301000063010000020100051301000500
-030e05000000052301000503020201030202050301000000050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100006301000063010000630100
-0063010000630100006301000002010005140100030e0000052401000503020201030202
-050301000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-05000100050001ff01ff0161051301000500030e05000000052301000503020201030202
-050301000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500006301000063010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000100006301000063010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-010302020503010005000000053201000500006301000063010000630100006301000063
-0100006301000002010005140100030e0000052401000503020201030202050301000000
-053401000063010000630100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100050000000515010405170100
-05000063010000630100006301000063010000630100006301000002010005140100030e
-0000052401000503020201030202050301000000051601000502010005180100000a0101
-00130100000b0100000201000030010000250100000b0102000301020026010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-010302020503010005000000051801000518010005000009010000150100000f01000030
-010000250100000d01000005010000260100006301000063010000630100006301000002
-010005140100030e00000524010005030202010302020503010000000519010005190100
-000901000003010000000101000301020003010100000100000101000000010100030102
-0002010000010100002d0100000701000000010100030102000201000000010100020100
-000001010002010400010100000201000004010000050100002601000063010000630100
-006301000063010000020100051301000500030e05000000052301000503020201030202
-050301000500000005180100051801000500000701040001010100010100000101000002
-010000010100000101010001010100010100000401000002010000000100002e01000007
-010100010100000101000002010000010101000101000001010100010100000301000003
-010000020100000401000005010000260100006301000063010000630100006301000002
-010005140100030e00000524010005030202010302020503010000000519010005190100
-000901000003010000050100000201000001010000020100000101000008010000020101
-002f01000007010000020100000101000002010000010100000501000007010000030100
-000201000004010000050100002601000063010000630100006301000063010000020100
-051301000500030e05000000052301000503020201030202050301000500000005170100
-051901000500000901000003010000050104000101000002010000010100000801000002
-0101002f0100000701000002010000010100000201000001010000050100000701000003
-010000020100000401000005010000260100006301000063010000630100006301000002
-010005140100030e000005240100050302020103020205030100000005180100051a0100
-000901000003010000050100000501000002010000010100000801000002010000000100
-002e01000007010000020100000101000002010000010100000501000007010000030100
-000201000004010000050100002601000063010000630100006301000063010000020100
-051301000500030e05000000052301000503020201030202050301000500000005170100
-051901000500000901000003010000050100000201000001010000010101000101000008
-01000002010000010100002d010000070100000201000001010000020100000101000005
-010000070100000301000001010100040100000501000026010000630100006301000063
-0100006301000002010005140100030e0000052401000503020201030202050301000000
-053401000009010000030100000601020003010100000100000101000008010000020100
-00020100002c010000070100000201000002010200020100000501000008010100020101
-000001000004010000050100002601000063010000630100006301000063010000020100
-051301000500030e05000000052301000503020201030202050301000500000005320100
-05000063010000630100006301000063010000630100006301000002010005140100030e
-000005240100050302020103020205030100000005340100006301000063010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-010302020503010005000000053201000500006301000063010000630100006301000063
-0100006301000002010005140100030e0000052401000503020201030202050301000000
-053401000063010000630100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100050000000532010005000063
-010000630100006301000063010000630100006301000002010005140100030e00000524
-010005030202010302020503010000000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000063010000630100006301000063010000630100
-0063010000020100051301000500030e0500000005230100050302020103020205030100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001ff01ff016105140100030e0000052401000503020201030202050301000e360063
-0100006301000063010000630100006301000063010000020100051301000500030e0500
-0000052301000503020201030202050301000e350d000063010000630100006301000063
-010000630100006301000002010005140100030e00000524010005030202010302020503
-01000e0107320d0100630100006301000063010000630100006301000063010000020100
-051301000500030e05000000052301000503020201030202050301000e0107320d010063
-010000630100006301000063010000630100006301000002010005140100030e00000524
-01000503020201030202050301000e010716010207180d01006301000063010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-01030202050301000e01071501000702010007170d01006301000010010000200102002d
-0100006301000063010000630100006301000002010005140100030e0000052401000503
-020201030202050301000e01071501000702010007170d01006301000010010000220100
-002d01000063010000630100006301000063010000020100051301000500030e05000000
-052301000503020201030202050301000e01071501000702010007170d01000701000000
-010100030102000201000000010100490100000801020002010400010100000201000001
-01000000010100030102000201000000010100050100000301020002010000000101001f
-0100006301000063010000630100006301000002010005140100030e0000052401000503
-020201030202050301000e010716010207180d0100070101000101000001010000020100
-000101010001010000480100000701000002010000030100000301000002010000010101
-000101000001010000020100000101010001010000040100000201000002010000010101
-00010100001e01000063010000630100006301000063010000020100051301000500030e
-05000000052301000503020201030202050301000e01071501000702010007170d010007
-010000020100000101000002010000010100004c01000007010000070100000301000002
-010000010100000501000002010000010100000201000004010000060100000101000002
-0100001e0100006301000063010000630100006301000002010005140100030e00000524
-01000503020201030202050301000e01071501000702010007170d010007010000020100
-0001010400010100004c0100000801020004010000030100000201000001010000050104
-000101000002010000040100000301030001010000020100001e01000063010000630100
-006301000063010000020100051301000500030e05000000052301000503020201030202
-050301000e01071501000702010007170d0100070100000201000001010000050100004c
-0100000b0100000301000003010000020100000101000005010000050100000201000004
-010000020100000201000001010000020100001e01000063010000630100006301000063
-01000002010005140100030e0000052401000503020201030202050301000e0107160102
-07180d010007010100010100000101000002010000010100004c01000007010000020100
-000301000003010000010101000101000005010000020100000101010001010000040100
-00020100000201000001010000020100001e010000630100006301000063010000630100
-00020100051301000500030e05000000052301000503020201030202050301000e010732
-0d0100070100000001010003010200020100004c01000008010200050101000201010000
-01000001010000060102000201000000010100050100000301030001010000020100001e
-0100006301000063010000630100006301000002010005140100030e0000052401000503
-020201030202050301000e0107320d0100070100005a0100002a01000037010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-01030202050301000e0107320d0100070100005a0100002a010000370100006301000063
-010000630100006301000002010005140100030e00000524010005030202010302020503
-01000e0107320d0100070100005a0100002a010000370100006301000063010000630100
-0063010000020100051301000500030e0500000005230100050302020103020205030100
-0e0107320d01006301000063010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000e0107320d010063010000630100
-0063010000630100006301000063010000020100051301000500030e0500000005230100
-0503020201030202050301000e010d340063010000630100006301000063010000630100
-006301000002010005140100030e0000052401000503020201030202050301000e000d35
-01ff01ff0161051301000500030e05000000052301000503020201030202050301000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-0063010000630100006301000063010000630100006301000002010005140100030e0000
-052401000503020201030202050301000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000100006301000063010000630100006301000063
-01000063010000020100051301000500030e050000000523010005030202010302020503
-010005000000053201000500006301000063010000630100006301000063010000630100
-0002010005140100030e0000052401000503020201030202050301000000053401000063
-0100006301000063010000630100006301000063010000020100051301000500030e0500
-000005230100050302020103020205030100050000000516010205180100050000630100
-00630100006301000063010000630100006301000002010005140100030e000005240100
-0503020201030202050301000000051601000502010005180100001f0100004201000012
-010000170102003401000063010000630100006301000063010000020100051301000500
-030e05000000052301000503020201030202050301000500000005150100050201000517
-010005000063010000120100001901000034010000630100006301000063010000630100
-0002010005140100030e0000052401000503020201030202050301000000051601000502
-01000518010000070101000001000003010200020100000001010003010200030102003b
-010000080102000301010000010000020102000201000000010100020100000001010005
-010000030102000201000000010100260100006301000063010000630100006301000002
-0100051301000500030e0500000005230100050302020103020205030100050000000515
-010005020100051701000500000701000000010000000100000101000002010000010101
-00010100000401000002010000020100003a010000070100000201000001010000010101
-000101000002010000010101000101000001010100010100000401000002010000020100
-000101010001010000250100006301000063010000630100006301000002010005140100
-030e00000524010005030202010302020503010000000517010305180100000701000000
-01000000010000050100000101000008010000060100003a010000070100000201000001
-010000020100000101000002010000010100000201000001010000020100000401000006
-010000010100000201000025010000630100006301000063010000630100000201000513
-01000500030e050000000523010005030202010302020503010005000000051901000517
-0100050000070100000001000000010000020103000101000008010000030103003a0100
-000701000002010000010100000201000001010400010100000201000001010000020100
-000401000003010300010100000201000025010000630100006301000063010000630100
-0002010005140100030e0000052401000503020201030202050301000000051901000519
-010000070100000001000000010000010100000201000001010000080100000201000002
-0100003a0100000701000002010000010100000201000001010000050100000201000001
-010000020100000401000002010000020100000101000002010000250100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-020205030100050000000515010205190100050000070100000001000000010000010100
-0002010000010100000801000002010000020100003a0100000701000002010000010100
-000101010001010000020100000101000002010000010101000101000004010000020100
-000201000001010000020100002501000063010000630100006301000063010000020100
-05140100030e000005240100050302020103020205030100000005340100000701000000
-01000000010000020103000101000008010000030103003a010000080102000301010000
-010000020102000201000002010000010100000001010005010000030103000101000002
-0100002501000063010000630100006301000063010000020100051301000500030e0500
-000005230100050302020103020205030100050000000532010005000063010000230100
-003e0100006301000063010000630100006301000002010005140100030e000005240100
-0503020201030202050301000000053401000063010000230100003e0100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-020205030100050000000532010005000063010000230100003e01000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-000005340100006301000063010000630100006301000063010000630100000201000513
-01000500030e050000000523010005030202010302020503010005000000053201000500
-0063010000630100006301000063010000630100006301000002010005140100030e0000
-052401000503020201030202050301000000050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100006301000063010000630100006301000063
-01000063010000020100051301000500030e050000000523010005030202010302020503
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0100050001ff01ff016105140100030e0000052401000503020201030202050301000c36
-00630100006301000063010000630100006301000063010000020100051301000500030e
-05000000052301000503020201030202050301000c350900006301000063010000630100
-0063010000630100006301000002010005140100030e0000052401000503020201030202
-050301000c01083209010063010000630100006301000063010000630100006301000002
-0100051301000500030e05000000052301000503020201030202050301000c0108320901
-0063010000630100006301000063010000630100006301000002010005140100030e0000
-052401000503020201030202050301000c01081301000804010208150901006301000063
-01000063010000630100006301000063010000020100051301000500030e050000000523
-01000503020201030202050301000c010811010208030100080201000814090100070100
-0016010000420100000701000006010200100100000c0100003001000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-0c010813010008030100080201000814090100070100005a010000070100000801000010
-0100000c0100003001000063010000630100006301000063010000020100051301000500
-030e05000000052301000503020201030202050301000c01081301000803010008020100
-081409010007010000010100000301020002010000000101000301020002010000000101
-003b01000007010000000101000501000003010200030102000201000001010000030102
-000201000000010100030102000201000000010100030101000001000017010000630100
-0063010000630100006301000002010005140100030e0000052401000503020201030202
-050301000c01081301000803010008020100081409010007010000000100000301000002
-01000001010100010100000401000002010100010100003a010000070101000101000004
-010000020100000201000001010000020100000101000000010000030100000201000001
-010100010100000101000002010000010101000101000001010000010101001701000063
-010000630100006301000063010000020100051301000500030e05000000052301000503
-020201030202050301000c01081301000803010008020100081409010007010100080100
-00010100000801000002010000020100003a010000070100000201000004010000060100
-000101000005010100040100000201000001010000020100000101000002010000010100
-000501000002010000170100006301000063010000630100006301000002010005140100
-030e0000052401000503020201030202050301000c010813010008030100080201000814
-0901000701010005010300010100000801000002010000020100003a0100000701000002
-010000040100000301030001010000050101000401040001010000020100000101040001
-010000050100000201000017010000630100006301000063010000630100000201000513
-01000500030e05000000052301000503020201030202050301000c010813010008030100
-080201000814090100070100000001000003010000020100000101000008010000020100
-00020100003a010000070100000201000004010000020100000201000001010000050100
-000001000003010000050100000201000001010000050100000501000002010000170100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-01030202050301000c010811010408020102081509010007010000010100000201000002
-010000010100000801000002010000020100003a01000007010100010100000401000002
-010000020100000101000002010000010100000101000002010000020100000101010001
-010000010100000201000001010000050100000101010017010000630100006301000063
-01000063010000020100051301000500030e050000000523010005030202010302020503
-01000c010832090100070100000201000002010300010100000801000002010000020100
-003a01000007010000000101000501000003010300020102000201000002010000020102
-000201000000010100030102000201000006010100000100001701000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-0c010832090100630100004a010000170100006301000063010000630100006301000002
-0100051301000500030e05000000052301000503020201030202050301000c0108320901
-006301000046010000020100001701000063010000630100006301000063010000020100
-05140100030e0000052401000503020201030202050301000c0108320901006301000047
-0102001801000063010000630100006301000063010000020100051301000500030e0500
-0000052301000503020201030202050301000c0108320901006301000063010000630100
-0063010000630100006301000002010005140100030e0000052401000503020201030202
-050301000c01083209010063010000630100006301000063010000630100006301000002
-0100051301000500030e05000000052301000503020201030202050301000c0109340063
-010000630100006301000063010000630100006301000002010005140100030e00000524
-01000503020201030202050301000c00093501ff01ff0161051301000500030e05000000
-052301000503020201030202050301000c36006301000063010000630100006301000063
-0100006301000002010005140100030e0000052401000503020201030202050301000c35
-090000630100006301000063010000630100006301000063010000020100051301000500
-030e05000000052301000503020201030202050301000c01083209010063010000630100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-01030202050301000c010832090100630100006301000063010000630100006301000063
-010000020100051301000500030e05000000052301000503020201030202050301000c01
-081301000805010008160901006301000063010000630100006301000063010000630100
-0002010005140100030e0000052401000503020201030202050301000c01081101020803
-01020816090100170100004a010000070100003001020026010000630100006301000063
-01000063010000020100051301000500030e050000000523010005030202010302020503
-01000c0108130100080501000816090100170100004a0100000701000032010000260100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-01030202050301000c010813010008050100081609010007010100000100000301020002
-010400020102004201000007010000000101000201000000010100030102000201010000
-010000020101000001000003010200020100000001010005010000030102000201000000
-0101001801000063010000630100006301000063010000020100051301000500030e0500
-0000052301000503020201030202050301000c0108130100080501000816090100070100
-000001000000010000010100000201000003010000030100000201000041010000070101
-000101000001010100010100000101000002010000010100000001000000010000010100
-000001000000010000010100000201000001010100010100000401000002010000020100
-000101010001010000170100006301000063010000630100006301000002010005140100
-030e0000052401000503020201030202050301000c010813010008050100081609010007
-010000000100000001000005010000030100000301000045010000070100000201000001
-010000050100000201000001010000000100000001000001010000000100000001000005
-010000010100000201000004010000060100000101000002010000170100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-0202050301000c0108130100080501000816090100070100000001000000010000020103
-000301000004010200420100000701000002010000010100000501000002010000010100
-000001000000010000010100000001000000010000020103000101000002010000040100
-000301030001010000020100001701000063010000630100006301000063010000020100
-05140100030e0000052401000503020201030202050301000c0108130100080501000816
-090100070100000001000000010000010100000201000003010000070100004101000007
-010000020100000101000005010000020100000101000000010000000100000101000000
-010000000100000101000002010000010100000201000004010000020100000201000001
-010000020100001701000063010000630100006301000063010000020100051301000500
-030e05000000052301000503020201030202050301000c01081101040801010408140901
-000701000000010000000100000101000002010000030100000301000002010000410100
-000701010001010000010100000501000002010000010100000001000000010000010100
-000001000000010000010100000201000001010100010100000401000002010000020100
-000101000002010000170100006301000063010000630100006301000002010005140100
-030e0000052401000503020201030202050301000c010832090100070100000001000000
-010000020103000401010002010200420100000701000000010100020100000601020002
-010000000100000001000001010000000100000001000002010300010100000001010005
-010000030103000101000002010000170100006301000063010000630100006301000002
-0100051301000500030e05000000052301000503020201030202050301000c0108320901
-006301000031010000300100006301000063010000630100006301000002010005140100
-030e0000052401000503020201030202050301000c010832090100630100003101000030
-01000063010000630100006301000063010000020100051301000500030e050000000523
-01000503020201030202050301000c010832090100630100003101000030010000630100
-0063010000630100006301000002010005140100030e0000052401000503020201030202
-050301000c01083209010063010000630100006301000063010000630100006301000002
-0100051301000500030e05000000052301000503020201030202050301000c0108320901
-0063010000630100006301000063010000630100006301000002010005140100030e0000
-052401000503020201030202050301000c01093400630100006301000063010000630100
-006301000063010000020100051301000500030e05000000052301000503020201030202
-050301000c00093501ff01ff016105140100030e00000524010005030202010302020503
-010005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000063010000630100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500010000630100006301000063
-01000063010000630100006301000002010005140100030e000005240100050302020103
-020205030100050000000532010005000063010000630100006301000063010000630100
-0063010000020100051301000500030e0500000005230100050302020103020205030100
-000005340100006301000063010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000500000005130100050401020515
-010005000063010000630100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100000005120102050301000502
-010005150100006301000063010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000500000005130100050301000502
-010005140100050000630100006301000063010000630100006301000063010000020100
-051301000500030e05000000052301000503020201030202050301000000051401000503
-010005020100051501000063010000630100006301000063010000630100006301000002
-010005140100030e00000524010005030202010302020503010005000000051301000506
-010005150100050000630100006301000063010000630100006301000063010000020100
-051301000500030e05000000052301000503020201030202050301000000051401000505
-010005170100006301000063010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000500000005130100050401000517
-010005000063010000630100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100000005140100050301000502
-010005150100006301000063010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000500000005110104050101040514
-010005000063010000630100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100000005340100006301000063
-0100006301000063010000630100006301000002010005140100030e0000052401000503
-020201030202050301000500000005320100050000630100006301000063010000630100
-006301000063010000020100051301000500030e05000000052301000503020201030202
-050301000000053401000063010000630100006301000063010000630100006301000002
-010005140100030e00000524010005030202010302020503010005000000053201000500
-00630100006301000063010000630100006301000063010000020100051301000500030e
-050000000523010005030202010302020503010000000534010000630100006301000063
-01000063010000630100006301000002010005140100030e000005240100050302020103
-020205030100050000000532010005000063010000630100006301000063010000630100
-0063010000020100051301000500030e0500000005230100050302020103020205030100
-000005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-01000063010000630100006301000063010000630100006301000002010005140100030e
-000005240100050302020103020205030100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001ff01ff0161051301000500030e0500
-000005230100050302020103020205030100050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000630100006301000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-010000630100006301000063010000630100006301000063010000020100051301000500
-030e05000000052301000503020201030202050301000500000005320100050000630100
-00630100006301000063010000630100006301000002010005140100030e000005240100
-050302020103020205030100000005340100006301000063010000630100006301000063
-01000063010000020100051301000500030e050000000523010005030202010302020503
-010005000000051301000504010205150100050000630100006301000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-000005120102050301000502010005150100006301000063010000630100006301000063
-01000063010000020100051301000500030e050000000523010005030202010302020503
-010005000000051301000507010005140100050000630100006301000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-000005140100050701000515010000630100006301000063010000630100006301000063
-010000020100051301000500030e05000000052301000503020201030202050301000500
-000005130100050501010515010005000063010000630100006301000063010000630100
-006301000002010005140100030e00000524010005030202010302020503010000000514
-010005070100051501000063010000630100006301000063010000630100006301000002
-0100051301000500030e0500000005230100050302020103020205030100050000000513
-010005070100051401000500006301000063010000630100006301000063010000630100
-0002010005140100030e0000052401000503020201030202050301000000051401000503
-010005020100051501000063010000630100006301000063010000630100006301000002
-0100051301000500030e0500000005230100050302020103020205030100050000000511
-010405020102051501000500006301000063010000630100006301000063010000630100
-0002010005140100030e0000052401000503020201030202050301000000053401000063
-0100006301000063010000630100006301000063010000020100051301000500030e0500
-000005230100050302020103020205030100050000000532010005000063010000630100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-010302020503010000000534010000630100006301000063010000630100006301000063
-010000020100051301000500030e05000000052301000503020201030202050301000500
-000005320100050000630100006301000063010000630100006301000063010000020100
-05140100030e000005240100050302020103020205030100000005340100006301000063
-01000063010000630100006301000063010000020100051301000500030e050000000523
-010005030202010302020503010005000000053201000500006301000063010000630100
-0063010000630100006301000002010005140100030e0000052401000503020201030202
-050301000000050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100006301000063010000630100006301000063010000630100000201000513
-01000500030e050000000523010005030202010302020503010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0100050001000500010005000100050001000500010005000100050001ff01ff01610514
-0100030e0000052401000503020201030202050301000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500006301000063010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-010302020503010000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050001000063010000630100006301000063010000630100006301000002
-010005140100030e00000524010005030202010302020503010005000000053201000500
-00630100006301000063010000630100006301000063010000020100051301000500030e
-050000000523010005030202010302020503010000000534010000630100006301000063
-01000063010000630100006301000002010005140100030e000005240100050302020103
-020205030100050000000513010005060100051501000500006301000063010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-010302020503010000000512010205050101051601000063010000630100006301000063
-010000630100006301000002010005140100030e00000524010005030202010302020503
-010005000000051301000504010005000100051501000500006301000063010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-010302020503010000000514010005040100050001000516010000630100006301000063
-01000063010000630100006301000002010005140100030e000005240100050302020103
-020205030100050000000513010005030100050101000515010005000063010000630100
-0063010000630100006301000063010000020100051301000500030e0500000005230100
-050302020103020205030100000005140100050201000502010005160100006301000063
-0100006301000063010000630100006301000002010005140100030e0000052401000503
-020201030202050301000500000005130100050201050514010005000063010000630100
-0063010000630100006301000063010000020100051301000500030e0500000005230100
-050302020103020205030100000005140100050601000516010000630100006301000063
-01000063010000630100006301000002010005140100030e000005240100050302020103
-020205030100050000000511010405030102051401000500006301000063010000630100
-00630100006301000063010000020100051301000500030e050000000523010005030202
-010302020503010000000534010000630100006301000063010000630100006301000063
-01000002010005140100030e000005240100050302020103020205030100050000000532
-010005000063010000630100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100000005340100006301000063
-0100006301000063010000630100006301000002010005140100030e0000052401000503
-020201030202050301000500000005320100050000630100006301000063010000630100
-006301000063010000020100051301000500030e05000000052301000503020201030202
-050301000000053401000063010000630100006301000063010000630100006301000002
-010005140100030e00000524010005030202010302020503010005000000053201000500
-00630100006301000063010000630100006301000063010000020100051301000500030e
-050000000523010005030202010302020503010000000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000063010000630100006301000063
-010000630100006301000002010005140100030e00000524010005030202010302020503
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0100050001ff01ff0161051301000500030e050000000523010005030202010302020503
-010005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000063010000630100006301000063010000630100006301000002010005140100
-030e00000524010005030202010302020503010000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050001000063010000630100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-020205030100050000000532010005000063010000630100006301000063010000630100
-006301000002010005140100030e00000524010005030202010302020503010000000534
-010000630100006301000063010000630100006301000063010000020100051301000500
-030e05000000052301000503020201030202050301000500000005130100050301040514
-010005000063010000630100006301000063010000630100006301000002010005140100
-030e00000524010005030202010302020503010000000512010205030100051901000063
-0100006301000063010000630100006301000063010000020100051301000500030e0500
-000005230100050302020103020205030100050000000513010005030100051801000500
-0063010000630100006301000063010000630100006301000002010005140100030e0000
-052401000503020201030202050301000000051401000503010005190100006301000063
-01000063010000630100006301000063010000020100051301000500030e050000000523
-010005030202010302020503010005000000051301000503010305150100050000630100
-00630100006301000063010000630100006301000002010005140100030e000005240100
-050302020103020205030100000005140100050701000515010000630100006301000063
-010000630100006301000063010000020100051301000500030e05000000052301000503
-020201030202050301000500000005130100050701000514010005000063010000630100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-010302020503010000000514010005020100050301000515010000630100006301000063
-010000630100006301000063010000020100051301000500030e05000000052301000503
-020201030202050301000500000005110104050101030515010005000063010000630100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-010302020503010000000534010000630100006301000063010000630100006301000063
-010000020100051301000500030e05000000052301000503020201030202050301000500
-000005320100050000630100006301000063010000630100006301000063010000020100
-05140100030e000005240100050302020103020205030100000005340100006301000063
-01000063010000630100006301000063010000020100051301000500030e050000000523
-010005030202010302020503010005000000053201000500006301000063010000630100
-0063010000630100006301000002010005140100030e0000052401000503020201030202
-050301000000053401000063010000630100006301000063010000630100006301000002
-0100051301000500030e0500000005230100050302020103020205030100050000000532
-010005000063010000630100006301000063010000630100006301000002010005140100
-030e00000524010005030202010302020503010000000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000063010000630100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-020205030100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001ff01ff016105140100030e00000524010005030202010302020503
-010005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000063010000630100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500010000630100006301000063
-01000063010000630100006301000002010005140100030e000005240100050302020103
-020205030100050000000532010005000063010000630100006301000063010000630100
-0063010000020100051301000500030e0500000005230100050302020103020205030100
-000005340100006301000063010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000500000005130100050501020514
-010005000063010000630100006301000063010000630100006301000002010005130100
-0500030e0500000005230100050302020103020205030100000005120102050401000518
-01000063010000630100006301000063010000630100006301000002010005140100030e
-000005240100050302020103020205030100050000000513010005030100051801000500
-00630100006301000063010000630100006301000063010000020100051301000500030e
-050000000523010005030202010302020503010000000514010005030100051901000063
-010000630100006301000063010000630100006301000002010005140100030e00000524
-010005030202010302020503010005000000051301000503010305150100050000630100
-006301000063010000630100006301000063010000020100051301000500030e05000000
-052301000503020201030202050301000000051401000503010005020100051501000063
-010000630100006301000063010000630100006301000002010005140100030e00000524
-010005030202010302020503010005000000051301000503010005020100051401000500
-00630100006301000063010000630100006301000063010000020100051301000500030e
-050000000523010005030202010302020503010000000514010005030100050201000515
-01000063010000630100006301000063010000630100006301000002010005140100030e
-000005240100050302020103020205030100050000000511010405020102051501000500
-00630100006301000063010000630100006301000063010000020100051301000500030e
-050000000523010005030202010302020503010000000534010000630100006301000063
-01000063010000630100006301000002010005140100030e000005240100050302020103
-020205030100050000000532010005000063010000630100006301000063010000630100
-0063010000020100051301000500030e0500000005230100050302020103020205030100
-000005340100006301000063010000630100006301000063010000630100000201000514
-0100030e0000052401000503020201030202050301000500000005320100050000630100
-006301000063010000630100006301000063010000020100051301000500030e05000000
-052301000503020201030202050301000000053401000063010000630100006301000063
-010000630100006301000002010005140100030e00000524010005030202010302020503
-010005000000053201000500006301000063010000630100006301000063010000630100
-00020100051301000500030e050000000523010005030202010302020503010000000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000063
-010000630100006301000063010000630100006301000002010005140100030e00000524
-010005030202010302020503010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-0100050001000500010005000100050001ff01ff0161051301000500030e050000000523
-010005030202010302020503010005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000063010000630100006301000063010000630100
-006301000002010005140100030e00000524010005030202010302020503010000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050001000063
-0100006301000063010000630100006301000063010000020100051301000500030e0500
-000005230100050302020103020205030100050000000532010005000063010000630100
-006301000063010000630100006301000002010005140100030e00000524010005030202
-010302020503010000000534010000630100006301000063010000630100006301000063
-010000020100051301000500030e05000000052301000503020201030202050301000500
-000005130100050301040514010005000063010000630100006301000063010000630100
-006301000002010005140100030e00000524010005030202010302020503010000000512
-010205030100050201000515010000630100006301000063010000630100006301000063
-010000020100051301000500030e05000000052301000503020201030202050301000500
-000005130100050601000515010005000063010000630100006301000063010000630100
-006301000002010005140100030e00000524010005030202010302020503010000000514
-010005060100051601000063010000630100006301000063010000630100006301000002
-0100051301000500030e0500000005230100050302020103020205030100050000000513
-010005060100051501000500006301000063010000630100006301000063010000630100
-0002010005140100030e0000052401000503020201030202050301000000051401000506
-010005160100006301000063010000630100006301000063010000630100000201000513
-01000500030e050000000523010005030202010302020503010005000000051301000505
-010005160100050000630100006301000063010000630100006301000063010000020100
-05140100030e000005240100050302020103020205030100000005140100050501000517
-010000630100006301000063010000630100006301000063010000020100051301000500
-030e05000000052301000503020201030202050301000500000005110104050301000516
-010005000063010000630100006301000063010000630100006301000002010005140100
-030e00000524010005030202010302020503010000000534010000630100006301000063
-010000630100006301000063010000020100051301000500030e05000000052301000503
-020201030202050301000500000005320100050000630100006301000063010000630100
-00630100006301000002010005140100030e000005240100050302020103020205030100
-000005340100006301000063010000630100006301000063010000630100000201000513
-01000500030e050000000523010005030202010302020503010005000000053201000500
-0063010000630100006301000063010000630100006301000002010005140100030e0000
-052401000503020201030202050301000000053401000063010000630100006301000063
-0100006301000063010000020100051301000500030e0500000005230100050302020103
-020205030100050000000532010005000063010000630100006301000063010000630100
-006301000002010005140100030e00000524010005030202010302020503010000000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000063
-0100006301000063010000630100006301000063010000020100051301000500030e0500
-000005230100050302020103020205030100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001ff01ff016105140100030e00000524
-010005030202010302020503010005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000063010000630100006301000063010000630100
-0063010000020100051301000500030e0500000005230100050302020103020205030100
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-01000063010000630100006301000063010000630100006301000002010005140100030e
-000005240100050302020103020205030100050000000532010005000063010000630100
-0063010000630100006301000063010000020100051301000500030e0500000005230100
-050302020103020205030100000005340100006301000063010000630100006301000063
-0100006301000002010005140100030e0000052401000503020201030202050301000500
-000005130100050401020515010005000063010000630100006301000063010000630100
-0063010000020100051301000500030e0500000005230100050302020103020205030100
-000005120102050301000502010005150100006301000063010000630100006301000063
-010000630100000201000514010005000000050000000500000005000000050000000500
-00000500000005000000052401000503020201030202050301ff01ff0199051301000500
-000005000000050000000500000005000000050000000500000005000000050000000523
-010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff
-05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503
-010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103
-02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503
-0202010302020503010005ff05ff05e301000503020201030202050301000549010005ff
-05ff059801000503020201030202050301000548010105ff05ff05980100050302020103
-020205030100054701000500010005ff05ff059801000503020201030202050301000549
-010005ff05ff059801000503020201030202050301000549010005ff05ff059801000503
-020201030202050301000549010005ff05ff059801000503020201030202050301000549
-010005ff05ff059801000503020201030202050301000549010005ff05ff059801000503
-020201030202050301000547010405ff05ff0596010005030202010302020503010005ff
-05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503
-010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103
-02020503010005ff05ff05e3010005030202010302020503010005380100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100054b01000503020201030202050301000537
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000000054a01000503
-020201030202050301000538010005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000003ff03ff033e0000054b010005030202010302020503010005370100050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050003ff03ff033e05000000054a01000503
-020201030202050301000538010005000000050c0000050c010003ff03ff033e0000054b
-01000503020201030202050301000537010005000000050c0100050c0100050003ff03ff
-033e05000000054a01000503020201030202050301000538010005000000050c0000050c
-010003ff03ff033e0000054b01000503020201030202050301000537010005000000050c
-0100050c0100050003ff03ff033e05000000054a01000503020201030202050301000538
-010005000000050c0000050c010003ff03ff033e0000054b010005030202010302020503
-01000537010005000000050c0100050c0100050003ff03ff033e05000000054a01000503
-020201030202050301000538010005000000050c0000050c010003ff03ff033e0000054b
-01000503020201030202050301000537010005000000050c0100050c0100050003ff03ff
-033e05000000054a01000503020201030202050301000538010005000000050c0000050c
-010003ff03ff033e0000054b01000503020201030202050301000537010005000000050c
-0100050c0100050003ff03ff033e05000000054a01000503020201030202050301000538
-010005000000050c0000050c010003ff03ff033e0000054b010005030202010302020503
-010005370100050000000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050003ff03ff
-033e05000000054a01000503020201030202050301000538010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010003ff03ff033e0000054b010005030202010302020503
-010005370100050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-00000500000005000000050000000500000005000000050000000500000005000000054a
-010005030202010302020503010005380000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000054b010005030202010302020503010005ff05ff05e30100050302020103
-02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503
-0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3
-010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff
-05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503
-010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103
-02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503
-0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3
-010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff
-05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503
-010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103
-02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503
-0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3
-010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff
-05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503
-010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103
-02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503
-0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3
-010005030202010302020503010005ff05ff05e3010005030202010100040503010005ff
-05ff05e301000503000502020400050301ff01ff01e50503000002020400000002020400
-05ff05ff05ed00000202040000000202040005ff05ff05ed000002020400000002020400
-05ff05ff05ed00000202040000000202040005ff05ff05ed000002020400000002020400
-000502ff02ff02e100060202040000000208040002ff02ff02e100000208040000000208
-040002ff02ff02e100000208040000000208040001ff01ff01e100000208040000000409
-01ff01ff01e100000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 0 380 315
-%%EOF
diff --git a/lib/tv/doc/src/tv_table_loaded.gif b/lib/tv/doc/src/tv_table_loaded.gif
deleted file mode 100644
index 1786426f4d..0000000000
--- a/lib/tv/doc/src/tv_table_loaded.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_table_loaded.ps b/lib/tv/doc/src/tv_table_loaded.ps
deleted file mode 100644
index 3f0cf9d707..0000000000
--- a/lib/tv/doc/src/tv_table_loaded.ps
+++ /dev/null
@@ -1,1430 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_loaded.eps)
-%%CreationDate: (Mon Mar 19 17:15:33 2001)
-%%BoundingBox: 0 0 532 441
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 532 441
-userdict begin
-%%BeginData:
-DisplayImage
-0 0
-532.000000 441.000000
-12
-760 630
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-ff0000
-d9d9d9
-b22222
-828282
-ff9155
-c3c3c3
-7f7f7f
-990000
-000000
-000000
-000000
-000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff
-02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202
-04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff
-02d500000202040000000202040002080000020d040002a501010206010102150101021e
-0101022901010206010102430101022a010102260101023201010233010102ae00000202
-040000000202040002080000020d04000277010502000107020101030206010702090101
-02060101021501010219010002030101021c0100020b010102060101022e010202020100
-020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400
-00000202040002080000020d04000277010102070101020301010201010102080101020c
-010102060101021501010218010102210101020b010102060101022e010202020100020d
-01010238010102020101024801010215010102cc00000202040000000202040002080000
-0202040602030400027701010207010102030101020c0101020401030203010102000101
-020301010202010302020101020901010202010302030103020201030201010402010101
-020201030203010102000101020a01040201010302030101020001010203010102020103
-022701000200010102010100020201030203010402020103020201010209010102000101
-020101010203010302030101020201010200010102020101020101030202010402020101
-020101010202010102020101020001010203010102000101020301030203010402020104
-020501040202010102010101020501030201010402000101020101010204010302020101
-020001010201010102020103020201040202010402020103020301010200010102060104
-020201030274000002020400000004030208000002020400030400000203040002770101
-0207010102030102020b0101020301010201010102020102020001010202010102010101
-020101010201010102090101020101010201010102010101020101010200010102010101
-020101010203010102010101020101010202010202000101020a01010202010102010101
-020201020200010102020101020101010201010102260100020001010201010002010101
-020101010201010102010101020101010201010102010101020901020200010202000101
-020101010201010102020101020201020200010102010101020001010200010102010101
-020101010202010102010101020201010202010202000101020201020200010102010101
-020101010201010102050101020801010201010102020101020101010204010102010101
-020101010202010102010101020301010201010102010101020001010201010102010101
-020101010200010102050101020501010201010102020102020001010204010102050101
-020101010273000004030101020b00000203040003020000020404000277010402040101
-0204010302090101020701010202010102010101020201010201010102010101020d0101
-020101010201010102010101020801010201010102030101020101010201010102020101
-02010101020a010102060101020201010201010102020101020101010201010102260100
-0200010202000100020101010201010102010101020101010201010102010101020d0101
-020101010201010102050101020201010202010102010101020101010200010102000101
-020101010201010102020101020101010202010102020101020101010202010102010101
-020101010201010102010102020401020207010102010101020201010201010102040101
-020101010201010102030101020001000204010102010101020101020203010102010101
-020401020204010202040101020101010202010102010101020401020204010102010101
-02760103020b000002030400030200000204040002770101020701010206010202080101
-0204010402020101020101010202010102010105020d0101020101010201010102010101
-02050104020101010203010102010101020101010202010102010101020a010102030104
-020201010201010102020101020101050226010002010101020001000201010102010101
-020101010201010102010105020d01010201010102010101020201040202010102020101
-020101010201010102000101020001010201010102010101020201010201010102020101
-020201010201010102020101020101010201010502020103020301030205010102010101
-020201010201010102040105020101010204010102050105020101010204010102010101
-020501030203010302020101020101010202010102010101020501030202010502760103
-020b00000204040003000000020504000277010102070101020701010208010102030101
-020101010202010102010101020201010201010102110101020101010201010102010101
-0204010102010101020101010203010102010101020101010202010102010101020a0101
-020201010201010102020101020101010202010102010101022a01000202010202010101
-020101010201010102010101020101010211010102010101020101010201010102010101
-020201010202010102010101020101010201010102000101020001010200010202020101
-020101010202010102020101020101010202010102010101020101010208010202040102
-020401010201010102020101020101010204010102050101020301000200010102040101
-020501010204010102010101020701020204010202010101020101010202010102010101
-0207010202010101027a0103020b00000204040003000000020504000277010102070101
-020301010201010102080101020301010201010102020101020101010202010102010101
-020201000201010102090101020101010201010102010101020201000200010102010101
-020101010203010102010101020101010202010102010101020a01010202010102010101
-020201010201010102020101020101010202010002260100020201020201010102010101
-020101010200010202010101020201000201010102090101020101010201010102010101
-020101010202010102020101020101010202010102070101020001010202010102000102
-020201010202010102010101020201010201010102010101020201000205010102050101
-020101010200010102000102020201010200010202010101020001010202010002010101
-020201010201010102000101020001010202010002010101020401010201010102020100
-020401010205010102010101020101010202010102010101020101010204010102010101
-0202010002760103020b0000020500000206040002770105020301010204010302090101
-020401020200010102010104020301010202010302020101020901010202010302030103
-02020102020001010201010202010101020201030203010102010101020b010202010102
-020001010201010402030101020201030227010002030101020201030203010102000101
-020201030202010102090101020101010201010102020102020001010201010102020101
-020101010203010502050101020301010200010102020101020201010201010102020101
-020101010202010302020104020201040202010102010101020001010203010102000101
-020101010201010302030102020001010201010102000101020101030202010102040101
-020201030201010402020104020301030203010102010101020101010200010402030103
-02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d
-040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff
-02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103
-0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202
-00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff
-06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801
-020201030202000106ff06ff06e908010202010302020001060b07040604070006030702
-061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa
-07000602070006090702061308010202010302020001060b0700060f0700062107000614
-0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b
-0700061308010202010302020001060b0700060607020605070006030702061a07000604
-070206030702060507000603070206180700060207000601070006000701060207040602
-070206030702060207000600070106030702061807000602070006020702060307020602
-07000602070006ff06eb07000602070006020702060507000602070006000701060c0801
-0202010302020001060b0700060807000605070006020700060207000619070006030700
-060207000601070006020700060407000602070006020700061707000602070006010701
-060107000603070006060700060207000602070006010701060107000601070006020700
-0618070006000700060507000602070006020700060107000602070006ff06eb07000602
-07000601070006020700060407000602070106010700060b08010202010302020001060b
-070306050700060507000602070006020700061907000603070006020700060107000602
-07000604070006020700061b070006020700060107000602070006030700060607000602
-070006020700060107000602070006010700061c07000600070006050700060207000602
-070006010700060007000600070006ff06eb070406010700060207000604070006020700
-06020700060b08010202010302020001060b070006080700060507000602070406190700
-060307000602070006010700060207000604070006030702061807000602070006010700
-060207000603070006060700060207000602070006010700060207000602070206190700
-06000700060507000602070406010700060007000600070006ff06eb0700060207000601
-0704060407000602070006020700060b08010202010302020001060b0700060807000605
-070006020700061d07000603070006020700060107000602070006040700060607000617
-070006020700060107000602070006030700060607000602070006020700060107000602
-07000605070006190700060607000602070006050700060007000600070006ff06eb0700
-0602070006010700060807000602070006020700060b08010202010302020001060b0700
-060807000605070006020700060207000619070006030700060207000601070006020700
-060407000602070006020700061707000602070006010701060107000603070006060700
-060207000602070006010700060207000601070006020700061907000606070006020700
-0602070006010700060007000600070006ff06eb07000602070006010700060207000604
-07000602070106010700060b08010202010302020001060b070006080700060507000603
-0702061a0700060407020603070206050700060307020619070206020700060007010605
-07010604070006030702060207000602070006020702061a070006060700060307020603
-07000600070006ff06ec07000602070006020702060507000602070006000701060c0801
-0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706
-062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202
-0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801
-020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103
-0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff
-08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
-06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
-06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603
-0016061600160616004406160016061600160616001606ff06be02020103020206030015
-080006160015080006160015080000150800001508000616001508000616001508000616
-0015080006ff06be02020103020206030001061208010616000106120801061600010612
-080100010612080100010612080106160001061208010616000106120801061600010612
-080106ff06be020201030202060300010612080106160001061208010616000106120801
-000106120801000106120801061600010612080106160001061208010616000106120801
-06ff06be0202010302020603000106120801061600010603070206030702060408010616
-000106120801000106120801000106120801061600010612080106160001061208010616
-00010612080106ff06be0202010302020603000106080702060608010616000106030702
-060307020604080106160001061208010001061208010001061208010616000106050704
-0607080106160001060707010608080106160001060707030606080106ff06be02020103
-020206030001060b0701060408010616000106020704060107040603080106160001060e
-0700060208010001060e070006020801000106020700060e080106160001060307080605
-080106160001060607030607080106160001060507070604080106ff06be020201030202
-06030001060d070006000700060108010616000106020700060107010601070006010701
-0603080106160001060e0700060208010001060e070006020801000106020700060e0801
-061600010602070a06040801061600010606070306070801061600010604070306010703
-0603080106ff06be02020103020206030001060207020608070106010801061600010601
-070d0602080106160001060b07000601070006020801000106020700060a070006020801
-00010602070006010700060b080106160001060207030602070306040801061600010607
-0701060808010616000106040702060307020603080106ff06be02020103020206030001
-060107080602070206010801061600010600070006000703060007020600070406010801
-06160001060b07000601070006020801000106020700060a070006020801000106020700
-06010700060b080106160001060107030604070306030801061600010612080106160001
-06040702060307020603080106ff06be0202010302020603000106010709060608010616
-000106000700060007030600070206000704060108010616000106080700060107000601
-070006020801000106020700060407000604070006020801000106020700060107000601
-070006080801061600010601070206030707060108010616000106050704060708010616
-000106050701060207020604080106ff06be020201030202060300010601070906060801
-061600010600070006000703060007020600070406010801061600010608070006010700
-060107000602080100010602070006040700060407000602080100010602070006010700
-060107000608080106160001060107020604070506020801061600010606070306070801
-06160001060907020605080106ff06be0202010302020603000106010709060608010616
-000106000700060007030600070206000704060108010616000106050700060107000601
-070006010700060208010001060207000604070006010700060107000602080100010602
-070006010700060107000601070006050801061600010601070206050703060308010616
-0001060707020607080106160001060807020606080106ff06be02020103020206030001
-0601070d0602080106160001060007000600070706000704060108010616000106050700
-060107000601070006010700060208010001060207000604070006010700060107000602
-080100010602070006010700060107000601070006050801061600010601070306050701
-0604080106160001060707020607080106160001060707020607080106ff06be02020103
-020206030001060107030607070006030801061600010600070006000704060107000600
-070406010801061600010602070006010700060107000601070006010700060208010001
-060207000601070006010700060107000601070006020801000106020700060107000601
-07000601070006010700060208010616000106020703060b080106160001060707020607
-080106160001060707020607080106ff06be020201030202060300010601070206070700
-060408010616000106000706060107060601080106160001060207000601070006010700
-060107000601070006020801000106020700060107000601070006010700060107000602
-080100010602070006010700060107000601070006010700060208010616000106020709
-06050801061600010607070206070801061600010612080106ff06be0202010302020603
-000106010701060707000605080106160001060007000600070206050700060007020601
-080106160001060207000601070006010700060107000601070006020801000106020700
-060107000601070006010700060107000602080100010602070006010700060107000601
-070006010700060208010616000106030707060608010616000106060704060608010616
-0001060707020607080106ff06be02020103020206030001060107090606080106160001
-060007000600070206050700060007020601080106160001060207000601070006010700
-060107000601070006020801000106020700060107000601070006010700060107000602
-080100010602070006010700060107000601070006010700060208010616000106050704
-0607080106160001060507060605080106160001060707020607080106ff06be02020103
-020206030001061208010616000106000704060507040601080106160001061208010001
-0612080100010612080106160001061208010616000106120801061600010612080106ff
-06be02020103020206030001061208010616000106120801061600010612080100010612
-080100010612080106160001061208010616000106120801061600010612080106ff06be
-020201030202060300010612080106160001061208010616000106120801000106120801
-00010612080106160001061208010616000106120801061600010612080106ff06be0202
-010302020603000108140616000108140616000108140001081400010814061600010814
-06160001081406160001081406ff06be0202010302020603000008150616000008150616
-00000815000008150000081506160000081506160000081506160000081506ff06be0202
-0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
-0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
-0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
-0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5
-06030202010302020603010000ff00ff00cf010000120100060302020103020206030100
-00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001
-060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603
-0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603
-010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf
-01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801
-010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103
-02020603010000ff00ff00cf010000010601010a06010801010006030202010302020603
-010000ff00ff00cf010000010602010806020801010006030202010302020603010000ff
-00ff00cf010000010603010606030801010006030202010302020603010000ff00ff00cf
-010000010604010406040801010006030202010302020603010000ff00ff00cf01000001
-0605010206050801010006030202010302020603010000ff00ff00cf0100000106060100
-06060801010006030202010302020603010000ff00ff00cf01000001060e080101000603
-0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603
-010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf
-01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801
-010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103
-02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff
-00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811
-01000603020201030202060301ff01ff01e5060302020103020206ff06ff06ed02020103
-020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103
-020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103
-020206ff06ff06ed020201030202060301ff01ff01e506030202010302020603010006ff
-06ff06970100064a01000603020201030202060301000663010506ff06ff062d0100064a
-01000603020201030202060301000662010706ff06ff062c0100064a0100060302020103
-020206030100066101020603010206ff06ff062b0100064a010006030202010302020603
-0100066101010605010106ff06ff062b0100064a01000603020201030202060301000661
-01020603010206ff06ff062b0100064a01000603020201030202060301000662010706ff
-06ff062c0100064a01000603020201030202060301000663010506ff06ff062d0100064a
-01000603020201030202060301000665010106ff06ff062f0100064a0100060302020103
-0202060301000665010106ff06ff062f0100064a01000603020201030202060301000665
-010106ff06ff062f0100064a01000603020201030202060301000665010106ff06ff062f
-0100064a01000603020201030202060301000665010106ff06ff062f0100064a01000603
-020201030202060301000665010106ff06ff062f0100064a010006030202010302020603
-0100066101010600010206ff06ff062f0100064a01000603020201030202060301000661
-01010600010206ff06ff062f0100064a01000603020201030202060301000661010506ff
-06ff062f0100064a01000603020201030202060301000661010506ff06ff062f0100064a
-0100060302020103020206030100066101020600010106ff06ff062f0100064a01000603
-0202010302020603010006ff06ff06970100064a01000603020201030202060301ff01ff
-0199064a0100060302020103020206030100063500610b04005f0b04005f0b04005f0b04
-005f0b04005f0b0400010100060c0812062a010006030202010302020603010006350060
-08000b030100005e08000b030100005e08000b030100005e08000b030100005e08000b03
-0100005e08000b03010000010100060c08110000062a0100060302020103020206030100
-06350001065d08010b0101020001065b08010b0101020001065b08010b0101020001065b
-08010b0101020001065b08010b0101020001065b08010b01010200010100060c08010010
-062a010006030202010302020603010006350001062c0100062f08010b0101020001062a
-0102062d08010b0101020001062a0102062d08010b0101020001062c0100062d08010b01
-0102000106290104062c08010b0101020001062b0102062c08010b01010200010100060c
-0801000d08000001062a010006030202010302020603010006350001062a0102062f0801
-0b01010200010629010006020100062c08010b01010200010629010006020100062c0801
-0b0101020001062b0101062d08010b010102000106290100063008010b0101020001062a
-0100062f08010b01010200010100060c08010001060a08010001062a0100060302020103
-02020603010006350001062c0100062f08010b01010200010629010006020100062c0801
-0b0101020001062d0100062c08010b0101020001062a010006000100062d08010b010102
-000106290100063008010b010102000106290100063008010b01010200010100060c0801
-0001060a08010001062a010006030202010302020603010006350001062c0100062f0801
-0b01010200010629010006020100062c08010b0101020001062d0100062c08010b010102
-0001062a010006000100062d08010b010102000106290100063008010b01010200010629
-0100063008010b01010200010100060c08010001060a08010001062a0100060302020103
-02020603010006350001062c0100062f08010b0101020001062c0100062d08010b010102
-0001062b0101062d08010b01010200010629010006010100062d08010b01010200010629
-0103062d08010b010102000106290103062d08010b01010200010100060c08010001060a
-08010001062a010006030202010302020603010006350001062c0100062f08010b010102
-0001062b0100062e08010b0101020001062d0100062c08010b0101020001062801000602
-0100062d08010b0101020001062d0100062c08010b01010200010629010006020100062c
-08010b01010200010100060c08010001060a08010001062a010006030202010302020603
-010006350001062c0100062f08010b0101020001062a0100062f08010b0101020001062d
-0100062c08010b010102000106280105062c08010b0101020001062d0100062c08010b01
-010200010629010006020100062c08010b01010200010100060c08010001060a08010001
-062a010006030202010302020603010006350001062c0100062f08010b01010200010629
-010006020100062c08010b01010200010629010006020100062c08010b0101020001062c
-0100062d08010b01010200010628010006030100062c08010b0101020001062901000602
-0100062c08010b01010200010100060c08010001060a08010001062a0100060302020103
-02020603010006350001062a0104062d08010b010102000106290104062c08010b010102
-0001062a0102062d08010b0101020001062b0102062c08010b010102000106290103062d
-08010b0101020001062a0102062d08010b01010200010100060c08010001060a08010001
-062a010006030202010302020603010006350001065d08010b0101020001065b08010b01
-01020001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b
-08010b01010200010100060c08010001060a08010001062a010006030202010302020603
-010006350001065d08010b0101020001065b08010b0101020001065b08010b0101020001
-065b08010b0101020001065b08010b0101020001065b08010b01010200010100060c0801
-0001060a08010001062a010006030202010302020603010006350001065d08010b010102
-0001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b0801
-0b0101020001065b08010b0101020001010006070100060308010001060a08010001062a
-010006030202010302020603010006350001065d08010b0101020001065b08010b010102
-0001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b0801
-0b0101020001010006060101060308010001060a08010001062a01000603020201030202
-0603010006350001065d08010b0101020001065b08010b0101020001065b08010b010102
-0001065b08010b0101020001065b08010b0101020001065b08010b010102000101000605
-010006000100060308010001080c0001062a010006030202010302020603010006350001
-065d08010b0101020001065b08010b0101020001065b08010b0101020001065b08010b01
-01020001065b08010b0101020001065b08010b010102000101000607010006030801000d
-08000001062a010006030202010302020603010006350001085f0b0101020001085d0b01
-01020001085d0b0101020001085d0b0101020001085d0b0101020001085d0b0101020001
-010006070100060308010001060a08010001062a01000603020201030202060301000635
-000008600b0001030000085e0b0001030000085e0b0001030000085e0b0001030000085e
-0b0001030000085e0b00010300000800010006070100060308010001060a08010001062a
-010006030202010302020603010009360063010000630100006301000063010000630100
-006301000002010006070100060308010001060a08010001062a01000603020201030202
-0603010009350c0000630100006301000063010000630100006301000063010000020100
-06070100060308010001060a08010001062a010006030202010302020603010009010532
-0c0100630100006301000063010000630100006301000063010000020100060501040601
-08010001060a08010001062a0100060302020103020206030100090105320c0100630100
-006301000063010000630100006301000063010000020100060c08010001060a08010001
-062a010006030202010302020603010009010517010005190c0100630100006301000063
-010000630100006301000063010000020100060c08010001060a08010001062a01000603
-0202010302020603010009010515010205190c01001601020003010200420100000e0100
-00230100000b010200030102001801000063010000630100006301000063010000020100
-060c08010001060a08010001062a01000603020201030202060301000901051701000519
-0c01001801000005010000420100000e010000230100000d010000050100001801000063
-010000630100006301000063010000020100060c08010001060a08010001062a01000603
-0202010302020603010009010517010005190c01000f0102000501000005010000030102
-003b0100000e010000000101000301020002010000000101000201000000010100030102
-000201040001010000020100000401000005010000180100006301000063010000630100
-0063010000020100060c08010001060a08010001062a0100060302020103020206030100
-09010517010005190c01000e01000002010000040100000501000002010000020100003a
-0100000e0101000101000001010000020100000101010001010000010101000101000001
-010000020100000301000003010000020100000401000005010000180100006301000063
-0100006301000063010000020100060c08010001060a08010001062a0100060302020103
-02020603010009010517010005190c01000e010000020100000401000005010000020100
-00020100003a0100000e0100000201000001010000020100000101000005010000020100
-000101000007010000030100000201000004010000050100001801000063010000630100
-006301000063010000020100060c08010001060a08010001062a01000603020201030202
-0603010009010517010005190c01000e010000020100000401000005010000020104003a
-0100000e0100000201000001010000020100000101000005010000020100000201020004
-010000030100000201000004010000050100001801000063010000630100006301000063
-010000020100060c08010001080c0001062a010006030202010302020603010009010517
-010005190c01000e010000020100000401000005010000020100003e0100000e01000002
-010000010100000201000001010000050100000201000005010000030100000301000002
-01000004010000050100001801000063010000630100006301000063010000020100060c
-08010000080d0001062a010006030202010302020603010009010515010405170c01000e
-01000002010000040100000501000002010000020100003a0100000e0100000201000001
-010000020100000101000005010000020100000101000002010000030100000301000001
-01010004010000050100001801000063010000630100006301000063010000020100060c
-08010a0e0001062a0100060302020103020206030100090105320c01000f010200050100
-0005010000030102003b0100000e01000002010000020102000201000005010000020100
-000201020005010100020101000001000004010000050100001801000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-090105320c0100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a0100060302020103020206030100090105320c010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-0103020206030100090105320c0100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a0100060302020103020206030100090105320c010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010009010c3400630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a010006030202010302020603010009000c3501ff01ff0161060c0801
-0a0e0001062a010006030202010302020603010009360063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010009350c0000630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a0100060302020103020206030100090105320c010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-0103020206030100090105320c0100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100090105160102
-05180c0100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a01000603020201030202060301000901051501000502010005170c010026
-01000003010200030102002d010000160102004901000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100090105150100
-0502010005170c01002d010000050100002d010000180100004901000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-0901051501000502010005170c01000f0101000001000001010000020100000101000000
-01010003010200050100000501000003010200260100000f010200050100000201000002
-010000020102000301020003010200020100000001010026010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
-0518010005180c01000e0100000101010001010000020100000101010001010000040100
-0005010000050100000201000002010000250100000e0100000201000004010000020100
-000201000001010000020100000101000002010000010100000201000001010100010100
-002501000063010000630100006301000063010000020100060c08010a0e0001062a0100
-06030202010302020603010009010517010005190c01000e010000020100000101000002
-010000010100000201000004010000050100000501000006010000250100000e01000008
-010000020100000201000001010000050100000501000002010000010100000201000025
-01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
-02020103020206030100090105160100051a0c01000e0100000201000001010000020100
-00010100000201000004010000050100000501000003010300250100000f010200050100
-000201000002010000020102000301020002010400010100000201000025010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-060301000901051501000502010005170c01000e01000002010000010100000201000001
-010000020100000401000005010000050100000201000002010000250100001201000004
-010000020100000201000005010000050100000101000005010000020100002501000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-02020603010009010515010405170c01000e010000010101000101000001010100010100
-00020100000401000005010000050100000201000002010000250100000e010000020100
-000401000002010000010101000101000002010000010100000201000001010000020100
-0001010000020100002501000063010000630100006301000063010000020100060c0801
-0a0e0001062a0100060302020103020206030100090105320c01000f0101000001000002
-01010000010000010100000201000004010000050100000501000003010300250100000f
-010200050100000301010000010000020102000301020003010200020100000201000025
-01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
-02020103020206030100090105320c0100120100004f0100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-090105320c01000e010000020100004f0100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
-000f010200500100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a0100060302020103020206030100090105320c0100630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100090105320c01006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a010006030202010302020603010009010c3400630100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-06030202010302020603010009000c3501ff01ff0161060c08010a0e0001062a01000603
-020201030202060301000936006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a010006030202010302020603010009350c0000630100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100090105320c01006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
-05320c0100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010009010516010205180c01006301000063
-01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
-020201030202060301000901051501000502010005170c0100630100000e010000530100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010009010519010005170c0100630100000e010000530100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010009010519010005170c01000f01020002010000000101000201000000010100030102
-003b0100000e010000000101000201000000010100030102000201010000010000020101
-0000010000030102002d01000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010009010517010105180c01000e01000002
-0100000101010001010000010101000101000001010000020100003a0100000e01010001
-010000010101000101000001010000020100000101000000010000000100000101000000
-0100000001000001010000020100002c0100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010009010519010005170c01
-001201000001010000020100000101000002010000050100003a0100000e010000020100
-000101000005010000020100000101000000010000000100000101000000010000000100
-00050100002c01000063010000630100006301000063010000020100060c08010a0e0001
-062a010006030202010302020603010009010519010005170c01000f0103000101000002
-0100000101000002010000020103003a0100000e01000002010000010100000501000002
-010000010100000001000000010000010100000001000000010000020103002c01000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-0202060301000901051501000502010005170c01000e0100000201000001010000020100
-00010100000201000001010000020100003a0100000e0100000201000001010000050100
-000201000001010000000100000001000001010000000100000001000001010000020100
-002c01000063010000630100006301000063010000020100060c08010a0e0001062a0100
-06030202010302020603010009010516010205180c01000e010000020100000101000002
-010000010100000201000001010000020100003a0100000e010100010100000101000005
-010000020100000101000000010000000100000101000000010000000100000101000002
-0100002c01000063010000630100006301000063010000020100060c08010a0e0001062a
-0100060302020103020206030100090105320c01000f0103000101000002010000010100
-0002010000020103003a0100000e01000000010100020100000601020002010000000100
-0000010000010100000001000000010000020103002c0100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010009010532
-0c0100630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100090105320c01006301000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-06030100090105320c010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100090105320c01006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
-0c3400630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a010006030202010302020603010009000c3501ff01ff0161060c08010a0e0001
-062a01000603020201030202060301000936006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000935
-0c0000630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100090105320c01006301000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-06030100090105320c010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010009010518010005180c01
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a010006030202010302020603010009010517010105180c0100170100000601000042
-010000150100001c0100000b010200030102001801000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100090105160100
-0500010005180c0100170100004a010000150100001c0100000d01000005010000180100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-01030202060301000901051601000500010005180c01000f010200020104000201020002
-0100000001010003010200340100000f0102000201000001010000030102000201000000
-010100030102000201040001010000020100000401000005010000180100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-01000901051501000501010005180c01000e010000020100000301000006010000020101
-00010100000101000002010000330100000e010000020100000101000000010000030100
-000201000001010100010100000101000002010000030100000301000002010000040100
-00050100001801000063010000630100006301000063010000020100060c08010a0e0001
-062a01000603020201030202060301000901051401000502010005180c01000e01000007
-01000006010000020100000201000005010000330100000e010000050101000801000001
-010000020100000101000007010000030100000201000004010000050100001801000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-02020603010009010514010505170c01000f010200040100000601000002010000020100
-0002010300330100000f0102000201010005010300010100000201000002010200040100
-000301000002010000040100000501000018010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000901051801000518
-0c0100120100000301000006010000020100000201000001010000020100003301000012
-010000010100000001000003010000020100000101000002010000050100000301000003
-010000020100000401000005010000180100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010009010517010205170c01
-000e01000002010000030100000601000002010000020100000101000002010000330100
-000e01000002010000010100000101000002010000020100000101000002010000010100
-000201000003010000030100000101010004010000050100001801000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-090105320c01000f0102000501010004010000020100000201000002010300330100000f
-010200020100000201000002010300010100000201000002010200050101000201010000
-01000004010000050100001801000063010000630100006301000063010000020100060c
-08010a0e0001062a0100060302020103020206030100090105320c010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-0103020206030100090105320c0100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a0100060302020103020206030100090105320c010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-0100090105320c0100630100006301000063010000630100006301000063010000020100
-060c08010a0e0001062a010006030202010302020603010009010c340063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010009000c3501ff01ff0161060c08010a0e0001062a0100060302020103
-020206030100093600630100006301000063010000630100006301000063010000020100
-060c08010a0e0001062a010006030202010302020603010009350c000063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-0103020206030100090105320c0100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a010006030202010302020603010009010515010405170c0100630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100090105150100051b0c01000e0100000e010000140100002d010000320102
-002d01000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100090105150100051b0c01000e0100000e0100004301000034
-0100002d01000063010000630100006301000063010000020100060c08010a0e0001062a
-0100060302020103020206030100090105150100051b0c01000e01000001010000030102
-0002010400020102000201000000010100030102000201000000010100030102001f0100
-000e01000002010000010100000001010002010000000101000301020003010200050100
-00030102002601000063010000630100006301000063010000020100060c08010a0e0001
-062a010006030202010302020603010009010515010305180c01000e0100000001000003
-010000020100000301000003010000020100000101010001010000040100000201010001
-01000001010000020100001e0100000e0100000201000001010100010100000101010001
-010000010100000201000001010000020100000401000002010000020100002501000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-02020603010009010519010005170c01000e010100080100000301000007010000010100
-00080100000201000002010000050100001e0100000e0100000201000001010000020100
-000101000002010000010100000901000004010000060100002501000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-09010519010005170c01000e010100050103000301000004010300010100000801000002
-01000002010000020103001e0100000e0100000201000001010000020100000101000002
-010000020102000301030004010000030103002501000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100090105140100
-0503010005170c01000e0100000001000003010000020100000301000003010000020100
-000101000008010000020100000201000001010000020100001e0100000e010000020100
-000101000002010000010100000201000005010000010100000201000004010000020100
-00020100002501000063010000630100006301000063010000020100060c08010a0e0001
-062a010006030202010302020603010009010515010305180c01000e0100000101000002
-010000020100000301000003010000020100000101000008010000020100000201000001
-010000020100001e0100000e010000010101000101010001010000010101000101000001
-010000020100000101000002010000040100000201000002010000250100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-0100090105320c01000e0100000201000002010300040101000201030001010000080100
-000201000002010000020103001e0100000f010100000100000101000000010100020100
-000001010003010200030103000401000003010300250100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010009010532
-0c0100630100001501000005010000450100006301000063010000630100006301000002
-0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100
-0015010000050100004501000063010000630100006301000063010000020100060c0801
-0a0e0001062a0100060302020103020206030100090105320c0100630100001501000005
-0100004501000063010000630100006301000063010000020100060c08010a0e0001062a
-0100060302020103020206030100090105320c0100630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-090105320c0100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a010006030202010302020603010009010c3400630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-02020603010009000c3501ff01ff0161060c08010a0e0001062a01000603020201030202
-06030100093600630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a010006030202010302020603010009350c0000630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100090105320c01006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a0100060302020103020206030100090105320c010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010009010517010205170c01006301000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-06030100090105160100051a0c0100110100001a010100040100002d010000160102000c
-010000020100003701000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100090105150100051b0c01002c010000350100
-0018010000100100003701000063010000630100006301000063010000020100060c0801
-0a0e0001062a0100060302020103020206030100090105150100051b0c01000f01020003
-010200030102000301020004010000040102000201000000010100030102001f0100000f
-010200050100000201000002010000020102000201000001010000340100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010009010515010305180c01001101000002010000020100000101000002010000010100
-00020100000101040004010000020101000101000001010000020100001e0100000e0100
-000201000004010000020100000201000004010000020100000001000035010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-060301000901051501000502010005170c01001101000002010000020100000101000005
-010000020100000301000006010000020100000201000001010000020100001e01000012
-010000040100000201000002010000040100000201010036010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
-051501000502010005170c01001101000002010000020100000201020002010400030100
-00060100000201000002010000010104001e0100000f0103000401000003010000000100
-0005010000020101003601000063010000630100006301000063010000020100060c0801
-0a0e0001062a01000603020201030202060301000901051501000502010005170c010011
-010000020100000201000005010000010100000701000006010000020100000201000001
-010000220100000e01000002010000040100000301000000010000050100000201000000
-0100003501000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010009010516010205180c01001101000002010000020100
-000101000002010000010100000201000003010000060100000201000002010000010100
-00020100001e0100000e0100000201000004010000040100000601000002010000010100
-003401000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100090105320c01001101000003010200030102000301020004
-010000060100000201000002010000020102001f0100000f010300040100000401000006
-01000002010000020100003301000063010000630100006301000063010000020100060c
-08010a0e0001062a0100060302020103020206030100090105320c010011010000500100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100090105320c01000e01000001010000500100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100090105320c01000f01010051010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010009010532
-0c0100630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100090105320c01006301000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-0603010009010c3400630100006301000063010000630100006301000063010000020100
-060c08010a0e0001062a010006030202010302020603010009000c3501ff01ff0161060c
-08010a0e0001062a01000603020201030202060301000936006301000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-0603010009350c0000630100006301000063010000630100006301000063010000020100
-060c08010a0e0001062a0100060302020103020206030100090105320c01006301000063
-01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
-02020103020206030100090105320c010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010009010515
-010405170c0100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000901051501000502010005170c01
-0011010100130100000b01000002010000290100002c0100000b010200030102001f0100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010009010518010005180c010010010000150100000f010000290100002c
-0100000d010000050100001f01000063010000630100006301000063010000020100060c
-08010a0e0001062a010006030202010302020603010009010518010005180c0100100100
-000301000000010100030102000301010000010000010100000001010003010200020100
-0001010000260100000e0100000001010003010200020100000001010002010000000101
-0002010400010100000201000004010000050100001f0100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010009010518
-010005180c01000e01040001010100010100000101000002010000010100000101010001
-01010001010000040100000201000000010000270100000e010100010100000101000002
-010000010101000101000001010100010100000301000003010000020100000401000005
-0100001f01000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010009010518010005180c01001001000003010000050100
-00020100000101000002010000010100000801000002010100280100000e010000020100
-000101000002010000010100000501000007010000030100000201000004010000050100
-001f01000063010000630100006301000063010000020100060c08010a0e0001062a0100
-06030202010302020603010009010517010005190c010010010000030100000501040001
-01000002010000010100000801000002010100280100000e010000020100000101000002
-010000010100000501000007010000030100000201000004010000050100001f01000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-02020603010009010517010005190c010010010000030100000501000005010000020100
-0001010000080100000201000000010000270100000e0100000201000001010000020100
-00010100000501000007010000030100000201000004010000050100001f010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-0603010009010517010005190c0100100100000301000005010000020100000101000001
-01010001010000080100000201000001010000260100000e010000020100000101000002
-010000010100000501000007010000030100000101010004010000050100001f01000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100090105320c01001001000003010000060102000301010000010000010100
-00080100000201000002010000250100000e010000020100000201020002010000050100
-0008010100020101000001000004010000050100001f0100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010009010532
-0c0100630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100090105320c01006301000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-06030100090105320c010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100090105320c01006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
-0c3400630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a010006030202010302020603010009000c3501ff01ff0161060c08010a0e0001
-062a01000603020201030202060301000936006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000935
-0c0000630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100090105320c01006301000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-06030100090105320c010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010009010516010205180c01
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a01000603020201030202060301000901051501000502010005170c0100630100000e
-0100000f0100000b01000006010000100100001b01000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100090105150100
-0502010005170c0100630100000e0100001c010000180100001b01000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-0901051501000502010005170c01000e0100000001010003010200020100000001010042
-0100000e0100000101000002010000000101000301020003010200020104000201020002
-010000000101000301020002010000000101000301020002010000000101000301010000
-0100000201000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010009010516010205180c01000e01010001010000010100
-00020100000101010001010000410100000e010000000100000301010001010000040100
-000201000002010000030100000601000002010100010100000101000002010000010101
-000101000001010000020100000101010001010000010100000101010002010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-060301000901051501000502010005170c01000e01000002010000010100000201000001
-010000450100000e01010004010000080100000201000007010000060100000201000002
-010000010100000201000001010000020100000101000002010000010100000501000002
-0100000201000063010000630100006301000063010000020100060c08010a0e0001062a
-01000603020201030202060301000901051501000502010005170c01000e010000020100
-000101040001010000450100000e01010004010000080100000301020004010000060100
-000201000002010000010104000101000002010000010104000101000005010000020100
-000201000063010000630100006301000063010000020100060c08010a0e0001062a0100
-0603020201030202060301000901051501000502010005170c01000e0100000201000001
-01000005010000450100000e010000000100000301000008010000060100000301000006
-010000020100000201000001010000050100000201000001010000050100000501000002
-0100000201000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010009010516010205180c01000e01010001010000010100
-000201000001010000450100000e01000001010000020100000801000002010000020100
-000301000006010000020100000201000001010000020100000101010001010000010100
-000201000001010000050100000101010002010000630100006301000063010000630100
-00020100060c08010a0e0001062a0100060302020103020206030100090105320c01000e
-010000000101000301020002010000450100000e01000002010000010100000801000003
-010200050101000401000002010000020100000201020002010000000101000301020002
-01000006010100000100000201000063010000630100006301000063010000020100060c
-08010a0e0001062a0100060302020103020206030100090105320c01000e010000530100
-005f0100000201000063010000630100006301000063010000020100060c08010a0e0001
-062a0100060302020103020206030100090105320c01000e010000530100005b01000002
-0100000201000063010000630100006301000063010000020100060c08010a0e0001062a
-0100060302020103020206030100090105320c01000e010000530100005c010200030100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-0103020206030100090105320c0100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a010006030202010302020603010009010c3400630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-09000c3501ff01ff0161060c08010a0e0001062a01000603020201030202060301000936
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a010006030202010302020603010009350c0000630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-090105320c0100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a0100060302020103020206030100090105320c010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010009010516010205180c01006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000901
-051501000502010005170c0100260100003b01000019010000170102002d010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-060301000901051501000502010005170c01006301000019010000190100002d01000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-0202060301000901051501000502010005170c01000e0101000001000003010200020100
-00000101000301020003010200340100000f010200030101000001000002010200020100
-00000101000201000000010100050100000301020002010000000101001f010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-060301000901051501000502010005170c01000e01000000010000000100000101000002
-0100000101010001010000040100000201000002010000330100000e0100000201000001
-010000010101000101000002010000010101000101000001010100010100000401000002
-0100000201000001010100010100001e0100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010009010516010305170c01
-000e010000000100000001000005010000010100000801000006010000330100000e0100
-000201000001010000020100000101000002010000010100000201000001010000020100
-00040100000601000001010000020100001e010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000901051901000517
-0c01000e010000000100000001000002010300010100000801000003010300330100000e
-010000020100000101000002010000010104000101000002010000010100000201000004
-0100000301030001010000020100001e0100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010009010518010005180c01
-000e01000000010000000100000101000002010000010100000801000002010000020100
-00330100000e010000020100000101000002010000010100000501000002010000010100
-000201000004010000020100000201000001010000020100001e01000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-09010515010205190c01000e010000000100000001000001010000020100000101000008
-0100000201000002010000330100000e0100000201000001010000010101000101000002
-010000010100000201000001010100010100000401000002010000020100000101000002
-0100001e01000063010000630100006301000063010000020100060c08010a0e0001062a
-0100060302020103020206030100090105320c01000e0100000001000000010000020103
-00010100000801000003010300330100000f010200030101000001000002010200020100
-00020100000101000000010100050100000301030001010000020100001e010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-06030100090105320c0100630100002a0100003701000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01
-00630100002a0100003701000063010000630100006301000063010000020100060c0801
-0a0e0001062a0100060302020103020206030100090105320c0100630100002a01000037
-01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
-02020103020206030100090105320c010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010009010532
-0c0100630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a010006030202010302020603010009010c340063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010009000c3501ff01ff0161060c08010a0e0001062a0100060302020103020206030100
-009a0100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a01000603020201030202060301000035080000630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-00010632080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010613010006040102061508010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010000010611010206030100060201000614080100630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-000106130100060301000602010006140801006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
-061301000603010006020100061408010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
-010006030100060201000614080100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100000106130100
-060301000602010006140801006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000001061301000603
-010006020100061408010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010000010613010006030100
-060201000614080100630100006301000063010000630100006301000063010000020100
-060c08010a0e0001062a0100060302020103020206030100000106110104060201020615
-080100630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
-0632080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100000108340063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a01000603020201030202060301000000083501ff01ff0161
-060c08010a0e0001062a0100060302020103020206030100009a01000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-060301000035080000630100006301000063010000630100006301000063010000020100
-060c08010a0e0001062a0100060302020103020206030100000106320801006301000063
-01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
-020201030202060301000001063208010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
-010006050100061608010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010000010611010206030102
-0616080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010613010006050100061608010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010613010006050100061608010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010613010006050100061608010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010000010613010006050100061608010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
-010006050100061608010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010000010613010006050100
-0616080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010611010406010104061408010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-00010632080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a01000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-01000001083400630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801
-0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-0035080000630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000001061301000604
-01020615080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001061101020603010006020100
-0614080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010613010006030100060201000614
-080100630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100000106130100060301000602010006140801
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a01000603020201030202060301000001061301000606010006150801006301000063
-01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
-020201030202060301000001061301000605010006160801006301000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-060301000001061301000604010006170801006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
-061301000603010006020100061408010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010000010611
-010406010104061408010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
-0632080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000001063208010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010834006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000000
-083501ff01ff0161060c08010a0e0001062a0100060302020103020206030100009a0100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100003508000063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-060301000001061301000604010206150801006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
-061101020603010006020100061408010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
-010006070100061408010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010000010613010006070100
-0614080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010613010006050101061508010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010613010006070100061408010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010613010006070100061408010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010000010613010006030100060201000614080100630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-000106110104060201020615080100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a01000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-060c08010a0e0001062a0100060302020103020206030100000106320801006301000063
-01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
-020201030202060301000001063208010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100000108340063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-01000000083501ff01ff0161060c08010a0e0001062a0100060302020103020206030100
-009a0100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a01000603020201030202060301000035080000630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-00010632080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010613010006060100061508010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010000010611010206050101061508010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
-010006040100060001000615080100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100000106130100
-060401000600010006150801006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000001061301000603
-010006010100061508010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010000010613010006020100
-060201000615080100630100006301000063010000630100006301000063010000020100
-060c08010a0e0001062a0100060302020103020206030100000106130100060201050614
-080100630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100000106130100060601000615080100630100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100000106110104060301020614080100630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000001063208010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-00010632080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100000108340063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-01000603020201030202060301000000083501ff01ff0161060c08010a0e0001062a0100
-060302020103020206030100009a01000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000035080000630100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
-0632080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010613010006030104061408010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010611010206030100061808010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010613010006030100061808010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010000010613010006030100061808010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
-010006030103061508010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010000010613010006070100
-0614080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010613010006070100061408010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010613010006020100060301000614080100630100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100000106110104060101030615080100630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000001063208010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-00010632080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100000108340063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-01000603020201030202060301000000083501ff01ff0161060c08010a0e0001062a0100
-060302020103020206030100009a01000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000035080000630100
-006301000063010000630100006301000063010000020100060c08010a0e0001062a0100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
-0632080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010613010006050102061408010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010611010206040100061708010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010613010006030100061808010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010000010613010006030100061808010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
-010006030103061508010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010000010613010006030100
-060201000614080100630100006301000063010000630100006301000063010000020100
-060c08010a0e0001062a0100060302020103020206030100000106130100060301000602
-01000614080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001061301000603010006020100
-0614080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010611010406020102061508010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-00010632080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a01000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-01000001083400630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801
-0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-0035080000630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000001061301000603
-01040614080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001061101020603010006020100
-0614080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010613010006060100061508010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010613010006060100061508010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010613010006060100061508010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-010000010613010006060100061508010063010000630100006301000063010000630100
-0063010000020100060c08010a0e0001062a010006030202010302020603010000010613
-010006050100061608010063010000630100006301000063010000630100006301000002
-0100060c08010a0e0001062a010006030202010302020603010000010613010006050100
-0616080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010611010406030100061608010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-00010632080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100060c08010a0e0001062a0100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a01000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100060c08010a0e0001062a010006030202010302020603
-01000001083400630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801
-0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-0035080000630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000001061301000604
-01020615080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001061101020603010006020100
-0614080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010613010006030100060201000614
-080100630100006301000063010000630100006301000063010000020100060c08010a0e
-0001062a0100060302020103020206030100000106130100060301000602010006140801
-00630100006301000063010000630100006301000063010000020100060c08010a0e0001
-062a01000603020201030202060301000001061301000604010206150801006301000063
-01000063010000630100006301000063010000020100060c08010a0e0001062a01000603
-020201030202060301000001061301000603010006020100061408010063010000630100
-0063010000630100006301000063010000020100060c08010a0e0001062a010006030202
-010302020603010000010613010006030100060201000614080100630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100000106130100060301000602010006140801006301000063010000630100
-00630100006301000063010000020100060c08010a0e0001062a01000603020201030202
-060301000001061101040602010206150801006301000063010000630100006301000063
-01000063010000020100060c08010a0e0001062a01000603020201030202060301000001
-0632080100630100006301000063010000630100006301000063010000020100060c0801
-0a0e0001062a010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100060c08010a0e0001062a0100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100060c08010a0e0001062a01000603020201030202060301000001063208010063
-0100006301000063010000630100006301000063010000020100060c08010a0e0001062a
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100060c08010a0e0001062a0100060302020103020206030100
-00010632080100630100006301000063010000630100006301000063010000020100060c
-08010a0e0001062a01000603020201030202060301000001083400630100006301000063
-010000630100006301000063010000020100060c08010010062a01000603020201030202
-060301ff01ff0199060c08000011062a010006030202010302020603010006ff06ff06e3
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
-010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
-02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
-020201030202060301000649010006ff06ff069801000603020201030202060301000648
-010106ff06ff06980100060302020103020206030100064701000600010006ff06ff0698
-01000603020201030202060301000649010006ff06ff0698010006030202010302020603
-01000649010006ff06ff069801000603020201030202060301000649010006ff06ff0698
-01000603020201030202060301000649010006ff06ff0698010006030202010302020603
-01000649010006ff06ff069801000603020201030202060301000647010406ff06ff0696
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
-010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
-020206030100063708ff08ff0860064a0100060302020103020206030100063708ff08ff
-085f0000064a010006030202010302020603010006370801001d0aff0aff0a3e0001064a
-010006030202010302020603010006370801001c08000aff0aff0a3e0001064a01000603
-02020103020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a
-0100060302020103020206030100063708010001060b08000000060b08010aff0aff0a3e
-0001064a0100060302020103020206030100063708010001060b08000000060b08010aff
-0aff0a3e0001064a0100060302020103020206030100063708010001060b08000000060b
-08010aff0aff0a3e0001064a0100060302020103020206030100063708010001060b0800
-0000060b08010aff0aff0a3e0001064a0100060302020103020206030100063708010001
-060b08000000060b08010aff0aff0a3e0001064a01000603020201030202060301000637
-08010001060b08000000060b08010aff0aff0a3e0001064a010006030202010302020603
-0100063708010001060b08000000060b08010aff0aff0a3e0001064a0100060302020103
-020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a01000603
-02020103020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a
-0100060302020103020206030100063708010001060b08000000060b08010aff0aff0a3e
-0001064a0100060302020103020206030100063708010001080c0000080d0aff0aff0a3e
-0001064a0100060302020103020206030100063708010000081c0aff0aff0a3e0001064a
-01000603020201030202060301000637080100ff00ff005e064a01000603020201030202
-060301000637080000ff00ff005f064a010006030202010302020603010006ff06ff06e3
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
-010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
-02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
-0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
-010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
-02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
-0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
-010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
-02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
-0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
-010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020101
-00040603010006ff06ff06e301000603000502020400060301ff01ff01e5060300000202
-040000000202040006ff06ff06ed00000202040000000202040006ff06ff06ed00000202
-040000000202040006ff06ff06ed00000202040000000202040006ff06ff06ed00000202
-0400000002020400000502ff02ff02e100060202040000000208040002ff02ff02e10000
-0208040000000208040002ff02ff02e100000208040000000208040001ff01ff01e10000
-020804000000040901ff01ff01e100000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 0 532 441
-%%EOF
diff --git a/lib/tv/doc/src/tv_table_sorted.gif b/lib/tv/doc/src/tv_table_sorted.gif
deleted file mode 100644
index fd69e3cc58..0000000000
--- a/lib/tv/doc/src/tv_table_sorted.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/doc/src/tv_table_sorted.ps b/lib/tv/doc/src/tv_table_sorted.ps
deleted file mode 100644
index 681b2f4d19..0000000000
--- a/lib/tv/doc/src/tv_table_sorted.ps
+++ /dev/null
@@ -1,1502 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: (ImageMagick)
-%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_sorted.eps)
-%%CreationDate: (Mon Mar 19 17:15:35 2001)
-%%BoundingBox: 0 0 532 441
-%%DocumentData: Clean7Bit
-%%LanguageLevel: 1
-%%Pages: 0
-%%EndComments
-
-%%BeginDefaults
-%%PageOrientation: Portrait
-%%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.
-%
-/buffer 512 string def
-/byte 1 string def
-/color_packet 3 string def
-/pixels 768 string def
-
-/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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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 gt
- {
- /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-RunlengthEncodedCompression or 1-NoCompression.
- % hex color packets.
- %
- gsave
- 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
- /Helvetica 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 532 441
-userdict begin
-%%BeginData:
-DisplayImage
-0 0
-532.000000 441.000000
-12
-760 630
-1
-0
-0
-16
-ffffff
-000000
-d8d8d8
-c2c2c2
-6b6b6b
-ff0000
-d9d9d9
-b22222
-828282
-00ff00
-ffda00
-ffff80
-c3c3c3
-7f7f7f
-998300
-000000
-000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff
-02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202
-04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff
-02d500000202040000000202040002080000020d040002a501010206010102150101021e
-0101022901010206010102430101022a010102260101023201010233010102ae00000202
-040000000202040002080000020d04000277010502000107020101030206010702090101
-02060101021501010219010002030101021c0100020b010102060101022e010202020100
-020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400
-00000202040002080000020d04000277010102070101020301010201010102080101020c
-010102060101021501010218010102210101020b010102060101022e010202020100020d
-01010238010102020101024801010215010102cc00000202040000000202040002080000
-0202040602030400027701010207010102030101020c0101020401030203010102000101
-020301010202010302020101020901010202010302030103020201030201010402010101
-020201030203010102000101020a01040201010302030101020001010203010102020103
-022701000200010102010100020201030203010402020103020201010209010102000101
-020101010203010302030101020201010200010102020101020101030202010402020101
-020101010202010102020101020001010203010102000101020301030203010402020104
-020501040202010102010101020501030201010402000101020101010204010302020101
-020001010201010102020103020201040202010402020103020301010200010102060104
-020201030274000002020400000004030208000002020400030400000203040002770101
-0207010102030102020b0101020301010201010102020102020001010202010102010101
-020101010201010102090101020101010201010102010101020101010200010102010101
-020101010203010102010101020101010202010202000101020a01010202010102010101
-020201020200010102020101020101010201010102260100020001010201010002010101
-020101010201010102010101020101010201010102010101020901020200010202000101
-020101010201010102020101020201020200010102010101020001010200010102010101
-020101010202010102010101020201010202010202000101020201020200010102010101
-020101010201010102050101020801010201010102020101020101010204010102010101
-020101010202010102010101020301010201010102010101020001010201010102010101
-020101010200010102050101020501010201010102020102020001010204010102050101
-020101010273000004030101020b00000203040003020000020404000277010402040101
-0204010302090101020701010202010102010101020201010201010102010101020d0101
-020101010201010102010101020801010201010102030101020101010201010102020101
-02010101020a010102060101020201010201010102020101020101010201010102260100
-0200010202000100020101010201010102010101020101010201010102010101020d0101
-020101010201010102050101020201010202010102010101020101010200010102000101
-020101010201010102020101020101010202010102020101020101010202010102010101
-020101010201010102010102020401020207010102010101020201010201010102040101
-020101010201010102030101020001000204010102010101020101020203010102010101
-020401020204010202040101020101010202010102010101020401020204010102010101
-02760103020b000002030400030200000204040002770101020701010206010202080101
-0204010402020101020101010202010102010105020d0101020101010201010102010101
-02050104020101010203010102010101020101010202010102010101020a010102030104
-020201010201010102020101020101050226010002010101020001000201010102010101
-020101010201010102010105020d01010201010102010101020201040202010102020101
-020101010201010102000101020001010201010102010101020201010201010102020101
-020201010201010102020101020101010201010502020103020301030205010102010101
-020201010201010102040105020101010204010102050105020101010204010102010101
-020501030203010302020101020101010202010102010101020501030202010502760103
-020b00000204040003000000020504000277010102070101020701010208010102030101
-020101010202010102010101020201010201010102110101020101010201010102010101
-0204010102010101020101010203010102010101020101010202010102010101020a0101
-020201010201010102020101020101010202010102010101022a01000202010202010101
-020101010201010102010101020101010211010102010101020101010201010102010101
-020201010202010102010101020101010201010102000101020001010200010202020101
-020101010202010102020101020101010202010102010101020101010208010202040102
-020401010201010102020101020101010204010102050101020301000200010102040101
-020501010204010102010101020701020204010202010101020101010202010102010101
-0207010202010101027a0103020b00000204040003000000020504000277010102070101
-020301010201010102080101020301010201010102020101020101010202010102010101
-020201000201010102090101020101010201010102010101020201000200010102010101
-020101010203010102010101020101010202010102010101020a01010202010102010101
-020201010201010102020101020101010202010002260100020201020201010102010101
-020101010200010202010101020201000201010102090101020101010201010102010101
-020101010202010102020101020101010202010102070101020001010202010102000102
-020201010202010102010101020201010201010102010101020201000205010102050101
-020101010200010102000102020201010200010202010101020001010202010002010101
-020201010201010102000101020001010202010002010101020401010201010102020100
-020401010205010102010101020101010202010102010101020101010204010102010101
-0202010002760103020b0000020500000206040002770105020301010204010302090101
-020401020200010102010104020301010202010302020101020901010202010302030103
-02020102020001010201010202010101020201030203010102010101020b010202010102
-020001010201010402030101020201030227010002030101020201030203010102000101
-020201030202010102090101020101010201010102020102020001010201010102020101
-020101010203010502050101020301010200010102020101020201010201010102020101
-020101010202010302020104020201040202010102010101020001010203010102000101
-020101010201010302030102020001010201010102000101020101030202010102040101
-020201030201010402020104020301030203010102010101020101010200010402030103
-02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d
-040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff
-02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103
-0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202
-00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff
-06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801
-020201030202000106ff06ff06e908010202010302020001060b07040604070006030702
-061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa
-07000602070006090702061308010202010302020001060b0700060f0700062107000614
-0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b
-0700061308010202010302020001060b0700060607020605070006030702061a07000604
-070206030702060507000603070206180700060207000601070006000701060207040602
-070206030702060207000600070106030702061807000602070006020702060307020602
-07000602070006ff06eb07000602070006020702060507000602070006000701060c0801
-0202010302020001060b0700060807000605070006020700060207000619070006030700
-060207000601070006020700060407000602070006020700061707000602070006010701
-060107000603070006060700060207000602070006010701060107000601070006020700
-0618070006000700060507000602070006020700060107000602070006ff06eb07000602
-07000601070006020700060407000602070106010700060b08010202010302020001060b
-070306050700060507000602070006020700061907000603070006020700060107000602
-07000604070006020700061b070006020700060107000602070006030700060607000602
-070006020700060107000602070006010700061c07000600070006050700060207000602
-070006010700060007000600070006ff06eb070406010700060207000604070006020700
-06020700060b08010202010302020001060b070006080700060507000602070406190700
-060307000602070006010700060207000604070006030702061807000602070006010700
-060207000603070006060700060207000602070006010700060207000602070206190700
-06000700060507000602070406010700060007000600070006ff06eb0700060207000601
-0704060407000602070006020700060b08010202010302020001060b0700060807000605
-070006020700061d07000603070006020700060107000602070006040700060607000617
-070006020700060107000602070006030700060607000602070006020700060107000602
-07000605070006190700060607000602070006050700060007000600070006ff06eb0700
-0602070006010700060807000602070006020700060b08010202010302020001060b0700
-060807000605070006020700060207000619070006030700060207000601070006020700
-060407000602070006020700061707000602070006010701060107000603070006060700
-060207000602070006010700060207000601070006020700061907000606070006020700
-0602070006010700060007000600070006ff06eb07000602070006010700060207000604
-07000602070106010700060b08010202010302020001060b070006080700060507000603
-0702061a0700060407020603070206050700060307020619070206020700060007010605
-07010604070006030702060207000602070006020702061a070006060700060307020603
-07000600070006ff06ec07000602070006020702060507000602070006000701060c0801
-0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706
-062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202
-0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801
-020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103
-0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff
-08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
-06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff
-06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603
-0016061600160616004406160016061600160616001606ff06be02020103020206030015
-080006160015080006160015080000150800001508000616001508000616001508000616
-0015080006ff06be02020103020206030001061208010616000106120801061600010612
-080100010612080100010612080106160001061208010616000106120801061600010612
-080106ff06be020201030202060300010612080106160001061208010616000106120801
-000106120801000106120801061600010612080106160001061208010616000106120801
-06ff06be0202010302020603000106120801061600010603070206030702060408010616
-000106120801000106120801000106120801061600010612080106160001061208010616
-00010612080106ff06be0202010302020603000106080702060608010616000106030702
-060307020604080106160001061208010001061208010001061208010616000106050704
-0607080106160001060707010608080106160001060707030606080106ff06be02020103
-020206030001060b0701060408010616000106020704060107040603080106160001060e
-0700060208010001060e070006020801000106020700060e080106160001060307080605
-080106160001060607030607080106160001060507070604080106ff06be020201030202
-06030001060d070006000700060108010616000106020700060107010601070006010701
-0603080106160001060e0700060208010001060e070006020801000106020700060e0801
-061600010602070a06040801061600010606070306070801061600010604070306010703
-0603080106ff06be02020103020206030001060207020608070106010801061600010601
-070d0602080106160001060b07000601070006020801000106020700060a070006020801
-00010602070006010700060b080106160001060207030602070306040801061600010607
-0701060808010616000106040702060307020603080106ff06be02020103020206030001
-060107080602070206010801061600010600070006000703060007020600070406010801
-06160001060b07000601070006020801000106020700060a070006020801000106020700
-06010700060b080106160001060107030604070306030801061600010612080106160001
-06040702060307020603080106ff06be0202010302020603000106010709060608010616
-000106000700060007030600070206000704060108010616000106080700060107000601
-070006020801000106020700060407000604070006020801000106020700060107000601
-070006080801061600010601070206030707060108010616000106050704060708010616
-000106050701060207020604080106ff06be020201030202060300010601070906060801
-061600010600070006000703060007020600070406010801061600010608070006010700
-060107000602080100010602070006040700060407000602080100010602070006010700
-060107000608080106160001060107020604070506020801061600010606070306070801
-06160001060907020605080106ff06be0202010302020603000106010709060608010616
-000106000700060007030600070206000704060108010616000106050700060107000601
-070006010700060208010001060207000604070006010700060107000602080100010602
-070006010700060107000601070006050801061600010601070206050703060308010616
-0001060707020607080106160001060807020606080106ff06be02020103020206030001
-0601070d0602080106160001060007000600070706000704060108010616000106050700
-060107000601070006010700060208010001060207000604070006010700060107000602
-080100010602070006010700060107000601070006050801061600010601070306050701
-0604080106160001060707020607080106160001060707020607080106ff06be02020103
-020206030001060107030607070006030801061600010600070006000704060107000600
-070406010801061600010602070006010700060107000601070006010700060208010001
-060207000601070006010700060107000601070006020801000106020700060107000601
-07000601070006010700060208010616000106020703060b080106160001060707020607
-080106160001060707020607080106ff06be020201030202060300010601070206070700
-060408010616000106000706060107060601080106160001060207000601070006010700
-060107000601070006020801000106020700060107000601070006010700060107000602
-080100010602070006010700060107000601070006010700060208010616000106020709
-06050801061600010607070206070801061600010612080106ff06be0202010302020603
-000106010701060707000605080106160001060007000600070206050700060007020601
-080106160001060207000601070006010700060107000601070006020801000106020700
-060107000601070006010700060107000602080100010602070006010700060107000601
-070006010700060208010616000106030707060608010616000106060704060608010616
-0001060707020607080106ff06be02020103020206030001060107090606080106160001
-060007000600070206050700060007020601080106160001060207000601070006010700
-060107000601070006020801000106020700060107000601070006010700060107000602
-080100010602070006010700060107000601070006010700060208010616000106050704
-0607080106160001060507060605080106160001060707020607080106ff06be02020103
-020206030001061208010616000106000704060507040601080106160001061208010001
-0612080100010612080106160001061208010616000106120801061600010612080106ff
-06be02020103020206030001061208010616000106120801061600010612080100010612
-080100010612080106160001061208010616000106120801061600010612080106ff06be
-020201030202060300010612080106160001061208010616000106120801000106120801
-00010612080106160001061208010616000106120801061600010612080106ff06be0202
-010302020603000108140616000108140616000108140001081400010814061600010814
-06160001081406160001081406ff06be0202010302020603000008150616000008150616
-00000815000008150000081506160000081506160000081506160000081506ff06be0202
-0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
-0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
-0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202
-0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5
-06030202010302020603010000ff00ff00cf010000120100060302020103020206030100
-00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001
-060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603
-0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603
-010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf
-01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801
-010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103
-02020603010000ff00ff00cf010000010601010a06010801010006030202010302020603
-010000ff00ff00cf010000010602010806020801010006030202010302020603010000ff
-00ff00cf010000010603010606030801010006030202010302020603010000ff00ff00cf
-010000010604010406040801010006030202010302020603010000ff00ff00cf01000001
-0605010206050801010006030202010302020603010000ff00ff00cf0100000106060100
-06060801010006030202010302020603010000ff00ff00cf01000001060e080101000603
-0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603
-010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf
-01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801
-010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103
-02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff
-00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811
-01000603020201030202060301ff01ff01e5060302020103020206ff06ff06ed02020103
-020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103
-020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103
-020206ff06ff06ed020201030202060301ff01ff01e506030202010302020603010006ff
-06ff06970100064a01000603020201030202060301000663010506ff06ff062d0100064a
-01000603020201030202060301000662010706ff06ff062c0100064a0100060302020103
-020206030100066101020603010206ff06ff062b0100064a010006030202010302020603
-0100066101010605010106ff06ff062b0100064a01000603020201030202060301000661
-01020603010206ff06ff062b0100064a01000603020201030202060301000662010706ff
-06ff062c0100064a01000603020201030202060301000663010506ff06ff062d0100064a
-01000603020201030202060301000665010106ff06ff062f0100064a0100060302020103
-0202060301000665010106ff06ff062f0100064a01000603020201030202060301000665
-010106ff06ff062f0100064a01000603020201030202060301000665010106ff06ff062f
-0100064a01000603020201030202060301000665010106ff06ff062f0100064a01000603
-020201030202060301000665010106ff06ff062f0100064a010006030202010302020603
-0100066101010600010206ff06ff062f0100064a01000603020201030202060301000661
-01010600010206ff06ff062f0100064a01000603020201030202060301000661010506ff
-06ff062f0100064a01000603020201030202060301000661010506ff06ff062f0100064a
-0100060302020103020206030100066101020600010106ff06ff062f0100064a01000603
-0202010302020603010006ff06ff06970100064a01000603020201030202060301ff01ff
-0199064a010006030202010302020603010006350b610d04005f0d04005f0d04005f0d04
-005f0d04005f0d0400010100061308120623010006030202010302020603010006350b60
-0e000d030100005e08000d030100005e08000d030100005e08000d030100005e08000d03
-0100005e08000d0301000001010006130811000006230100060302020103020206030100
-06350b010a5d0e010d0101020001065b08010d0101020001065b08010d0101020001065b
-08010d0101020001065b08010d0101020001065b08010d01010200010100061308010010
-0623010006030202010302020603010006350b010a2c01000a2f0e010d0101020001062a
-0102062d08010d0101020001062a0102062d08010d0101020001062c0100062d08010d01
-0102000106290104062c08010d0101020001062b0102062c08010d010102000101000613
-0801000d080000010623010006030202010302020603010006350b010a2a01020a2f0e01
-0d01010200010629010006020100062c08010d01010200010629010006020100062c0801
-0d0101020001062b0101062d08010d010102000106290100063008010d0101020001062a
-0100062f08010d01010200010100061308010001060a0801000106230100060302020103
-02020603010006350b010a2c01000a2f0e010d01010200010629010006020100062c0801
-0d0101020001062d0100062c08010d0101020001062a010006000100062d08010d010102
-000106290100063008010d010102000106290100063008010d0101020001010006130801
-0001060a080100010623010006030202010302020603010006350b010a2c01000a2f0e01
-0d01010200010629010006020100062c08010d0101020001062d0100062c08010d010102
-0001062a010006000100062d08010d010102000106290100063008010d01010200010629
-0100063008010d01010200010100061308010001060a0801000106230100060302020103
-02020603010006350b010a2c01000a2f0e010d0101020001062c0100062d08010d010102
-0001062b0101062d08010d01010200010629010006010100062d08010d01010200010629
-0103062d08010d010102000106290103062d08010d01010200010100061308010001060a
-080100010623010006030202010302020603010006350b010a2c01000a2f0e010d010102
-0001062b0100062e08010d0101020001062d0100062c08010d0101020001062801000602
-0100062d08010d0101020001062d0100062c08010d01010200010629010006020100062c
-08010d01010200010100061308010001060a080100010623010006030202010302020603
-010006350b010a2c01000a2f0e010d0101020001062a0100062f08010d0101020001062d
-0100062c08010d010102000106280105062c08010d0101020001062d0100062c08010d01
-010200010629010006020100062c08010d01010200010100061308010001060a08010001
-0623010006030202010302020603010006350b010a2c01000a2f0e010d01010200010629
-010006020100062c08010d01010200010629010006020100062c08010d0101020001062c
-0100062d08010d01010200010628010006030100062c08010d0101020001062901000602
-0100062c08010d01010200010100061308010001060a0801000106230100060302020103
-02020603010006350b010a2a01040a2d0e010d010102000106290104062c08010d010102
-0001062a0102062d08010d0101020001062b0102062c08010d010102000106290103062d
-08010d0101020001062a0102062d08010d01010200010100061308010001060a08010001
-0623010006030202010302020603010006350b010a5d0e010d0101020001065b08010d01
-01020001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b
-08010d01010200010100061308010001060a080100010623010006030202010302020603
-010006350b010a5d0e010d0101020001065b08010d0101020001065b08010d0101020001
-065b08010d0101020001065b08010d0101020001065b08010d0101020001010006130801
-0001060a080100010623010006030202010302020603010006350b010a5d0e010d010102
-0001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b0801
-0d0101020001065b08010d01010200010100060e0100060308010001060a080100010623
-010006030202010302020603010006350b010a5d0e010d0101020001065b08010d010102
-0001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b0801
-0d01010200010100060d0101060308010001060a08010001062301000603020201030202
-0603010006350b010a5d0e010d0101020001065b08010d0101020001065b08010d010102
-0001065b08010d0101020001065b08010d0101020001065b08010d01010200010100060c
-010006000100060308010001080c00010623010006030202010302020603010006350b01
-0a5d0e010d0101020001065b08010d0101020001065b08010d0101020001065b08010d01
-01020001065b08010d0101020001065b08010d01010200010100060e010006030801000d
-080000010623010006030202010302020603010006350b010e5f0d0101020001085d0d01
-01020001085d0d0101020001085d0d0101020001085d0d0101020001085d0d0101020001
-0100060e0100060308010001060a08010001062301000603020201030202060301000635
-0b000e600d0001030000085e0d0001030000085e0d0001030000085e0d0001030000085e
-0d0001030000085e0d000103000008000100060e0100060308010001060a080100010623
-0100060302020103020206030100009a0100006301000063010000630100006301000063
-010000020100060e0100060308010001060a080100010623010006030202010302020603
-01000035080000630100006301000063010000630100006301000063010000020100060e
-0100060308010001060a0801000106230100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100060c010406010801
-0001060a0801000106230100060302020103020206030100000106320801006301000063
-01000063010000630100006301000063010000020100061308010001060a080100010623
-010006030202010302020603010000010617010006190801006301000063010000630100
-00630100006301000063010000020100061308010001060a080100010623010006030202
-01030202060301000001061501020619080100630100000e010000530100006301000063
-0100006301000063010000020100061308010001060a0801000106230100060302020103
-0202060301000001061701000619080100630100000e0100005301000063010000630100
-006301000063010000020100061308010001060a08010001062301000603020201030202
-0603010000010617010006190801000f0102000201000000010100020100000001010003
-0102003b0100000e01000000010100020100000001010003010200020101000001000002
-01010000010000030102002d010000630100006301000063010000630100000201000613
-08010001060a080100010623010006030202010302020603010000010617010006190801
-000e010000020100000101010001010000010101000101000001010000020100003a0100
-000e01010001010000010101000101000001010000020100000101000000010000000100
-0001010000000100000001000001010000020100002c0100006301000063010000630100
-0063010000020100061308010001060a0801000106230100060302020103020206030100
-00010617010006190801001201000001010000020100000101000002010000050100003a
-0100000e0100000201000001010000050100000201000001010000000100000001000001
-0100000001000000010000050100002c0100006301000063010000630100006301000002
-0100061308010001060a0801000106230100060302020103020206030100000106170100
-06190801000f01030001010000020100000101000002010000020103003a0100000e0100
-000201000001010000050100000201000001010000000100000001000001010000000100
-0000010000020103002c0100006301000063010000630100006301000002010006130801
-0001080c00010623010006030202010302020603010000010617010006190801000e0100
-00020100000101000002010000010100000201000001010000020100003a0100000e0100
-000201000001010000050100000201000001010000000100000001000001010000000100
-000001000001010000020100002c01000063010000630100006301000063010000020100
-061308010000080d00010623010006030202010302020603010000010615010406170801
-000e010000020100000101000002010000010100000201000001010000020100003a0100
-000e01010001010000010100000501000002010000010100000001000000010000010100
-00000100000001000001010000020100002c010000630100006301000063010000630100
-00020100061308010c0e000106230100060302020103020206030100000106320801000f
-01030001010000020100000101000002010000020103003a0100000e0100000001010002
-01000006010200020100000001000000010000010100000001000000010000020103002c
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001063208010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000108340063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000000835
-01ff01ff0161061308010c0e000106230100060302020103020206030100009a01000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000035080000630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010616010206180801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061501000602
-0100061708010011010100130100000b01000002010000290100002c0100000b01020003
-0102001f01000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010615010006020100061708010010010000150100
-000f010000290100002c0100000d010000050100001f0100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010615
-010006020100061708010010010000030100000001010003010200030101000001000001
-01000000010100030102000201000001010000260100000e010000000101000301020002
-01000000010100020100000001010002010400010100000201000004010000050100001f
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-0202010302020603010000010618010006180801000e0104000101010001010000010100
-000201000001010000010101000101010001010000040100000201000000010000270100
-000e01010001010000010100000201000001010100010100000101010001010000030100
-00030100000201000004010000050100001f010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061701000619
-080100100100000301000005010000020100000101000002010000010100000801000002
-010100280100000e01000002010000010100000201000001010000050100000701000003
-0100000201000004010000050100001f0100006301000063010000630100006301000002
-0100061308010c0e000106230100060302020103020206030100000106160100061a0801
-001001000003010000050104000101000002010000010100000801000002010100280100
-000e01000002010000010100000201000001010000050100000701000003010000020100
-0004010000050100001f0100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010615010006020100061708010010
-010000030100000501000005010000020100000101000008010000020100000001000027
-0100000e0100000201000001010000020100000101000005010000070100000301000002
-01000004010000050100001f010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001061501040617080100100100
-000301000005010000020100000101000001010100010100000801000002010000010100
-00260100000e010000020100000101000002010000010100000501000007010000030100
-000101010004010000050100001f01000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106320801001001000003
-01000006010200030101000001000001010000080100000201000002010000250100000e
-010000020100000201020002010000050100000801010002010100000100000401000005
-0100001f01000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000106320801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001083400630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-0000083501ff01ff0161061308010c0e000106230100060302020103020206030100009a
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000350800006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-063208010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106160102061808010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010615
-01000602010006170801002601000003010200030102002d010000160102004901000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-02020603010000010619010006170801002d010000050100002d01000018010000490100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010619010006170801000f01010000010000010100000201000001
-0100000001010003010200050100000501000003010200260100000f0102000501000002
-010000020100000201020003010200030102000201000000010100260100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010617010106180801000e01000001010100010100000201000001010100010100
-000401000005010000050100000201000002010000250100000e01000002010000040100
-000201000002010000010100000201000001010000020100000101000002010000010101
-00010100002501000063010000630100006301000063010000020100061308010c0e0001
-0623010006030202010302020603010000010619010006170801000e0100000201000001
-01000002010000010100000201000004010000050100000501000006010000250100000e
-010000080100000201000002010000010100000501000005010000020100000101000002
-0100002501000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010619010006170801000e01000002010000010100
-0002010000010100000201000004010000050100000501000003010300250100000f0102
-000501000002010000020100000201020003010200020104000101000002010000250100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-01030202060301000001061501000602010006170801000e010000020100000101000002
-010000010100000201000004010000050100000501000002010000020100002501000012
-010000040100000201000002010000050100000501000001010000050100000201000025
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-0202010302020603010000010616010206180801000e0100000101010001010000010101
-0001010000020100000401000005010000050100000201000002010000250100000e0100
-000201000004010000020100000101010001010000020100000101000002010000010100
-000201000001010000020100002501000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106320801000f01010000
-010000020101000001000001010000020100000401000005010000050100000301030025
-0100000f0102000501000003010100000100000201020003010200030102000201000002
-0100002501000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010632080100120100004f01000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-06030100000106320801000e010000020100004f01000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-06320801000f010200500100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106320801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001063208010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010834
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000000083501ff01ff0161061308010c0e00010623
-0100060302020103020206030100009a0100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100003508000063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000106320801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001061801000618080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-0603020201030202060301000001061701010618080100110100001a010100040100002d
-010000160102000c01000002010000370100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010616010006000100
-06180801002c010000350100001801000010010000370100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010616
-01000600010006180801000f010200030102000301020003010200040100000401020002
-01000000010100030102001f0100000f0102000501000002010000020100000201020002
-010000010100003401000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106150100060101000618080100110100
-000201000002010000010100000201000001010000020100000101040004010000020101
-000101000001010000020100001e0100000e010000020100000401000002010000020100
-000401000002010000000100003501000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106140100060201000618
-080100110100000201000002010000010100000501000002010000030100000601000002
-0100000201000001010000020100001e0100001201000004010000020100000201000004
-010000020101003601000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106140105061708010011010000020100
-0002010000020102000201040003010000060100000201000002010000010104001e0100
-000f01030004010000030100000001000005010000020101003601000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000106180100061808010011010000020100000201000005010000010100000701000006
-010000020100000201000001010000220100000e01000002010000040100000301000000
-010000050100000201000000010000350100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010617010206170801
-001101000002010000020100000101000002010000010100000201000003010000060100
-00020100000201000001010000020100001e0100000e0100000201000004010000040100
-000601000002010000010100003401000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106320801001101000003
-010200030102000301020004010000060100000201000002010000020102001f0100000f
-010300040100000401000006010000020100000201000033010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-063208010011010000500100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106320801000e01000001
-010000500100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801000f01010051010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001083400630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-0000083501ff01ff0161061308010c0e0001062301000603020201030202060301000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000000050000000500000005000000050000000500
-000005000000050000000500000005000100006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000500
-000005320100050000630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000005340100006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000500000005150104051701000500006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-06030100000005160100051c0100000e010000160100003b0100000e0100000601020010
-0100000c0100002901000063010000630100006301000063010000020100061308010c0e
-0001062301000603020201030202060301000500000005150100051b01000500000e0100
-00530100000e01000008010000100100000c010000290100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000000516
-0100051c0100000e01000001010000030102000201000000010100030102000201000000
-010100340100000e01000000010100050100000301020003010200020100000101000003
-010200020100000001010003010200020100000001010003010100000100001001000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-0202060301000500000005150103051801000500000e0100000001000003010000020100
-000101010001010000040100000201010001010000330100000e01010001010000040100
-000201000002010000010100000201000001010000000100000301000002010000010101
-000101000001010000020100000101010001010000010100000101010010010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000000051a010005180100000e0101000801000001010000080100000201000002
-010000330100000e01000002010000040100000601000001010000050101000401000002
-010000010100000201000001010000020100000101000005010000020100001001000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-0202060301000500000005190100051701000500000e0101000501030001010000080100
-000201000002010000330100000e01000002010000040100000301030001010000050101
-000401040001010000020100000101040001010000050100000201000010010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000000051501000503010005180100000e01000000010000030100000201000001
-010000080100000201000002010000330100000e01000002010000040100000201000002
-010000010100000501000000010000030100000501000002010000010100000501000005
-010000020100001001000063010000630100006301000063010000020100061308010c0e
-0001062301000603020201030202060301000500000005150103051801000500000e0100
-0001010000020100000201000001010000080100000201000002010000330100000e0101
-000101000004010000020100000201000001010000020100000101000001010000020100
-000201000001010100010100000101000002010000010100000501000001010100100100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-0103020206030100000005340100000e0100000201000002010300010100000801000002
-01000002010000330100000e010000000101000501000003010300020102000201000002
-010000020102000201000000010100030102000201000006010100000100001001000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100050000000532010005000063010000510100001001000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-00000534010000630100004d010000020100001001000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100050000000532
-0100050000630100004e0102001101000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000005340100006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000500000005320100050000630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010000630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001000500010005000100050001000500
-010005000100050001000500010005000100050001ff01ff0161061308010c0e00010623
-01000603020201030202060301000d360063010000630100006301000063010000630100
-0063010000020100061308010c0e0001062301000603020201030202060301000d350100
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000d01013400630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-0d0101340063010000630100006301000063010000630100006301000002010006130801
-0c0e0001062301000603020201030202060301000d010117000201190063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-01030202060301000d0101160000011c000e0100000e010000140100002d010000320102
-002d01000063010000630100006301000063010000020100061308010c0e000106230100
-0603020201030202060301000d0101150000011d000e0100000e01000043010000340100
-002d01000063010000630100006301000063010000020100061308010c0e000106230100
-0603020201030202060301000d0101150000011d000e0100000101000003010200020104
-00020102000201000000010100030102000201000000010100030102001f0100000e0100
-000201000001010000000101000201000000010100030102000301020005010000030102
-002601000063010000630100006301000063010000020100061308010c0e000106230100
-0603020201030202060301000d0101150003011a000e0100000001000003010000020100
-000301000003010000020100000101010001010000040100000201010001010000010100
-00020100001e0100000e0100000201000001010100010100000101010001010000010100
-000201000001010000020100000401000002010000020100002501000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-0d0101150000010200000119000e01010008010000030100000701000001010000080100
-000201000002010000050100001e0100000e010000020100000101000002010000010100
-000201000001010000090100000401000006010000250100006301000063010000630100
-0063010000020100061308010c0e0001062301000603020201030202060301000d010115
-0000010200000119000e0101000501030003010000040103000101000008010000020100
-0002010000020103001e0100000e01000002010000010100000201000001010000020100
-000201020003010300040100000301030025010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000d01011500000102
-00000119000e010000000100000301000002010000030100000301000002010000010100
-0008010000020100000201000001010000020100001e0100000e01000002010000010100
-000201000001010000020100000501000001010000020100000401000002010000020100
-002501000063010000630100006301000063010000020100061308010c0e000106230100
-0603020201030202060301000d0101160002011a000e0100000101000002010000020100
-000301000003010000020100000101000008010000020100000201000001010000020100
-001e0100000e010000010101000101010001010000010101000101000001010000020100
-000101000002010000040100000201000002010000250100006301000063010000630100
-0063010000020100061308010c0e0001062301000603020201030202060301000d010134
-000e01000002010000020103000401010002010300010100000801000002010000020100
-00020103001e0100000f0101000001000001010000000101000201000000010100030102
-000301030004010000030103002501000063010000630100006301000063010000020100
-061308010c0e0001062301000603020201030202060301000d0101340063010000150100
-00050100004501000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000d01013400630100001501000005010000450100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-01030202060301000d010134006301000015010000050100004501000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-0d0101340063010000630100006301000063010000630100006301000002010006130801
-0c0e0001062301000603020201030202060301000d010134006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000d01013400630100006301000063010000630100006301000063010000020100
-061308010c0e0001062301000603020201030202060301000d0001ff01ff019706130801
-0c0e000106230100060302020103020206030100009a0100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-003508000063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061501040617
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106150100060201000617080100260100
-003b01000019010000170102002d01000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106180100061808010063
-01000019010000190100002d010000630100006301000063010000630100000201000613
-08010c0e00010623010006030202010302020603010000010618010006180801000e0101
-00000100000301020002010000000101000301020003010200340100000f010200030101
-000001000002010200020100000001010002010000000101000501000003010200020100
-00000101001f01000063010000630100006301000063010000020100061308010c0e0001
-0623010006030202010302020603010000010618010006180801000e0100000001000000
-01000001010000020100000101010001010000040100000201000002010000330100000e
-010000020100000101000001010100010100000201000001010100010100000101010001
-01000004010000020100000201000001010100010100001e010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-0618010006180801000e0100000001000000010000050100000101000008010000060100
-00330100000e010000020100000101000002010000010100000201000001010000020100
-000101000002010000040100000601000001010000020100001e01000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-00010617010006190801000e010000000100000001000002010300010100000801000003
-010300330100000e01000002010000010100000201000001010400010100000201000001
-01000002010000040100000301030001010000020100001e010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-0617010006190801000e0100000001000000010000010100000201000001010000080100
-000201000002010000330100000e01000002010000010100000201000001010000050100
-0002010000010100000201000004010000020100000201000001010000020100001e0100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010617010006190801000e01000000010000000100000101000002
-01000001010000080100000201000002010000330100000e010000020100000101000001
-010100010100000201000001010000020100000101010001010000040100000201000002
-01000001010000020100001e010000630100006301000063010000630100000201000613
-08010c0e000106230100060302020103020206030100000106320801000e010000000100
-000001000002010300010100000801000003010300330100000f01020003010100000100
-000201020002010000020100000101000000010100050100000301030001010000020100
-001e01000063010000630100006301000063010000020100061308010c0e000106230100
-06030202010302020603010000010632080100630100002a010000370100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100002a01000037010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001063208010063
-0100002a0100003701000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010834006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202
-010302020603010005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050000000500000005000000
-050000000500000005000000050000000500000005000000050001000063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010005000000053201000500006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000000
-053401000063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010005000000051601020518010005000063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-01000603020201030202060301000000051601000502010005180100001e010000430100
-000e01000006010200100100000c01000029010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000500000005150100
-05020100051701000500001e010000430100000e01000008010000100100000c01000029
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000000051601000502010005180100000e01010000010000030102
-0002010400020102003b0100000e01000000010100050100000301020003010200020100
-000101000003010200020100000001010003010200020100000001010003010100000100
-001001000063010000630100006301000063010000020100061308010c0e000106230100
-0603020201030202060301000500000005160102051801000500000e0100000001000000
-01000001010000020100000301000003010000020100003a0100000e0101000101000004
-010000020100000201000001010000020100000101000000010000030100000201000001
-010100010100000101000002010000010101000101000001010000010101001001000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-0202060301000000051601000502010005180100000e0100000001000000010000050100
-0003010000030100003e0100000e01000002010000040100000601000001010000050101
-000401000002010000010100000201000001010000020100000101000005010000020100
-001001000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100050000000515010005020100051701000500000e01000000
-010000000100000201030003010000040102003b0100000e010000020100000401000003
-010300010100000501010004010400010100000201000001010400010100000501000002
-0100001001000063010000630100006301000063010000020100061308010c0e00010623
-01000603020201030202060301000000051601000502010005180100000e010000000100
-0000010000010100000201000003010000070100003a0100000e01000002010000040100
-000201000002010000010100000501000000010000030100000501000002010000010100
-000501000005010000020100001001000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100050000000516010205180100
-0500000e010000000100000001000001010000020100000301000003010000020100003a
-0100000e0101000101000004010000020100000201000001010000020100000101000001
-010000020100000201000001010100010100000101000002010000010100000501000001
-0101001001000063010000630100006301000063010000020100061308010c0e00010623
-0100060302020103020206030100000005340100000e0100000001000000010000020103
-0004010100020102003b0100000e01000000010100050100000301030002010200020100
-000201000002010200020100000001010003010200020100000601010000010000100100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010005000000053201000500006301000051010000100100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000000534010000630100004d01000002010000100100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010005000000
-05320100050000630100004e010200110100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000000534010000630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100050000000532010005000063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-050001000500010005000100050001000500010005000100050001000500010005000100
-0500010005000100050001000500010005000100050001ff01ff0161061308010c0e0001
-06230100060302020103020206030100009a010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000350800
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106160102061808010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010615010006020100061708010016010200030102
-00420100000e010000230100000b01020003010200180100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010615
-01000602010006170801001801000005010000420100000e010000230100000d01000005
-0100001801000063010000630100006301000063010000020100061308010c0e00010623
-01000603020201030202060301000001061501000602010006170801000f010200050100
-0005010000030102003b0100000e01000000010100030102000201000000010100020100
-000001010003010200020104000101000002010000040100000501000018010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001061501000602010006170801000e01000002010000040100000501000002
-010000020100003a0100000e010100010100000101000002010000010101000101000001
-010100010100000101000002010000030100000301000002010000040100000501000018
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-0202010302020603010000010616010306170801000e0100000201000004010000050100
-0002010000020100003a0100000e01000002010000010100000201000001010000050100
-000201000001010000070100000301000002010000040100000501000018010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-0603010000010619010006170801000e010000020100000401000005010000020104003a
-0100000e0100000201000001010000020100000101000005010000020100000201020004
-010000030100000201000004010000050100001801000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106180100
-06180801000e010000020100000401000005010000020100003e0100000e010000020100
-000101000002010000010100000501000002010000050100000301000003010000020100
-000401000005010000180100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010615010206190801000e01000002
-010000040100000501000002010000020100003a0100000e010000020100000101000002
-010000010100000501000002010000010100000201000003010000030100000101010004
-010000050100001801000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801000f01020005010000050100
-00030102003b0100000e0100000201000002010200020100000501000002010000020102
-000501010002010100000100000401000005010000180100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-083400630100006301000063010000630100006301000063010000020100061308010c0e
-0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001
-062301000603020201030202060301000900000009000000090000000900000009000000
-090000000900000009000000090000000900000009000000090000000900000009000000
-090000000900000009000000090000000900000009000000090000000900000009000000
-090000000900000009000000090000000900006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000000
-090000000900000009000000090000000900000009000000090000000900000009000000
-090000000900000009000000090000000900000009000000090000000900000009000000
-090000000900000009000000090000000900000009000000090000000900000009000100
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000900000009320100090000630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000009340100006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000900000009130100
-090401020915010009000063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000000912010209030100
-090201000915010000630100001701000020010200260100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010009000000
-091301000903010009020100091401000900006301000017010000220100002601000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000009140100090301000902010009150100000e01000000010100030102
-000201000000010100420100000f01020002010400010100000201000001010000000101
-000301020002010000000101000501000003010200020100000001010018010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-0603010009000000091301000903010009020100091401000900000e0101000101000001
-010000020100000101010001010000410100000e01000002010000030100000301000002
-010000010101000101000001010000020100000101010001010000040100000201000002
-010000010101000101000017010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000000091401000903010009020100
-09150100000e01000002010000010100000201000001010000450100000e010000070100
-000301000002010000010100000501000002010000010100000201000004010000060100
-000101000002010000170100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010009000000091301000903010009020100
-091401000900000e010000020100000101040001010000450100000f0102000401000003
-010000020100000101000005010400010100000201000004010000030103000101000002
-0100001701000063010000630100006301000063010000020100061308010c0e00010623
-0100060302020103020206030100000009140100090301000902010009150100000e0100
-000201000001010000050100004501000012010000030100000301000002010000010100
-000501000005010000020100000401000002010000020100000101000002010000170100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-0103020206030100090000000911010409020102091501000900000e0101000101000001
-0100000201000001010000450100000e0100000201000003010000030100000101010001
-010000050100000201000001010100010100000401000002010000020100000101000002
-0100001701000063010000630100006301000063010000020100061308010c0e00010623
-0100060302020103020206030100000009340100000e0100000001010003010200020100
-00450100000f010200050101000201010000010000010100000601020002010000000101
-000501000003010300010100000201000017010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000900000009320100
-0900000e0100005301000031010000300100006301000063010000630100006301000002
-0100061308010c0e000106230100060302020103020206030100000009340100000e0100
-005301000031010000300100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010009000000093201000900000e01000053
-010000310100003001000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000009340100006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000900000009320100090000630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000009000100
-090001000900010009000100090001000900010009000100090001000900010009000100
-090001000900010009000100090001000900010009000100090001000900010009000100
-090001000900010009000100090001000900010009000100090001000900010000630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100090001000900010009000100090001000900010009000100
-090001000900010009000100090001000900010009000100090001000900010009000100
-090001000900010009000100090001000900010009000100090001000900010009000100
-090001000900010009000100090001ff01ff0161061308010c0e00010623010006030202
-0103020206030100009a0100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100003508000063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061301000605010006160801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001061101020603010206160801001701000006010000420100
-00150100001c0100000b0102000301020018010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061301000605
-01000616080100170100004a010000150100001c0100000d010000050100001801000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-0202060301000001061301000605010006160801000f0102000201040002010200020100
-000001010003010200340100000f01020002010000010100000301020002010000000101
-000301020002010400010100000201000004010000050100001801000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-0001061301000605010006160801000e0100000201000003010000060100000201010001
-0100000101000002010000330100000e0100000201000001010000000100000301000002
-010000010101000101000001010000020100000301000003010000020100000401000005
-0100001801000063010000630100006301000063010000020100061308010c0e00010623
-01000603020201030202060301000001061301000605010006160801000e010000070100
-0006010000020100000201000005010000330100000e0100000501010008010000010100
-000201000001010000070100000301000002010000040100000501000018010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001061301000605010006160801000f01020004010000060100000201000002
-01000002010300330100000f010200020101000501030001010000020100000201020004
-010000030100000201000004010000050100001801000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106130100
-060501000616080100120100000301000006010000020100000201000001010000020100
-003301000012010000010100000001000003010000020100000101000002010000050100
-000301000003010000020100000401000005010000180100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010611
-01040601010406140801000e010000020100000301000006010000020100000201000001
-01000002010000330100000e010000020100000101000001010000020100000201000001
-010000020100000101000002010000030100000301000001010100040100000501000018
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-02020103020206030100000106320801000f010200050101000401000002010000020100
-0002010300330100000f0102000201000002010000020103000101000002010000020102
-000501010002010100000100000401000005010000180100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-083400630100006301000063010000630100006301000063010000020100061308010c0e
-0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001
-06230100060302020103020206030100009a010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000350800
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106130100060401020615
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106110102060301000602010006140801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061301000603010006020100061408010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010613010006030100060201000614080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106130100060601000615080100630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106130100060501000616080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000106130100060401000617080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106130100
-060301000602010006140801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061101040601
-010406140801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001063208010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106320801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001083400630100006301000063010000630100006301000063
-010000020100061308010c0e0001062301000603020201030202060301000000083501ff
-01ff0161061308010c0e000106230100060302020103020206030100009a010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000350800006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001063208010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010632080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000106130100060401020615080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106110102
-060301000602010006140801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061301000607
-010006140801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001061301000607010006140801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061301000605010106150801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001061301000607010006140801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001061301000607010006140801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-061301000603010006020100061408010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010611
-010406020102061508010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-063208010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010632080100630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106320801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001063208010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010834006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000000
-083501ff01ff0161061308010c0e000106230100060302020103020206030100009a0100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100003508000063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001061301000606010006150801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-061101020605010106150801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061301000604
-010006000100061508010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010613010006040100
-060001000615080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106130100060301000601
-010006150801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001061301000602010006020100
-061508010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010613010006020105061408010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010613010006060100061508010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010611010406030102061408010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106320801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001063208010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010834006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202
-0103020206030100009a0100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100003508000063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061301000603010406140801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001061101020603010006180801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001061301000603010006180801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-061301000603010006180801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061301000603
-010306150801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001061301000607010006140801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061301000607010006140801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001061301000602010006030100061408010063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010611010406010103061508010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106320801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001063208010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010834006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202
-0103020206030100009a0100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100003508000063010000630100
-0063010000630100006301000063010000020100061308010c0e00010623010006030202
-010302020603010000010632080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061301000605010206140801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001061101020604010006170801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001061301000603010006180801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-061301000603010006180801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061301000603
-010306150801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001061301000603010006020100
-061408010063010000630100006301000063010000630100006301000002010006130801
-0c0e00010623010006030202010302020603010000010613010006030100060201000614
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106130100060301000602010006140801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061101040602010206150801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001063208010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-083400630100006301000063010000630100006301000063010000020100061308010c0e
-0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001
-06230100060302020103020206030100009a010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000350800
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106130100060301040614
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106110102060301000602010006140801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061301000606010006150801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001061301000606010006150801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001061301000606010006150801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-061301000606010006150801006301000063010000630100006301000063010000630100
-00020100061308010c0e0001062301000603020201030202060301000001061301000605
-010006160801006301000063010000630100006301000063010000630100000201000613
-08010c0e0001062301000603020201030202060301000001061301000605010006160801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061101040603010006160801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001063208010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106320801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001063208010063010000630100006301000063010000630100006301000002
-0100061308010c0e00010623010006030202010302020603010000010632080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106320801006301000063010000630100006301000063
-01000063010000020100061308010c0e0001062301000603020201030202060301000001
-083400630100006301000063010000630100006301000063010000020100061308010c0e
-0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001
-06230100060302020103020206030100009a010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000350800
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106130100060401020615
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000106110102060301000602010006140801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001061301000603010006020100061408010063
-0100006301000063010000630100006301000063010000020100061308010c0e00010623
-010006030202010302020603010000010613010006030100060201000614080100630100
-006301000063010000630100006301000063010000020100061308010c0e000106230100
-060302020103020206030100000106130100060401020615080100630100006301000063
-010000630100006301000063010000020100061308010c0e000106230100060302020103
-020206030100000106130100060301000602010006140801006301000063010000630100
-00630100006301000063010000020100061308010c0e0001062301000603020201030202
-060301000001061301000603010006020100061408010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010613010006030100060201000614080100630100006301000063010000630100
-006301000063010000020100061308010c0e000106230100060302020103020206030100
-000106110104060201020615080100630100006301000063010000630100006301000063
-010000020100061308010c0e000106230100060302020103020206030100000106320801
-00630100006301000063010000630100006301000063010000020100061308010c0e0001
-062301000603020201030202060301000001063208010063010000630100006301000063
-0100006301000063010000020100061308010c0e00010623010006030202010302020603
-010000010632080100630100006301000063010000630100006301000063010000020100
-061308010c0e000106230100060302020103020206030100000106320801006301000063
-01000063010000630100006301000063010000020100061308010c0e0001062301000603
-020201030202060301000001063208010063010000630100006301000063010000630100
-0063010000020100061308010c0e00010623010006030202010302020603010000010632
-080100630100006301000063010000630100006301000063010000020100061308010c0e
-000106230100060302020103020206030100000108340063010000630100006301000063
-0100006301000063010000020100061308010010062301000603020201030202060301ff
-01ff01990613080000110623010006030202010302020603010006ff06ff06e301000603
-0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
-010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
-0202060301000649010006ff06ff069801000603020201030202060301000648010106ff
-06ff06980100060302020103020206030100064701000600010006ff06ff069801000603
-020201030202060301000649010006ff06ff069801000603020201030202060301000649
-010006ff06ff069801000603020201030202060301000649010006ff06ff069801000603
-020201030202060301000649010006ff06ff069801000603020201030202060301000649
-010006ff06ff069801000603020201030202060301000647010406ff06ff069601000603
-0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
-0100063708ff08ff0860064a0100060302020103020206030100063708ff08ff085f0000
-064a010006030202010302020603010006370801001d0cff0cff0c3e0001064a01000603
-0202010302020603010006370801001c08000cff0cff0c3e0001064a0100060302020103
-020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a01000603
-02020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a
-0100060302020103020206030100063708010001060b08000000060b08010cff0cff0c3e
-0001064a0100060302020103020206030100063708010001060b08000000060b08010cff
-0cff0c3e0001064a0100060302020103020206030100063708010001060b08000000060b
-08010cff0cff0c3e0001064a0100060302020103020206030100063708010001060b0800
-0000060b08010cff0cff0c3e0001064a0100060302020103020206030100063708010001
-060b08000000060b08010cff0cff0c3e0001064a01000603020201030202060301000637
-08010001060b08000000060b08010cff0cff0c3e0001064a010006030202010302020603
-0100063708010001060b08000000060b08010cff0cff0c3e0001064a0100060302020103
-020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a01000603
-02020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a
-0100060302020103020206030100063708010001080c0000080d0cff0cff0c3e0001064a
-0100060302020103020206030100063708010000081c0cff0cff0c3e0001064a01000603
-020201030202060301000637080100ff00ff005e064a0100060302020103020206030100
-0637080000ff00ff005f064a010006030202010302020603010006ff06ff06e301000603
-0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
-010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
-02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
-0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
-010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
-02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
-0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603
-010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103
-02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603
-0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3
-010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff
-06ff06e3010006030202010302020603010006ff06ff06e3010006030202010100040603
-010006ff06ff06e301000603000502020400060301ff01ff01e506030000020204000000
-0202040006ff06ff06ed00000202040000000202040006ff06ff06ed0000020204000000
-0202040006ff06ff06ed00000202040000000202040006ff06ff06ed0000020204000000
-02020400000502ff02ff02e100060202040000000208040002ff02ff02e1000002080400
-00000208040002ff02ff02e100000208040000000208040001ff01ff01e1000002080400
-0000040901ff01ff01e100000409
-%%EndData
-end
-%%PageTrailer
-%%Trailer
-%%BoundingBox: 0 0 532 441
-%%EOF
diff --git a/lib/tv/doc/src/warning.gif b/lib/tv/doc/src/warning.gif
deleted file mode 100644
index 96af52360e..0000000000
--- a/lib/tv/doc/src/warning.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/ebin/.gitignore b/lib/tv/ebin/.gitignore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/lib/tv/ebin/.gitignore
+++ /dev/null
diff --git a/lib/tv/info b/lib/tv/info
deleted file mode 100644
index 63e88b04b5..0000000000
--- a/lib/tv/info
+++ /dev/null
@@ -1,2 +0,0 @@
-group: tools
-short: An ETS and MNESIA graphical table visualizer
diff --git a/lib/tv/priv/Makefile b/lib/tv/priv/Makefile
deleted file mode 100644
index 679a76fe88..0000000000
--- a/lib/tv/priv/Makefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-include ../vsn.mk
-VSN = $(TV_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/tv-$(VSN)
-
-#
-# Macros
-#
-TOOLBAR_FILES = \
- arrow_left.xbm \
- arrow_right.xbm \
- edit1.xbm \
- erlang.gif \
- help.xbm \
- info.xbm \
- key.xbm \
- more.xbm \
- no_sort.xbm \
- open.xbm \
- poll.xbm \
- search.xbm \
- sort.xbm \
- sort_reverse.xbm \
- tv.gif \
- tv.tool
-
-#
-# Rules
-#
-
-debug opt:
-
-docs:
-
-clean:
-
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/priv"
- $(INSTALL_DATA) $(TOOLBAR_FILES) "$(RELSYSDIR)/priv"
-
-release_docs_spec:
-
-FORCE:
diff --git a/lib/tv/priv/arrow_left.xbm b/lib/tv/priv/arrow_left.xbm
deleted file mode 100644
index 58db123a00..0000000000
--- a/lib/tv/priv/arrow_left.xbm
+++ /dev/null
@@ -1,5 +0,0 @@
-#define arrow_left_width 16
-#define arrow_left_height 8
-static unsigned char arrow_left_bits[] = {
- 0x70, 0x00, 0x38, 0x00, 0x1c, 0x00, 0xfe, 0xff, 0xfe, 0xff, 0x1c, 0x00,
- 0x38, 0x00, 0x70, 0x00};
diff --git a/lib/tv/priv/arrow_right.xbm b/lib/tv/priv/arrow_right.xbm
deleted file mode 100644
index 7eca80303d..0000000000
--- a/lib/tv/priv/arrow_right.xbm
+++ /dev/null
@@ -1,5 +0,0 @@
-#define arrow_right_width 16
-#define arrow_right_height 8
-static unsigned char arrow_right_bits[] = {
- 0x00, 0x1c, 0x00, 0x38, 0x00, 0x70, 0xfc, 0xff, 0xfc, 0xff, 0x00, 0x70,
- 0x00, 0x38, 0x00, 0x1c};
diff --git a/lib/tv/priv/edit1.xbm b/lib/tv/priv/edit1.xbm
deleted file mode 100644
index dc13f274c0..0000000000
--- a/lib/tv/priv/edit1.xbm
+++ /dev/null
@@ -1,12 +0,0 @@
-#define edit1_width 25
-#define edit1_height 25
-static unsigned char edit1_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00,
- 0x00, 0x01, 0x14, 0x00, 0x70, 0xf9, 0x27, 0x00, 0xf8, 0x01, 0x3c, 0x00,
- 0xf8, 0xf9, 0x27, 0x00, 0xf0, 0x03, 0x20, 0x00, 0xe0, 0xff, 0x27, 0x00,
- 0xc0, 0x07, 0x20, 0x00, 0x80, 0xff, 0x27, 0x00, 0x00, 0x1f, 0x20, 0x00,
- 0x00, 0xfd, 0x27, 0x00, 0x00, 0x79, 0x20, 0x00, 0x00, 0xf9, 0x27, 0x00,
- 0x00, 0x21, 0x21, 0x00, 0x00, 0xf9, 0x27, 0x00, 0x00, 0x01, 0x20, 0x00,
- 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/erlang.gif b/lib/tv/priv/erlang.gif
deleted file mode 100644
index 8d06e98065..0000000000
--- a/lib/tv/priv/erlang.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/priv/help.xbm b/lib/tv/priv/help.xbm
deleted file mode 100644
index b2cbc541e4..0000000000
--- a/lib/tv/priv/help.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define help_width 20
-#define help_height 20
-static unsigned char help_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xff, 0x00, 0x80, 0xe7, 0x01,
- 0x80, 0xc3, 0x01, 0x80, 0xc3, 0x01, 0x00, 0xe3, 0x00, 0x00, 0x70, 0x00,
- 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/info.xbm b/lib/tv/priv/info.xbm
deleted file mode 100644
index d5157661c2..0000000000
--- a/lib/tv/priv/info.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define info_width 20
-#define info_height 20
-static unsigned char info_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00,
- 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00,
- 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00,
- 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/key.xbm b/lib/tv/priv/key.xbm
deleted file mode 100644
index 222be32219..0000000000
--- a/lib/tv/priv/key.xbm
+++ /dev/null
@@ -1,6 +0,0 @@
-#define key_width 10
-#define key_height 18
-static char key_bits[] = {
- 0xfc,0x00,0xfe,0x01,0x87,0x03,0x03,0x03,0x87,0x03,0xfe,0x01,0xfc,0x00,0x30,
- 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x3b,0x00,0x3b,0x00,
- 0x3f,0x00,0x3f,0x00,0x37,0x00};
diff --git a/lib/tv/priv/more.xbm b/lib/tv/priv/more.xbm
deleted file mode 100644
index 38ef738768..0000000000
--- a/lib/tv/priv/more.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define more_width 16
-#define more_height 26
-static unsigned char more_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f,
- 0xe0, 0x3f, 0xc0, 0x1f, 0x80, 0x0f, 0x00, 0x07, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/no_sort.xbm b/lib/tv/priv/no_sort.xbm
deleted file mode 100644
index 90568dd828..0000000000
--- a/lib/tv/priv/no_sort.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define no_sort_width 20
-#define no_sort_height 20
-static unsigned char no_sort_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
- 0x20, 0x00, 0x02, 0x20, 0x00, 0x02, 0x20, 0x08, 0x02, 0x20, 0x08, 0x02,
- 0x20, 0x48, 0x02, 0x20, 0x48, 0x02, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02,
- 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/open.xbm b/lib/tv/priv/open.xbm
deleted file mode 100644
index fe77d2c38b..0000000000
--- a/lib/tv/priv/open.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define open_width 20
-#define open_height 20
-static unsigned char open_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x05,
- 0xe0, 0x00, 0x06, 0xf0, 0x1f, 0x07, 0xf0, 0x3f, 0x00, 0xf0, 0x3f, 0x00,
- 0xf0, 0x3f, 0x00, 0xf0, 0xff, 0x03, 0xf0, 0x00, 0x01, 0x70, 0x80, 0x00,
- 0x30, 0x40, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/poll.xbm b/lib/tv/priv/poll.xbm
deleted file mode 100644
index 6ec1dbeaf2..0000000000
--- a/lib/tv/priv/poll.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define poll2_width 20
-#define poll2_height 20
-static unsigned char poll2_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0xff, 0x00,
- 0xe0, 0xf1, 0x00, 0xf0, 0xe0, 0x01, 0x70, 0xf8, 0x07, 0x70, 0xf0, 0x03,
- 0x70, 0xe0, 0x01, 0xf0, 0xc0, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x7f, 0x00,
- 0xc0, 0x3f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/search.xbm b/lib/tv/priv/search.xbm
deleted file mode 100644
index 3498e66b0d..0000000000
--- a/lib/tv/priv/search.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define search2_width 20
-#define search2_height 20
-static unsigned char search2_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xe1, 0x00, 0xc0, 0xe1, 0x00, 0xe0, 0xf3, 0x01, 0x20, 0x93, 0x01,
- 0xf0, 0xff, 0x03, 0xe8, 0xdd, 0x07, 0xe8, 0xdd, 0x07, 0xe8, 0xdd, 0x07,
- 0xe8, 0xdd, 0x07, 0xe8, 0xdf, 0x07, 0xe8, 0xd3, 0x07, 0xf8, 0xf3, 0x07,
- 0xe8, 0x40, 0x07, 0xe8, 0x40, 0x07, 0xf8, 0xc0, 0x07, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/sort.xbm b/lib/tv/priv/sort.xbm
deleted file mode 100644
index 576564b817..0000000000
--- a/lib/tv/priv/sort.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define sort_width 20
-#define sort_height 20
-static unsigned char sort_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
- 0x00, 0x40, 0x02, 0x00, 0x40, 0x02, 0x00, 0x48, 0x02, 0x00, 0x48, 0x02,
- 0x00, 0x49, 0x02, 0x00, 0x49, 0x02, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02,
- 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/sort_reverse.xbm b/lib/tv/priv/sort_reverse.xbm
deleted file mode 100644
index b58e6308f5..0000000000
--- a/lib/tv/priv/sort_reverse.xbm
+++ /dev/null
@@ -1,8 +0,0 @@
-#define sort_reverse_width 20
-#define sort_reverse_height 20
-static unsigned char sort_reverse_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00,
- 0x20, 0x01, 0x00, 0x20, 0x01, 0x00, 0x20, 0x09, 0x00, 0x20, 0x09, 0x00,
- 0x20, 0x49, 0x00, 0x20, 0x49, 0x00, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02,
- 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/lib/tv/priv/tv.gif b/lib/tv/priv/tv.gif
deleted file mode 100644
index 44daac2912..0000000000
--- a/lib/tv/priv/tv.gif
+++ /dev/null
Binary files differ
diff --git a/lib/tv/priv/tv.tool b/lib/tv/priv/tv.tool
deleted file mode 100644
index 770424d283..0000000000
--- a/lib/tv/priv/tv.tool
+++ /dev/null
@@ -1,23 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-{version,"0.1"}.
-{{tool,"Table Visualizer"},
- {start,{tv,start,[]}},
- {icon,"tv.gif"},
- {message,"The Table Visualizer"},
- {html,"../doc/html/index.html"}}.
diff --git a/lib/tv/src/Makefile b/lib/tv/src/Makefile
deleted file mode 100644
index 3d680c1eaf..0000000000
--- a/lib/tv/src/Makefile
+++ /dev/null
@@ -1,135 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1997-2012. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../vsn.mk
-VSN=$(TV_VSN)
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/tv-$(VSN)
-
-# ----------------------------------------------------
-# Common Macros
-# ----------------------------------------------------
-
-MODULES= \
- tv \
- tv_comm_func \
- tv_db \
- tv_db_search \
- tv_db_sort \
- tv_ets_rpc \
- tv_etsread \
- tv_info \
- tv_io_lib \
- tv_io_lib_format \
- tv_io_lib_pretty \
- tv_ip \
- tv_main \
- tv_mnesia_rpc \
- tv_new_table \
- tv_nodewin \
- tv_pb \
- tv_pb_funcs \
- tv_pc \
- tv_pc_graph_ctrl \
- tv_pc_menu_handling \
- tv_pd \
- tv_pd_display \
- tv_pd_frames \
- tv_pd_scale \
- tv_pg \
- tv_pg_gridfcns \
- tv_poll_dialog \
- tv_pw \
- tv_pw_window \
- tv_rec_edit \
- tv_table_owner \
- tv_utils
-
-
-
-HRL_FILES= \
- tv_db_int_def.hrl \
- tv_int_def.hrl \
- tv_int_msg.hrl \
- tv_main.hrl \
- tv_pb_int_def.hrl \
- tv_pc_int_def.hrl \
- tv_pd_int_def.hrl \
- tv_pd_int_msg.hrl \
- tv_pg_int_def.hrl \
- tv_pw_int_def.hrl
-
-ERL_FILES= $(MODULES:%=%.erl)
-
-TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET)
-
-APP_FILE = tv.app
-APP_SRC = $(APP_FILE).src
-APP_TARGET = $(EBIN)/$(APP_FILE)
-
-APPUP_FILE = tv.appup
-APPUP_SRC = $(APPUP_FILE).src
-APPUP_TARGET = $(EBIN)/$(APPUP_FILE)
-# ----------------------------------------------------
-# FLAGS
-# ----------------------------------------------------
-ERL_COMPILE_FLAGS += +warn_obsolete_guard
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-debug opt: $(TARGET_FILES)
-
-clean:
- rm -f $(TARGET_FILES)
- rm -f errs core *~
-
-$(APP_TARGET): $(APP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk
- $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
-
-docs:
-
-# ----------------------------------------------------
-# Special Targets
-# ----------------------------------------------------
-
-# ----------------------------------------------------
-# Release Target
-# ----------------------------------------------------
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/src"
- $(INSTALL_DATA) $(HRL_FILES) $(ERL_FILES) "$(RELSYSDIR)/src"
- $(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin"
-
-release_docs_spec:
-
diff --git a/lib/tv/src/tv.app.src b/lib/tv/src/tv.app.src
deleted file mode 100644
index e76c587868..0000000000
--- a/lib/tv/src/tv.app.src
+++ /dev/null
@@ -1,56 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-{application, tv,
- [{description, "tv Table Visualizer"},
- {vsn, "%VSN%"},
- {modules, [tv,
- tv_comm_func,
- tv_db,
- tv_db_search,
- tv_db_sort,
- tv_ets_rpc,
- tv_etsread,
- tv_info,
- tv_io_lib,
- tv_io_lib_format,
- tv_io_lib_pretty,
- tv_ip,
- tv_main,
- tv_mnesia_rpc,
- tv_new_table,
- tv_nodewin,
- tv_pb,
- tv_pb_funcs,
- tv_pc,
- tv_pc_graph_ctrl,
- tv_pc_menu_handling,
- tv_pd,
- tv_pd_display,
- tv_pd_frames,
- tv_pd_scale,
- tv_pg,
- tv_pg_gridfcns,
- tv_poll_dialog,
- tv_pw,
- tv_pw_window,
- tv_rec_edit,
- tv_table_owner,
- tv_utils
- ]},
- {registered,[tv_table_owner]},
- {applications, [kernel, stdlib, gs]}]}.
diff --git a/lib/tv/src/tv.appup.src b/lib/tv/src/tv.appup.src
deleted file mode 100644
index 0d918b6081..0000000000
--- a/lib/tv/src/tv.appup.src
+++ /dev/null
@@ -1,18 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-{"%VSN%",[],[]}.
diff --git a/lib/tv/src/tv.erl b/lib/tv/src/tv.erl
deleted file mode 100644
index 70bc945c63..0000000000
--- a/lib/tv/src/tv.erl
+++ /dev/null
@@ -1,38 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv).
-
--export([start/0,
- start_browser/6]).
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-start() ->
- tv_main:start().
-
-
-start_browser(Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode) ->
- spawn_link(tv_pc, pc, [self(), Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode]).
-
-
-
-
-
diff --git a/lib/tv/src/tv_comm_func.erl b/lib/tv/src/tv_comm_func.erl
deleted file mode 100644
index d57960e303..0000000000
--- a/lib/tv/src/tv_comm_func.erl
+++ /dev/null
@@ -1,77 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_comm_func).
-
-
-
-
--export([max/2,
- min/2
- ]).
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-max(X, Y) when X > Y ->
- X;
-max(_X, Y) ->
- Y.
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-min(X, Y) when X < Y ->
- X;
-min(_X, Y) ->
- Y.
-
-
-
diff --git a/lib/tv/src/tv_db.erl b/lib/tv/src/tv_db.erl
deleted file mode 100644
index 75537418b3..0000000000
--- a/lib/tv/src/tv_db.erl
+++ /dev/null
@@ -1,1271 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Module handling the internal database in the table tool.
-%%%
-%%%*********************************************************************
-
--module(tv_db).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--export([dbs/2]).
-
-
-
--include("tv_int_def.hrl").
--include("tv_int_msg.hrl").
--include("tv_db_int_def.hrl").
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-dbs(Master, ErrMsgMode) ->
- process_flag(trap_exit, true),
- put(error_msg_mode, ErrMsgMode),
- ProcVars = #process_variables{master_pid = Master},
- blocked(ProcVars).
-
-
-
-
-
-
-%%%********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%********************************************************************
-
-
-
-blocked(ProcVars) ->
- receive
- Msg ->
- case Msg of
-
- #dbs_deblock{} ->
- deblock(Msg, ProcVars, false);
-
- {error_msg_mode, Mode} ->
- put(error_msg_mode, Mode),
- blocked(ProcVars);
-
- {'EXIT', Pid, Reason} ->
- MasterPid = ProcVars#process_variables.master_pid,
- exit_signals({Pid, Reason}, MasterPid),
- blocked(ProcVars);
-
- _Other ->
- blocked(ProcVars)
- end
- end.
-
-
-
-
-
-
-
-deblock(Msg, ProcVars, SearchWinCreated) ->
- #dbs_deblock{sender = Sender,
- etsread_pid = EtsreadPid,
- type = Type,
- keypos = KeyPos,
- sublist_length = SublistLength} = Msg,
-
- NewDbData = #db_data{subset_size = SublistLength,
- subset_pos = 1,
- key_no = KeyPos,
- ets_type = Type
- },
- NewProcVars = ProcVars#process_variables{db_data = NewDbData,
- etsread_pid = EtsreadPid},
- Sender ! #dbs_deblock_cfm{sender = self()},
- deblocked_loop(NewProcVars, SearchWinCreated, [], undefined).
-
-
-
-
-
-
-
-
-deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp) ->
- receive
- Msg ->
- case Msg of
-
- {gs,entry,keypress,_Data,['Return' | _T]} ->
- NewSearchData = search_object(ProcVars, RegExp),
- deblocked_loop(ProcVars, SearchWinCreated, NewSearchData, RegExp);
-
- {gs,entry,keypress,_Data,['Tab' | _T]} ->
- gs:config(entry, [{select, {0,1000}}]),
- deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp);
-
- {gs,entry,keypress,_Data,_Args} ->
- deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp);
-
- {gs,expr_term,click,_Data,_Args} ->
- deblocked_loop(ProcVars, SearchWinCreated, SearchData, false);
-
- {gs,expr_regexp,click,_Data,_Args} ->
- deblocked_loop(ProcVars, SearchWinCreated, SearchData, true);
-
- {gs,search,click,_Data,_Args} ->
- NewSearchData = search_object(ProcVars, RegExp),
- deblocked_loop(ProcVars, SearchWinCreated, NewSearchData, RegExp);
-
- {gs,cancel,click,cancel,_Args} ->
- tv_db_search:destroy_window(SearchWinCreated),
- deblocked_loop(ProcVars, false, [], RegExp);
-
- {gs,listbox,click,_LbData,[Idx | _T]} when SearchData =/= [] ->
- tv_db_search:mark_busy(SearchWinCreated),
- {Row,_Obj} = lists:nth(Idx+1, SearchData),
- DbData = ProcVars#process_variables.db_data,
- %% Never allow 'subset_pos' to have zero as value!
- %% No list can begin with the 0:th element!!!
- %% Has to be at least 1!
- NewDbData = DbData#db_data{subset_pos=?COMM_FUNC_FILE:max(1,
- Row),
- subset_size=?ITEMS_TO_DISPLAY},
- NewProcVars = ProcVars#process_variables{db_data=NewDbData},
- send_subset(NewProcVars, undefined, undefined),
- tv_db_search:mark_nonbusy(SearchWinCreated),
- deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
-
- {gs,win,configure,_Data,_Args} ->
- tv_db_search:resize_window(SearchWinCreated),
- deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp);
-
- {gs,win,destroy,_Data,_Args} ->
- deblocked_loop(ProcVars, false, [], RegExp);
-
-
- #dbs_new_data{data = NewData, keys = ListOfKeys,
- time_to_read_table = ElapsedTimeEtsread} ->
- tv_db_search:reset_window(SearchWinCreated),
- T1 = time(),
- NewProcVars = update_db(NewData, ListOfKeys, ProcVars),
- T2 = time(),
- ElapsedTimeDbs = compute_elapsed_seconds(T1, T2),
- send_subset(NewProcVars, ElapsedTimeEtsread, ElapsedTimeDbs),
- deblocked_loop(NewProcVars, SearchWinCreated, [], RegExp);
-
- #dbs_subset_req{subset_pos = Pos,subset_length = Length} ->
- DbData = ProcVars#process_variables.db_data,
- %% Never allow 'subset_pos' to have zero as value!
- %% No list can begin with the 0:th element!!!
- %% Has to be at least 1!
- NewDbData = DbData#db_data{subset_pos=?COMM_FUNC_FILE:max(1,
- Pos),
- subset_size=Length},
- NewProcVars = ProcVars#process_variables{db_data = NewDbData},
- send_subset(NewProcVars, undefined, undefined),
- deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
-
- #dbs_marked_row{row_no = RowNo} ->
- DbData = ProcVars#process_variables.db_data,
- NewDbData = DbData#db_data{requested_row = RowNo},
- NewProcVars = ProcVars#process_variables{db_data = NewDbData},
- deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
-
- #dbs_search_req{} ->
- tv_db_search:create_window(SearchWinCreated),
- deblocked_loop(ProcVars, true, SearchData, false);
-
- #dbs_sorting_mode{} ->
- {NewProcVars, NewSearchData} =
- update_sorting_mode(Msg, ProcVars,
- SearchWinCreated, SearchData, RegExp),
- deblocked_loop(NewProcVars, SearchWinCreated, NewSearchData, RegExp);
-
- #dbs_deblock{} ->
- tv_db_search:reset_window(SearchWinCreated),
- deblock(Msg, ProcVars, SearchWinCreated);
-
- #dbs_updated_object{object=Obj,old_object=OldObj,old_color=Color,obj_no=ObjNo} ->
- {Success, NewProcVars} = update_object(Obj, OldObj, Color, ObjNo, ProcVars),
- case Success of
- true ->
- tv_db_search:reset_window(SearchWinCreated),
- send_subset(NewProcVars, undefined, undefined);
- false ->
- done
- end,
- deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
-
- #dbs_new_object{object=Obj} ->
- {Success, NewProcVars} = new_object(Obj, ProcVars),
- case Success of
- true ->
- tv_db_search:reset_window(SearchWinCreated),
- send_subset(NewProcVars, undefined, undefined);
- false ->
- done
- end,
- deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
-
- #dbs_delete_object{object=Obj, color=Color, obj_no=ObjNo} ->
- {Success, NewProcVars} = delete_object(Obj, Color, ObjNo, ProcVars),
- case Success of
- true ->
- tv_db_search:reset_window(SearchWinCreated),
- send_subset(NewProcVars, undefined, undefined);
- false ->
- done
- end,
- deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
-
- #pc_list_info{lists_as_strings=ListAsStr} ->
- NewProcVars = ProcVars#process_variables{lists_as_strings=ListAsStr},
- deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp);
-
- {error_msg_mode, Mode} ->
- put(error_msg_mode, Mode),
- deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp);
-
- {'EXIT', Pid, Reason} ->
- MasterPid = ProcVars#process_variables.master_pid,
- exit_signals({Pid, Reason}, MasterPid),
- deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp);
-
- _Other ->
- %% io:format("Received message: ~w ~n", [_Other]),
- deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp)
- end
- end.
-
-
-
-
-
-
-
-search_object(ProcVars, RegExp) ->
- DbData = ProcVars#process_variables.db_data,
- DbList = dblist2list(DbData#db_data.db),
- ListAsStr = ProcVars#process_variables.lists_as_strings,
- case catch tv_db_search:get_input_and_search(DbList, RegExp, ListAsStr) of
- {'EXIT', _Reason} ->
- tv_db_search:reset_window(true),
- [];
- List ->
- List
- end.
-
-
-
-
-
-
-update_sorting_mode(Msg, ProcVars, SearchWinCreated, OldSearchData, RegExp) ->
- #dbs_sorting_mode{sorting = Sorting,
- reverse = Reverse,
- sort_key_no = SortKeyNo} = Msg,
-
- DbData = ProcVars#process_variables.db_data,
-
- #db_data{db = DbList,
- sorting = OldSorting,
- rev_sorting = OldReverse,
- sort_key_no = OldSortKeyNo} = DbData,
-
-
- NewDbList = sort_db_list(DbList, Sorting, OldSorting, Reverse, OldReverse,
- SortKeyNo, OldSortKeyNo),
-
- NewDbData = DbData#db_data{db = NewDbList,
- sorting = Sorting,
- rev_sorting = Reverse,
- sort_key_no = SortKeyNo
- },
-
- NewProcVars = ProcVars#process_variables{db_data = NewDbData},
- send_subset(NewProcVars, undefined, undefined),
-
- SearchData =
- case Sorting of
- false ->
- OldSearchData;
- OldSorting when Reverse =:= OldReverse,
- SortKeyNo =:= OldSortKeyNo ->
- [];
- OldSorting when Reverse =:= OldReverse,
- OldSortKeyNo =:= undefined->
- [];
- _Other ->
- ListAsStr = ProcVars#process_variables.lists_as_strings,
- case catch tv_db_search:update_search(SearchWinCreated,
- NewDbList, RegExp,
- ListAsStr) of
- {'EXIT', _Reason} ->
- tv_db_search:reset_window(true),
- [];
- List ->
- List
- end
- end,
-
- {NewProcVars, SearchData}.
-
-
-
-
-
-
-
-
-sort_db_list(DbList, Sort, Sort, Rev, Rev, KeyNo, KeyNo) ->
- % Already sorted!
- DbList;
-sort_db_list(DbList, false, _OldSort, _Rev, _OldRev, _KeyNo, _OldKeyNo) ->
- % No sorting, i.e., the old list order suffices!
- DbList;
-sort_db_list(DbList, _Sort, _OldSort, Rev, _OldRev, KeyNo, _OldKeyNo) ->
- tv_db_sort:mergesort(KeyNo, DbList, Rev).
-
-
-
-
-
-
-
-send_subset(ProcVars, EtsreadTime, DbsTime) ->
- #process_variables{master_pid = MasterPid,
- db_data = DbData,
- list_of_keys = ListOfKeys} = ProcVars,
-
- #db_data{subset_size = SubsetSize,
- subset_pos = SubsetPos,
- requested_row = RowNo,
- db_size = DbSize,
- db = DbList,
- max_elem_size = MaxElemSize} = DbData,
-
-
- RowData = get_requested_row_data(RowNo, DbList),
-
- if
- DbSize > 0 ->
- Pos = ?COMM_FUNC_FILE:min(SubsetPos, DbSize),
- % Requested_data may be shorter than requested, but that's OK,
- % pd handles that correctly!
- Subset = lists:sublist(DbList, Pos, SubsetSize),
- MasterPid ! #dbs_subset{sender = self(),
- data = Subset,
- subset_pos = Pos,
- db_length = DbSize,
- list_of_keys = ListOfKeys,
- max_elem_size = MaxElemSize,
- requested_row = RowData,
- required_time_etsread = EtsreadTime,
- required_time_dbs = DbsTime
- };
- true ->
- MasterPid ! #dbs_subset{sender = self(),
- data = [],
- subset_pos = 1,
- db_length = 0,
- list_of_keys = ListOfKeys,
- max_elem_size = MaxElemSize,
- requested_row = RowData,
- required_time_etsread = EtsreadTime,
- required_time_dbs = DbsTime
- }
- end.
-
-
-
-
-
-get_requested_row_data(undefined, _DbList) ->
- [];
-get_requested_row_data(_RowNo, []) ->
- [];
-get_requested_row_data(RowNo, DbList) ->
- case catch lists:nth(RowNo, DbList) of
- {'EXIT', _Reason} ->
- [];
- RowData ->
- [RowData]
- end.
-
-
-
-
-exit_signals(ExitInfo, MasterPid) ->
- case ExitInfo of
- {MasterPid, _Reason} ->
- % When from master, just quit!
- exit(normal);
- _Other ->
- done
- end.
-
-
-
-
-update_db(NewList, ListOfKeys, ProcVars) ->
- DbData = ProcVars#process_variables.db_data,
- #db_data{db = OldDbList,
- max_elem_size = MaxElemSize,
- deleted = DelList,
- ets_type = EtsType,
- sorting = Sorting,
- rev_sorting = RevSorting,
- sort_key_no = SortKeyNo,
- key_no = KeyNo} = DbData,
-
- DbList = update_colors(OldDbList -- DelList),
- OldList = dblist2list(DbList),
- InsOrUpd = (NewList -- OldList),
- DelOrUpd = (OldList -- NewList),
-
- {Inserted, Deleted, Updated} = group_difflists(basetype(EtsType), KeyNo,
- InsOrUpd,
- DelOrUpd),
- DelMarked = mark_deleted(KeyNo, Deleted, DbList),
- Replaced = replace_elements(KeyNo, Updated, DelMarked),
- NewDbList = add_elements(KeyNo, Inserted, Replaced, Sorting, RevSorting,
- SortKeyNo),
-
- NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize,
- ?COMM_FUNC_FILE:max(max_size(Replaced),
- max_size(Inserted))),
-
- NewDbData = DbData#db_data{db = NewDbList,
- db_size = length(NewDbList),
- max_elem_size = NewMaxSize,
- deleted = list2dblist(Deleted, ?BLACK)
- },
-
- ProcVars#process_variables{db_data = NewDbData,
- list_of_keys = ListOfKeys
- }.
-
-
-
-
-
-
-update_object(Obj, OldObj, OldColor, ObjNo, ProcVars) ->
- #process_variables{db_data = DbData,
- etsread_pid = EtsreadPid} = ProcVars,
-
- #db_data{key_no = KeyNo} = DbData,
-
- %% Don't update if there are no changes!
- case OldObj of
- Obj when OldColor =/= ?BLACK -> %% Allow deleted objects to be inserted!
- gs:window(dbwin, gs:start(), []),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(dbwin, "TV Notification", ["The object is unchanged!"]);
- haiku ->
- tv_utils:notify(dbwin, "TV Notification",
- ["Stay the patient course,",
- "Of little worth is your ire:",
- "The object's unchanged." ])
- end,
- gs:destroy(dbwin),
- {false, ProcVars};
- _Other ->
- %% Before we try to update the internal database, we have to check to see
- %% whether the ETS/Mnesia update is allowed!
- Result =
- case OldColor of
- ?BLACK ->
- EtsreadPid ! #etsread_new_object{sender = self(),
- object = Obj},
- receive
- #etsread_new_object_cfm{success = Success} ->
- Success
- after
- 60000 ->
- exit(etsread_not_responding)
- end;
- _OtherColor ->
- EtsreadPid ! #etsread_update_object{sender = self(),
- key_no = KeyNo,
- object = Obj,
- old_object = OldObj},
- receive
- #etsread_update_object_cfm{success = Success} ->
- Success
- after
- 60000 ->
- exit(etsread_not_responding)
- end
- end,
- case Result of
- false ->
- gs:window(dbwin, gs:start(), [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(dbwin, "TV Notification",
- ["Couldn't update table!"]);
- haiku ->
- tv_utils:notify(dbwin, "TV Notification",
- ["Three things are certain:",
- "Death, taxes, and lost updates.",
- "Guess which has occurred."])
- end,
- gs:destroy(dbwin),
- {false, ProcVars};
- true ->
- {true, update_object2(Obj, OldObj, OldColor, ObjNo, ProcVars)}
- end
- end.
-
-
-
-
-
-update_object2(Obj, OldObj, OldColor, ObjNo, ProcVars) ->
- #process_variables{db_data = DbData} = ProcVars,
-
- #db_data{db = DbList,
- ets_type = EtsType, %% 'bag', 'set', 'ordered_set' or
- %% 'duplicate_bag'
- max_elem_size = MaxElemSize,
- sorting = Sorting,
- rev_sorting = RevSorting,
- sort_key_no = SortKeyNo,
- key_no = KeyNo} = DbData,
-
- %% Replace the old element...
- Key = element(KeyNo, Obj),
- OldKey = element(KeyNo, OldObj),
- %% If Key == OldKey, the old object shall only be replaced!
- %% Otherwise the updated object shall be treated as a new
- %% object when inserting it in the list!
- %% In that latter case, we also have to check for duplicates!
-
- Fun =
- case basetype(EtsType) of
- set ->
- case Key of
- OldKey ->
- fun({Data,Color}, {Replaced,AccDb}) when element(KeyNo,Data) =/= Key ->
- {Replaced, [{Data,Color} | AccDb]};
- ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
- OldColor =:= ?BLACK,
- Color =:= ?BLACK ->
- {true, [{Obj,?RED1} | AccDb]};
- ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
- OldColor =/= ?BLACK,
- Color =/= ?BLACK ->
- {true, [{Obj,?GREEN1} | AccDb]};
- ({_Data,_Color}, {Replaced,AccDb}) ->
- {Replaced, AccDb}
- end;
- _NewKey ->
- fun({Data,Color}, {Replaced,AccDb}) ->
- ElemKey = element(KeyNo,Data),
- case ElemKey of
- OldKey when not Replaced,
- OldColor =:= ?BLACK,
- Color =:= ?BLACK ->
- {true, [{Obj,?RED1} | AccDb]};
- OldKey when not Replaced,
- OldColor =/= ?BLACK,
- Color =/= ?BLACK ->
- {true, [{Obj,?GREEN1} | AccDb]};
- OldKey ->
- {Replaced, AccDb};
- Key ->
- {Replaced, AccDb};
- _OtherKey ->
- {Replaced, [{Data,Color} | AccDb]}
- end
- end
- end;
-
- bag ->
- case Key of
- OldKey ->
- fun({Data,_Color}, {Replaced,AccDb}) when Data =:= Obj ->
- {Replaced, AccDb};
- ({Data,Color}, {Replaced,AccDb}) when Data =/= OldObj ->
- {Replaced, [{Data,Color} | AccDb]};
- %% Clauses when Data =:= OldObj.
- ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
- OldColor =:= ?BLACK,
- Color =:= ?BLACK ->
- {true, [{Obj,?RED1} | AccDb]};
- ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
- OldColor =/= ?BLACK,
- Color =/= ?BLACK ->
- {true, [{Obj,Color} | AccDb]};
- ({_Data,_Color}, {Replaced,AccDb}) ->
- {Replaced, AccDb}
- end;
- _NewKey ->
- fun({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj,
- not Replaced,
- OldColor =:= ?BLACK,
- Color =:= ?BLACK ->
- {true, [{Obj,?RED1} | AccDb]};
- ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj,
- not Replaced,
- OldColor =/= ?BLACK,
- Color =/= ?BLACK ->
- {true, [{Obj,?GREEN1} | AccDb]};
- ({Data,_Color}, {Replaced,AccDb}) when Data =:= OldObj ->
- {Replaced, AccDb};
- ({Data,_Color}, {Replaced,AccDb}) when Data =:= Obj ->
- {Replaced, AccDb};
- ({Data,Color}, {Replaced,AccDb}) ->
- {Replaced, [{Data,Color} | AccDb]}
- end
- end;
-
- duplicate_bag ->
- %% Multiple identical objects allowed, meaning that we shall not
- %% remove anything, just replace one element.
- case Key of
- OldKey ->
- fun({Data,Color}, {Replaced,AccDb}) when Data =:= Obj ->
- {Replaced, [{Data,Color} | AccDb]};
- ({Data,Color}, {Replaced,AccDb}) when Data =/= OldObj ->
- {Replaced, [{Data,Color} | AccDb]};
- ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
- OldColor =:= ?BLACK,
- Color =:= ?BLACK ->
- {true, [{Obj,?RED1} | AccDb]};
- ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
- OldColor =/= ?BLACK,
- Color =/= ?BLACK ->
- {true, [{Obj,Color} | AccDb]};
- ({Data,Color}, {Replaced,AccDb}) ->
- {Replaced, [{Data,Color} | AccDb]}
- end;
- _NewKey ->
- fun({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj,
- not Replaced,
- OldColor =:= ?BLACK,
- Color =:= ?BLACK ->
- {true, [{Obj,?RED1} | AccDb]};
- ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj,
- not Replaced,
- OldColor =/= ?BLACK,
- Color =/= ?BLACK ->
- {true, [{Obj,?GREEN1} | AccDb]};
- ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj ->
- {Replaced, [{Data,Color} | AccDb]};
- ({Data,Color}, {Replaced,AccDb}) when Data =:= Obj ->
- {Replaced, [{Data,Color} | AccDb]};
- ({Data,Color}, {Replaced,AccDb}) ->
- {Replaced, [{Data,Color} | AccDb]}
- end
- end
- end,
-
- FilterFun = fun(Acc0, L) ->
- lists:foldl(Fun, Acc0, L)
- end,
-
-
- {Repl, TmpList} =
- case split(ObjNo, DbList) of
- {L1, [{OldObj,OldColor} | T]} when OldColor =/= ?BLACK ->
- {true,
- lists:reverse(element(2, FilterFun({true,[]}, L1))) ++
- [{Obj,?GREEN1} | lists:reverse(element(2, FilterFun({true,[]},T)))]};
- {L1, [{OldObj,OldColor} | T]} ->
- {true,
- lists:reverse(element(2, FilterFun({true,[]}, L1))) ++
- [{Obj,?RED1} | lists:reverse(element(2, FilterFun({true,[]}, T)))]};
- {L1, L2} ->
- {R1, NewL1} = FilterFun({false,[]}, L1),
- {R2, NewL2} = FilterFun({false,[]}, L2),
- {R1 or R2, lists:reverse(NewL1) ++ lists:reverse(NewL2)}
- end,
-
- NewDbList =
- case Repl of
- true when not Sorting ->
- TmpList;
- true ->
- tv_db_sort:mergesort(SortKeyNo, TmpList, RevSorting);
- false ->
- TmpList2 =
- case Key of
- OldKey ->
- lists:reverse(element(2, FilterFun({false,[]}, TmpList)));
- _OtherKey ->
- lists:reverse(element(2, FilterFun({true,[]}, TmpList))) ++
- [{Obj,?RED1}]
- end,
- case Sorting of
- false ->
- TmpList2;
- true ->
- tv_db_sort:mergesort(SortKeyNo, TmpList2, RevSorting)
- end
- end,
- NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize, max_size([Obj])),
- NewDbData = DbData#db_data{db = NewDbList,
- db_size = length(NewDbList),
- max_elem_size = NewMaxSize
- },
- ProcVars#process_variables{db_data = NewDbData}.
-
-
-
-
-
-delete_object(_Obj, ?BLACK, _ObjNo, ProcVars) ->
- %% Don't delete already deleted objects!!!
- {false, ProcVars};
-delete_object(undefined, undefined, _ObjNo, ProcVars) ->
- {false, ProcVars};
-delete_object(Obj, _ObjColor, ObjNo, ProcVars) ->
- #process_variables{db_data = DbData,
- etsread_pid = EtsreadPid} = ProcVars,
-
- #db_data{db = DbList,
- deleted = OldDeleted} = DbData,
-
- %% Before we try to update the internal database, we have to check to see
- %% whether the ETS/Mnesia update is allowed!
- EtsreadPid ! #etsread_delete_object{sender = self(),
- object = Obj},
- Result =
- receive
- #etsread_delete_object_cfm{success = Success} ->
- Success
- after
- 60000 ->
- exit(etsread_not_responding)
- end,
-
- case Result of
- false ->
- gs:window(dbwin, gs:start(), [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(dbwin, "TV Notification",
- ["Couldn't update table!"]);
- haiku ->
- tv_utils:notify(dbwin, "TV Notification",
- ["Three things are certain:",
- "Death, taxes, and lost updates.",
- "Guess which has occurred."])
- end,
- gs:destroy(dbwin),
- {false, ProcVars};
- true ->
- %% Replace the old element...
- %% Have to beware of duplicate_bag tables,
- %% i.e., the same object may occur more than
- %% once, but we only want to remove it once!
- {Repl, TmpList} =
- case split(ObjNo, DbList) of
- {L1, [{Obj,_Color} | T]} ->
- {true, L1 ++ [{Obj,?BLACK} | T]};
- {L1, L2} ->
- {false, L1 ++ L2}
- end,
- NewDbList =
- case Repl of
- true ->
- TmpList;
- false ->
- Fun = fun({Data,TmpColor},
- {Removed,AccDb}) when Data =/= Obj ->
- {Removed, [{Data,TmpColor} | AccDb]};
- ({_Data,TmpColor},
- {Removed,AccDb}) when not Removed, TmpColor =/= ?BLACK ->
- {true, [{Obj,?BLACK} | AccDb]};
- ({Data,TmpColor},
- {Removed,AccDb}) ->
- {Removed, [{Data,TmpColor} | AccDb]}
- end,
- lists:reverse(element(2, lists:foldl(Fun, {false,[]}, DbList)))
- end,
- NewDbData = DbData#db_data{db = NewDbList,
- db_size = length(NewDbList),
- deleted = [{Obj,?BLACK} | OldDeleted]},
- {true, ProcVars#process_variables{db_data = NewDbData}}
- end.
-
-
-
-
-
-new_object(Obj, ProcVars) ->
- #process_variables{db_data = DbData,
- etsread_pid = EtsreadPid} = ProcVars,
-
- #db_data{db = DbList,
- max_elem_size = MaxElemSize,
- ets_type = EtsType, %% 'bag', 'set' or 'duplicate_bag'
- sorting = Sorting,
- rev_sorting = RevSorting,
- sort_key_no = SortKeyNo,
- key_no = KeyNo} = DbData,
-
- %% Before we try to update the internal database, we have to check to see
- %% whether the ETS/Mnesia update is allowed!
- EtsreadPid ! #etsread_new_object{sender = self(),
- object = Obj},
- Result =
- receive
- #etsread_new_object_cfm{success = Success} ->
- Success
- after
- 60000 ->
- exit(etsread_not_responding)
- end,
-
- case Result of
- false ->
- gs:window(dbwin, gs:start(), [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(dbwin, "TV Notification",
- ["Couldn't update table!"]);
- haiku ->
- tv_utils:notify(dbwin, "TV Notification",
- ["Three things are certain:",
- "Death, taxes, and lost updates.",
- "Guess which has occurred."])
- end,
- gs:destroy(dbwin),
- {false, ProcVars};
- true ->
- Key = element(KeyNo, Obj),
- NewDbList = insert_new_object(EtsType, Key, KeyNo, Obj, DbList, Sorting,
- RevSorting, SortKeyNo),
- NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize, max_size([Obj])),
- NewDbData = DbData#db_data{db = NewDbList,
- db_size = length(NewDbList),
- max_elem_size = NewMaxSize
- },
- {true, ProcVars#process_variables{db_data = NewDbData}}
- end.
-
-
-
-
-
-insert_new_object(EtsType,Key,KeyNo,Obj,DbList,Sorting,RevSorting,SortKeyNo) ->
- %% Remove elements from the list that ought not to be there,
- %% according to the table type!
-
- Fun =
- case basetype(EtsType) of
- set ->
- fun({Data,Color}, {Replaced,AccDb}) when element(KeyNo,Data) =/= Key ->
- {Replaced, [{Data,Color} | AccDb]};
- ({Data,Color}, {Replaced,AccDb}) when not Replaced,
- Color =/= ?BLACK,
- Data =/= Obj->
- {true, [{Obj,?GREEN1} | AccDb]};
- ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
- Color =/= ?BLACK ->
- {true, [{Obj,Color} | AccDb]};
- ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
- Color =:= ?BLACK ->
- {true, [{Obj, ?RED1} | AccDb]};
- ({_Data,Color}, {Replaced,AccDb}) when Replaced,
- Color =:= ?BLACK ->
- {false, AccDb};
- ({_Data,_Color}, {Replaced,AccDb}) ->
- {Replaced, AccDb}
- end;
- bag ->
- fun({Data,Color}, {Replaced,AccDb}) when Data =/= Obj ->
- {Replaced, [{Data,Color} | AccDb]};
- ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
- Color =/= ?BLACK ->
- {true, [{Obj,Color} | AccDb]};
- ({_Data,Color}, {Replaced,AccDb}) when Replaced,
- Color =/= ?BLACK ->
- {true, AccDb};
- ({_Data,Color}, {Replaced,AccDb}) when Replaced,
- Color =:= ?BLACK ->
- {true, AccDb};
- ({_Data,Color}, {Replaced,AccDb}) when not Replaced,
- Color =:= ?BLACK ->
- {true, [{Obj, ?RED1} | AccDb]};
- ({_Data,_Color}, {Replaced,AccDb}) ->
- {Replaced, AccDb}
- end;
- duplicate_bag ->
- %% The fun is never called if the type is duplicate_bag,
- %% because all we have to do with new elements is to insert
- %% them (multiple identical objects allowed).
- not_used
- end,
-
- FilterFun = fun(Acc0, L) ->
- lists:foldl(Fun, Acc0, L)
- end,
-
- {_Replaced, TmpDbList} =
- case EtsType of
- duplicate_bag ->
- {false, DbList};
- _OtherType ->
- {R,L} = FilterFun({false,[]}, DbList),
- {R, lists:reverse(L)}
- end,
-
- case Sorting of
- false ->
- TmpDbList ++ [{Obj,?RED1}];
- true ->
- %% The original list is already sorted!
- %% Just merge the two lists together!
- tv_db_sort:merge(SortKeyNo, TmpDbList, [{Obj,?RED1}], RevSorting)
- end.
-
-
-
-
-
-
-max_size([]) ->
- 0;
-max_size(L) ->
- max_size(L, 0).
-
-
-
-max_size([], CurrMax) ->
- CurrMax;
-max_size([H | T], CurrMax) when is_tuple(H) ->
- Size = size(H),
- if
- Size >= CurrMax ->
- max_size(T, Size);
- true ->
- max_size(T, CurrMax)
- end;
-max_size([_H | T], CurrMax) ->
- Size = 1,
- if
- Size >= CurrMax ->
- max_size(T, Size);
- true ->
- max_size(T, CurrMax)
- end.
-
-
-
-
-
-add_elements(_KeyNo, Inserted, List, false, _RevSorting, _SortKeyNo) ->
- % Remember that the order of the original list has to be preserved!
- List ++ list2dblist(Inserted, ?RED1);
-add_elements(_KeyNo, Inserted, List, _Sorting, RevSorting, SortKeyNo) ->
- % The original list is already sorted - sort the new elements, and
- % just merge the two lists together!
- SortedInsertedList = tv_db_sort:mergesort(SortKeyNo,
- list2dblist(Inserted, ?RED1),
- RevSorting),
- tv_db_sort:merge(SortKeyNo, List, SortedInsertedList, RevSorting).
-
-
-
-
-
- %% We assume the list already has been sorted, i.e., since the order won't
- %% be changed by marking an element deleted, we DON'T have to sort the list
- %% once again!
-
-mark_deleted(_KeyNo, [], List) ->
- List;
-mark_deleted(KeyNo, [Data | T], List) ->
- KeyValue = tv_db_sort:get_compare_value(KeyNo, Data),
- NewList = mark_one_element_deleted(KeyNo, KeyValue, Data, List, []),
- mark_deleted(KeyNo, T, NewList).
-
-
-
-
-
-
-
-
-mark_one_element_deleted(_KeyNo, _KeyValue, _Data, [], Acc) ->
- Acc;
-mark_one_element_deleted(KeyNo, {tuple, KeyValue},
- Data, [{DataTuple, Color} | Tail], Acc) ->
- OldKeyValue = tv_db_sort:get_compare_value(KeyNo, DataTuple),
- % Remember that the order of the original list has to be preserved!
- if
- OldKeyValue =:= {tuple, KeyValue} ->
- Acc ++ [{Data, ?BLACK}] ++ Tail;
- true ->
- mark_one_element_deleted(KeyNo, {tuple, KeyValue}, Data, Tail,
- Acc ++ [{DataTuple, Color}])
- end;
-mark_one_element_deleted(KeyNo, _KeyValue, Data, [{DataTuple, Color} | Tail], Acc) ->
- if
- Data =:= DataTuple ->
- Acc ++ [{Data, ?BLACK}] ++ Tail;
- true ->
- mark_one_element_deleted(KeyNo, _KeyValue, Data, Tail,
- Acc ++ [{DataTuple, Color}])
- end.
-
-
-
-
-
-
-
- %% We assume the list already has been sorted, i.e., since the order won't
- %% be changed by marking an element updated, we DON'T have to sort the list
- %% once again!
-
-replace_elements(_KeyNo, [], List) ->
- List;
-replace_elements(KeyNo, [Data | T], List) ->
- KeyValue = tv_db_sort:get_compare_value(KeyNo, Data),
- NewList = replace_one_element(KeyNo, KeyValue, Data, List, []),
- replace_elements(KeyNo, T, NewList).
-
-
-
-
-
-
-
-replace_one_element(_KeyNo, _Key, _Data, [], Acc) ->
- Acc;
-replace_one_element(KeyNo, {tuple, Key1}, Data, [{DataTuple, Color} | Tail], Acc) ->
- Key2 = tv_db_sort:get_compare_value(KeyNo, DataTuple),
- % Remember that the order of the original list has to be preserved!
- if
- Key2 =:= {tuple, Key1} ->
- Acc ++ [{Data, ?GREEN1}] ++ Tail;
- true ->
- replace_one_element(KeyNo, {tuple, Key1}, Data, Tail,
- Acc ++ [{DataTuple, Color}])
- end;
-replace_one_element(_KeyNo, _KeyValue, _Data, [{DataTuple, Color} | Tail], Acc) ->
- % Can't replace an element with no key!
- Acc ++ [{DataTuple, Color} | Tail].
-
-
-
-
-
-
-
-
-group_difflists(bag, _KeyNo, Inserted, Deleted) ->
- %% Since the ETS table is of bag type, no element can be updated, i.e.,
- %% it can only be deleted and re-inserted, otherwise a new element will be added.
- {Inserted, Deleted, []};
-group_difflists(duplicate_bag, _KeyNo, Inserted, Deleted) ->
- %% Since the ETS table is of duplicate_bag type, no element can be updated, i.e.,
- %% it can only be deleted and re-inserted, otherwise a new element will be added.
- {Inserted, Deleted, []};
-group_difflists(set, _KeyNo, [], Deleted) ->
- %% Updated elements have to be present in both lists, i.e., if one list is empty,
- %% the other contains no updated elements - they are either inserted or deleted!
- {[], Deleted, []};
-group_difflists(set, _KeyNo, Inserted, []) ->
- {Inserted, [], []};
-group_difflists(set, KeyNo, InsOrUpd, DelOrUpd) ->
- match_difflists(KeyNo, InsOrUpd, DelOrUpd, [], []).
-
-
-
-
-
-
-match_difflists(_KeyNo, [], Deleted, Inserted, Updated) ->
- {Inserted, Deleted, Updated};
-match_difflists(KeyNo, [Data | T], DelOrUpd, InsAcc, UpdAcc) ->
- % This function is only called in case of a 'set' ETS table.
- % 'Set' type of ETS table means there are unique keys. If two elements in
- % InsOrUpd and DelOrUpd have the same key, that element has been updated,
- % and is added to the Updated list, and removed from the original two lists.
- % After the two lists have been traversed in this way, the remaining elements
- % in DelOrUpd forms the new Deleted list (analogous for InsOrUpd).
- % If we want to improve the performance, we could check which list is the
- % shortest, since the traversing time depends on this.
- Key = element(KeyNo, Data),
- case searchdelete(Key, KeyNo, DelOrUpd) of
- {true, NewDelOrUpd} ->
- match_difflists(KeyNo, T, NewDelOrUpd, InsAcc, [Data | UpdAcc]);
- {false, SameDelOrUpd} ->
- match_difflists(KeyNo, T, SameDelOrUpd, [Data | InsAcc], UpdAcc)
- end.
-
-
-
-
-searchdelete(_Key, _ElemNo, []) ->
- {false, []};
-searchdelete(Key, ElemNo, List) ->
- searchdelete(Key, ElemNo, List, []).
-
-
-
-
-
-searchdelete(_Key, _ElemNo, [], Acc) ->
- {false, Acc};
-searchdelete(Key, ElemNo, [Tuple | Tail], Acc) ->
- % We don't use standard libraries, 'cause we want to make an 'atomic'
- % operation, i.e., we will not search the list two times...
- case (element(ElemNo, Tuple) =:= Key) of
- true ->
- {true, Acc ++ Tail}; % Return the list without the matching element
- _Other ->
- searchdelete(Key, ElemNo, Tail, [Tuple | Acc])
- end.
-
-
-
-
-
-
-
-dblist2list([]) ->
- [];
-dblist2list([{Data, _Color} | T]) ->
- [Data | dblist2list(T)].
-
-
-
-
-
-
-
-list2dblist([], _Color) ->
- [];
-list2dblist([Data | T], Color) ->
- [{Data, Color} | list2dblist(T, Color)].
-
-
-
-
-
-
-
-
-update_colors([]) ->
- [];
-update_colors([{Data, Color} | T]) ->
- [{Data, new_color(Color)} | update_colors(T)].
-
-
-
-
-
-
-
-
-new_color(?GREEN1) ->
- ?GREEN2;
-new_color(?GREEN2) ->
- ?GREEN3;
-new_color(?GREEN3) ->
- ?GREEN4;
-new_color(?GREEN4) ->
- ?GREEN5;
-new_color(?GREEN5) ->
- ?DEFAULT_BTN_COLOR;
-new_color(?RED1) ->
- ?RED2;
-new_color(?RED2) ->
- ?RED3;
-new_color(?RED3) ->
- ?RED4;
-new_color(?RED4) ->
- ?RED5;
-new_color(?RED5) ->
- ?DEFAULT_BTN_COLOR;
-new_color(_Other) ->
- ?DEFAULT_BTN_COLOR. % Default shall be gray.
-
-
-
-
-
-
-
-
-compute_elapsed_seconds({H1, M1, S1}, {H2, M2, S2}) ->
- ElapsedHours = get_time_diff(hours, H1, H2),
- ElapsedMinutes = get_time_diff(minutes, M1, M2),
- ElapsedSeconds = get_time_diff(seconds, S1, S2),
- (ElapsedHours * 3600) + (ElapsedMinutes * 60) + ElapsedSeconds + 1.
-
-
-
-
-
-
-
-get_time_diff(_Type, T1, T2) when T1 =< T2 ->
- T2 - T1;
-get_time_diff(hours, T1, T2) ->
- T2 + 24 - T1;
-get_time_diff(minutes, T1, T2) ->
- T2 + 60 - T1;
-get_time_diff(seconds, T1, T2) ->
- T2 + 60 - T1.
-
-
-
-
-split(_N, []) ->
- {[], []};
-split(0, List) ->
- {[], List};
-split(N, List) ->
- split2(0, N - 1, [], List).
-
-
-
-split2(Ctr, N, Acc, [H | T]) when Ctr < N ->
- split2(Ctr + 1, N, [H | Acc], T);
-split2(_Ctr, _N, Acc, []) ->
- {lists:reverse(Acc), []};
-split2(_Ctr, _N, Acc, List) ->
- {lists:reverse(Acc), List}.
-
-basetype(ordered_set) ->
- set;
-basetype(Any) ->
- Any.
diff --git a/lib/tv/src/tv_db_int_def.hrl b/lib/tv/src/tv_db_int_def.hrl
deleted file mode 100644
index d2cb8adee5..0000000000
--- a/lib/tv/src/tv_db_int_def.hrl
+++ /dev/null
@@ -1,80 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Internal definitions for the database part of the table
-%%% tool.
-%%%
-%%%*********************************************************************
-
--define(WHITE, {255, 255, 255}).
--define(MEDIUM_GRAY, {170, 170, 170}).
-
-
--define(LIGHT_GREEN, { 0, 255, 0}).
--define(GREEN, { 50, 215, 50}).
--define(DARK_GREEN, { 50, 170, 50}).
--define(FOREST_GREEN, { 34, 139, 34}).
--define(DARK_FOREST_GREEN, { 15, 100, 15}).
-
-
-
--define(RED, {255, 0, 0}).
--define(PINK, {255, 130, 170}).
--define(LIGHT_VIOLET, {220, 150, 225}).
--define(VIOLET, {160, 70, 180}).
--define(DARK_VIOLET, {100, 10, 130}).
-
-
-
-
-
-
--record(db_data, {db = [], % List containing all elements
- db_size = 0, % Number of elements in 'db'
- max_elem_size = 0, % Size of largest element in db.
- hidden = [], % Elements (i.e., keys) not to be shown
- deleted = [], % Elements just deleted
- subset_size, % Size of the subset to be extracted and
- % shown
- subset_pos, % Position in list where subset starts
- sorting = false, % Tells whether sorting is used ('true'
- % or 'false')
- requested_row = 0,
- rev_sorting = false, % Tells whether the sorting (if any) is
- % in reversed order or not ('true' or
- % 'false')
- sort_key_no, % Element in each tuple to use as sorting
- % element
- key_no, % Element in each tuple to use as key
- % (this element is used when updating the
- % dblist, i.e., inserting, deleting a.s.o)
- ets_type % 'bag' or 'set'
- }).
-
-
--record(process_variables, {master_pid,
- etsread_pid,
- db_data = #db_data{},
- list_of_keys = [],
- lists_as_strings = true
- }).
-
-
-
-
diff --git a/lib/tv/src/tv_db_search.erl b/lib/tv/src/tv_db_search.erl
deleted file mode 100644
index edfa57df04..0000000000
--- a/lib/tv/src/tv_db_search.erl
+++ /dev/null
@@ -1,475 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Code for the search window.
-%%%
-%%%*********************************************************************
--module(tv_db_search).
--compile([{nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,label,3}},
- {nowarn_deprecated_function,{gs,listbox,3}},
- {nowarn_deprecated_function,{gs,radiobutton,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--export([create_window/1,
- resize_window/1,
- reset_window/1,
- destroy_window/1,
- mark_busy/1,
- mark_nonbusy/1,
- get_input_and_search/3,
- update_search/4,
- string_to_term/1
- ]).
-
-
-
-
--include("tv_int_def.hrl").
--include("tv_int_msg.hrl").
--include("tv_db_int_def.hrl").
-
-
-
-
--define(WIN_WIDTH, 445).
--define(SMALL_WIN_HEIGHT, 117).
--define(BIG_WIN_HEIGHT, 335).
--define(FRAME_WIDTH, 429). % 334
--define(OLD_FRAME_WIDTH, 334).
--define(FRAME_HEIGHT, 105).
--define(FRAME_XPOS, (10-2)).
--define(FRAME_YPOS, 10).
--define(ENTRY_XPOS, 9).
--define(ENTRY_YPOS, 31).
--define(ENTRY_WIDTH, (?OLD_FRAME_WIDTH-10-2*?ENTRY_XPOS-5)).
--define(LISTBOX_WIDTH, ?WIN_WIDTH-2*?FRAME_XPOS+1).
--define(LISTBOX_HEIGHT, 162).
--define(LISTBOX_XPOS, ?FRAME_XPOS-2).
--define(LISTBOX_YPOS, ?SMALL_WIN_HEIGHT+8).
--define(BTN_WIDTH, 80).
--define(BTN_HEIGHT, 30).
--define(BTN_XPOS, ?OLD_FRAME_WIDTH-6).
--define(BG_COLOUR, {217,217,217}).
-
-
-
-
-
-
-create_window(true) ->
- gs:config(win, [raise]);
-create_window(false) ->
- gs:window(win, gs:start(), [{width,?WIN_WIDTH},
- {height,?SMALL_WIN_HEIGHT},
- {data,small},
- {bg,?BG_COLOUR},
- {title,"[TV] Search Object"},
- {destroy,true},
- {configure,true},
- {cursor,arrow}
- ]),
-
- F = gs:frame(win, [{width,?FRAME_WIDTH},
- {height,?FRAME_HEIGHT},
- {x,?FRAME_XPOS},
- {y,?FRAME_YPOS},
- {bw,2},
- {bg,?BG_COLOUR}
- ]),
-
- gs:label(F, [{width,80},
- {height,25},
- {x,?ENTRY_XPOS+2},
- {y,8},
- {align,w},
- {bg,?BG_COLOUR},
- {fg, {0,0,0}},
- {label, {text,"Search for:"}}
- ]),
-
- gs:entry(entry, F, [{width,?ENTRY_WIDTH},
- {height,30},
- {x,?ENTRY_XPOS},
- {y,?ENTRY_YPOS},
- {insert, {0,"<Search expression>"}},
- {bg, {255,255,255}},
- {fg, {0,0,0}},
- {cursor,text},
- {justify,left},
- {keypress,true},
- {setfocus,true}
- ]),
-
- Group = list_to_atom("expr" ++ pid_to_list(self())),
- RadioWidth = round(?ENTRY_WIDTH / 2),
- gs:radiobutton(expr_term, F, [{width,RadioWidth - 45},
- {height,25},
- {x,?ENTRY_XPOS},
- {y,?ENTRY_YPOS+40},
- {group,Group},
- {align, c},
- {label,{text,"as term"}},
- {select,true}
- ]),
- gs:radiobutton(expr_regexp, F, [{width,RadioWidth + 45},
- {height,25},
- {x,?ENTRY_XPOS+RadioWidth-20-26},
- {y,?ENTRY_YPOS+40},
- {group,Group},
- {align,c},
- {label,{text,"as regular expression"}}
- ]),
-
- gs:button(search, F, [{width,?BTN_WIDTH},
- {height,?BTN_HEIGHT},
- {x,?BTN_XPOS},
- {y,11},
- {label, {text,"Search"}},
- {bg,?BG_COLOUR},
- {fg, {0,0,0}}
- ]),
- gs:button(cancel, F, [{width,?BTN_WIDTH},
- {height,?BTN_HEIGHT},
- {x,?BTN_XPOS},
- {y,?BTN_HEIGHT+11+10},
- {label, {text,"Cancel"}},
- {data,cancel},
- {bg,?BG_COLOUR},
- {fg, {0,0,0}}
- ]),
- expand_window(),
- gs:config(entry, [{select, {0,1000}}]),
- gs:config(win, [{map,true}]).
-
-
-
-
-resize_window(false) ->
- done;
-resize_window(true) ->
- gs:config(win, [{width,?WIN_WIDTH},
- {height,?BIG_WIN_HEIGHT}
- ]).
-
-
-
-
-reset_window(false) ->
- done;
-reset_window(true) ->
- gs:config(listbox, [clear]),
- gs:config(objects_found, [{label, {text,""}}]).
-
-
-
-
-destroy_window(false) ->
- done;
-destroy_window(true) ->
- gs:destroy(win).
-
-
-
-mark_busy(false) ->
- done;
-mark_busy(true) ->
- gs:config(win, [{cursor,busy}]),
- gs:config(entry, [{cursor,busy}]).
-
-
-
-
-mark_nonbusy(false) ->
- done;
-mark_nonbusy(true) ->
- gs:config(win, [{cursor,arrow}]),
- gs:config(entry, [{cursor,text}]).
-
-
-
-
-get_input_and_search(DbList, IsRegExp, ListAsStr) ->
- get_input_and_search(DbList, IsRegExp, true, ListAsStr).
-
-
-
-
-get_input_and_search(DbList, IsRegExp, Notify, ListAsStr) ->
- Str = get_entry_text(),
- StrConvRes = case IsRegExp of
- true ->
- string_to_regexp(Str);
- false ->
- string_to_term(Str)
- end,
-
- case StrConvRes of
- {ok, TermOrRE} ->
- search(IsRegExp, TermOrRE, DbList, ListAsStr);
- {error, {_Reason, Msg}} when Notify ->
- gs:config(win, [beep]),
- tv_utils:notify(win, "TV Notification", Msg);
- {error, {_Reason, _Msg}} ->
- done
- end.
-
-
-
-update_search(false, _DbList, _IsRegExp, _ListAsStr) ->
- done;
-update_search(true, DbList, true, ListAsStr) ->
- get_input_and_search(DbList, false, false, ListAsStr);
-update_search(true, DbList, false, ListAsStr) ->
- get_input_and_search(DbList, true, false, ListAsStr).
-
-
-
-get_entry_text() ->
- gs:read(entry,text).
-
-
-
-string_to_regexp(Str) ->
- case re:compile(Str) of
- {ok, RegExp} ->
- {ok, RegExp};
- {error, _Error} ->
- case get(error_msg_mode) of
- normal ->
- {error, {not_a_regexp, "Please enter a regular expression!"}};
- haiku ->
- {error, {not_a_regexp, ["Being incorrect",
- "The regular expression",
- "Must now be retyped."]}}
- end
- end.
-
-
-
-string_to_term(Str) ->
- case catch erl_scan:string(Str ++ ". ") of
- {ok, ScannedStr, _No} ->
- case erl_parse:parse_term(ScannedStr) of
- {ok, Term} ->
- {ok, Term};
- _Other ->
- %% May be a PID, have to check this, since erl_scan
- %% currently cannot handle this case... :-(
- case catch list_to_pid(Str) of
- Pid when is_pid(Pid) ->
- {ok, Pid};
- _Error ->
- case get(error_msg_mode) of
- normal ->
- {error, {not_a_term, "Please enter a valid term!"}};
- haiku ->
- {error, {not_a_term, ["Aborted effort.",
- "Reflect, repent and retype:",
- "Enter valid term."]}}
- end
- end
- end;
- _Error ->
- case get(error_msg_mode) of
- normal ->
- {error, {not_a_term, "Please enter a valid term!"}};
- haiku ->
- {error, {not_a_term, ["Aborted effort.",
- "Reflect, repent and retype:",
- "Enter valid term."]}}
- end
- end.
-
-
-
-search(IsRegExp, SearchValue, DbList, ListAsStr) ->
- gs:config(cancel, [{label, {text,"Stop"}}]),
- mark_busy(true),
- reset_window(true),
- SearchRes = traverse(SearchValue, DbList, 1, length(DbList), [], IsRegExp, ListAsStr),
- gs:config(cancel, [{label, {text,"Cancel"}}]),
- mark_nonbusy(true),
- SearchRes.
-
-
-
-
-
-expand_window() ->
- gs:listbox(listbox, win, [{width,?LISTBOX_WIDTH},
- {height,?LISTBOX_HEIGHT},
- {x,?LISTBOX_XPOS},
- {y,?LISTBOX_YPOS},
- {bg, {255,255,255}},
- {fg, {0,0,0}},
- {scrollbg,?BG_COLOUR},
- {scrollfg,?BG_COLOUR},
- {hscroll,bottom},
- {vscroll,right},
- {click,true},
- {doubleclick,false},
- {selectmode,single}
- ]),
- gs:label(objects_found, win, [{width,?LISTBOX_WIDTH},
- {height,25},
- {x,?LISTBOX_XPOS},
- {y,?LISTBOX_YPOS+?LISTBOX_HEIGHT+13},
- {align,w},
- {bg,?BG_COLOUR},
- {fg, {0,0,0}}
- ]),
- gs:config(win, [{width,?WIN_WIDTH},
- {height,?BIG_WIN_HEIGHT}
- ]).
-
-
-
-
-
-
-
-traverse(Pattern, [Object | T], Row, Length, Acc, IsRegExp, ListAsStr) ->
- SearchRes =
- case IsRegExp of
- true ->
- search_for_regexp(Pattern, Object, ListAsStr);
- false ->
- compare_terms(Pattern, Object)
- end,
-
- NewAcc
- = case SearchRes of
- found ->
- RowStr = integer_to_list(Row),
- LengthStr = integer_to_list(Length),
- ObjectStr = case ListAsStr of
- true ->
- lists:flatten(tv_io_lib:format("~p", [Object]));
- false ->
- lists:flatten(tv_io_lib:write(Object))
- end,
-
- gs:config(listbox,
- [{add,
- " Row " ++ RowStr ++ ":" ++
- lists:duplicate(length(LengthStr)-length(RowStr), " ") ++
- " " ++ ObjectStr}
- ]),
- gs:config(objects_found,
- [{label,
- {text,integer_to_list(length(Acc)+1) ++
- " object(s) found"}}
- ]),
- [{Row,Object} | Acc];
- not_found ->
- Acc
- end,
- receive
- {gs,cancel,click,_Data,_Args} ->
- gs:config(objects_found,
- [{label,
- {text,integer_to_list(gs:read(listbox,size)) ++
- " object(s) found"}}
- ]),
- lists:reverse(NewAcc)
- after
- 0 ->
- traverse(Pattern, T, Row+1, Length, NewAcc, IsRegExp, ListAsStr)
- end;
-traverse(_Pattern, [], _N, _Length, Acc, _IsRegExp, _ListAsStr) ->
- gs:config(objects_found,
- [{label,
- {text,integer_to_list(gs:read(listbox,size)) ++
- " object(s) found"}}
- ]),
- lists:reverse(Acc).
-
-
-
-
-search_for_regexp(Pattern, Elem, ListAsStr) ->
- ListToSearch =
- case ListAsStr of
- true ->
- lists:flatten(tv_io_lib:format("~p", [Elem]));
- false ->
- lists:flatten(tv_io_lib:write(Elem))
- end,
-
- case re:run(ListToSearch, Pattern, [{capture,none}]) of
- match ->
- found;
- nomatch ->
- not_found
- end.
-
-
-
-
-
-compare_terms(Term, Elem) when not is_tuple(Elem), not is_list(Elem), Term =/= Elem ->
- not_found;
-compare_terms(Term, Term) ->
- %% Even the case Term = "{}" or "[]"!!!
- found;
-compare_terms(Term, Elem) when is_list(Elem) ->
- traverse_list(Term, Elem);
-compare_terms(Term, Elem) when is_tuple(Elem) ->
- traverse_tuple(Term, Elem, 1, size(Elem)).
-
-
-
-
-
-traverse_tuple(Pattern, Tuple, N, Stop) when N =< Stop ->
- Elem = element(N,Tuple),
- case compare_terms(Pattern, Elem) of
- found ->
- found;
- not_found ->
- traverse_tuple(Pattern, Tuple, N+1, Stop)
- end;
-traverse_tuple(_Pattern, _Tuple, N, Stop) when N > Stop ->
- not_found.
-
-
-
-
-
-
-traverse_list(Pattern, [H | T]) ->
- case compare_terms(Pattern, H) of
- found ->
- found;
- not_found ->
- traverse_list(Pattern, T)
- end;
-traverse_list(_Pattern, []) ->
- not_found.
-
diff --git a/lib/tv/src/tv_db_sort.erl b/lib/tv/src/tv_db_sort.erl
deleted file mode 100644
index 3675c7b413..0000000000
--- a/lib/tv/src/tv_db_sort.erl
+++ /dev/null
@@ -1,141 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_db_sort).
-
-
-
--export([mergesort/3, merge/4, get_compare_value/2]).
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-
-mergesort(_KeyNo, [X], _ReverseOrder) ->
- [X];
-mergesort(_KeyNo, [], _ReverseOrder) ->
- [];
-mergesort(KeyNo, X, ReverseOrder) ->
- split(KeyNo, X, [], [], ReverseOrder).
-
-
-
-
-
-
-
-
- %% If we want reverse order when just merging two lists,
- %% each of them has to be in reverse order first!
-
-merge(KeyNo, [{E1, C1} | T1], [{E2, C2} | T2], Reverse) when not Reverse ->
- K1 = get_compare_value(KeyNo, E1),
- K2 = get_compare_value(KeyNo, E2),
- case get_correct_order(K1, E1, K2, E2) of
- {1, 2} ->
- [{E1, C1} | merge(KeyNo, T1, [{E2, C2} | T2], Reverse)];
- {2, 1} ->
- [{E2, C2} | merge(KeyNo, [{E1, C1} | T1], T2, Reverse)]
- end;
-merge(KeyNo, [{E1, C1} | T1], [{E2, C2} | T2], Reverse) ->
- K1 = get_compare_value(KeyNo, E1),
- K2 = get_compare_value(KeyNo, E2),
- case get_correct_order(K1, E1, K2, E2) of
- {1, 2} ->
- [{E2, C2} | merge(KeyNo, [{E1, C1} | T1], T2, Reverse)];
- {2, 1} ->
- [{E1, C1} | merge(KeyNo, T1, [{E2, C2} | T2], Reverse)]
- end;
-merge(_KeyNo, [], L2, _Reverse) -> % L2 may be the empty list also!
- L2;
-merge(_KeyNo, L1, [], _Reverse) -> % L1 may be the empty list also!
- L1.
-
-
-
-
-
-
-get_compare_value(KeyNo, E) when is_tuple(E) ->
- case catch element(KeyNo, E) of
- {'EXIT', {badarg, {?MODULE, get_compare_value, [KeyNo, E]}}} ->
- short_tuple;
- V ->
- {tuple, V}
- end;
-get_compare_value(_KeyNo, _E) ->
- no_tuple.
-
-
-
-
-
-
-
-
-
-
-%%%********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%********************************************************************
-
-
-
-
-split(KeyNo, [A,B|T], X, Y, Reverse) ->
- split(KeyNo, T, [A|X], [B|Y], Reverse);
-split(KeyNo, [H], X, Y, Reverse) ->
- split(KeyNo, [], [H|X], Y, Reverse);
-split(KeyNo, [], X, Y, Reverse) ->
- merge(KeyNo,
- mergesort(KeyNo, X, Reverse),
- mergesort(KeyNo, Y, Reverse),
- Reverse).
-
-
-
-
-
-
-get_correct_order({tuple, V1}, _E1, {tuple, V2}, _E2) when V1 < V2 ->
- {1, 2};
-get_correct_order({tuple, _V1}, _E1, {tuple, _V2}, _E2) ->
- {2, 1};
-get_correct_order(short_tuple, _E1, {tuple, _V2}, _E2) ->
- {1, 2};
-get_correct_order({tuple, _V1}, _E1, short_tuple, _E2) ->
- {2, 1};
-get_correct_order(short_tuple, E1, short_tuple, E2) when E1 < E2 ->
- {1, 2};
-get_correct_order(short_tuple, _E1, short_tuple, _E2) ->
- {2, 1};
-get_correct_order(no_tuple, E1, no_tuple, E2) when E1 < E2 ->
- {1, 2};
-get_correct_order(no_tuple, _E1, no_tuple, _E2) ->
- {2, 1};
-get_correct_order(_Anything, _E1, no_tuple, _E2) -> % Tuples first, then other
- {1, 2}; % terms in correct order!
-get_correct_order(no_tuple, _E1, _Anything, _E2) ->
- {2, 1}.
diff --git a/lib/tv/src/tv_ets_rpc.erl b/lib/tv/src/tv_ets_rpc.erl
deleted file mode 100644
index ec2fde30ac..0000000000
--- a/lib/tv/src/tv_ets_rpc.erl
+++ /dev/null
@@ -1,140 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_ets_rpc).
-
-
-
--export([all/2,
- info/4,
- new/4,
- tab2list/3,
- insert/4,
- lookup/4,
- delete/4
- ]).
-
-
-
-
-all(_Node, true) ->
- chk(catch ets:all());
-all(Node, false) ->
- chk(catch rpc:block_call(Node, ets, all, [])).
-
-
-
-
-info(_Node, true, TabId, What) ->
- chk(catch ets:info(TabId, What));
-info(Node, false, TabId, What) ->
- chk(catch rpc:block_call(Node, ets, info, [TabId, What])).
-
-
-
-
-new(_Node, true, TabName, Options) ->
- case catch ets:new(TabName, Options) of
- {TabName, Pid} when is_pid(Pid) ->
- {TabName,Pid};
- {TabNo, Pid} when is_pid(Pid) ->
- {TabNo,Pid};
- OtherResult ->
- chk(OtherResult)
- end;
-new(Node, false, TabName, Options) ->
- case catch rpc:block_call(Node, ets, new, [TabName, Options]) of
- {TabName, Pid} when is_pid(Pid) ->
- {TabName,Pid};
- {TabNo, Pid} when is_pid(Pid) ->
- {TabNo, Pid};
- OtherResult ->
- chk(OtherResult)
- end.
-
-
-
-
-tab2list(_Node, true, TabId) ->
- chk(catch ets:tab2list(TabId));
-tab2list(Node, false, TabId) ->
- chk(catch rpc:call(Node, ets, tab2list, [TabId])).
-
-
-
-
-insert(_Node, true, TabId, Object) ->
- chk(catch ets:insert(TabId, Object));
-insert(Node, false, TabId, Object) ->
- chk(catch rpc:call(Node, ets, insert, [TabId, Object])).
-
-
-
-
-lookup(_Node, true, TabId, Key) ->
- chk(catch ets:lookup(TabId, Key));
-lookup(Node, false, TabId, Key) ->
- chk(catch rpc:call(Node, ets, lookup, [TabId, Key])).
-
-
-
-
-delete(_Node, true, TabId, Key) ->
- chk(catch ets:delete(TabId, Key));
-delete(Node, false, TabId, Key) ->
- chk(catch rpc:call(Node, ets, delete, [TabId, Key])).
-
-
-
-
-chk(Result) ->
- case Result of
- undefined ->
- throw(no_table);
- _Anything when is_list(Result) ->
- Result;
- _Anything when is_atom(Result) ->
- Result;
- _Anything when is_integer(Result) ->
- Result;
- _Anything when is_pid(Result) ->
- Result;
-
- %% Messages received when node is down.
- {badrpc, nodedown} ->
- throw(nodedown);
- {'EXIT', nodedown} ->
- throw(nodedown);
- {'EXIT', {{badarg, {gen, set_monitor_node, _Args}}, _Reason}} ->
- throw(nodedown);
-
- %% Messages received when table doesn't exist.
- {'EXIT', {badarg, {ets,local_info,_Args}}} ->
- %% Due to inconsistencies in R2D and earlier versions:
- %% ets:info/1 returned 'undefined' when table didn't
- %% exist, while ets:info/2 returned the exit-signal
- %% above. This was corrected in R3A - now both functions
- %% return 'undefined' :-)
- throw(no_table);
- {badrpc, {'EXIT', {badarg,_Reason}}} ->
- throw(no_table);
- {'EXIT', {badarg,_Reason}} ->
- throw(no_table);
- Error when is_tuple(Error) ->
- throw({unexpected_error,Error})
- end.
-
diff --git a/lib/tv/src/tv_etsread.erl b/lib/tv/src/tv_etsread.erl
deleted file mode 100644
index 32f111c9a1..0000000000
--- a/lib/tv/src/tv_etsread.erl
+++ /dev/null
@@ -1,770 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Module containing the interface towards ETS tables,
-%%% i.e., handling the polling and thereafter sending the
-%%% result to the database part of the table tool.
-%%%
-%%%*********************************************************************
-
-
--module(tv_etsread).
--compile([{nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--export([etsread/2]).
-
-
-
--include("tv_int_def.hrl").
--include("tv_int_msg.hrl").
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-etsread(MasterPid, ErrorMsgMode) ->
- process_flag(trap_exit, true),
- put(error_msg_mode, ErrorMsgMode),
- blocked(MasterPid).
-
-
-
-
-
-%%%*********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-blocked(MasterPid) ->
- receive
- Msg ->
- case Msg of
-
- #etsread_deblock{} ->
- deblock(Msg, MasterPid);
-
- {'EXIT', Pid, Reason} ->
- exit_signals({Pid, Reason}, MasterPid),
- blocked(MasterPid);
-
- {error_msg_mode, Mode} ->
- put(error_msg_mode, Mode),
- blocked(MasterPid);
-
- _Other ->
- %% io:format("Received signal ~p~n", [_Other]),
- blocked(MasterPid)
- end
- end.
-
-
-
-
-
-
-
-deblock(Msg, MasterPid) ->
- #etsread_deblock{dbs_pid = DbsPid,
- table_type = KindOfTable,
- node = Node,
- local_node = LocalNode,
- table_id = TableId,
- poll_interval = PollInt} = Msg,
- PollInterval = case PollInt of
- infinity ->
- PollInt;
- _Other ->
- PollInt * 1000
- end,
- %% Get table info!
- case catch get_table_info(Node, LocalNode, TableId, KindOfTable) of
- nodedown ->
- MasterPid ! #pc_nodedown{sender = self(),
- automatic_polling = false},
- blocked(MasterPid);
- no_table ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = false},
- blocked(MasterPid);
- mnesia_not_started ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = false},
- blocked(MasterPid);
- {unexpected_error,_Reason} ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = false},
- blocked(MasterPid);
- {Type, Pos, Protection} ->
- MasterPid ! #etsread_deblock_cfm{sender = self(),
- type = Type,
- keypos = Pos,
- protection = Protection
- },
-
- timer:sleep(500),
- case catch read_table(Node, LocalNode, TableId, KindOfTable, DbsPid) of
- nodedown ->
- MasterPid ! #pc_nodedown{sender = self(),
- automatic_polling = false},
- blocked(MasterPid);
- no_table ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = false},
- blocked(MasterPid);
- mnesia_not_started ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = false},
- blocked(MasterPid);
- {unexpected_error,_Reason} ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = false},
- blocked(MasterPid);
- _ElapsedTime ->
- deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId,
- KindOfTable, PollInterval)
- end
- end.
-
-
-
-
-
-
-get_table_info(Node, LocalNode, TableId, KindOfTable) ->
- case KindOfTable of
- ets ->
- % Check whether table is 'bag' or 'set' type.
- Type = tv_ets_rpc:info(Node, LocalNode, TableId, type),
- % Get position for the key.
- Pos = tv_ets_rpc:info(Node, LocalNode, TableId, keypos),
- Protection = tv_ets_rpc:info(Node, LocalNode, TableId, protection),
- {Type, Pos, Protection};
- mnesia ->
- Type = tv_mnesia_rpc:table_info(Node, LocalNode, TableId, type),
- Pos = 2,
- %% All Mnesia tables are regarded as being public!
- {Type, Pos, public}
- end.
-
-
-
-
-
-
-deblocked_loop(MasterPid,DbsPid,Node,LocalNode,TableId,KindOfTable,PollInterval) ->
- receive
- Msg ->
-
- case Msg of
-
- #etsread_poll_table{} ->
- case catch read_table(Node, LocalNode, TableId, KindOfTable, DbsPid) of
- %% No automatic polling here!
- nodedown ->
- MasterPid ! #pc_nodedown{sender = self(),
- automatic_polling = false};
- no_table ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = false};
- mnesia_not_started ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = false};
- {unexpected_error,_Reason} ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = false};
- _ElapsedTime ->
- done
- end,
- deblocked_loop(MasterPid, DbsPid, Node, LocalNode,
- TableId, KindOfTable, PollInterval);
-
-
- #etsread_set_poll_interval{interval = PollInt} ->
- NewPollInterval = case PollInt of
- infinity ->
- PollInt;
- _Other ->
- PollInt * 1000
- end,
- deblocked_loop(MasterPid, DbsPid, Node, LocalNode,
- TableId, KindOfTable, NewPollInterval);
-
-
- #etsread_deblock{} ->
- deblock(Msg, MasterPid);
-
-
- #etsread_update_object{key_no=KeyNo, object=Obj, old_object=OldObj} ->
- update_object(KindOfTable, Node, LocalNode, TableId, DbsPid,
- KeyNo, Obj, OldObj, MasterPid, PollInterval),
- deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable,
- PollInterval);
-
-
- #etsread_new_object{object=Obj} ->
- new_object(KindOfTable, Node, LocalNode, TableId, DbsPid,
- Obj, MasterPid, PollInterval),
- deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable,
- PollInterval);
-
-
- #etsread_delete_object{object=Obj} ->
- delete_object(KindOfTable, Node, LocalNode, TableId, DbsPid,
- Obj, MasterPid, PollInterval),
- deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable,
- PollInterval);
-
-
- #ip_dead_table{} ->
- AutoPoll = case PollInterval of
- infinity ->
- false;
- _Other ->
- true
- end,
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = AutoPoll},
- deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId,
- KindOfTable, infinity);
-
-
- #etsread_nodedown{} ->
- AutoPoll = case PollInterval of
- infinity ->
- false;
- _Other ->
- true
- end,
- MasterPid ! #pc_nodedown{sender = self(),
- automatic_polling = AutoPoll},
- deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId,
- KindOfTable, infinity);
-
-
- {error_msg_mode, Mode} ->
- put(error_msg_mode, Mode),
- deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable,
- PollInterval);
-
-
- {'EXIT', Pid, Reason} ->
- exit_signals({Pid, Reason}, MasterPid),
- deblocked_loop(MasterPid, DbsPid, Node, LocalNode,
- TableId, KindOfTable, PollInterval)
- end
-
- after PollInterval ->
- %% Automatic polling must be on, otherwise these
- %% lines would never be executed!
- NewPollInterval =
- case catch read_table(Node,LocalNode,TableId,KindOfTable,DbsPid) of
- nodedown ->
- MasterPid ! #pc_nodedown{sender = self(),
- automatic_polling = true},
- infinity;
- no_table ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = true},
- infinity;
- mnesia_not_started ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = true},
- infinity;
- {unexpected_error,_Reason} ->
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = true},
- infinity;
- ElapsedMilliseconds ->
- if
- (ElapsedMilliseconds * 1000) >= PollInterval ->
- infinity;
- true ->
- PollInterval
- end
- end,
- deblocked_loop(MasterPid, DbsPid, Node, LocalNode,
- TableId, KindOfTable, NewPollInterval)
- end.
-
-
-
-
-
-exit_signals(ExitInfo, MasterPid) ->
- case ExitInfo of
- {MasterPid, _Reason} ->
- exit(normal);
- _Other ->
- done
- end.
-
-
-
-
-update_object(KindOfTable, Node, LocalNode, TableId, DbsPid, KeyNo, Obj, OldObj, MasterPid, PollInterval) ->
- AutoPoll =
- case PollInterval of
- infinity ->
- false;
- _Other ->
- true
- end,
- case check_record_format(KindOfTable, Node, LocalNode, TableId, Obj) of
- bad_format ->
- DbsPid ! #etsread_update_object_cfm{sender = self(),
- success = false};
- ok ->
- %% Check that we are allowed to edit the table!
- case catch update_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, KeyNo,
- Obj, OldObj) of
-
- nodedown ->
- DbsPid ! #etsread_update_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_nodedown{sender = self(),
- automatic_polling = AutoPoll};
-
- no_table ->
- DbsPid ! #etsread_update_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = AutoPoll};
-
- mnesia_not_started ->
- DbsPid ! #etsread_update_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = AutoPoll};
-
-
- {unexpected_error,_Reason} ->
- DbsPid ! #etsread_update_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = AutoPoll};
-
- ok ->
- DbsPid ! #etsread_update_object_cfm{sender = self(),
- success = true}
- end
- end.
-
-
-
-
-
-update_object2(ets, Node, LocalNode, Tab, _DbsPid, KeyNo, Obj, OldObj) ->
- %% We shall update a specific object! If the table is a 'set' table,
- %% it is just to insert the altered object. However, if the table
- %% is a 'bag', or a 'duplicate_bag', we first have to remove the
- %% old object, and then insert the altered one.
- %% But, we aren't finished with that... we also want to preserve
- %% the time order, meaning we have to delete *ALL* objects having the
- %% very same key, and then insert them again! (Actually we would have
- %% to do this anyhow, due to limitations in the interface functions,
- %% but this remark has to be noted!)
- OldKey = element(KeyNo, OldObj),
- InsertList =
- case tv_ets_rpc:info(Node, LocalNode, Tab, type) of
- set ->
- %% Have to remove old object, because the key may be what's changed.
- tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey),
- [Obj];
- ordered_set ->
- %% Have to remove old object, because the key may be what's changed.
- tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey),
- [Obj];
- _Other -> %% 'bag' or 'duplicate_bag'
- OldList = tv_ets_rpc:lookup(Node, LocalNode, Tab, OldKey),
- tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey),
- %% Have to beware of duplicate_bag tables,
- %% i.e., the same object may occur more than
- %% once, but we only want to replace it once!
- {_Replaced, TmpList} =
- lists:foldl(
- fun(Data, {Replaced,Acc}) when Data =/= OldObj ->
- {Replaced, [Data | Acc]};
- (_Data, {Replaced,Acc}) when not Replaced ->
- {true, [Obj | Acc]};
- (Data, {Replaced,Acc}) ->
- {Replaced, [Data | Acc]}
- end,
- {false, []},
- OldList),
- lists:reverse(TmpList)
- end,
- lists:foreach(fun(H) ->
- tv_ets_rpc:insert(Node, LocalNode, Tab, H)
- end,
- InsertList),
- ok;
-update_object2(mnesia, Node, LocalNode, Tab, _DbsPid, KeyNo, Obj, OldObj) ->
- OldKey = element(KeyNo, OldObj),
- InsertList =
- case tv_mnesia_rpc:table_info(Node, LocalNode, Tab, type) of
- set ->
- tv_mnesia_rpc:transaction(
- Node,
- LocalNode,
- fun() ->
- mnesia:delete(Tab,OldKey,write)
- end),
- [Obj];
- ordered_set ->
- tv_mnesia_rpc:transaction(
- Node,
- LocalNode,
- fun() ->
- mnesia:delete(Tab,OldKey,write)
- end),
- [Obj];
- _Other -> %% 'bag' or 'duplicate_bag'
- {atomic, OldList} =
- tv_mnesia_rpc:transaction(
- Node,
- LocalNode,
- fun() ->
- mnesia:read(Tab,OldKey,read)
- end),
- %% We can't use mnesia:delete_object here, because
- %% time order wouldn't be preserved then!!!
- tv_mnesia_rpc:transaction(
- Node,
- LocalNode,
- fun() ->
- mnesia:delete(Tab,OldKey,write)
- end),
- ChangeFun =
- fun(H) when H =:= OldObj ->
- Obj;
- (H) ->
- H
- end,
- [ChangeFun(X) || X <- OldList]
- end,
- lists:foreach(fun(H) ->
- tv_mnesia_rpc:transaction(
- Node,
- LocalNode,
- fun() ->
- %% This mnesia call shall not be distributed,
- %% since the transaction sees to that it is
- %% executed on the right node!!!
- mnesia:write(Tab,H,write)
- end)
- end,
- InsertList),
- ok.
-
-
-
-
-
-
-delete_object(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj, MasterPid, PollInterval) ->
- AutoPoll =
- case PollInterval of
- infinity ->
- false;
- _Other ->
- true
- end,
- case catch delete_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj) of
-
- nodedown ->
- DbsPid ! #etsread_delete_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_nodedown{sender = self(),
- automatic_polling = AutoPoll};
-
- no_table ->
- DbsPid ! #etsread_delete_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = AutoPoll};
-
- mnesia_not_started ->
- DbsPid ! #etsread_delete_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = AutoPoll};
-
- {unexpected_error,_Reason} ->
- DbsPid ! #etsread_delete_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = AutoPoll};
-
- ok ->
- DbsPid ! #etsread_delete_object_cfm{sender = self(),
- success = true}
- end.
-
-
-
-
-delete_object2(ets, Node, LocalNode, Tab, _DbsPid, Obj) ->
- KeyNo = tv_ets_rpc:info(Node, LocalNode, Tab, keypos),
- Key = element(KeyNo, Obj),
- InsertList =
- case tv_ets_rpc:info(Node, LocalNode, Tab, type) of
- set ->
- %% Have to remove old object, because the key may be what's changed.
- tv_ets_rpc:delete(Node, LocalNode, Tab, Key),
- [];
- ordered_set ->
- %% Have to remove old object, because the key may be what's changed.
- tv_ets_rpc:delete(Node, LocalNode, Tab, Key),
- [];
- _Other -> %% 'bag' or 'duplicate_bag'
- OldList = tv_ets_rpc:lookup(Node, LocalNode, Tab, Key),
- tv_ets_rpc:delete(Node, LocalNode, Tab, Key),
- OldList -- [Obj]
- end,
-
- lists:foreach(fun(H) ->
- tv_ets_rpc:insert(Node, LocalNode, Tab, H)
- end,
- InsertList),
- ok;
-delete_object2(mnesia, Node, LocalNode, Tab, _DbsPid, Obj) ->
- tv_mnesia_rpc:transaction(
- Node,
- LocalNode,
- fun() ->
- %% This mnesia call shall not be distributed,
- %% since the transaction sees to that it is
- %% executed on the right node!!!
- mnesia:delete_object(Tab,Obj,write)
- end),
- ok.
-
-
-
-
-
-new_object(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj, MasterPid, PollInterval) ->
- AutoPoll =
- case PollInterval of
- infinity ->
- false;
- _Other ->
- true
- end,
- case check_record_format(KindOfTable, Node, LocalNode, TableId, Obj) of
- bad_format ->
- DbsPid ! #etsread_new_object_cfm{sender = self(),
- success = false};
- ok ->
- %% Check that we are allowed to edit the table!
- case catch new_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj) of
-
- nodedown ->
- DbsPid ! #etsread_new_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_nodedown{sender = self(),
- automatic_polling = AutoPoll};
-
- no_table ->
- DbsPid ! #etsread_new_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = AutoPoll};
-
- mnesia_not_started ->
- DbsPid ! #etsread_new_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = AutoPoll};
-
- {unexpected_error,_Reason} ->
- DbsPid ! #etsread_new_object_cfm{sender = self(),
- success = false},
- MasterPid ! #pc_dead_table{sender = self(),
- automatic_polling = AutoPoll};
-
- ok ->
- DbsPid ! #etsread_new_object_cfm{sender = self(),
- success = true}
- end
- end.
-
-
-
-
-
-new_object2(ets, Node, LocalNode, Tab, _DbsPid, Obj) ->
- tv_ets_rpc:insert(Node, LocalNode, Tab, Obj),
- ok;
-new_object2(mnesia, Node, LocalNode, Tab, _DbsPid, Obj) ->
- tv_mnesia_rpc:transaction(
- Node,
- LocalNode,
- fun() ->
- %% This mnesia call shall not be distributed,
- %% since the transaction sees to that it is
- %% executed on the right node!!!
- mnesia:write(Tab,Obj,write)
- end),
- ok.
-
-
-
-
-
-check_record_format(mnesia, Node, LocalNode, Tab, Obj) ->
- Arity = tv_mnesia_rpc:table_info(Node, LocalNode, Tab, arity),
- case size(Obj) of
- Arity ->
- ok;
- _Other ->
- gs:window(etsreadwin, gs:start(), []),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(etsreadwin, "TV Notification",
- ["The record is not complete,",
- "too few fields are specified!"]);
- haiku ->
- tv_utils:notify(etsreadwin, "TV Notification",
- ["The attempt to change",
- "The specified record size",
- "Is simply ignored."])
- end,
- gs:destroy(etsreadwin),
- bad_format
- end;
-check_record_format(ets, _Node, _LocalNode, _Tab, _Obj) ->
- ok.
-
-
-
-
-
-
-
-read_table(Node, LocalNode, Tab, KindOfTable, DbsPid) ->
- T1 = time(),
-
- {TableContent, ListOfKeys} =
- case KindOfTable of
- ets ->
- {tv_ets_rpc:tab2list(Node, LocalNode, Tab),
- [tv_ets_rpc:info(Node, LocalNode, Tab, keypos)]
- };
- mnesia ->
- %% It may be tempting to use Mnesia event subscription,
- %% but will this really save the day? The main drawback
- %% is that we will then have to update the table copy we
- %% store internally in two different ways: one for the
- %% Mnesia tables, and one for the ETS tables. Also, if
- %% the Mnesia tables are frequently updated, this will
- %% cause TV to work all the time too (either updating the
- %% table copy for each inserted/deleted object, or storing
- %% these objects until polling is ordered). To make this
- %% work smoothly requires a bit of work...
- %% The second drawback is that it doesn't seem clear in all
- %% circumstances how the subscription actually works - i.e.,
- %% if we only use subscriptions, can we actually be sure that
- %% the *real* state of the table is the same as the one kept
- %% in TV? For example, imagine the scenario that Mnesia is
- %% stopped, all Mnesia directories are removed (from the UNIX
- %% shell), and then Mnesia once again is started. The first
- %% problem is that we have to check for start/stop of Mnesia,
- %% the second is that we then have to rescan the actual table.
- %% The logic for this may require som effort to write!
- %% Also, what will happen if the table is killed/dies?
- %% Will we get messages for each element in the table?
- %% (I havent't checked this last issue, this is just som thoughts.)
- %% And generally, there is always a risk that a message is lost,
- %% which will result in TV showing an erroneous table content.
- %%
- %% All in all, using Mnesia subscriptions *may* be a sub-optimization.
- %% The current solution works fine, is also easy to control, and is
- %% mainly the same for both ETS and Mnesia tables.
- %% My suggestion is that it is used until someone actually complains
- %% about the polling time being too long for huge tables! :-)
- %% (However, it shall be emphasized that it is this module that
- %% actually polls the Mnesia/ETS tables, meaning that it is
- %% mainly this module that has to be modified, should the usage of
- %% subscriptions be desired. The other module that has to be modified
- %% is the one maintaining the internal copy of the table.)
- WildPattern = tv_mnesia_rpc:table_info(Node,LocalNode,Tab,wild_pattern),
- {atomic, Content} =
- tv_mnesia_rpc:transaction(
- Node,
- LocalNode,
- fun() ->
- %% This mnesia call shall not be distributed,
- %% since the transaction sees to that it is
- %% executed on the right node!!!
- mnesia:match_object(Tab, WildPattern, read)
- end),
- {Content, [2 | tv_mnesia_rpc:table_info(Node, LocalNode,Tab, index)]}
- end,
-
- T2 = time(),
-
- ElapsedTime = compute_elapsed_seconds(T1, T2),
-
- DbsPid ! #dbs_new_data{sender = self(),
- data = TableContent,
- keys = ListOfKeys,
- time_to_read_table = ElapsedTime
- },
-
- ElapsedTime.
-
-
-
-
-
-
-
-compute_elapsed_seconds({H1, M1, S1}, {H2, M2, S2}) ->
- ElapsedHours = get_time_diff(hours, H1, H2),
- ElapsedMinutes = get_time_diff(minutes, M1, M2),
- ElapsedSeconds = get_time_diff(seconds, S1, S2),
- (ElapsedHours * 3600) + (ElapsedMinutes * 60) + ElapsedSeconds + 1.
-
-
-
-
-
-get_time_diff(_Type, T1, T2) when T1 =< T2 ->
- T2 - T1;
-get_time_diff(hours, T1, T2) ->
- T2 + 24 - T1;
-get_time_diff(minutes, T1, T2) ->
- T2 + 60 - T1;
-get_time_diff(seconds, T1, T2) ->
- T2 + 60 - T1.
diff --git a/lib/tv/src/tv_info.erl b/lib/tv/src/tv_info.erl
deleted file mode 100644
index c744888c38..0000000000
--- a/lib/tv/src/tv_info.erl
+++ /dev/null
@@ -1,884 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_info).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,listbox,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--export([info/6
- ]).
-
-
--include("tv_int_def.hrl").
--include("tv_int_msg.hrl").
-
-
-
-
--define(DEFAULT_BG_COLOR, {217, 217, 217}).
-
-
--record(card_field_ids, {parent_pid,
- window_id,
- window_frame,
- table_id,
- table_type,
- table_name,
- named_table,
- owner_pid,
- owner_name,
- bag_or_set,
- arity,
- attributes,
- wild_pattern,
- keypos,
- index,
- snmp,
- protection,
- size,
- memory,
- storage_type,
- disc_copies,
- where_to_read,
- ram_copies,
- disc_only_copies,
- where_to_write,
- checkpoints,
- node
- }).
-
-
-
--define(WINDOW_WIDTH, 580).
--define(WINDOW_HEIGHT, 430).
-
-
-
--define(MNESIA_INFO_ITEMS, [type,
- arity,
- attributes,
- index,
- size,
- memory,
- storage_type,
- where_to_read,
- disc_copies,
- disc_only_copies,
- ram_copies,
- where_to_write,
- checkpoints
- ]).
-
-
-
-
-info(Master, Node, LocalNode, TabId, TabType, ErrMsgMode) ->
- process_flag(trap_exit,true),
- WinId = create_window(),
- {CardIds, MaskLabel} = init(Master, Node, LocalNode, TabId, TabType, WinId),
- put(error_msg_mode, ErrMsgMode),
- gs:config(WinId, [{map, true}]),
- loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType).
-
-
-
-
-
-
-create_window() ->
- WinWidth = ?WINDOW_WIDTH,
- WinHeight = ?WINDOW_HEIGHT,
- Win = gs:window(win, gs:start(), [{width, WinWidth},
- {height, WinHeight},
- {bg, ?DEFAULT_BG_COLOR},
- {destroy, true},
- {configure, true},
- {keypress, true}
- ]),
-
- MenubarId = gs:create(menubar, Win, [{bg, ?DEFAULT_BG_COLOR}
- ]),
- Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}}, % firebrick
- {label, {text, " File "}},
- {underline, 1}
- ]),
- Obutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}}, % firebrick
- {label, {text, " Options "}},
- {underline, 1}
- ]),
-
- % Create the actual menu!
- FMenu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}}]),
- OMenu = gs:create(menu, Obutt, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}}]),
- gs:create(menuitem, FMenu, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}},
- {label, {text, " Close Ctrl-C "}},
- {data, close_menu},
- {underline, 1}
- ]),
- gs:create(menuitem, OMenu, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}},
- {label, {text, " Refresh Ctrl-R "}},
- {data, update},
- {underline, 1}
- ]),
- Win.
-
-
-
-
-
-
-
-
-init(Master, Node, LocalNode, TabId, TabType, WinId) ->
- WinWidth = ?WINDOW_WIDTH,
- WinHeight = ?WINDOW_HEIGHT,
-
- WinFrame = gs:frame(WinId, [{width, WinWidth},
- {height, WinHeight},
- {x, 0},
- {y, 30},
- {bg, ?DEFAULT_BG_COLOR},
- {bw, 0}
- ]),
-
- TableIdFlap = create_flap(1, "Table Id", WinFrame),
- BasicSettingsFlap = create_flap(2, "Basic Settings", WinFrame),
- SizeFlap = create_flap(3, "Size", WinFrame),
- StorageFlap = create_flap(4, "Storage", WinFrame),
-
- TableIdCard = create_card(WinFrame, TableIdFlap),
- BasicSettingsCard = create_card(WinFrame, BasicSettingsFlap),
- SizeCard = create_card(WinFrame, SizeFlap),
- StorageCard = create_card(WinFrame, StorageFlap),
-
-
- set_flap_label(TableIdFlap, "Table Id"),
- set_flap_label(BasicSettingsFlap, "Basic Settings"),
- set_flap_label(SizeFlap, "Size"),
- set_flap_label(StorageFlap, "Storage"),
-
-
- gs:config(TableIdCard, [raise]),
-
- CardIds = print_cards(TabType, TableIdCard, BasicSettingsCard, SizeCard, StorageCard),
-
- {_CardId, FirstMaskXpos} = gs:read(TableIdFlap, data),
- Mask = gs:label(WinFrame, [{width, gs:read(TableIdFlap, width) - 2 * gs:read(TableIdFlap, bw) + 1},
- {height, gs:read(TableIdCard, bw)},
- {x, FirstMaskXpos},
- {y, gs:read(TableIdCard, y)},
- {bg, ?DEFAULT_BG_COLOR}
- ]),
-
- update_info_flaps(TabType, Node, LocalNode, TabId, CardIds, Master),
- {CardIds#card_field_ids{parent_pid = Master,
- window_id = WinId,
- window_frame = WinFrame}, Mask}.
-
-
-
-
-
-check_node(OldNode, LocalNode) ->
- HomeNode = node(),
- case net_adm:ping(OldNode) of
- pong ->
- OldNode;
- pang when LocalNode ->
- %% The system has gone either distributed or undistributed.
- %% No matter which, HomeNode tells the current correct node.
- HomeNode;
- pang ->
- OldNode
- end.
-
-
-
-
-
-
-update_data_field(notext, {label, Id}) ->
- gs:config(Id, [{label, {text, "" }}]);
-update_data_field(notext, {listbox, Id}) ->
- gs:config(Id, [{items, []}]);
-update_data_field({Data}, {label, Id}) ->
- gs:config(Id, [{label, {text, " " ++ lists:flatten(io_lib:write(Data))}}]);
-update_data_field({Data}, {listbox, Id}) ->
- gs:config(Id, [{items, lists:map(fun(E) -> " " ++ lists:flatten(io_lib:write(E))
- end, Data)}]).
-
-
-
-
-print_info(mnesia, Node, LocalNode, TabId, CardIds) ->
- update_data_field({mnesia},
- CardIds#card_field_ids.table_type),
- update_data_field({TabId},
- CardIds#card_field_ids.table_name),
- update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, type)},
- CardIds#card_field_ids.bag_or_set),
- update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, arity) - 1},
- CardIds#card_field_ids.arity),
-
- AttributesList = tv_mnesia_rpc:table_info(Node, LocalNode, TabId, attributes),
- update_data_field({AttributesList},
- CardIds#card_field_ids.attributes),
- update_data_field({lists:map(fun(N) ->
- lists:nth(N - 1, AttributesList)
- end,
- [2] ++ tv_mnesia_rpc:table_info(Node,
- LocalNode,
- TabId,
- index)
- )
- },
- CardIds#card_field_ids.index),
-
- update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, size)},
- CardIds#card_field_ids.size),
- update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, memory)},
- CardIds#card_field_ids.memory),
- update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, storage_type)},
- CardIds#card_field_ids.storage_type),
- update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, where_to_read)},
- CardIds#card_field_ids.where_to_read),
- update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, disc_copies)},
- CardIds#card_field_ids.disc_copies),
- update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, disc_only_copies)},
- CardIds#card_field_ids.disc_only_copies),
- update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, ram_copies)},
- CardIds#card_field_ids.ram_copies),
- update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, where_to_write)},
- CardIds#card_field_ids.where_to_write),
- update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, checkpoints)},
- CardIds#card_field_ids.checkpoints),
- {ok, TabId};
-print_info(ets, Node, LocalNode, TabId, CardIds) ->
- update_data_field({ets},
- CardIds#card_field_ids.table_type),
- update_data_field({TabId},
- CardIds#card_field_ids.table_id),
- TabName = tv_ets_rpc:info(Node, LocalNode, TabId, name),
- update_data_field({TabName},
- CardIds#card_field_ids.table_name),
- update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, named_table)},
- CardIds#card_field_ids.named_table),
-
- OwnerPid = tv_ets_rpc:info(Node, LocalNode, TabId, owner),
- OwnerNameSearchResult = lists:keysearch(registered_name,
- 1,
- rpc:block_call(Node,
- erlang,
- process_info,
- [OwnerPid])),
- OwnerName = case OwnerNameSearchResult of
- false ->
- notext;
- {value, {registered_name, WantedName}} ->
- {WantedName}
- end,
- update_data_field({OwnerPid},
- CardIds#card_field_ids.owner_pid),
- update_data_field(OwnerName,
- CardIds#card_field_ids.owner_name),
-
- update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, keypos)},
- CardIds#card_field_ids.keypos),
- update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, type)},
- CardIds#card_field_ids.bag_or_set),
- update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, protection)},
- CardIds#card_field_ids.protection),
- update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, size)},
- CardIds#card_field_ids.size),
- update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, memory)},
- CardIds#card_field_ids.memory),
- update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, node)},
- CardIds#card_field_ids.node),
- {ok, TabName}.
-
-
-
-
-
-
-print_cards(mnesia, Card1, Card2, Card3, Card4) ->
- create_card_text(1, "Table Type:", Card1),
- create_card_text(2, "Table Name:", Card1),
-
- create_card_text(1, "Table Type:", Card2),
- create_card_text(2, "Number of Attributes:", Card2),
-% create_card_text(3, "Attribute Names:", Card2),
-% create_card_text(4, "Index Positions:", Card2),
-
- create_card_text(1, "Number of Elements Stored:", Card3),
- create_card_text(2, "Number of Words Allocated:", Card3),
-
- create_card_text(1, "Local Storage Type:", Card4),
- create_card_text(2, "Table Readable at Node:", Card4),
-% create_card_text(3, "Disc Copy Nodes:", Card4),
-% create_card_text(4, "Disc Copy Only Nodes:", Card4),
-% create_card_text(5, "RAM Copy Nodes:", Card4),
-% create_card_text(6, "Active Table Replica Nodes:", Card4),
-% create_card_text(7, "Active Checkpoints:", Card4),
-
- {AttributesId, IndexId} = create_special_fields(mnesia, size_card, Card2),
-
-
- {DiscCopiesId, DiscOnlyCopiesId, RamCopiesId, WhereToWriteId, CheckpointsId} =
- create_special_fields(mnesia, storage_card, Card4),
-
- #card_field_ids{table_name = {label, create_card_data_field(2, Card1)},
- table_type = {label, create_card_data_field(1, Card1)},
- bag_or_set = {label, create_card_data_field(1, Card2)},
- arity = {label, create_card_data_field(2, Card2)},
- attributes = AttributesId,
- index = IndexId,
- size = {label, create_card_data_field(1, Card3)},
- memory = {label, create_card_data_field(2, Card3)},
- storage_type = {label, create_card_data_field(1, Card4)},
- where_to_read = {label, create_card_data_field(2, Card4)},
- disc_copies = DiscCopiesId,
- disc_only_copies = DiscOnlyCopiesId,
- ram_copies = RamCopiesId,
- where_to_write = WhereToWriteId,
- checkpoints = CheckpointsId
- };
-print_cards(ets, Card1, Card2, Card3, Card4) ->
- create_card_text(1, "Table Type:", Card1),
- create_card_text(2, "Table Id:", Card1),
- create_card_text(3, "Table Name:", Card1),
- create_card_text(4, "Table Name Registered:", Card1),
- create_card_text(5, "Process Owning the Table:", Card1),
- create_card_text(6, "Name of Owning Process:", Card1),
-
- create_card_text(1, "Index Position:", Card2),
- create_card_text(2, "Table Type:", Card2),
- create_card_text(3, "Protection Mode:", Card2),
-
- create_card_text(1, "Number of Elements Stored:", Card3),
- create_card_text(2, "Number of Words Allocated:", Card3),
-
- create_card_text(1, "Table Stored at Node:", Card4),
-
- #card_field_ids{table_id = {label, create_card_data_field(2, Card1)},
- table_type = {label, create_card_data_field(1, Card1)},
- table_name = {label, create_card_data_field(3, Card1)},
- named_table = {label, create_card_data_field(4, Card1)},
- owner_pid = {label, create_card_data_field(5, Card1)},
- owner_name = {label, create_card_data_field(6, Card1)},
-
- keypos = {label, create_card_data_field(1, Card2)},
- bag_or_set = {label, create_card_data_field(2, Card2)},
- protection = {label, create_card_data_field(3, Card2)},
-
- size = {label, create_card_data_field(1, Card3)},
- memory = {label, create_card_data_field(2, Card3)},
-
- node = {label, create_card_data_field(1, Card4)}
- }.
-
-
-
-
-
-
-create_special_fields(mnesia, size_card, CardId) ->
- LabelWidth = 195,
- LabelHeight = 24,
- ListboxWidth = 210,
- ListboxHeight = 160,
- VerticalSpacing = 20,
- LXpos = 30,
- RXpos = 330,
- Ypos = 40 + (LabelHeight + VerticalSpacing) * 2 + 25,
- gs:label(CardId, [{width, LabelWidth},
- {height, LabelHeight},
- {x, LXpos},
- {y, Ypos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {align, center},
- {label, {text, "Attribute Names:"}}
- ]),
-
- gs:label(CardId, [{width, LabelWidth},
- {height, LabelHeight},
- {x, RXpos},
- {y, Ypos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {align, center},
- {label, {text, "Attributes Used as Indices:"}}
- ]),
-
- AttributesId = gs:listbox(CardId, [{width, ListboxWidth},
- {height, ListboxHeight},
- {x, LXpos},
- {y, Ypos + LabelHeight - 3},
- {bg, {255, 255, 255}},
- {fg, {0, 0, 0}},
- {hscroll, bottom},
- {vscroll, right},
- {selectmode, single},
- {click, true},
- {doubleclick, true},
- {data, listbox}
- ]),
-
- IndexId = gs:listbox(CardId, [{width, ListboxWidth},
- {height, ListboxHeight},
- {x, RXpos},
- {y, Ypos + LabelHeight - 3},
- {bg, {255, 255, 255}},
- {fg, {0, 0, 0}},
- {hscroll, bottom},
- {vscroll, right},
- {selectmode, single},
- {click, true},
- {doubleclick, true},
- {data, listbox}
- ]),
-
- {{listbox, AttributesId},
- {listbox, IndexId}
- };
-create_special_fields(mnesia, storage_card, CardId) ->
- LabelWidth = 155,
- LabelHeight = 24,
- ListboxHeight = 80,
- ListboxWidth = 170,
- VerticalSpacing = 20,
- LXpos = 10,
- MXpos = 197,
- RXpos = 385,
- % Y-positions for upper and lower row.
- UYpos = 40 + (LabelHeight + VerticalSpacing) * 2,
- LYpos = UYpos + ListboxHeight + 37,
- gs:label(CardId, [{width, LabelWidth},
- {height, LabelHeight},
- {x, LXpos},
- {y, UYpos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {align, center},
- {label, {text, "Disc Copy Nodes:"}}
- ]),
-
- gs:label(CardId, [{width, LabelWidth},
- {height, LabelHeight},
- {x, MXpos},
- {y, UYpos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {align, center},
- {label, {text, "Disc Only Copy Nodes:"}}
- ]),
-
- gs:label(CardId, [{width, LabelWidth},
- {height, LabelHeight},
- {x, RXpos},
- {y, UYpos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {align, center},
- {label, {text, "RAM Copy Nodes:"}}
- ]),
-
-
- gs:label(CardId, [{width, LabelWidth},
- {height, LabelHeight},
- {x, LXpos},
- {y, LYpos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {align, center},
- {label, {text, "Table Replica Nodes:"}}
- ]),
-
- gs:label(CardId, [{width, LabelWidth},
- {height, LabelHeight},
- {x, MXpos},
- {y, LYpos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {align, center},
- {label, {text, "Active Checkpoints:"}}
- ]),
-
-
- DiscCopiesId = gs:listbox(CardId, [{width, ListboxWidth},
- {height, ListboxHeight},
- {x, LXpos},
- {y, UYpos + LabelHeight - 3},
- {bg, {255, 255, 255}},
- {fg, {0, 0, 0}},
- {hscroll, bottom},
- {vscroll, right},
- {selectmode, single},
- {click, true},
- {doubleclick, true},
- {data, listbox}
- ]),
-
- DiscCopiesOnlyId = gs:listbox(CardId, [{width, ListboxWidth},
- {height, ListboxHeight},
- {x, MXpos},
- {y, UYpos + LabelHeight - 3},
- {bg, {255, 255, 255}},
- {fg, {0, 0, 0}},
- {hscroll, bottom},
- {vscroll, right},
- {selectmode, single},
- {click, true},
- {doubleclick, true},
- {data, listbox}
- ]),
-
- RamCopiesId = gs:listbox(CardId, [{width, ListboxWidth},
- {height, ListboxHeight},
- {x, RXpos},
- {y, UYpos + LabelHeight - 3},
- {bg, {255, 255, 255}},
- {fg, {0, 0, 0}},
- {hscroll, bottom},
- {vscroll, right},
- {selectmode, single},
- {click, true},
- {doubleclick, true},
- {data, listbox}
- ]),
-
-
-
- WhereToWriteId = gs:listbox(CardId, [{width, ListboxWidth},
- {height, ListboxHeight},
- {x, LXpos},
- {y, LYpos + LabelHeight - 3},
- {bg, {255, 255, 255}},
- {fg, {0, 0, 0}},
- {hscroll, bottom},
- {vscroll, right},
- {selectmode, single},
- {click, true},
- {doubleclick, true},
- {data, listbox}
- ]),
-
- CheckpointsId = gs:listbox(CardId, [{width, ListboxWidth},
- {height, ListboxHeight},
- {x, MXpos},
- {y, LYpos + LabelHeight - 3},
- {bg, {255, 255, 255}},
- {fg, {0, 0, 0}},
- {hscroll, bottom},
- {vscroll, right},
- {selectmode, single},
- {click, true},
- {doubleclick, true},
- {data, listbox}
- ]),
-
- {{listbox, DiscCopiesId},
- {listbox, DiscCopiesOnlyId},
- {listbox, RamCopiesId},
- {listbox, WhereToWriteId},
- {listbox, CheckpointsId}
- }.
-
-
-
-
-
-
-
-create_card_data_field(N, ParentId) ->
- Width = 345,
- Height = 24,
- VerticalSpacing = 20,
- Xpos = 210,
- Ypos = 40 + (Height + VerticalSpacing) * (N - 1),
-
- BgFrame = gs:frame(ParentId, [{width, Width},
- {height, Height},
- {x, Xpos},
- {y, Ypos},
- {bg, {0, 0, 0}},
- {bw, 0}
- ]),
- gs:label(BgFrame, [{width, Width - 2},
- {height, Height - 2},
- {x, 1},
- {y, 1},
- {bg, {255, 255, 255}},
- {fg, {0, 0, 0}},
- {align, w}
- ]).
-
-
-
-
-
-
-create_card_text(N, Text, ParentId) ->
- LabelWidth = 205,
- LabelHeight = 24,
- VerticalSpacing = 20,
- Xpos = 10,
- Ypos = 40 + (LabelHeight + VerticalSpacing) * (N - 1),
- gs:label(ParentId, [{width, LabelWidth},
- {height, LabelHeight},
- {x, Xpos},
- {y, Ypos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {align, w},
- {label, {text, Text}}
- ]).
-
-
-
-
-create_card(ParentId, FlapId) ->
- CardId = gs:frame(ParentId, [{width, 570},
- {height, 360},
- {x, 5},
- {y, 35},
- {bg, ?DEFAULT_BG_COLOR},
- {bw, 2}
- ]),
- FlapXpos = gs:read(FlapId, data),
- gs:config(FlapId, [{data, {CardId, FlapXpos}}
- ]),
- CardId.
-
-
-
-
-
-set_flap_label(ParentId, Text) ->
- Bw = gs:read(ParentId, bw), % It is assumed that the parent is a frame! :-)
- Width = gs:read(ParentId, width) - 2 * Bw - 2,
- Height = gs:read(ParentId, height) - 2 * Bw - 6,
- Xpos = 0,
- Ypos = 0,
- Data = gs:read(ParentId, data),
-
- gs:label(ParentId, [{width, Width},
- {height, Height},
- {x, Xpos},
- {y, Ypos},
- % {fg, {178, 34, 34}},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {label, {text, Text}},
- {align, center},
- {buttonpress, true},
- {data, Data}
- ]).
-
-
-
-create_flap(N, _Text, ParentId) ->
- Width = 120,
- Height = 40,
- Spacing = 2,
- FirstXpos = 5,
- Xpos = FirstXpos + ((Width + Spacing) * (N - 1)),
- Ypos = 5,
- BorderWidth = 2,
-
- gs:frame(ParentId, [{width, Width},
- {height, Height},
- {x, Xpos},
- {y, Ypos},
- {bg, ?DEFAULT_BG_COLOR},
- {bw, BorderWidth},
- {cursor, hand},
- {buttonpress, true},
- {data, Xpos + BorderWidth}
- ]).
-
-
-
-update_info_flaps(TabType, Node, LocalNode, TabId, CardIds, MasterPid) ->
- case catch print_info(TabType, Node, LocalNode, TabId, CardIds) of
- {ok, TabName} ->
- WinTitle = tv_pc_menu_handling:get_window_title(TabType,Node,TabId,TabName),
- gs:config(win, [{title, "[TV] " ++ WinTitle}]),
- done;
- nodedown ->
- nodedown;
- no_table ->
- gs:config(win, [beep]),
- case get(error_msg_mode) of
- normal ->
- Msg = ["The table " ++ lists:flatten(io_lib:write(TabId)) ++ " on node",
- lists:flatten(io_lib:write(Node)) ++ " no longer exists!"],
- tv_utils:notify(win, "TV Notification", Msg);
- haiku ->
- Msg = ["Three things are certain:",
- "Death, taxes, and lost tables.",
- "Guess which has occurred."],
- tv_utils:notify(win, "TV Notification", Msg)
- end,
- MasterPid ! #ip_dead_table{sender = self()};
- mnesia_not_started ->
- gs:config(win, [beep]),
- case get(error_msg_mode) of
- normal ->
- Msg = ["The table " ++ lists:flatten(io_lib:write(TabId)) ++ " on node",
- lists:flatten(io_lib:write(Node)) ++ " no longer exists!"],
- tv_utils:notify(win, "TV Notification", Msg);
- haiku ->
- Msg = ["A table that big?",
- "It might be very useful.",
- "But now it is gone."],
- tv_utils:notify(win, "TV Notification", Msg)
- end,
- MasterPid ! #ip_dead_table{sender = self()};
- {unexpected_error,Reason} ->
- io:format("Unexpected error: ~p~n", [Reason]);
- _Other ->
- io:format("Unexpected return value: ~p~n", [_Other]),
- done
- end.
-
-
-
-
-loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType) ->
- receive
- #info_update_table_info{sender = Sender} ->
- NewNode = check_node(Node, LocalNode),
- update_info_flaps(TabType, NewNode, LocalNode, TabId, CardIds, Sender),
- loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType);
-
-
- #info_raise_window{sender = Sender} ->
- gs:config(CardIds#card_field_ids.window_id, [raise]),
- NewNode = check_node(Node, LocalNode),
- chk(update_info_flaps(TabType, NewNode, LocalNode, TabId, CardIds, Sender)),
- loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType);
-
-
- #info_quit{} ->
- exit(normal);
-
- {gs, _FlapId, buttonpress, {CardId, Xpos}, [1 | _]} ->
- gs:config(CardId, [raise
- ]),
- gs:config(MaskLabel, [raise,
- {x, Xpos}
- ]),
- loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
-
- {gs, _Id, buttonpress, {_CardId, _Xpos}, _Args} ->
- loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
-
- {gs, _LblId, enter, _Data, _Args} ->
- loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
-
- {gs, WinId, configure, _Data, _Args} ->
- gs:config(WinId, [{width, ?WINDOW_WIDTH},
- {height, ?WINDOW_HEIGHT}
- ]),
- loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
-
- {gs, ListboxId, click, listbox, _Args} ->
- gs:config(ListboxId, [{selection, clear}]),
- loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
-
- {gs, ListboxId, doubleclick, listbox, _Args} ->
- gs:config(ListboxId, [{selection, clear}]),
- loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
-
- {gs, _Id, click, update, _Args} ->
- NewNode = check_node(Node, LocalNode),
- chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds,
- CardIds#card_field_ids.parent_pid)),
- loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType);
-
- {gs, _Id, keypress, _, [r, _, 0, 1 | _]} ->
- NewNode = check_node(Node, LocalNode),
- chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds,
- CardIds#card_field_ids.parent_pid)),
- loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType);
-
- {gs, _Id, keypress, _, ['R', _, 1, 1 | _]} ->
- NewNode = check_node(Node, LocalNode),
- chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds,
- CardIds#card_field_ids.parent_pid)),
- loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType);
-
- {gs, _Id, click, close_menu, _Args} ->
- exit(normal);
-
- {gs, _Id, keypress, _, [c, _, 0, 1 | _]} ->
- exit(normal);
-
- {gs, _Id, keypress, _, ['C', _, 1, 1 | _]} ->
- exit(normal);
-
- {gs, _Id, destroy, _Data, _Args} ->
- exit(normal);
-
- {'EXIT', _Pid, _Reason} ->
- exit(normal);
-
- {error_msg_mode, Mode} ->
- put(error_msg_mode, Mode),
- loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType);
-
- _Other ->
- loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType)
- end.
-
-
-
-
-
-
-chk(nodedown) ->
- gs:config(win, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(win, "TV Notification",
- ["The node is down, and the",
- "table cannot be reached."]);
- haiku ->
- ErrMsg1 = ["With searching comes loss",
- "And the presence of absence:",
- "Node is down."],
- tv_utils:notify(win, "TV Notification", ErrMsg1)
- end;
-chk(_Other) ->
- done.
-
diff --git a/lib/tv/src/tv_int_def.hrl b/lib/tv/src/tv_int_def.hrl
deleted file mode 100644
index 6d4263c51b..0000000000
--- a/lib/tv/src/tv_int_def.hrl
+++ /dev/null
@@ -1,56 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Internal definitions for the table tool as a whole.
-%%%
-%%%*********************************************************************
-
--define(COMM_FUNC_FILE, tv_comm_func).
-
--define(ITEMS_TO_DISPLAY, 35).
-
-
--define(DEFAULT_BACKGROUND_COLOR, {255, 255, 255}). % white
-
-
-% Colors used for marking updates.
-
--define(BLACK, { 0, 0, 0}).
-
--define(RED1, {255, 0, 0}).
--define(RED2, {255, 100, 100}).
--define(RED3, {255, 150, 150}).
--define(RED4, {255, 200, 200}).
--define(RED5, {235, 217, 217}).
-
-
--define(GREEN1, { 0, 255, 0}).
--define(GREEN2, {115, 255, 135}).
--define(GREEN3, {125, 225, 150}).
--define(GREEN4, {170, 225, 185}).
--define(GREEN5, {195, 219, 202}).
-
--define(DEFAULT_BTN_COLOR, {217, 217, 217}).
-
-
-
-
-
-
-
diff --git a/lib/tv/src/tv_int_msg.hrl b/lib/tv/src/tv_int_msg.hrl
deleted file mode 100644
index 75ce8eca3b..0000000000
--- a/lib/tv/src/tv_int_msg.hrl
+++ /dev/null
@@ -1,504 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: File containing all messages used internally
-%%% between the various table tool components.
-%%%
-%%%*********************************************************************
-
-
-%%%*********************************************************************
-%%% MESSAGES OWNED BY PC
-%%%*********************************************************************
-
-
-
--record(pc_raise_window, {sender}).
-
-
-
--record(pc_menu_msg, {sender,
- data}).
-
-
-
--record(pc_win_conf, {sender,
- width,
- height}).
-
-
-
--record(pc_show_table_info, {sender}).
-
-
-
--record(pc_poll_table, {sender}).
-
-
-
--record(pc_select, {sender}).
-
-
-
--record(pc_help, {sender}).
-
-
-
--record(pc_set_sorting_mode, {sender,
- sorting, % 'true' or 'false'
- reverse, % 'true' or 'false',
- sort_key_no = 1
- }).
-
-
-
--record(pc_set_sorting_mode_cfm, {sender,
- sort_key_no
- }).
-
-
-
--record(pc_marked_row, {sender,
- row_no,
- object,
- color
- }).
-
-
-
--record(pc_data_req, {sender,
- element,
- nof_elements
- }).
-
-
-
--record(pc_resend_data, {sender}).
-
-
-
-
--record(pc_data, {sender,
- scale_pos, % vertical scale
- scale_range, % vertical scale
- max_elem_size,
- list_range,
- elementlist,
- marked_row,
- list_of_keys,
- color}).
-
-
-
-
--record(pc_list_info, {sender,
- lists_as_strings}).
-
-
-
--record(pc_dead_table, {sender,
- automatic_polling}).
-
-
-
--record(pc_nodedown, {sender,
- automatic_polling}).
-
-
-
--record(pc_search_req, {sender
- }).
-
-
-
-
-%%%*********************************************************************
-%%% MESSAGES OWNED BY PD
-%%%*********************************************************************
-
-
-
--record(pd_win_conf, {sender,
- width,
- height}).
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data: sender: Pid of the sender of the message.
-%% win: Id of window to create canvas and scale in.
-%% win_width: width of the window to create the canvas in.
-%% win_height: height of the window to create the canvas in.
-%% scale: whether a scale shall be shown or not.
-%% Possible values: true -- scale is shown.
-%% false -- scale is not shown.
-%%======================================================================
-
--record(pd_deblock, {sender,
- win,
- win_width,
- win_height,
- scale = false,
- range}).
-
-
-
-
--record(pd_deblock_cfm, {sender}).
-
-
-
--record(pd_new_table, {sender,
- table_type,
- table_name,
- record_name, %% Only valid for Mnesia tables.
- writable
- }).
-
-
-
--record(pd_get_sort_settings, {sender,
- sorting,
- reverse
- }).
-
-
-
--record(pd_no_sorting, {sender
- }).
-
-
-
-
--record(pd_ignore, {sender
- }).
-
-
-
-
--record(pd_updated_object, {sender,
- object,
- old_object,
- old_color, %% Tells status of the object, if deleted or present.
- obj_no
- }).
-
-
-
--record(pd_new_object, {sender, %% Used when no row is marked.
- object %% Note: may still be an updated object!
- }).
-
-
-
--record(pd_delete_object, {sender,
- object,
- color
- }).
-
-
-
--record(pd_rec_edit, {sender,
- attributes
- }).
-
-
-
-%%%*********************************************************************
-%%% MESSAGES OWNED BY PW
-%%%*********************************************************************
-
-
-
-
--record(pw_deblock, {sender,
- win_title,
- win_width,
- win_height,
- min_win_width,
- min_win_height}).
-
-
-
--record(pw_set_window_title, {sender,
- win_title}).
-
-
-
--record(pw_deblock_cfm, {sender,
- win_id}).
-
-
-
-
-%%======================================================================
-%% Message: pw_create_menu.
-%%
-%% Function: Order to pw to create a menu according to the content of the message.
-%%
-%% Data: menutitle: string containing the name of the menu, e.g., "File".
-%% menulist: list of tuples having the following format:
-%% {Text, Data}, where Text is the string that shall be
-%% written in each menulist item, and Data is optional data,
-%% presumably the name of a function that is to be called
-%% when the corresponding menulist message is received.
-%%======================================================================
-
--record(pw_create_menu, {sender,
- menutitle,
- title_acc_pos,
- menulist}).
-
-
-
--record(pw_create_menu_cfm, {sender}).
-
-
-
--record(pw_select_menu, {sender,
- menu,
- old_menus}).
-
-
-
-
-
-%%%*********************************************************************
-%%% MESSAGES OWNED BY DBS
-%%%*********************************************************************
-
-
-
--record(dbs_deblock, {sender,
- etsread_pid,
- type,
- keypos,
- sublist_length}).
-
-
-
--record(dbs_deblock_cfm, {sender}).
-
-
-
-
--record(dbs_new_data, {sender,
- data,
- keys,
- time_to_read_table
- }).
-
-
-
--record(dbs_new_mnesia_data, {sender,
- new_or_changed,
- deleted,
- keys
- }).
-
-
-
--record(dbs_subset, {sender,
- data,
- requested_row,
- subset_pos,
- db_length,
- max_elem_size,
- list_of_keys,
- required_time_etsread,
- required_time_dbs}).
-
-
-
-
-
--record(dbs_subset_req, {sender,
- subset_pos,
- subset_length
- }).
-
-
-
-
--record(dbs_sorting_mode, {sender,
- sorting, % 'true' or 'false'
- reverse, % 'true' or 'false'
- sort_key_no
- }).
-
-
-
--record(dbs_marked_row, {sender,
- row_no
- }).
-
-
-
-
--record(dbs_search_req, {sender
- }).
-
-
-
--record(dbs_updated_object, {sender,
- object,
- old_object,
- old_color,
- obj_no
- }).
-
-
--record(dbs_new_object, {sender,
- object
- }).
-
-
--record(dbs_delete_object, {sender,
- object,
- color,
- obj_no
- }).
-
-
-
-%%%*********************************************************************
-%%% MESSAGES OWNED BY ETSREAD
-%%%*********************************************************************
-
-
-
--record(etsread_update_object, {sender,
- object,
- old_object,
- key_no
- }).
-
--record(etsread_update_object_cfm, {sender,
- success
- }).
-
-
-
--record(etsread_new_object, {sender,
- object
- }).
-
-
--record(etsread_new_object_cfm, {sender,
- success
- }).
-
-
-
--record(etsread_delete_object, {sender,
- object,
- key_no
- }).
-
-
--record(etsread_delete_object_cfm, {sender,
- success
- }).
-
-
-
--record(etsread_deblock, {sender,
- dbs_pid,
- node,
- local_node,
- table_id,
- table_type, % One of 'ets' or 'mnesia'
- poll_interval
- }).
-
-
-
--record(etsread_deblock_cfm, {sender,
- type,
- keypos,
- protection
- }).
-
-
-
--record(etsread_set_poll_interval, {sender,
- interval}).
-
-
-
--record(etsread_poll_table, {sender}).
-
-
-
--record(etsread_nodedown, {sender}).
-
-
-
-%%%*********************************************************************
-%%% MESSAGES OWNED BY IP
-%%%*********************************************************************
-
-
-
-
--record(ip_dead_table, {sender}).
-
-
--record(ip_register_parent, {sender}).
-
-
-
--record(ip_update, {sender,
- nof_elements_to_mark,
- text}).
-
-
-
--record(ip_quit, {sender}).
-
-
-
-
-%%%*********************************************************************
-%%% MESSAGES OWNED BY INFO
-%%%*********************************************************************
-
-
--record(info_update_table_info, {sender}).
-
-
-
--record(info_raise_window, {sender}).
-
-
-
--record(info_restart, {sender,
- node,
- table_id,
- table_type}).
-
-
-
--record(info_quit, {sender}).
-
-
diff --git a/lib/tv/src/tv_io_lib.erl b/lib/tv/src/tv_io_lib.erl
deleted file mode 100644
index 5457575b7d..0000000000
--- a/lib/tv/src/tv_io_lib.erl
+++ /dev/null
@@ -1,223 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: This file contains io functions adapted to the
-%%% TV requirements.
-%%%
-%%%*********************************************************************
-
--module(tv_io_lib).
-
-
--export([format/2]).
-
--export([write/1,write/2]).
--export([write_atom/1,write_string/2]).
-
--export([char_list/1,deep_char_list/1,printable_list/1]).
-
-
-
-%% Interface calls to sub-modules.
-
-format(Format, Args) ->
- tv_io_lib_format:fwrite(Format, Args).
-
-
-%% write(Term)
-%% write(Term, Depth)
-%% write(Term, Depth, Pretty)
-%% Return a (non-flattened) list of characters giving a printed
-%% representation of the term.
-
-write(Term) -> write(Term, -1).
-
-write(_Term, 0) -> "...";
-write(Term, _D) when is_integer(Term) -> integer_to_list(Term);
-write(Term, _D) when is_float(Term) -> tv_io_lib_format:fwrite_g(Term);
-write(Atom, _D) when is_atom(Atom) -> write_atom(Atom);
-write(Term, _D) when is_port(Term) -> lists:flatten(io_lib:write(Term));
-write(Term, _D) when is_pid(Term) -> pid_to_list(Term);
-write(Term, _D) when is_reference(Term) -> io_lib:write(Term);
-write(Term, _D) when is_binary(Term), byte_size(Term) > 100 -> "#Bin";
-write(Term, _D) when is_binary(Term) -> "<<\"" ++ binary_to_list(Term) ++ "\">>";
-write(Term, _D) when is_bitstring(Term) -> "#Bitstr";
-write([], _D) -> "[]";
-write({}, _D) -> "{}";
-write([H|T], D) ->
- if
- D =:= 1 -> "[...]";
- true ->
- [$[,[write(H, D-1)|write_tail(T, D-1)],$]]
- end;
-write(F, _D) when is_function(F) ->
- {module,M} = erlang:fun_info(F, module),
- ["#Fun<",atom_to_list(M),">"];
-write(T, D) when is_tuple(T) ->
- if
- D =:= 1 -> "{...}";
- true ->
- [${,
- [write(element(1, T), D-1)|write_tail(tl(tuple_to_list(T)), D-1)],
- $}]
- end.
-
-%% write_tail(List, Depth)
-%% Test the terminating case first as this looks better with depth.
-
-write_tail([], _D) -> "";
-write_tail(_List, 1) -> "|...";
-write_tail([H|T], D) ->
- [$,,write(H, D-1)|write_tail(T, D-1)];
-write_tail(Other, D) ->
- [$|,write(Other, D-1)].
-
-%% write_atom(Atom) -> [Char]
-%% Generate the list of characters needed to print an atom.
-
-write_atom(Atom) ->
- Chars = atom_to_list(Atom),
- case quote_atom(Atom, Chars) of
- true ->
- write_string(Chars, $');
- false ->
- Chars
- end.
-
-
-write_string(S, Q) ->
- [Q|write_string1(S, Q)].
-
-write_string1([], Q) ->
- [Q];
-write_string1([C|Cs], Q) ->
- write_char(C, Q, write_string1(Cs, Q)).
-
-
-write_char(Q, Q, Tail) -> %Must check this first
- [$\\,Q|Tail];
-write_char($\\, _, Tail) -> %In printable character range
- [$\\,$\\|Tail];
-write_char(C, _, Tail) when C >= $ , C =< $~ ->
- [C|Tail];
-write_char(C, _, Tail) when C >= 128+$ , C =< 255 ->
- [C|Tail];
-write_char($\n, _Q, Tail) -> %\n = LF
- [$\\,$n|Tail];
-write_char($\r, _, Tail) -> %\r = CR
- [$\\,$r|Tail];
-write_char($\t, _, Tail) -> %\t = TAB
- [$\\,$t|Tail];
-write_char($\v, _, Tail) -> %\v = VT
- [$\\,$v|Tail];
-write_char($\b, _, Tail) -> %\b = BS
- [$\\,$b|Tail];
-write_char($\f, _, Tail) -> %\f = FF
- [$\\,$f|Tail];
-write_char($\e, _, Tail) -> %\e = ESC
- [$\\,$e|Tail];
-write_char($\d, _, Tail) -> %\d = DEL
- [$\\,$d|Tail];
-write_char(C, _, Tail) when C < $ ->
- C1 = (C bsr 3) + $0,
- C2 = (C band 7) + $0,
- [$\\,$0,C1,C2|Tail];
-write_char(C, _, Tail) when C > $~ ->
- C1 = (C bsr 6) + $0,
- C2 = ((C bsr 3) band 7) + $0,
- C3 = (C band 7) + $0,
- [$\\,C1,C2,C3|Tail].
-
-%% quote_atom(Atom, CharList)
-%% Return 'true' if atom with chars in CharList needs to be quoted, else
-%% return 'false'.
-
-quote_atom(Atom, Cs0) ->
- case erl_scan:reserved_word(Atom) of
- true -> true;
- false ->
- case Cs0 of
- [C|Cs] when C >= $a, C =< $z ->
- quote_atom(Cs);
- _ -> true
- end
- end.
-
-quote_atom([C|Cs]) when C >= $a, C =< $z ->
- quote_atom(Cs);
-quote_atom([C|Cs]) when C >= $A, C =< $Z ->
- quote_atom(Cs);
-quote_atom([C|Cs]) when C >= $0, C =< $9 ->
- quote_atom(Cs);
-quote_atom([$_|Cs]) ->
- quote_atom(Cs);
-quote_atom([$@|Cs]) ->
- quote_atom(Cs);
-quote_atom([_|_]) ->
- true;
-quote_atom([]) ->
- false.
-
-%% char_list(CharList)
-%% deep_char_list(CharList)
-%% Return true if CharList is a (possibly deep) list of characters, else
-%% false.
-
-char_list([C|Cs]) when is_integer(C), C >= 0, C =< 255 ->
- char_list(Cs);
-char_list([]) -> true;
-char_list(_Other) -> false. %Everything else is false
-
-deep_char_list(Cs) ->
- deep_char_list(Cs, []).
-
-deep_char_list([C|Cs], More) when is_list(C) ->
- deep_char_list(C, [Cs|More]);
-deep_char_list([C|Cs], More) when is_integer(C), C >= 0, C =< 255 ->
- deep_char_list(Cs, More);
-deep_char_list([], [Cs|More]) ->
- deep_char_list(Cs, More);
-deep_char_list([], []) -> true;
-deep_char_list(_Other, _More) -> %Everything else is false
- false.
-
-%% printable_list([Char]) -> bool()
-%% Return true if CharList is a list of printable characters, else
-%% false.
-
-printable_list([C|Cs]) when is_integer(C), C >= $ , C =< 255 ->
- printable_list(Cs);
-printable_list([$\n|Cs]) ->
- printable_list(Cs);
-printable_list([$\r|Cs]) ->
- printable_list(Cs);
-printable_list([$\t|Cs]) ->
- printable_list(Cs);
-printable_list([$\v|Cs]) ->
- printable_list(Cs);
-printable_list([$\b|Cs]) ->
- printable_list(Cs);
-printable_list([$\f|Cs]) ->
- printable_list(Cs);
-printable_list([$\e|Cs]) ->
- printable_list(Cs);
-printable_list([]) -> true;
-printable_list(_Other) -> false. %Everything else is false
-
-
diff --git a/lib/tv/src/tv_io_lib_format.erl b/lib/tv/src/tv_io_lib_format.erl
deleted file mode 100644
index e043d9296e..0000000000
--- a/lib/tv/src/tv_io_lib_format.erl
+++ /dev/null
@@ -1,386 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_io_lib_format).
-
-
--export([fwrite/2,fwrite_g/1,indentation/2]).
-
-
-%% fwrite(Format, ArgList) -> [Char].
-%% Format the arguments in ArgList after string Format. Just generate
-%% an error if there is an error in the arguments.
-%%
-%% To do the printing command correctly we need to calculate the
-%% current indentation for everything before it. This may be very
-%% expensive, especially when it is not needed, so we first determine
-%% if, and for how long, we need to calculate the indentations. We do
-%% this by first collecting all the control sequences and
-%% corresponding arguments, then counting the print sequences and
-%% then building the output. This method has some drawbacks, it does
-%% two passes over the format string and creates more temporary data,
-%% and it also splits the handling of the control characters into two
-%% parts.
-
-fwrite(Format, Args) when is_atom(Format) ->
- fwrite(atom_to_list(Format), Args);
-fwrite(Format, Args) ->
- Cs = collect(Format, Args),
- Pc = pcount(Cs),
- build(Cs, Pc, 0).
-
-collect([$~|Fmt0], Args0) ->
- {C,Fmt1,Args1} = collect_cseq(Fmt0, Args0),
- [C|collect(Fmt1, Args1)];
-collect([C|Fmt], Args) ->
- [C|collect(Fmt, Args)];
-collect([], []) -> [].
-
-collect_cseq(Fmt0, Args0) ->
- {F,Ad,Fmt1,Args1} = field_width(Fmt0, Args0),
- {P,Fmt2,Args2} = precision(Fmt1, Args1),
- {Pad,Fmt3,Args3} = pad_char(Fmt2, Args2),
- {C,As,Fmt4,Args4} = collect_cc(Fmt3, Args3),
- {{C,As,F,Ad,P,Pad},Fmt4,Args4}.
-
-field_width([$-|Fmt0], Args0) ->
- {F,Fmt,Args} = field_value(Fmt0, Args0),
- field_width(-F, Fmt, Args);
-field_width(Fmt0, Args0) ->
- {F,Fmt,Args} = field_value(Fmt0, Args0),
- field_width(F, Fmt, Args).
-
-field_width(F, Fmt, Args) when F < 0 ->
- {-F,left,Fmt,Args};
-field_width(F, Fmt, Args) when F >= 0 ->
- {F,right,Fmt,Args}.
-
-precision([$.|Fmt], Args) ->
- field_value(Fmt, Args);
-precision(Fmt, Args) ->
- {none,Fmt,Args}.
-
-field_value([$*|Fmt], [A|Args]) when is_integer(A) ->
- {A,Fmt,Args};
-field_value([C|Fmt], Args) when C >= $0, C =< $9 ->
- field_value([C|Fmt], Args, 0);
-field_value(Fmt, Args) ->
- {none,Fmt,Args}.
-
-field_value([C|Fmt], Args, F) when C >= $0, C =< $9 ->
- field_value(Fmt, Args, 10*F + (C - $0));
-field_value(Fmt, Args, F) -> %Default case
- {F,Fmt,Args}.
-
-pad_char([$.,$*|Fmt], [Pad|Args]) -> {Pad,Fmt,Args};
-pad_char([$.,Pad|Fmt], Args) -> {Pad,Fmt,Args};
-pad_char(Fmt, Args) -> {$ ,Fmt,Args}.
-
-%% collect_cc([FormatChar], [Argument]) ->
-%% {Control,[ControlArg],[FormatChar],[Arg]}.
-%% Here we collect the argments for each control character.
-%% Be explicit to cause failure early.
-
-collect_cc([$w|Fmt], [A|Args]) -> {$w,[A],Fmt,Args};
-collect_cc([$p|Fmt], [A|Args]) -> {$p,[A],Fmt,Args};
-collect_cc([$W|Fmt], [A,Depth|Args]) -> {$W,[A,Depth],Fmt,Args};
-collect_cc([$P|Fmt], [A,Depth|Args]) -> {$P,[A,Depth],Fmt,Args};
-collect_cc([$s|Fmt], [A|Args]) -> {$s,[A],Fmt,Args};
-collect_cc([$e|Fmt], [A|Args]) -> {$e,[A],Fmt,Args};
-collect_cc([$f|Fmt], [A|Args]) -> {$f,[A],Fmt,Args};
-collect_cc([$g|Fmt], [A|Args]) -> {$g,[A],Fmt,Args};
-collect_cc([$c|Fmt], [A|Args]) -> {$c,[A],Fmt,Args};
-collect_cc([$~|Fmt], Args) -> {$~,[],Fmt,Args};
-collect_cc([$n|Fmt], Args) -> {$n,[],Fmt,Args};
-collect_cc([$i|Fmt], [A|Args]) -> {$i,[A],Fmt,Args}.
-
-%% pcount([ControlC]) -> Count.
-%% Count the number of print requests.
-
-pcount(Cs) -> pcount(Cs, 0).
-
-pcount([{$p,_As,_F,_Ad,_P,_Pad}|Cs], Acc) -> pcount(Cs, Acc+1);
-pcount([{$P,_As,_F,_Ad,_P,_Pad}|Cs], Acc) -> pcount(Cs, Acc+1);
-pcount([_|Cs], Acc) -> pcount(Cs, Acc);
-pcount([], Acc) -> Acc.
-
-%% build([Control], Pc, Indentation) -> [Char].
-%% Interpret the control structures. Count the number of print
-%% remaining and only calculate indentation when necessary. Must also
-%% be smart when calculating indentation for characters in format.
-
-build([{C,As,F,Ad,P,Pad}|Cs], Pc0, I) ->
- S = control(C, As, F, Ad, P, Pad, I),
- Pc1 = decr_pc(C, Pc0),
- if
- Pc1 > 0 -> [S|build(Cs, Pc1, indentation(S, I))];
- true -> [S|build(Cs, Pc1, I)]
- end;
-build([$\n|Cs], Pc, _I) -> [$\n|build(Cs, Pc, 0)];
-build([$\t|Cs], Pc, I) -> [$\t|build(Cs, Pc, ((I + 8) div 8) * 8)];
-build([C|Cs], Pc, I) -> [C|build(Cs, Pc, I+1)];
-build([], _, _) -> [].
-
-decr_pc($p, Pc) -> Pc - 1;
-decr_pc($P, Pc) -> Pc - 1;
-decr_pc(_C, Pc) -> Pc.
-
-%% control(FormatChar, [Argument], FieldWidth, Adjust, Precision, PadChar,
-
-%% Indentation) ->
-%% [Char]
-%% This is the main dispatch function for the various formatting commands.
-%% Field widths and precisions have already been calculated.
-
-control($w, [A], F, Adj, P, Pad, _I) ->
- term(tv_io_lib:write(A, -1), F, Adj, P, Pad);
-control($p, [A], F, Adj, P, Pad, I) ->
- print(A, -1, F, Adj, P, Pad, I);
-control($W, [A,Depth], F, Adj, P, Pad, _I) when is_integer(Depth) ->
- term(tv_io_lib:write(A, Depth), F, Adj, P, Pad);
-control($P, [A,Depth], F, Adj, P, Pad, I) when is_integer(Depth) ->
- print(A, Depth, F, Adj, P, Pad, I);
-control($s, [A], F, Adj, P, Pad, _I) when is_atom(A) ->
- string(atom_to_list(A), F, Adj, P, Pad);
-control($s, [L], F, Adj, P, Pad, _I) ->
- true = tv_io_lib:deep_char_list(L), %Check if L a character list
- string(L, F, Adj, P, Pad);
-control($e, [A], F, Adj, P, Pad, _I) when is_float(A) ->
- fwrite_e(A, F, Adj, P, Pad);
-control($f, [A], F, Adj, P, Pad, _I) when is_float(A) ->
- fwrite_f(A, F, Adj, P, Pad);
-control($g, [A], F, Adj, P, Pad, _I) when is_float(A) ->
- fwrite_g(A, F, Adj, P, Pad);
-control($c, [A], F, Adj, P, Pad, _I) when is_integer(A) ->
- char(A band 255, F, Adj, P, Pad);
-control($~, [], F, Adj, P, Pad, _I) -> char($~, F, Adj, P, Pad);
-control($n, [], F, Adj, P, Pad, _I) -> newline(F, Adj, P, Pad);
-control($i, [_A], _F, _Adj, _P, _Pad, _I) -> [].
-
-%% indentation([Char], Indentation) -> Indentation.
-%% Calculate the indentation of the end of a string given its start
-%% indentation. We assume tabs at 8 cols.
-
-indentation([$\n|Cs], _I) -> indentation(Cs, 0);
-indentation([$\t|Cs], I) -> indentation(Cs, ((I + 8) div 8) * 8);
-indentation([C|Cs], I) when is_integer(C) ->
- indentation(Cs, I+1);
-indentation([C|Cs], I) ->
- indentation(Cs, indentation(C, I));
-indentation([], I) -> I.
-
-%% term(TermList, Field, Adjust, Precision, PadChar)
-%% Output the characters in a term.
-
-term(T, none, _Adj, none, _Pad) -> T;
-term(T, none, Adj, P, Pad) -> term(T, P, Adj, P, Pad);
-term(T, F, Adj, none, Pad) -> term(T, F, Adj, erlang:min(flat_length(T), F), Pad);
-term(T, F, Adj, P, Pad) when F >= P ->
- adjust_error(T, F, Adj, P, Pad).
-
-%% print(Term, Depth, Field, Adjust, Precision, PadChar, Indentation)
-%% Print a term.
-
-print(T, D, none, Adj, P, Pad, I) -> print(T, D, 80, Adj, P, Pad, I);
-print(T, D, F, Adj, none, Pad, I) -> print(T, D, F, Adj, I+1, Pad, I);
-print(T, D, F, right, P, _Pad, _I) ->
- tv_io_lib_pretty:pretty_print(T, P, F, D).
-
-%% fwrite_e(Float, Field, Adjust, Precision, PadChar)
-
-fwrite_e(Fl, none, Adj, none, Pad) -> %Default values
- fwrite_e(Fl, none, Adj, 6, Pad);
-fwrite_e(Fl, none, _Adj, P, _Pad) when P >= 2 ->
- float_e(Fl, float_data(Fl), P);
-fwrite_e(Fl, F, Adj, none, Pad) ->
- fwrite_e(Fl, F, Adj, 6, Pad);
-fwrite_e(Fl, F, Adj, P, Pad) when P >= 2 ->
- adjust_error(float_e(Fl, float_data(Fl), P), F, Adj, F, Pad).
-
-float_e(Fl, Fd, P) when Fl < 0.0 -> %Negative numbers
- [$-|float_e(-Fl, Fd, P)];
-float_e(_Fl, {Ds,E}, P) ->
- case float_man(Ds, 1, P-1) of
- {[$0|Fs],true} -> [[$1|Fs]|float_exp(E)];
- {Fs,false} -> [Fs|float_exp(E-1)]
- end.
-
-%% float_man([Digit], Icount, Dcount) -> {[Chars],CarryFlag}.
-%% Generate the characters in the mantissa from the digits with Icount
-%% characters before the '.' and Dcount decimals. Handle carry and let
-%% caller decide what to do at top.
-
-float_man(Ds, 0, Dc) ->
- {Cs,C} = float_man(Ds, Dc),
- {[$.|Cs],C};
-float_man([D|Ds], I, Dc) ->
- case float_man(Ds, I-1, Dc) of
- {Cs,true} when D =:= $9 -> {[$0|Cs],true};
- {Cs,true} -> {[D+1|Cs],false};
- {Cs,false} -> {[D|Cs],false}
- end;
-float_man([], I, Dc) -> %Pad with 0's
- {string:chars($0, I, [$.|string:chars($0, Dc)]),false}.
-
-float_man([D|_Ds], 0) when D >= $5 -> {[],true};
-float_man([_|_], 0) -> {[],false};
-float_man([D|Ds], Dc) ->
- case float_man(Ds, Dc-1) of
- {Cs,true} when D =:= $9 -> {[$0|Cs],true};
- {Cs,true} -> {[D+1|Cs],false};
- {Cs,false} -> {[D|Cs],false}
- end;
-float_man([], Dc) -> {string:chars($0, Dc),false}. %Pad with 0's
-
-%% float_exp(Exponent) -> [Char].
-%% Generate the exponent of a floating point number. Alwayd include sign.
-
-float_exp(E) when E >= 0 ->
- [$e,$+|integer_to_list(E)];
-float_exp(E) ->
- [$e|integer_to_list(E)].
-
-%% fwrite_f(FloatData, Field, Adjust, Precision, PadChar)
-
-fwrite_f(Fl, none, Adj, none, Pad) -> %Default values
- fwrite_f(Fl, none, Adj, 6, Pad);
-fwrite_f(Fl, none, _Adj, P, _Pad) when P >= 1 ->
- float_f(Fl, float_data(Fl), P);
-fwrite_f(Fl, F, Adj, none, Pad) ->
- fwrite_f(Fl, F, Adj, 6, Pad);
-fwrite_f(Fl, F, Adj, P, Pad) when P >= 1 ->
- adjust_error(float_f(Fl, float_data(Fl), P), F, Adj, F, Pad).
-
-float_f(Fl, Fd, P) when Fl < 0.0 ->
- [$-|float_f(-Fl, Fd, P)];
-float_f(Fl, {Ds,E}, P) when E =< 0 ->
- float_f(Fl, {string:chars($0, -E+1, Ds),1}, P); %Prepend enough 0's
-float_f(_Fl, {Ds,E}, P) ->
- case float_man(Ds, E, P) of
- {Fs,true} -> "1" ++ Fs; %Handle carry
- {Fs,false} -> Fs
- end.
-
-%% float_data([FloatChar]) -> {[Digit],Exponent}
-
-float_data(Fl) ->
- float_data(float_to_list(Fl), []).
-
-float_data([$e|E], Ds) ->
- {reverse(Ds),list_to_integer(E)+1};
-float_data([D|Cs], Ds) when D >= $0, D =< $9 ->
- float_data(Cs, [D|Ds]);
-float_data([_D|Cs], Ds) ->
- float_data(Cs, Ds).
-
-
-%% fwrite_g(Float, Field, Adjust, Precision, PadChar)
-%% Use the f form if Float is > 0.1 and < 10^4, else the e form.
-%% Precision always means the # of significant digits.
-
-fwrite_g(Fl) ->
- fwrite_g(Fl, none, right, none, $\s).
-
-fwrite_g(Fl, F, Adj, none, Pad) ->
- fwrite_g(Fl, F, Adj, 6, Pad);
-fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 0.1 ->
- fwrite_e(Fl, F, Adj, P, Pad);
-fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 1.0 ->
- fwrite_f(Fl, F, Adj, P, Pad);
-fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 10.0 ->
- fwrite_f(Fl, F, Adj, P-1, Pad);
-fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 100.0 ->
- fwrite_f(Fl, F, Adj, P-2, Pad);
-fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 1000.0 ->
- fwrite_f(Fl, F, Adj, P-3, Pad);
-fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 10000.0 ->
- fwrite_f(Fl, F, Adj, P-4, Pad);
-fwrite_g(Fl, F, Adj, P, Pad) ->
- fwrite_e(Fl, F, Adj, P, Pad).
-
-%% string(String, Field, Adjust, Precision, PadChar)
-
-string(S, none, _Adj, none, _Pad) -> S;
-string(S, F, Adj, none, Pad) ->
- string(S, F, Adj, erlang:min(flat_length(S), F), Pad);
-string(S, none, _Adj, P, Pad) ->
- string:left(flatten(S), P, Pad);
-string(S, F, Adj, P, Pad) when F >= P ->
- adjust(string:left(flatten(S), P, Pad), string:chars(Pad, F - P), Adj).
-
-%% char(Char, Field, Adjust, Precision, PadChar) -> [Char].
-
-char(C, none, _Adj, none, _Pad) -> [C];
-char(C, F, _Adj, none, _Pad) -> string:chars(C, F);
-char(C, none, _Adj, P, _Pad) -> string:chars(C, P);
-char(C, F, Adj, P, Pad) when F >= P ->
- adjust(string:chars(C, P), string:chars(Pad, F - P), Adj).
-
-%% newline(Field, Adjust, Precision, PadChar) -> [Char].
-
-newline(none, _Adj, _P, _Pad) -> "\n";
-newline(F, right, _P, _Pad) -> string:chars($\n, F).
-
-%% adjust_error([Char], Field, Adjust, Max, PadChar) -> [Char].
-%% Adjust the characters within the field if length less than Max padding
-%% with PadChar.
-
-adjust_error(Cs, F, Adj, M, Pad) ->
- L = flat_length(Cs),
- if
- L > M ->
- adjust(string:chars($*, M), string:chars(Pad, F - M), Adj);
- true ->
- adjust(Cs, string:chars(Pad, F - L), Adj)
- end.
-
-adjust(Data, Pad, left) -> [Data,Pad];
-adjust(Data, Pad, right) -> [Pad,Data].
-
-%%
-%% Utilities
-%%
-
-reverse(List) ->
- reverse(List, []).
-
-reverse([H|T], Stack) ->
- reverse(T, [H|Stack]);
-reverse([], Stack) -> Stack.
-
-%% flatten(List)
-%% Flatten a list.
-
-flatten(List) -> flatten(List, []).
-
-flatten([H|T], Cont) when is_list(H) ->
- flatten(H, [T|Cont]);
-flatten([H|T], Cont) ->
- [H|flatten(T, Cont)];
-flatten([], [H|Cont]) -> flatten(H, Cont);
-flatten([], []) -> [].
-
-%% flat_length(List)
-%% Calculate the length of a list of lists.
-
-flat_length(List) -> flat_length(List, 0).
-
-flat_length([H|T], L) when is_list(H) ->
- flat_length(H, flat_length(T, L));
-flat_length([_|T], L) ->
- flat_length(T, L + 1);
-flat_length([], L) -> L.
diff --git a/lib/tv/src/tv_io_lib_pretty.erl b/lib/tv/src/tv_io_lib_pretty.erl
deleted file mode 100644
index c19277d006..0000000000
--- a/lib/tv/src/tv_io_lib_pretty.erl
+++ /dev/null
@@ -1,171 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_io_lib_pretty).
-
-
-
--export([pretty_print/4]).
-
-%% pretty_print(Term, Column, LineLength, Depth) -> [Chars]
-%% Depth = -1 gives unlimited print depth. Use tv_io_lib:write for atomic terms.
-
-pretty_print(_, _, _, 0) -> "...";
-pretty_print([], _, _, _) -> "[]";
-pretty_print({}, _, _, _) -> "{}";
-pretty_print(List, Col, Ll, D) when is_list(List) ->
- case tv_io_lib:printable_list(List) of
- true ->
- tv_io_lib:write_string(List, $");
- false ->
- Len = write_length(List, D, 0, Ll - Col),
- if
- D =:= 1 -> "[...]";
- Len + Col < Ll ->
- write(List, D);
- true ->
- [$[,
- [pretty_print(hd(List), Col + 1, Ll, D - 1)|
- pretty_print_tail(tl(List), Col + 1, Ll, D - 1)],
- $]]
- end
- end;
-pretty_print(Fun, _Col, _Ll, _D) when is_function(Fun) ->
- tv_io_lib:write(Fun);
-pretty_print(Tuple, Col, Ll, D) when is_tuple(Tuple) ->
- Len = write_length(Tuple, D, 0, Ll - Col),
- if
- D =:= 1 -> "{...}";
- Len + Col < Ll ->
- write(Tuple, D);
- is_atom(element(1, Tuple)), size(Tuple) > 1 ->
- print_tag_tuple(Tuple, Col, Ll, D);
- true ->
- [${,
- [pretty_print(element(1, Tuple), Col + 1, Ll, D - 1)|
- pretty_print_tail(tl(tuple_to_list(Tuple)), Col + 1, Ll, D - 1)],
- $}]
- end;
-pretty_print(Term, _Col, _Ll, D) -> tv_io_lib:write(Term, D).
-
-%% print_tag_tuple(Tuple, Column, LineLength, Depth) -> [Char]
-%% Print a tagged tuple by indenting the rest of the elements differently
-%% to the tag. Start beside the tag if start column not too far to
-%% the right. Tuple has size >= 2.
-
-print_tag_tuple(Tuple, Col, Ll, D) ->
- Tag = tv_io_lib:write_atom(element(1, Tuple)),
- Tlen = length(Tag),
- Tcol = Col + Tlen + 2,
- if
- Tcol >= Ll div 2, Tlen > 2 ->
- [${,Tag,
- pretty_print_tail(tl(tuple_to_list(Tuple)), Col + 4, Ll, D - 2),
- $}];
- true ->
- [${,Tag,$,,
- [pretty_print(element(2, Tuple), Col + Tlen + 2, Ll, D - 2)|
- pretty_print_tail(tl(tl(tuple_to_list(Tuple))), Tcol, Ll, D - 3)],
- $}]
- end.
-
-%% pretty_print_tail([Element], Column, LineLength, D) -> [Char]
-%% Pretty print the elements of a list or tuple.
-
-pretty_print_tail([], _Col, _Ll, _D) -> "";
-pretty_print_tail(_Es, _Col, _Ll, 1) -> "|...";
-pretty_print_tail([E|Es], Col, Ll, D) ->
- [$,,nl_indent(Col-1),
- pretty_print(E, Col, Ll, D-1)|
- pretty_print_tail(Es, Col, Ll, D-1)];
-pretty_print_tail(E, Col, Ll, D) ->
- [$|,nl_indent(Col-1),pretty_print(E, Col, Ll, D-1)].
-
-%% write(Term, Depth) -> [Char]
-%% Write a term down to Depth on one line. Use tv_io_lib:write/2 for
-%% atomic terms.
-
-write(_, 0) -> "...";
-write([], _) -> "[]";
-write({}, _) -> "{}";
-write(List, D) when is_list(List) ->
- case tv_io_lib:printable_list(List) of
- true ->
- tv_io_lib:write_string(List, $");
- false ->
- if
- D =:= 1 -> "[...]";
- true ->
- [$[,
- [write(hd(List), D-1)|write_tail(tl(List), D-1)],
- $]]
- end
- end;
-write(Fun, _D) when is_function(Fun) -> tv_io_lib:write(Fun); %Must catch this first
-write(T, D) when is_tuple(T) ->
- if
- D =:= 1 -> "{...}";
- true ->
- [${,
- [write(element(1, T), D-1)|write_tail(tl(tuple_to_list(T)), D-1)],
- $}]
- end;
-write(Term, D) -> tv_io_lib:write(Term, D).
-
-write_tail([], _D) -> "";
-write_tail(_Es, 1) -> "|...";
-write_tail([E|Es], D) ->
- [$,,write(E, D - 1)|write_tail(Es, D - 1)];
-write_tail(E, D) ->
- [$|,write(E, D - 1)].
-
-%% write_length(Term, Depth, Accumulator, MaxLength) -> integer()
-%% Calculate the print length of a term, but exit when length becomes
-%% greater than MaxLength.
-
-write_length(_T, _D, Acc, Max) when Acc > Max -> Acc;
-write_length(_T, 0, Acc, _Max) -> Acc + 3;
-write_length([], _, Acc, _) -> Acc + 2;
-write_length({}, _, Acc, _) -> Acc + 2;
-write_length(List, D, Acc, Max) when is_list(List) ->
- case tv_io_lib:printable_list(List) of
- true ->
- Acc + length(tv_io_lib:write_string(List, $"));
- false ->
- write_length_list(List, D, Acc, Max)
- end;
-write_length(Fun, _D, Acc, _Max) when is_function(Fun) ->
- Acc + length(tv_io_lib:write(Fun));
-write_length(Tuple, D, Acc, Max) when is_tuple(Tuple) ->
- write_length_list(tuple_to_list(Tuple), D, Acc, Max);
-write_length(Term, _D, Acc, _Max) ->
- Acc + length(tv_io_lib:write(Term)).
-
-write_length_list(_, _, Acc, Max) when Acc > Max -> Acc;
-write_length_list([], _, Acc, _) -> Acc + 1; %]
-write_length_list(_Es, 1, Acc, _) -> Acc + 5; %|...]
-write_length_list([E|Es], D, Acc, Max) ->
- write_length_list(Es,
- D - 1,
- write_length(E, D - 1, Acc + 1, Max),
- Max);
-write_length_list(E, D, Acc, Max) ->
- write_length(E, D - 1, Acc + 2, Max). %| ]
-
-
-
-nl_indent(_) -> "".
diff --git a/lib/tv/src/tv_ip.erl b/lib/tv/src/tv_ip.erl
deleted file mode 100644
index 9f66917362..0000000000
--- a/lib/tv/src/tv_ip.erl
+++ /dev/null
@@ -1,242 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_ip).
--compile([{nowarn_deprecated_function,{gs,canvas,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--export([ip/1]).
-
-
-
--include("tv_int_msg.hrl").
-
-
--define(NOF_LABELS, 25).
-
--define(DEFAULT_BG_COLOR, {217, 217, 217}).
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-ip(_Master) ->
- W = gs:window(win, gs:start(), [{width, 302},
- {height, 38},
- {bg, ?DEFAULT_BG_COLOR},
- {title, "Launching..."}
- ]),
- C = gs:canvas(W, [{width, 40},
- {height, 35},
- {x, 0},
- {bg, {255, 255, 255}}
- ]),
- gs:create(image, C, [{load_gif, code:priv_dir(tv) ++ "/erlang.gif"}]),
- gs:label(W, [{width, 252},
- {height, 12},
- {x, 47},
- {y, 23},
- {bg, {0, 0, 0}},
- {cursor, arrow}
- ]),
-
- LabelList = create_labels(?NOF_LABELS, W, 48),
-
- L = gs:label(W, [{width, 250},
- {height, 18},
- {x, 47},
- {y, 0},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {align, w}
- ]),
- gs:config(win, [{map, true}]),
- loop(1, LabelList, L).
-
-
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_labels(0, _WinId, _Xpos) ->
- [];
-create_labels(N, WinId, Xpos) ->
- Width = 10,
- Xdiff = Width,
- LabelId = gs:label(WinId, [{width, Width},
- {height, 10},
- {x, Xpos},
- {y, 24},
- {bg, {235, 235, 235}},
- {cursor, arrow}
- ]),
-
- [LabelId | create_labels(N - 1, WinId, Xpos + Xdiff)].
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-loop(N, LabelList, L) ->
- receive
- Msg ->
- case Msg of
-
- #ip_update{nof_elements_to_mark = X, text = Text} ->
- update_window(LabelList, N, N + X, L, Text),
- loop(N + X, LabelList, L);
-
- #ip_quit{} ->
- update_labels(LabelList, N, ?NOF_LABELS),
- receive
- after 1000 ->
- done
- end,
- done;
-
- _Other ->
- loop(N, LabelList, L)
- end
- end.
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_window(LabelList, N, Hi, LblId, Text) ->
- gs:config(win, [raise]),
- gs:config(LblId, [{label, {text, Text}}]),
- update_labels(LabelList, N, Hi).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_labels(_LabelList, N, _Hi) when N > ?NOF_LABELS ->
- done;
-update_labels(_LabelList, N, Hi) when N >= Hi ->
- done;
-update_labels(LabelList, N, Hi) ->
- LabelId = lists:nth(N, LabelList),
- gs:config(LabelId, [{bg, {0, 0, 255}}]),
- update_labels(LabelList, N + 1, Hi).
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/tv/src/tv_main.erl b/lib/tv/src/tv_main.erl
deleted file mode 100644
index b6ffbd7c49..0000000000
--- a/lib/tv/src/tv_main.erl
+++ /dev/null
@@ -1,1821 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_main).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,frame,3}},
- {nowarn_deprecated_function,{gs,grid,3}},
- {nowarn_deprecated_function,{gs,gridline,2}},
- {nowarn_deprecated_function,{gs,label,3}},
- {nowarn_deprecated_function,{gs,menu,2}},
- {nowarn_deprecated_function,{gs,menubar,3}},
- {nowarn_deprecated_function,{gs,menubutton,2}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,menuitem,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--export([start/0,
- init/0
- ]).
-
-
--export([get_ets_tables/1,
- get_mnesia_tables/1
- ]).
-
-
-
--include("tv_main.hrl").
--include("tv_int_msg.hrl").
--include("tv_pd_int_msg.hrl").
--include("tv_pd_int_def.hrl").
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-start() ->
- spawn(?MODULE, init, []).
-
-
-
-init() ->
- process_flag(trap_exit,true),
- %% OK, so it's *BAD* to use the process dictionary...
- %% So why have I used it? Because it is simple to remove the haiku-functionality,
- %% if that is desired. Otherwise a lot of functions (the parameters) would have
- %% to be changed.
- put(error_msg_mode, ?ERROR_MSG_MODE),
- KindOfTable = ets,
- SysTabHidden = true,
- UnreadHidden = true,
- SortKey = ?NAME_COL,
- CurrNode = node(),
- Children = start_tv_nodewin(CurrNode),
- {MarkedCell, TempGridLines, WinSize, ShortcutList} = create_window([]),
- Tables = get_tables(CurrNode, KindOfTable, UnreadHidden, SysTabHidden,SortKey),
- gs:config(grid, [{rows, {1, get_nof_rows(length(Tables),
- gs:read(grid, height))}}]),
- GridLines = update_gridlines(Tables, TempGridLines, 1),
- gs:config(win, [{map, true}, {cursor,arrow}]),
- %% To avoid unpleasant error/exit messages, we surround the loop with a catch.
- catch loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, ShortcutList,
- UnreadHidden, SysTabHidden, SortKey, Children).
-
-
-
-start_tv_nodewin(CurrNode) ->
- NodewinPid = tv_nodewin:start(CurrNode, get(error_msg_mode)),
- [{NodewinPid, tv_nodewin, CurrNode}].
-
-
-
-
-
-get_ets_tables(SysTabHidden) ->
- Tables = ets:all(),
- get_ets_table_info(Tables,
- hidden_tables(ets, SysTabHidden) ++
- current_mnesia_tables(SysTabHidden),
- owners_to_hide(ets, SysTabHidden),
- []).
-
-
-
-get_mnesia_tables(SysTabHidden) ->
- Tables = mnesia:system_info(tables),
- get_mnesia_table_info(Tables -- hidden_tables(mnesia, SysTabHidden),
- owners_to_hide(mnesia, SysTabHidden),
- []).
-
-
-
-
-
-owners_to_hide(ets, true) ->
- ?SYSTEM_OWNERS;
-owners_to_hide(ets, false) ->
- [];
-owners_to_hide(mnesia, true) ->
- [];
-owners_to_hide(mnesia, false) ->
- [].
-
-
-
-
-get_mnesia_table_info([], _OwnersToHide, Acc) ->
- lists:keysort(?NAME_ELEM, Acc);
-get_mnesia_table_info([TabId | Tail], OwnersToHide, Acc) ->
- case catch get_mnesia_owner_size(TabId) of
- {'EXIT', _Reason} ->
- %% Ignore tables ceasing to exist.
- %% Nodedown errors caught above!
- get_mnesia_table_info(Tail, OwnersToHide, Acc);
- {OwnerPid, OwnerName, Size} ->
- case lists:member(OwnerName, OwnersToHide) of
- true ->
- get_mnesia_table_info(Tail, OwnersToHide, Acc);
- false ->
- Readable = not(lists:member(TabId, ?UNREADABLE_MNESIA_TABLES)),
- get_mnesia_table_info(Tail,
- OwnersToHide,
- [{TabId, {notext}, {notext}, Readable,
- OwnerPid, OwnerName, Size} | Acc])
- end
- end.
-
-
-
-
-get_mnesia_owner_size(TabId) ->
- {OwnerPid, OwnerName} =
- case catch mnesia:table_info(TabId, owner) of
- Pid when is_pid(Pid) ->
- case lists:keysearch(registered_name, 1, process_info(Pid)) of
- false ->
- {Pid, {notext}};
- {value, {registered_name, ProcName}} ->
- {Pid, ProcName}
- end;
- _Other ->
- {{notext}, {notext}}
- end,
- Size = mnesia:table_info(TabId, size),
- {OwnerPid, OwnerName, Size}.
-
-
-
-
-
-
-
-hidden_tables(_Any, true) ->
- ?SYSTEM_TABLES ++ ?MNESIA_TABLES;
-hidden_tables(ets, _SysTabHidden) ->
- ?MNESIA_TABLES;
-hidden_tables(mnesia, _SysTabHidden) ->
- [].
-
-
-
-
-get_tables(Node, KindOfTable, UnreadHidden, SysTabHidden,SortKey) ->
- LocalNode = (Node =:= node()),
- Tables =
- case catch get_table_list(Node,LocalNode,KindOfTable,SysTabHidden) of
- Result when is_list(Result) ->
- case UnreadHidden of
- true ->
- lists:filter(fun(H) ->
- element(?READABLE_ELEM, H)
- end,
- Result);
- _Other ->
- Result
- end;
- Error ->
- analyze_error(Error, Node, undefined),
- []
- end,
- case SortKey of
- ?PROCNAME_ELEM ->
- lists:keysort(SortKey,
- lists:keysort(?PID_ELEM, Tables));
- _OtherCol ->
- lists:keysort(SortKey,
- lists:keysort(?NAME_ELEM, Tables))
- end.
-
-
-
-
-
-get_ets_table_info([], _TablesToHide, _OwnersToHide, Acc) ->
- lists:keysort(?ID_ELEM, Acc);
-get_ets_table_info([TabId | Tail], TablesToHide, OwnersToHide, Acc) ->
- case catch get_ets_name_owner_protection(TabId) of
- {'EXIT', _Reason} ->
- %% Ignore tables ceasing to exist.
- %% Nodedown errors caught above!
- get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc);
- {Name, NamedTable, Id, Readable, OwnerPid, OwnerName, Size} ->
- case lists:member(Name, TablesToHide) of
- true ->
- get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc);
- false ->
- case lists:member(OwnerName, OwnersToHide) of
- true ->
- get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc);
- false ->
- get_ets_table_info(Tail, TablesToHide, OwnersToHide,
- [{Name,NamedTable,Id,Readable,
- OwnerPid,OwnerName,Size} | Acc])
- end
- end
- end.
-
-
-
-get_ets_name_owner_protection(TabId) ->
- Name = ets:info(TabId, name),
- OwnerPid = ets:info(TabId, owner),
- Readable = case ets:info(TabId, protection) of
- private ->
- false;
- _Other ->
- true
- end,
- Size = ets:info(TabId, size),
- {NamedTable,Id} = case ets:info(TabId, named_table) of
- true ->
- {true,{notext}};
- false ->
- {false, TabId}
- end,
- PName = case lists:keysearch(registered_name, 1, process_info(OwnerPid)) of
- false ->
- {notext};
- {value, {registered_name, ProcName}} ->
- ProcName
- end,
- {Name, NamedTable, Id, Readable, OwnerPid, PName, Size}.
-
-
-
-
-
-
-current_mnesia_tables(SysTabHidden) ->
- case catch get_table_list(node(), true, mnesia, SysTabHidden) of
- Result when is_list(Result) ->
- lists:map(fun(H) ->
- element(?NAME_ELEM, H)
- end,
- Result);
- nodedown ->
- handle_error(nodedown, node(), undefined),
- [];
- _Other ->
- []
- end.
-
-
-
-
-get_table_list(_Node, true, ets, SysTabHidden) ->
- get_ets_tables(SysTabHidden);
-get_table_list(Node, false, ets, SysTabHidden) ->
- case rpc:block_call(Node, ?MODULE, get_ets_tables, [SysTabHidden]) of
- {badrpc, Reason} ->
- throw({badrpc,Reason});
- Result ->
- Result
- end;
-get_table_list(_Node, true, mnesia, SysTabHidden) ->
- get_mnesia_tables(SysTabHidden);
-get_table_list(Node, false, mnesia, SysTabHidden) ->
- case rpc:block_call(Node, ?MODULE, get_mnesia_tables, [SysTabHidden]) of
- {badrpc,Reason} ->
- throw({badrpc,Reason});
- Result ->
- Result
- end.
-
-
-
-
-analyze_error(Cause, Node, Table) ->
- case Cause of
- {badrpc, {'EXIT', {badarg,_Reason}}} ->
- done; %% Table has ceased to exist.
- {'EXIT', {badarg, {ets,local_info,_Args}}} ->
- done;
-
- {badrpc, nodedown} ->
- handle_error(nodedown, Node, Table);
- {'EXIT', nodedown} ->
- handle_error(nodedown, Node, Table);
-
- {'EXIT', {aborted, {node_not_running,_ErrNode}}} ->
- handle_error(mnesia_not_started, Node, Table);
- {'EXIT', {'EXIT', {aborted, {node_not_running,_ErrNode}}}} ->
- handle_error(mnesia_not_started, Node, Table);
- {badrpc, {'EXIT', {aborted, {node_not_running,_ErrNode}}}} ->
- handle_error(mnesia_not_started, Node, Table);
- {'EXIT', {undef, {mnesia,_Fcn,_Args,_}}} ->
- handle_error(mnesia_not_started, Node, Table);
-
- {'EXIT', Reason} ->
- handle_error({unexpected_error,Reason}, Node, Table);
- Error when is_tuple(Error) ->
- handle_error({unexpected_error,Error}, Node, Table)
- end.
-
-
-
-handle_error(mnesia_not_started, _Node, _Table) ->
- gs:config(win, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(win, "TV Notification", ["Mnesia not started!"]);
- haiku ->
- tv_utils:notify(win, "TV Notification", ["Mnesia is stopped.",
- "We wish to reach all data",
- "But we never will."])
- end;
-handle_error(nodedown, _Node, _Table) ->
- gs:config(win, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(win, "TV Notification", ["The selected node is down!"]);
- haiku ->
- Msg = ["With searching comes loss",
- "And the presence of absence:",
- "Node is down."],
- tv_utils:notify(win, "TV Notification", Msg)
- end,
- self() ! nodedown;
-handle_error({unexpected_error,Cause}, _Node, _Table) ->
- io:format("Unexpected error: ~p~n", [Cause]),
- gs:config(win, [beep]).
-
-
-
-
-loop(KindOfTable,CurrNode,MarkedCell,GridLines,
- WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
- receive
-
- {gs, Gridline, click, {grid,Readable}, [Col,Row,Text | _]} when Text =/= "" ->
- unmark_cell(MarkedCell, Tables),
- NewMarkedCell = mark_cell({Gridline, Col, Row}, MarkedCell, Readable),
- loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {gs, _Gridline, click, {grid,_Readable}, [_Col,_Row,"" | _]} ->
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {gs, Gridline, doubleclick, {grid,Data}, [?NAME_COL,Row,Text | _]} when Text =/= "" ->
- unmark_cell(MarkedCell, Tables),
- NewMarkedCell = mark_cell({Gridline, ?NAME_COL, Row}, undefined, Data),
- {Table, Name, Readable} = get_table_id(KindOfTable, Row, Tables),
- case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of
- Children ->
- {FinalMarkedCell, NewTables, NewGridLines} =
- refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines,
- UnreadHidden,SysTabHidden,SortKey, Children),
- loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables,
- Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- NewChildren ->
- loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,NewChildren)
- end;
-
-
- {gs, Gridline, doubleclick, {grid,Data}, [?ID_COL,Row,Text | _]} when Text =/= "" ->
- unmark_cell(MarkedCell, Tables),
- NewMarkedCell = mark_cell({Gridline, ?ID_COL, Row}, undefined, Data),
- {Table, Name, Readable} = get_table_id(KindOfTable, Row, Tables),
- case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of
- Children ->
- {FinalMarkedCell, NewTables, NewGridLines} =
- refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines,
- UnreadHidden,SysTabHidden,SortKey, Children),
- loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables,
- Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- NewChildren ->
- loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,NewChildren)
- end;
-
-
- {gs, Gridline, doubleclick, {grid,Data}, [?INFO_COL,Row,Text | _]} when Text =/= "" ->
- unmark_cell(MarkedCell, Tables),
- NewMarkedCell = mark_cell({Gridline, ?INFO_COL, Row}, undefined, Data),
- {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables),
- case start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children) of
- Children ->
- {FinalMarkedCell, NewTables, NewGridLines} =
- refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines,
- UnreadHidden,SysTabHidden,SortKey, Children),
- loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables,
- Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- NewChildren ->
- loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,NewChildren)
- end;
-
-
- {gs, Gridline, doubleclick, {grid,Data}, [?PID_COL,Row,Text | _]} when Text =/= "" ->
- unmark_cell(MarkedCell, Tables),
- NewMarkedCell = mark_cell({Gridline, ?PID_COL, Row}, undefined, Data),
- OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)),
- NewChildren = start_pman(OwnerPid, Children),
- loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey, NewChildren);
-
-
- {gs, Gridline, doubleclick, {grid,Data}, [?PROCNAME_COL,Row,Text | _]} when Text =/= "" ->
- unmark_cell(MarkedCell, Tables),
- NewMarkedCell = mark_cell({Gridline, ?PROCNAME_COL, Row}, undefined, Data),
- OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)),
- NewChildren = start_pman(OwnerPid, Children),
- loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey, NewChildren);
-
-
-%% {gs, win, configure, _Data, [Width, Height | _]} when {Width,Height} /= WinSize ->
- Msg0 = {gs, win, configure, _Data, [Width0, Height0 | _]}
- when {Width0,Height0} =/= WinSize ->
- {gs, win, configure, _, [Width,Height|_]} = flush_msgs(Msg0),
-
- NewSize = resize_window(Width, Height, length(Tables)),
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,NewSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {gs, _Id, click, update, _Args} ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTables, NewGridLines} =
- update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey),
- update_tv_info(Children),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {gs, _Id, click, open_table, _Args} ->
- {Table, Name, Readable} = get_table_id(KindOfTable, element(3, MarkedCell),
- Tables),
- case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of
- Children ->
- {NewMarkedCell, NewTables, NewGridLines} =
- refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,
- UnreadHidden,SysTabHidden,SortKey, Children),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,
- Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- NewChildren ->
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,NewChildren)
- end;
-
-
- {gs, _Id, click, new_table, _Args} ->
- NewChildren = start_tv_new_table(CurrNode, Children),
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,NewChildren);
-
-
- {gs, _Id, click, select_node, _Args} ->
- show_tv_nodewin(Children),
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {gs, _Id, click, show_mnesia, _Args} when KindOfTable =:= ets ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- gs:config(label2, [{fg, ?DISABLED_COLOR}]),
- gs:config(sort_table_id, [{enable, false}]),
- NewSortKey =
- case SortKey of
- ?ID_ELEM ->
- gs:config(sort_table_name, [{select,true}]),
- ?NAME_ELEM;
- _Other ->
- SortKey
- end,
- {NewTables, NewGridLines} =
- update_grid(mnesia, CurrNode, GridLines, UnreadHidden, SysTabHidden, NewSortKey),
- gs:config(win, [{cursor,arrow}]),
- loop(mnesia,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,SysTabHidden,NewSortKey,Children);
-
-
- {gs, _Id, click, show_ets, _Args} when KindOfTable =:= mnesia ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- gs:config(label2, [{fg, ?NORMAL_FG_COLOR}]),
- gs:config(label3, [{fg, ?NORMAL_FG_COLOR}]),
- gs:config(label4, [{fg, ?NORMAL_FG_COLOR}]),
- {NewTables, NewGridLines} =
- update_grid(ets, CurrNode, GridLines, UnreadHidden, SysTabHidden,SortKey),
- %% gs:config(show_unreadable, [{enable, true},
- %% {select, not(UnreadHidden)}]),
- gs:config(sort_table_id, [{enable, true}]),
- gs:config(win, [{cursor,arrow}]),
- loop(ets,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {gs, _Id, click, show_system, _Args} when SysTabHidden ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTables, NewGridLines}
- = update_grid(KindOfTable, CurrNode, GridLines, UnreadHidden, false, SortKey),
- gs:config(show_system, [{data, hide_system}]),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,false,SortKey,Children);
-
-
- {gs, _Id, click, hide_system, _Args} when not SysTabHidden ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTables, NewGridLines} =
- update_grid(KindOfTable, CurrNode, GridLines, UnreadHidden, true, SortKey),
- gs:config(show_system, [{label, {text, " System Tables "}},
- {data, show_system}]),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,true,SortKey,Children);
-
-
- {gs, _Id, click, show_unreadable, _Args} when UnreadHidden ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTables, NewGridLines}
- = update_grid(KindOfTable, CurrNode, GridLines, false, SysTabHidden, SortKey),
- gs:config(show_unreadable, [{data, hide_unreadable}]),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- false,SysTabHidden,SortKey,Children);
-
-
- {gs, _Id, click, hide_unreadable, _Args} when not UnreadHidden ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTables, NewGridLines} =
- update_grid(KindOfTable, CurrNode, GridLines, true, SysTabHidden, SortKey),
- gs:config(show_unreadable, [{label, {text, " Unreadable Tables "}},
- {data, show_unreadable}]),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- true,SysTabHidden,SortKey,Children);
-
-
- {gs, _Id, click, show_info, _Args} ->
- {Table, _Name, _Readable} = get_table_id(KindOfTable, element(3,MarkedCell),
- Tables),
- case start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children) of
- Children ->
- {NewMarkedCell, NewTables, NewGridLines} =
- refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,
- UnreadHidden,SysTabHidden,SortKey, Children),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,
- Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- NewChildren ->
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,NewChildren)
- end;
-
-
- {gs, _Id, click, sort_table_name, _Args} when SortKey =/= ?NAME_ELEM ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTables, NewGridLines} =
- update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?NAME_ELEM),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,SysTabHidden,?NAME_ELEM,Children);
-
-
- {gs, _Id, click, sort_table_id, _Args} when SortKey =/= ?ID_ELEM ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTables, NewGridLines} =
- update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?ID_ELEM),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,SysTabHidden,?ID_ELEM,Children);
-
-
- {gs, _Id, click, sort_owner_name, _Args} when SortKey =/= ?PROCNAME_ELEM ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTables, NewGridLines} =
- update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,
- ?PROCNAME_ELEM),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,SysTabHidden,?PROCNAME_ELEM,Children);
-
-
- {gs, _Id, click, sort_owner_pid, _Args} when SortKey =/= ?PID_ELEM ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTables, NewGridLines} =
- update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?PID_ELEM),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,SysTabHidden,?PID_ELEM,Children);
-
-
- {gs, _Id, click, trace_process, _Args} ->
- OwnerPid = element(?PID_ELEM, lists:nth(element(3,MarkedCell), Tables)),
- NewChildren = start_pman(OwnerPid, Children),
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,NewChildren);
-
-
- {gs, _Id, click, help_button, _Args} ->
- HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]),
- tool_utils:open_help(win, HelpFile),
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {gs, _Id, click, otp_help_button, _Args} ->
- IndexFile = filename:join([code:root_dir(), "doc", "index.html"]),
- tool_utils:open_help(win, IndexFile),
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {gs, win, configure, _Data, _Args} ->
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {gs, _Id, click, exit_button, _Args} ->
- lists:foreach(
- fun({Pid,pman,_OP}) ->
- exit(Pid,kill);
- (_) ->
- done
- end,
- Children),
- exit(normal);
-
-
- {gs, _Id, click, show_haiku, _Args} ->
- gs:config(win, [{cursor,busy}]),
- gs:config(show_haiku, [{data, hide_haiku}]),
- lists:foreach(
- fun({Pid,tv_info,_Data}) ->
- Pid ! {error_msg_mode,haiku};
- ({Pid,tv_browser,_Data}) ->
- Pid ! {error_msg_mode,haiku};
- ({Pid,tv_nodewin,_Data}) ->
- Pid ! {error_msg_mode,haiku};
- ({Pid,tv_new_table,_Data}) ->
- Pid ! {error_msg_mode,haiku};
- (_Other) ->
- done
- end,
- Children),
- put(error_msg_mode, haiku),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {gs, _Id, click, hide_haiku, _Args} ->
- gs:config(win, [{cursor,busy}]),
- gs:config(show_haiku, [{data, show_haiku}]),
- lists:foreach(
- fun({Pid,tv_info,_Data}) ->
- Pid ! {error_msg_mode,normal};
- ({Pid,tv_browser,_Data}) ->
- Pid ! {error_msg_mode,normal};
- ({Pid,tv_nodewin,_Data}) ->
- Pid ! {error_msg_mode,normal};
- ({Pid,tv_new_table,_Data}) ->
- Pid ! {error_msg_mode,normal};
- (_Other) ->
- done
- end,
- Children),
- put(error_msg_mode, normal),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {gs, win, destroy, _Data, _Args} ->
- lists:foreach(
- fun({Pid,pman,_OP}) ->
- exit(Pid,kill);
- (_) ->
- done
- end,
- Children),
- exit(normal);
-
-
- {gs, win, keypress, _Data, [Key, _, _, 1 | _]} ->
- case lists:keysearch(Key, 1, Shortcuts) of
- {value, {Key, Value}} ->
- handle_keypress(Value,KindOfTable,CurrNode,MarkedCell,
- GridLines,WinSize,Tables, Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
- false ->
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children)
- end;
-
-
- {gs, win, keypress, _Data, _Args} ->
- loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {tv_new_node, _Sender, NewCurrNode} ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTables, NewGridLines} =
- update_grid(KindOfTable,NewCurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey),
- update_tv_info(Children),
- update_tv_browser(Children),
- NewChildren =
- case replace_node_name(NewCurrNode, CurrNode) of
- false ->
- Children;
- true ->
- update_node_name(Children)
- end,
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable,NewCurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,NewChildren);
-
-
- {tv_start_infowin, Table, Node, LocalNode, TableType} ->
- case start_tv_info(Table, Node, LocalNode, TableType, Children) of
- Children ->
- {NewMarkedCell, NewTables, NewGridLines} =
- refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,
- UnreadHidden,SysTabHidden,SortKey, Children),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,
- Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- NewChildren ->
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,NewChildren)
- end;
-
-
- {tv_update_infowin, Table, Node, _Type} ->
- case get_tv_info_pid(Table, Node, Children) of
- undefined ->
- done;
- Pid ->
- Pid ! #info_update_table_info{sender=self()}
- end,
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,
- Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
-
-
- {tv_new_table, NewTabWinPid, Node, Name, Options, KindOfTableToCreate, _Readable, false} ->
- case create_table(KindOfTableToCreate, Node, Node =:= node(), Name, Options,
- NewTabWinPid) of
- error ->
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,
- Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- _TabId ->
- case KindOfTable of
- mnesia ->
- done;
- ets ->
- self() ! {gs, tv_main, click, update, []}
- end,
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,
- Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children)
- end;
-
-
-
- {tv_new_table, NewTabWinPid, Node, Name, Options, KindOfTableToCreate, Readable, true} ->
- case create_table(KindOfTableToCreate, Node, Node =:= node(), Name, Options,
- NewTabWinPid) of
- error ->
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,
- Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- TabId ->
- case start_tv_browser(TabId,Node,Name,KindOfTableToCreate,Readable,Children) of
- Children ->
- {FinalMarkedCell, NewTables, NewGridLines} =
- case KindOfTable of
- mnesia ->
- {MarkedCell, Tables, GridLines};
- ets ->
- refresh_window(MarkedCell,Tables,KindOfTable,
- CurrNode,GridLines,UnreadHidden,
- SysTabHidden,SortKey, Children)
- end,
- loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,
- NewTables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- NewChildren ->
- case KindOfTable of
- mnesia ->
- done;
- ets ->
- self() ! {gs, tv_main, click, update, []}
- end,
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,
- Shortcuts,UnreadHidden,SysTabHidden,SortKey,NewChildren)
- end
- end;
-
-
-
- {'EXIT', Pid, _Reason} ->
- case lists:keysearch(Pid, 1, Children) of
- false ->
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,
- Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- {value, {Pid,Prog,_Data}} ->
- NewChildren =
- case Prog of
- tv_nodewin ->
- lists:keydelete(Pid, 1, Children) ++ start_tv_nodewin(CurrNode);
- _Other ->
- lists:keydelete(Pid, 1, Children)
- end,
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,
- Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,NewChildren)
- end;
-
-
- _Other ->
- loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children)
- end.
-
-
-flush_msgs(Msg0 = {gs, Win, Op, _, _}) ->
- receive Msg = {gs, Win,Op,_,_} ->
- flush_msgs(Msg)
- after 100 ->
- Msg0
- end.
-
-handle_keypress(open_table,KindOfTable,CurrNode,MarkedCell,GridLines,
- WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
- NewChildren =
- case MarkedCell of
- {undefined,_,_} ->
- case get(error_msg_mode) of
- normal ->
- gs:config(win, [beep]),
- tv_utils:notify(win, "TV Notification", "No table selected!");
- haiku ->
- Msg = ["Rather than a beep",
- "Or a rude error message",
- "These words: make a choice."],
- tv_utils:notify(win, "TV Notification", Msg)
- end,
- Children;
- _OtherCell ->
- {Table, Name, Readable} = get_table_id(KindOfTable, element(3, MarkedCell),
- Tables),
- start_tv_browser(Table, CurrNode, Name, KindOfTable, Readable, Children)
- end,
- case NewChildren of
- Children ->
- {NewMarkedCell, NewTables, NewGridLines} =
- refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,UnreadHidden,
- SysTabHidden, SortKey, Children),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,
- Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- _Other ->
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,NewChildren)
- end;
-
-
-handle_keypress(update,KindOfTable,CurrNode,MarkedCell,GridLines,
- WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTabs, NewGrLines} =
- update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey),
- update_tv_info(Children),
- gs:config(win, [{cursor,arrow}]),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGrLines,WinSize,NewTabs,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
-handle_keypress(show_mnesia,ets,CurrNode,MarkedCell,GridLines,
- WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- gs:config(label2, [{fg, ?DISABLED_COLOR}]),
- gs:config(label3, [{fg, ?DISABLED_COLOR}]),
- gs:config(label4, [{fg, ?DISABLED_COLOR}]),
- gs:config(show_unreadable, [{label, {text, " Unreadable Tables "}},
- {data, show_unreadable}]),
- %% gs:config(show_unreadable, [{enable, false},
- %% {select, false}]),
- gs:config(sort_table_id, [{enable, false}]),
- NewSortKey =
- case SortKey of
- ?ID_ELEM ->
- gs:config(sort_table_name, [{select,true}]),
- ?NAME_ELEM;
- _Other ->
- SortKey
- end,
- {NewTables, NewGridLines} =
- update_grid(mnesia,CurrNode,GridLines,UnreadHidden,SysTabHidden,NewSortKey),
- gs:config(win, [{cursor,arrow}]),
- loop(mnesia,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,SysTabHidden,NewSortKey,Children);
-
-
-
-handle_keypress(show_ets,mnesia,CurrNode,MarkedCell,GridLines,
- WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- gs:config(label2, [{fg, ?NORMAL_FG_COLOR}]),
- gs:config(label3, [{fg, ?NORMAL_FG_COLOR}]),
- gs:config(label4, [{fg, ?NORMAL_FG_COLOR}]),
- {NewTables, NewGridLines} =
- update_grid(ets,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey),
- %% gs:config(show_unreadable, [{enable, true},
- %% {select, not(UnreadHidden)}]),
- gs:config(sort_table_id, [{enable, true}]),
- gs:config(win, [{cursor,arrow}]),
- loop(ets,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
-handle_keypress(trace_process,KindOfTable,CurrNode,MarkedCell,GridLines,
- WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
- NewChildren =
- case MarkedCell of
- {_Id, ?PID_COL, Row} ->
- OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)),
- start_pman(OwnerPid, Children);
- {_Id, ?PROCNAME_COL, Row} ->
- OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)),
- start_pman(OwnerPid, Children);
- _Other ->
- Children
- end,
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey, NewChildren);
-
-
-handle_keypress(select_node,KindOfTable,CurrNode,MarkedCell,GridLines,
- WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
- show_tv_nodewin(Children),
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-
-handle_keypress(show_info,KindOfTable,CurrNode,MarkedCell,GridLines,
- WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
- NewChildren =
- case MarkedCell of
- {_Id, ?NAME_COL, Row} ->
- {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables),
- start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children);
- {_Id, ?ID_COL, Row} ->
- {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables),
- start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children);
- {_Id, ?INFO_COL, Row} ->
- {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables),
- start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children);
- _OtherCell ->
- Children
- end,
- case NewChildren of
- Children ->
- {NewMarkedCell, NewTables, NewGridLines} =
- refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,UnreadHidden,
- SysTabHidden, SortKey, Children),
- loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,
- Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children);
- _Other ->
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,NewChildren)
- end;
-
-
-handle_keypress(help_button,KindOfTable,CurrNode,MarkedCell,GridLines,
- WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
- HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]),
- tool_utils:open_help(win, HelpFile),
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children);
-
-handle_keypress(exit_button,_KindOfTable,_CurrNode,_MarkedCell,_GridLines,
- _WinSize,_Tables,_Shortcuts,_UnreadHidden,_SysTabHidden,_SortKey,Children) ->
- lists:foreach(
- fun({Pid,pman,_OP}) ->
- exit(Pid,kill);
- (_) ->
- done
- end,
- Children),
- exit(normal);
-
-
-handle_keypress(_Any,KindOfTable,CurrNode,MarkedCell,GridLines,
- WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) ->
- loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts,
- UnreadHidden,SysTabHidden,SortKey,Children).
-
-
-
-
-refresh_window(MarkedCell,Tables,KindOfTable,
- CurrNode,GridLines,UnreadHidden,SysTabHidden, SortKey, Children) ->
- gs:config(win, [{cursor,busy}]),
- NewMarkedCell = unmark_cell(MarkedCell, Tables),
- {NewTables, NewGridLines} =
- update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,
- SortKey),
- update_tv_info(Children),
- gs:config(win, [{cursor,arrow}]),
- {NewMarkedCell, NewTables, NewGridLines}.
-
-
-
-
-
-get_table_id(mnesia, Row, Tables) ->
- TabTuple = lists:nth(Row, Tables),
- Readable = element(?READABLE_ELEM, TabTuple),
- Id = element(?NAME_ELEM, TabTuple),
- {Id, Id, Readable};
-get_table_id(ets, Row, Tables) ->
- TabTuple = lists:nth(Row, Tables),
- Readable = element(?READABLE_ELEM, TabTuple),
- Name = element(?NAME_ELEM, TabTuple),
- case element(?NAMED_TABLE_ELEM, TabTuple) of
- false ->
- {element(?ID_ELEM, TabTuple), Name, Readable};
- _Other ->
- {Name, Name, Readable}
- end.
-
-
-
-replace_node_name('nonode@nohost', 'nonode@nohost') ->
- %% Still undistributed...
- false;
-replace_node_name(_Node, _OldNode) when node() =:= 'nonode@nohost' ->
- %% No longer distributed, but previously was!
- true;
-replace_node_name(_Node, 'nonode@nohost') ->
- %% The system has been distributed!
- true;
-replace_node_name(_Node, _OldNode) ->
- false.
-
-
-
-update_node_name(Children) when node() =:= 'nonode@nohost' ->
- %% We have been distributed, but no longer are!
- %% We change all node names stored to 'nonode@nohost'!
- %% This works because we *will* receive exit signals
- %% for those processes that have died on other nodes,
- %% whereupon these processes will be removed from the
- %% 'Children' list.
- lists:map(fun({Pid, Prog, {Table,_Node}}) ->
- {Pid, Prog, {Table,'nonode@nohost'}};
- (H) ->
- H
- end,
- Children);
-update_node_name(Children) ->
- %% We have become distributed!
- %% Change all occurrences of 'nonode@nohost'
- %% to the new current node name!
- HomeNode = node(),
- lists:map(fun({Pid, Prog, {Table,'nonode@nohost'}}) ->
- {Pid, Prog, {Table,HomeNode}};
- (H) ->
- H
- end,
- Children).
-
-
-
-
-show_tv_nodewin(Children) ->
- {value, {Pid,tv_nodewin,_Node}} = lists:keysearch(tv_nodewin, 2, Children),
- Pid ! show_window.
-
-
-
-update_tv_info(Children) ->
- Sender = self(),
- lists:foreach(fun({Pid,tv_info,{_Table,_Node}}) ->
- Pid ! #info_update_table_info{sender=Sender};
- (_) ->
- done
- end,
- Children).
-
-
-
-update_tv_browser(Children) ->
- lists:foreach(fun({Pid,tv_browser,{_Table,_Node}}) ->
- Pid ! check_node;
- (_) ->
- done
- end,
- Children).
-
-
-
-get_tv_info_pid(TabId,Node,Children) ->
- TvInfoChildren = [X || X <- Children, element(2,X) =:= tv_info],
- case lists:keysearch({TabId,Node}, 3, TvInfoChildren) of
- {value, {Pid, tv_info, {_Table,Node}}} ->
- Pid;
- _Other ->
- undefined
- end.
-
-
-
-start_tv_browser(Tab,Node,_Name,KindOfTable,false,Children) ->
- gs:config(win, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(win, "TV Notification",
- ["The selected table is unreadable!",
- "Only table information may be viewed!"]);
- haiku ->
- Msg = ["Table protected.",
- "The answers that you're seeking",
- "will remain unknown."],
- tv_utils:notify(win, "TV Notification", Msg)
- end,
- start_tv_info(Tab, Node, Node =:= node(), KindOfTable, Children);
-start_tv_browser(Table,Node,Name,KindOfTable,_Readable,Children) ->
- TvBrowserChildren = [X || X <- Children, element(2,X) =:= tv_browser],
- case lists:keysearch({Table,Node}, 3, TvBrowserChildren) of
- {value, {BPid,tv_browser,{Table,Node}}} ->
- BPid ! raise,
- Children;
- _Other ->
- %% Check that table still exists!
- case table_still_there(KindOfTable, Node, Node =:= node(), Table, Name) of
- true ->
- LocalNode = (Node =:= node()),
- NewBPid = tv:start_browser(Node, LocalNode, Table, KindOfTable, Name,
- get(error_msg_mode)),
- [{NewBPid, tv_browser, {Table,Node}} | Children];
- _TableDead ->
- gs:config(win, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(win, "TV Notification",
- ["The table no longer exists!"]);
- haiku ->
- Msg = ["A table that big?",
- "It might be very useful.",
- "But now it is gone."],
- tv_utils:notify(win, "TV Notification", Msg)
- end,
- Children
- end
- end.
-
-
-
-
-
-table_still_there(ets, Node, LocalNode, Table, Name) ->
- case catch tv_ets_rpc:all(Node, LocalNode) of
- Tables when is_list(Tables) ->
- case lists:member(Table, Tables) of
- true ->
- true;
- false -> %% May be a named table...
- lists:keymember(Name, 1, Tables)
- end;
- Error ->
- analyze_error(Error, Node, Table),
- false
- end;
-table_still_there(mnesia, Node, LocalNode, Table, Name) ->
- case catch tv_mnesia_rpc:system_info(Node, LocalNode, tables) of
- Tables when is_list(Tables) ->
- lists:member(Name, Tables);
- Error ->
- analyze_error(Error, Node, Table),
- false
- end.
-
-
-
-
-
-
-start_tv_info(Table, Node, LocalNode, KindOfTable, Children) ->
- TvInfoChildren = [X || X <- Children, element(2,X) =:= tv_info],
- case lists:keysearch({Table,Node}, 3, TvInfoChildren) of
- {value, {Pid,tv_info,{Table,Node}}} ->
- Pid ! #info_raise_window{sender = self()},
- Children;
- _Other ->
- %% May have started a browser but no info window!
- %% Info window may have been started from that browser, but
- %% don't bother with checking *that*.
- Pid = spawn_link(tv_info, info, [self(), Node, LocalNode, Table, KindOfTable,
- get(error_msg_mode)]),
- [{Pid, tv_info, {Table,Node}} | Children]
- end.
-
-
-
-
-
-start_tv_new_table(CurrNode, Children) ->
- TvNewTableChild = [X || X <- Children, element(2,X) =:= tv_new_table],
- case TvNewTableChild of
- [{Pid,tv_new_table,undefined}] ->
- Pid ! raise,
- Children;
- [] ->
- Pid = tv_new_table:start(CurrNode, get(error_msg_mode)),
- [{Pid, tv_new_table, undefined} | Children]
- end.
-
-
-
-
-create_table(mnesia, _Node, _LocalNode, _TabName, _Options, _NewTabWinPid) ->
- error;
-create_table(ets, Node, LocalNode, TabName, Options, NewTabWinPid) ->
- case tv_table_owner:create(ets, Node, LocalNode, TabName, Options) of
- {ok, TabId} ->
- NewTabWinPid ! ok,
- TabId;
- error ->
- NewTabWinPid ! error,
- error
- end.
-
-
-
-
-start_pman(OwnerPid, Children) ->
- Pid = pman_shell:start(OwnerPid),
- [{Pid,pman,OwnerPid} | Children].
-
-
-
-
-update_grid(TableType, CurrNode, GridLines, UnreadHidden, SysTabHidden,SortKey) ->
- NewTables = get_tables(CurrNode, TableType, UnreadHidden, SysTabHidden,SortKey),
- TabStr = case TableType of
- mnesia ->
- "Mnesia ";
- ets ->
- "ETS "
- end,
- NodeStr = atom_to_list(CurrNode),
- gs:config(win, [{title, "[TV] " ++ TabStr ++ "tables on " ++ NodeStr}]),
- gs:config(grid, [{rows, {1, get_nof_rows(length(NewTables), gs:read(grid,height))}}]),
- NewGridLines = update_gridlines(NewTables, GridLines, 1),
- {NewTables, NewGridLines}.
-
-
-
-unmark_cell({undefined, AnyCol, AnyRow}, _Tables) ->
- {undefined, AnyCol, AnyRow};
-unmark_cell({Id, Col, Row}, Tables) ->
- disable_menus(),
- TabTuple = lists:nth(Row, Tables),
- ReadableTable = element(?READABLE_ELEM, TabTuple),
- NamedTable = element(?NAMED_TABLE_ELEM, TabTuple),
- BgColor =
- case ReadableTable of
- false ->
- ?UNREADABLE_BG_COLOR;
- _Other1 ->
- ?READABLE_BG_COLOR
- end,
-
- FgColor =
- case NamedTable of
- false when Col =:= ?NAME_COL ->
- ?UNNAMED_FG_COLOR;
- _Other2 ->
- ?NORMAL_FG_COLOR
- end,
-
- gs:config(Id, [{bg, {Col, BgColor}},
- {fg, {Col, FgColor}}]),
- {undefined, undefined, undefined}.
-
-
-
-
-mark_cell({Id,Col,Row}, {Id,Col,Row}, _Readable) ->
- {undefined, undefined, undefined};
-mark_cell({Id,Col,Row}, _Any, Readable) ->
- case lists:member(Col, ?POSSIBLE_MARK_COLS) of
- true ->
- enable_menus(Col, Readable),
- gs:config(Id, [{bg, {Col, ?GRID_MARK_COLOR}},
- {fg, {Col, ?NORMAL_FG_COLOR}}]),
- {Id, Col,Row};
- false ->
- {undefined, undefined, undefined}
- end.
-
-
-disable_menus() ->
- disable_open_menu(),
- disable_trace_menu(),
- disable_info_menu().
-
-
-enable_menus(?ID_COL, true) ->
- enable_open_menu(),
- enable_info_menu();
-enable_menus(?ID_COL, {notext}) ->
- enable_open_menu(),
- enable_info_menu();
-enable_menus(?ID_COL, false) ->
- enable_info_menu();
-enable_menus(?NAME_COL, true) ->
- enable_open_menu(),
- enable_info_menu();
-enable_menus(?NAME_COL, {notext}) ->
- enable_open_menu(),
- enable_info_menu();
-enable_menus(?NAME_COL, false) ->
- enable_info_menu();
-enable_menus(?PID_COL, _Any) ->
- enable_trace_menu();
-enable_menus(?PROCNAME_COL, _Any) ->
- enable_trace_menu();
-enable_menus(?INFO_COL, _Any) ->
- enable_info_menu();
-enable_menus(_Col, _Any) ->
- done.
-
-
-
-resize_window(Width, Height, NofElems) ->
- WinWidth = lists:max([Width, ?MIN_WIN_WIDTH]),
- WinHeight = lists:max([Height, ?MIN_WIN_HEIGHT]),
- gs:config(win, [{width, WinWidth},
- {height, WinHeight}
- ]),
- {BgWidth, BgHeight, FgWidth, FgHeight} = get_frame_coords(WinWidth, WinHeight),
- {GridWidth, GridHeight} = get_grid_coords(FgWidth, FgHeight),
- ColWidths = get_col_widths(?COL_WIDTHS, GridWidth),
- resize_header_labels(ColWidths,
- [label1,label2,label3,label4,label5],
- ?GRID_XPOS),
- gs:config(bgframe, [{width, BgWidth},
- {height, BgHeight}
- ]),
- gs:config(fgframe, [{width, FgWidth},
- {height, FgHeight}
- ]),
- gs:config(grid, [{width, GridWidth},
- {height, GridHeight},
- {columnwidths, ColWidths},
- {rows, {1, get_nof_rows(NofElems, GridHeight)}}
- ]),
- {WinWidth, WinHeight}.
-
-
-
-
-create_window(Tables) ->
- gs:window(win, gs:start(), [{width, ?WIN_WIDTH},
- {height, ?WIN_HEIGHT},
- {bg, ?DEFAULT_BG_COLOR},
- {title, "[TV] ETS tables on " ++
- atom_to_list(node())},
- {destroy, true},
- {configure, true},
- {keypress, true}
- ]),
-
- ShortcutList = create_menus(),
-
- disable_menus(),
-
- {BgFrameWidth, BgFrameHeight, FgFrameWidth, FgFrameHeight} =
- get_frame_coords(?WIN_WIDTH, ?WIN_HEIGHT),
-
- {GridWidth, GridHeight} = get_grid_coords(FgFrameWidth, FgFrameHeight),
-
- ColWidths = get_col_widths(?COL_WIDTHS, GridWidth),
-
- gs:frame(bgframe, win, [{width, BgFrameWidth},
- {height, BgFrameHeight},
- {x, ?GRID_XPOS},
- {y, ?GRID_YPOS},
- {bg, {0,0,0}}
- ]),
- gs:frame(fgframe, bgframe, [{width, FgFrameWidth},
- {height, FgFrameHeight},
- {x, 0},
- {y, 1},
- {bg, ?DEFAULT_BG_COLOR}
- ]),
-
-
- create_header_labels(ColWidths, ?HEADER_LABELS),
- gs:grid(grid, fgframe, [{width, GridWidth},
- {height, GridHeight},
- {x, 0},
- {y, -1},
- {hscroll,bottom},
- {vscroll,right},
- {rows, {1, get_nof_rows(length(Tables), GridHeight)}},
- {columnwidths, ColWidths},
- {fg, ?NORMAL_FG_COLOR},
- {bg, {255,255,255}},
- {font, ?FONT}
- ]),
- GridLines = update_gridlines(Tables, [], 1),
- {{undefined,undefined,undefined}, GridLines, {?WIN_WIDTH,?WIN_HEIGHT}, ShortcutList}.
-
-
-
-
-get_frame_coords(WinWidth, WinHeight) ->
- BgWidth = WinWidth - 2 * ?GRID_XPOS,
- BgHeight = WinHeight - ?GRID_YPOS - ?GRID_XPOS,
- FgWidth = BgWidth,
- FgHeight = BgHeight - 1,
- {BgWidth, BgHeight, FgWidth, FgHeight}.
-
-
-
-
-get_grid_coords(ParentWidth, ParentHeight) ->
- {ParentWidth, ParentHeight + 1}.
-
-
-
-get_col_widths(Cols, GridWidth) ->
- SbWidth = 25, %% OK, OK, don't bother about it, this constant makes it work... :-/
- FixColWidthSum = lists:sum(lists:map(fun(H) ->
- lists:nth(H, Cols)
- end,
- ?FIX_WIDTH_COLS)),
- AvailableWidth = GridWidth - FixColWidthSum - SbWidth,
- OriginalWidth = ?WIN_WIDTH - 2 * ?GRID_XPOS - FixColWidthSum - SbWidth,
- get_col_widths(1, Cols, AvailableWidth, OriginalWidth).
-
-
-
-get_col_widths(N, [H | T], AvailWidth, OrigWidth) ->
- NewColWidth =
- case lists:member(N, ?FIX_WIDTH_COLS) of
- true ->
- H;
- _Other ->
- round(H * (AvailWidth / OrigWidth) + 0.1)
- end,
- [NewColWidth | get_col_widths(N + 1, T, AvailWidth, OrigWidth)];
-get_col_widths(_N, [], _AvailWidth, _OrigWidth) ->
- [].
-
-
-
-create_header_labels(ColWidths, Text) ->
- create_header_labels(ColWidths, Text, 1, ?GRID_XPOS).
-
-
-
-create_header_labels([W | T], [{Name, Text} | TextT], N, Xpos) ->
- Ypos = ?GRID_YPOS - 20,
- gs:label(Name, win, [{width, W + 1 - 3},
- {height, 20},
- {x, Xpos + 1 + 3},
- {y, Ypos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, ?NORMAL_FG_COLOR},
- {font, ?HEADER_FONT},
- {align, w},
- {label, {text, Text}}
- ]),
- create_header_labels(T, TextT, N + 1, Xpos + 1 + W);
-create_header_labels([], [], _N, _Xpos) ->
- done.
-
-
-
-resize_header_labels([W | T], [Name | NT], Xpos) ->
- gs:config(Name, [{width, W + 1 - 3},
- {x, Xpos + 1 + 3}
- ]),
- resize_header_labels(T, NT, Xpos + 1 + W);
-resize_header_labels([], [], _Xpos) ->
- done.
-
-
-
-disable_open_menu() ->
- gs:config(open_table, [{enable,false}]).
-
-
-disable_info_menu() ->
- gs:config(show_info, [{enable,false}]).
-
-disable_trace_menu() ->
- gs:config(trace_process, [{enable,false}]).
-
-
-enable_open_menu() ->
- gs:config(open_table, [{enable,true}]).
-
-
-enable_info_menu() ->
- gs:config(show_info, [{enable,true}]).
-
-
-enable_trace_menu() ->
- gs:config(trace_process, [{enable,true}]).
-
-
-create_menus() ->
- gs:menubar(menubar, win, [{bg, ?DEFAULT_BG_COLOR}]),
-
- HelpButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR},
- {fg, ?FIREBRICK}, % firebrick
- {label, {text, " Help "}},
- {underline, 1},
- {side, right}
- ]),
- FileButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR},
- {fg, ?FIREBRICK}, % firebrick
- {label, {text, " File "}},
- {underline, 1},
- {side, left}
- ]),
- ViewButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR},
- {fg, ?FIREBRICK}, % firebrick
- {label, {text, " View "}},
- {underline, 1},
- {side, left}
- ]),
- OptionsButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR},
- {fg, ?FIREBRICK}, % firebrick
- {label, {text, " Options "}},
- {underline, 1},
- {side, left}
- ]),
-
- HelpMenu = gs:menu(HelpButt, [{bg, ?DEFAULT_BG_COLOR},
- {fg, ?FIREBRICK},
- {disabledfg,?DISABLED_COLOR}
- ]),
- FileMenu = gs:menu(FileButt, [{bg, ?DEFAULT_BG_COLOR},
- {fg, ?FIREBRICK},
- {disabledfg,?DISABLED_COLOR}
- ]),
-
- OptionsMenu = gs:menu(OptionsButt, [{bg, ?DEFAULT_BG_COLOR},
- {fg, ?FIREBRICK},
- {disabledfg,?DISABLED_COLOR}
- ]),
-
- ViewMenu = gs:menu(ViewButt, [{bg, ?DEFAULT_BG_COLOR},
- {fg, ?FIREBRICK},
- {disabledfg,?DISABLED_COLOR}
- ]),
-
- ShortCutList =
- create_menulist([{" Help ",normal,help_button,1,h},
- separator,
- {" OTP Documentation ",normal,otp_help_button,1,no_char}], HelpMenu) ++
- create_menulist([{" Open Table ",normal,open_table,1,o},
- {" New Table... ",normal,new_table,1,no_char},
- {" Table Info ",normal,show_info,7,i},
- separator,
- {" Nodes... ",normal,select_node,1,n},
- separator,
- {" Trace Process ",normal,trace_process,1,t},
- separator,
- {" Exit ",normal, exit_button,2,x}], FileMenu) ++
- [{c,exit_button}, {'C',exit_button}] ++
- create_menulist([{" Refresh ",normal,update,1,r},
- separator,
- {" Unreadable Tables ",check,show_unreadable,1,no_char},
- separator,
- {" System Tables ",check,show_system,1,no_char},
- separator,
- {" Sort by Name ",radio,sort_table_name,9,no_char},
- {" Sort by Id ",radio,sort_table_id,9,no_char},
- {" Sort by Owner PID ",radio,sort_owner_pid,15,no_char},
- {" Sort by Owner Name ",radio,sort_owner_name,9,no_char},
- separator,
- {" Error Messages in Haiku ",check,show_haiku,1,no_char}
- ],
- OptionsMenu) ++
- create_menulist([{" ETS Tables ",radio,show_ets,1,e},
- {" Mnesia Tables ",radio,show_mnesia,1,m}], ViewMenu),
- gs:config(show_unreadable, [{select,false}]),
- gs:config(show_system, [{select,false}]),
- gs:config(show_haiku, [{select,false}]),
- %% Due to a bug (or some other reason), only one of the radiobuttons belonging
- %% to a specified group can be selected, even if different processes have created
- %% the radiobuttons! This means that, if we have started more than one tv_main
- %% process, selecting one radiobutton will affect the radiobuttons in the other
- %% tv_main process(es)!!! Since this is a highly undesirable bahaviour, we have to
- %% create unique group names (i.e., atoms).
- %% (We need to group the radiobuttons, since otherwise all created by one process
- %% belongs to the same group, which also is undesirable...)
- SelfStr = pid_to_list(self()),
- SortGroup = list_to_atom("sorting" ++ SelfStr),
- TypeGroup = list_to_atom("table_type" ++ SelfStr),
- gs:config(sort_table_name, [{group,SortGroup},{select,true}]),
- gs:config(sort_table_id, [{group,SortGroup}]),
- gs:config(sort_owner_pid, [{group,SortGroup}]),
- gs:config(sort_owner_name, [{group,SortGroup}]),
- gs:config(show_ets, [{group,TypeGroup}, {select,true}]),
- gs:config(show_mnesia, [{group,TypeGroup}]),
- ShortCutList.
-
-
-
-
-
-create_menulist(List, Menu) ->
- MaxLength = get_length_of_longest_menu_text(List, 0),
- create_menulist(List, Menu, MaxLength).
-
-
-
-
-create_menulist([], _Menu, _MaxLength) ->
- [];
-create_menulist([{Text, Type, Data, AccCharPos, ShortcutChar} | Rest], Menu, MaxLength) ->
- ShortcutCapitalChar =
- if
- ShortcutChar =:= no_char ->
- no_char;
- true ->
- CharAsciiValue = lists:nth(1, atom_to_list(ShortcutChar)),
- CapitalCharValue = CharAsciiValue - ($a - $A),
- list_to_atom([CapitalCharValue])
- end,
-
- FinalText = if
- ShortcutChar =:= no_char ->
- Text;
- true ->
- Text ++ lists:duplicate(MaxLength - length(Text), " ") ++
- " Ctrl+" ++ atom_to_list(ShortcutCapitalChar) ++ " "
- end,
- gs:menuitem(Data, Menu, [{bg, ?DEFAULT_BG_COLOR},
- {fg, ?FIREBRICK},
- {itemtype, Type},
- {label, {text, FinalText}},
- {underline, AccCharPos},
- {data, Data}
- ]),
- [{ShortcutChar, Data}, {ShortcutCapitalChar, Data} | create_menulist(Rest, Menu, MaxLength)];
-create_menulist([separator | Rest], Menu, MaxLength) ->
- gs:menuitem(Menu, [{itemtype, separator}]),
- create_menulist(Rest, Menu, MaxLength).
-
-
-
-
-
-
-
-get_length_of_longest_menu_text([], MaxLength) ->
- MaxLength;
-get_length_of_longest_menu_text([{Text, _Type, _Data, _APos, _SChar} | Rest], CurrMax) ->
- L = length(Text),
- if
- L > CurrMax ->
- get_length_of_longest_menu_text(Rest, L);
- true ->
- get_length_of_longest_menu_text(Rest, CurrMax)
- end;
-get_length_of_longest_menu_text([separator | Rest], CurrMax) ->
- get_length_of_longest_menu_text(Rest, CurrMax).
-
-
-
-
-
-
-get_nof_rows(NofElems, GridHeight) ->
- lists:max([NofElems, round((GridHeight - 20) / 21) + 1]).
-
-
-
-config_gridline(LineId, TabTuple) ->
- Readable = element(?READABLE_ELEM, TabTuple),
- NamedTable = element(?NAMED_TABLE_ELEM, TabTuple),
- {FgColor, BgColor} =
- case Readable of
- true ->
- {?NORMAL_FG_COLOR, ?READABLE_BG_COLOR};
- false ->
- {?UNREADABLE_FG_COLOR, ?UNREADABLE_BG_COLOR};
- {notext} ->
- {?NORMAL_FG_COLOR, ?READABLE_BG_COLOR}
- end,
-
- NameFgColor =
- case NamedTable of
- false ->
- ?UNNAMED_FG_COLOR;
- _Other ->
- ?NORMAL_FG_COLOR
- end,
-
- gs:config(LineId, [{bg, BgColor},
- {fg, FgColor},
- {fg, {?NAME_COL, NameFgColor}},
- {click, true},
- {doubleclick, true},
- {data, {grid,Readable}} |
-
- lists:map(
- fun({Elem,Col}) ->
- case element(Elem, TabTuple) of
- {notext} ->
- {text, {Col, ""}};
- Other when Elem =:= ?NAME_ELEM ->
- case NamedTable of
- false ->
- {text, {Col, " " ++
- lists:flatten(
- io_lib:write(
- Other)) ++ " "}};
- _AnyOther ->
- {text, {Col, " " ++ lists:flatten(
- io_lib:write(
- Other))}}
- end;
- Other ->
- {text, {Col, " " ++ lists:flatten(
- io_lib:write(
- Other))}}
- end
- end,
- [{?NAME_ELEM, ?NAME_COL},
- {?ID_ELEM, ?ID_COL},
- {?PID_ELEM, ?PID_COL},
- {?PROCNAME_ELEM, ?PROCNAME_COL},
- {?INFO_ELEM, ?INFO_COL}]
- )
- ]).
-
-
-
-
-
-update_gridlines([TabTuple | TT], [LineId | GT], CurrRow) ->
- config_gridline(LineId, TabTuple),
- [LineId | update_gridlines(TT, GT, CurrRow + 1)];
-update_gridlines([TabTuple | TT], [], CurrRow) ->
- LineId = gs:gridline(grid, [{row, CurrRow}]),
- config_gridline(LineId, TabTuple),
- [LineId | update_gridlines(TT, [], CurrRow + 1)];
-update_gridlines([], [LineId | GT], _CurrRow) ->
- gs:destroy(LineId),
- update_gridlines([], GT, _CurrRow);
-update_gridlines([], [], _CurrRow) ->
- [].
-
-
-
-
-
-
-
-
-
diff --git a/lib/tv/src/tv_main.hrl b/lib/tv/src/tv_main.hrl
deleted file mode 100644
index c9db1d9484..0000000000
--- a/lib/tv/src/tv_main.hrl
+++ /dev/null
@@ -1,285 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2013. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-
--define(ERROR_MSG_MODE, normal).
-
--define(WIN_WIDTH, 745). % 779
--define(WIN_HEIGHT, 380).
--define(MIN_WIN_WIDTH, 524).
--define(MIN_WIN_HEIGHT, 150).
-
--define(FONT, {screen, 12}).
--define(HEADER_FONT, {screen, [bold,italic], 12}).
-
--define(GRID_XPOS, 3).
--define(GRID_YPOS, 68).
-
-
-%% Unreadable tables are indicated by the background color.
-%% Unnamed tables are indicated by the foreground color.
-
--define(NORMAL_FG_COLOR, {0,0,0}).
--define(READABLE_BG_COLOR, {255,255,255}).
--define(UNREADABLE_FG_COLOR, ?NORMAL_FG_COLOR).
--define(UNREADABLE_BG_COLOR, {240,240,240}).
-%-define(UNREADABLE_BG_COLOR, {255,250,230}).
-%-define(UNREADABLE_BG_COLOR, {242,242,242}).
--define(UNNAMED_FG_COLOR, {175,175,175}).
-%-define(UNNAMED_FG_COLOR, {140,35,35}).
-
-
--define(DISABLED_COLOR, {160,160,160}).
-
--define(NAME_ELEM, 1).
--define(NAMED_TABLE_ELEM, 2).
--define(ID_ELEM, 3).
--define(READABLE_ELEM, 4).
--define(PID_ELEM, 5).
--define(PROCNAME_ELEM, 6).
--define(INFO_ELEM, 7).
-
--define(NAME_COL, 1).
--define(ID_COL, 2).
--define(PID_COL, 3).
--define(PROCNAME_COL, 4).
--define(INFO_COL, 5).
-
--define(POSSIBLE_MARK_COLS, [?NAME_COL, ?ID_COL, ?PID_COL, ?PROCNAME_COL, ?INFO_COL]).
--define(COL_WIDTHS, [205,131,91,197,90]). % [140,95,125,75,85,140,90]).
--define(FIX_WIDTH_COLS, [2,3,5]).
-
-
--define(HEADER_LABELS, [{label1, " Table Name"},
- % {label2, " Named Table"},
- {label2, " Table Id"},
- % {label4, " Readable"},
- {label3, " Owner Pid"},
- {label4, " Owner Name"},
- {label5, " Table Size"}
- ]).
-
-
-
-%% TABLES_TO_HIDE shall contain both Mnesia and ETS tables that we want to hide. :-)
-
--define(SYSTEM_TABLES, [ac_tab,
- asn1,
- cdv_dump_index_table,
- cdv_menu_table,
- cdv_decode_heap_table,
- cell_id,
- cell_pos,
- clist,
- cover_internal_data_table,
- cover_collected_remote_data_table,
- cover_binary_code_table,
- code,
- code_names,
- cookies,
- corba_policy,
- corba_policy_associations,
- dets,
- dets_owners,
- dets_registry,
- disk_log_names,
- disk_log_pids,
- eprof,
- erl_atom_cache,
- erl_epmd_nodes,
- etop_accum_tab,
- etop_tr,
- ets_coverage_data,
- file_io_servers,
- global,
- global_locks,
- global_names,
- global_names_ext,
- gs_mapping,
- gs_names,
- gstk_db,
- gstk_grid_cellid,
- gstk_grid_cellpos,
- gstk_grid_id,
- gvar,
- httpd,
- id,
- ig,
- ign_req_index,
- ign_requests,
- index,
- inet_cache,
- inet_db,
- inet_hosts,
- 'InitialReferences',
- int_db,
- interpreter_includedirs_macros,
- ir_WstringDef,
- lmcounter,
- locks,
- pg2_table,
- queue,
- snmp_agent_table,
- snmp_local_db2,
- snmp_mib_data,
- snmp_note_store,
- snmp_symbolic_ets,
- sticky,
- sys_dist,
- tid_locks,
- tkFun,
- tkLink,
- tkPriv,
- ttb,
- ttb_history_table,
- udp_fds,
- udp_pids
- ]).
-
-
--define(MNESIA_TABLES, [alarm,
- alarmTable,
- evaLogDiscriminatorTable,
- eva_snmp_map,
- eventTable,
- group,
- imprec,
- ir_AliasDef,
- ir_ArrayDef,
- ir_AttributeDef,
- ir_ConstantDef,
- ir_Contained,
- ir_Container,
- ir_EnumDef,
- ir_ExceptionDef,
- ir_IDLType,
- ir_IRObject,
- ir_InterfaceDef,
- ir_ModuleDef,
- ir_ORB,
- ir_OperationDef,
- ir_PrimitiveDef,
- ir_Repository,
- ir_SequenceDef,
- ir_StringDef,
- ir_StructDef,
- ir_TypedefDef,
- ir_UnionDef,
- logTable,
- logTransferTable,
- mesh_meas,
- mesh_type,
- mnesia_clist,
- mnesia_decision,
- mnesia_transient_decision,
- orber_CosNaming,
- orber_objkeys,
- schema,
- user
- ]).
-
-
--define(UNREADABLE_MNESIA_TABLES, [schema]).
-
-
--define(SYSTEM_OWNERS, [alarm_handler,
- application_controller,
- auth,
- coast_server,
- code_server,
- cover_server_001,
- dbg,
- dets,
- dets_sup,
- disk_log_server,
- disk_log_sup,
- erl_epmd,
- erl_prim_loader,
- error_logger,
- eva_log_sup,
- eva_server,
- eva_sup,
- file_server,
- file_server_2,
- global_group,
- global_group_check,
- global_name_server,
- gs_frontend,
- heart,
- help_main,
- inet_db,
- inet_gethost_native,
- init,
- int_db,
- interpret,
- jive_server,
- kernel_safe_sup,
- kernel_sup,
- log_server,
- mandel_server,
- mesh_sup,
- mesh_server,
- mnesia_checkpoint_sup,
- mnesia_dumper,
- mnesia_event,
- mnesia_fallback,
- mnesia_init,
- mnesia_kernel_sup,
- mnesia_late_loader,
- mnesia_locker,
- mnesia_monitor,
- mnesia_recover,
- mnesia_snmp_sup,
- mnesia_subscr,
- mnesia_sup,
- mnesia_tm,
- net_kernel,
- net_sup,
- overload,
- perfmon_sampler,
- pxw_server,
- release_handler,
- %% rex, %% Otherwise we won't see tables we've created on other nodes!
- rsh_starter,
- sasl_safe_sup,
- sasl_sup,
- snmp_agent_sup,
- snmp_local_db,
- snmp_master_agent,
- snmp_misc_sup,
- snmp_note_store,
- snmp_supervisor,
- snmp_symbolic_store,
- socket,
- sounder,
- ssl_socket,
- take_over_monitor,
- timer_server,
- tk,
- udp_server,
- user,
- winshell_controller,
- xerl_copy,
- xerl_monitor
- ]).
-
-
-
-
-
-
-
diff --git a/lib/tv/src/tv_mnesia_rpc.erl b/lib/tv/src/tv_mnesia_rpc.erl
deleted file mode 100644
index b2434fcdd3..0000000000
--- a/lib/tv/src/tv_mnesia_rpc.erl
+++ /dev/null
@@ -1,106 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_mnesia_rpc).
-
-
-
--export([system_info/3,
- table_info/4,
- transaction/3
- ]).
-
-
-
-
-
-
-system_info(_Node, true, Key) ->
- chk(catch mnesia:system_info(Key));
-system_info(Node, false, Key) ->
- chk(catch rpc:block_call(Node, mnesia, system_info, [Key])).
-
-
-
-
-table_info(_Node, true, Tab, Item) ->
- chk(catch mnesia:table_info(Tab, Item));
-table_info(Node, false, Tab, Item) ->
- chk(catch rpc:block_call(Node, mnesia, table_info, [Tab, Item])).
-
-
-
-
-transaction(_Node, true, Fun) ->
- chk(catch mnesia:transaction(Fun));
-transaction(Node, false, Fun) ->
- chk(catch rpc:block_call(Node, mnesia, transaction, [Fun])).
-
-
-
-
-chk(Result) ->
- case Result of
- _Anything when is_list(Result) ->
- Result;
- _Anything when is_atom(Result) ->
- Result;
- _Anything when is_integer(Result) ->
- Result;
- _Anything when is_pid(Result) ->
- Result;
-
- {aborted, {bad_type, _Rec}} ->
- throw(bad_format);
-
- {badrpc,nodedown} ->
- throw(nodedown);
- {'EXIT', nodedown} ->
- throw(nodedown);
-
- {'EXIT', {aborted, {no_exists, _Table, _Arg}}} ->
- throw(no_table);
-
- {'EXIT', {aborted, {node_not_running, _Node}}} ->
- throw(mnesia_not_started);
- {'EXIT', {{badarg, {gen, set_monitor_mode, _Data}}, _Info}} ->
- throw(mnesia_not_started);
- {'EXIT', {'EXIT', {aborted, {node_not_running,_Node}}}} ->
- throw(mnesia_not_started);
- {badrpc, {'EXIT', {aborted, {node_not_running,_Node}}}} ->
- throw(mnesia_not_started);
- {badrpc, {'EXIT', {aborted, {no_exists,_Table,_Args}}}} ->
- throw(mnesia_not_started);
- {badrpc, _Reason} ->
- throw(mnesia_not_started);
- {'EXIT', {undef, {mnesia,_Fcn,_Args,_}}} ->
- throw(mnesia_not_started);
- {'EXIT', {undef, {mnesia,_Fcn,_Args}}} ->
- throw(mnesia_not_started);
-
- {'EXIT', Reason} ->
- throw({unexpected_error, Reason});
-
- Other when is_tuple(Other) ->
- %% For example wild_pattern requests return a tuple!
- Other;
-
- Other ->
- io:format("Unexpected return value: ~p~n", [Other])
- end.
-
-
diff --git a/lib/tv/src/tv_new_table.erl b/lib/tv/src/tv_new_table.erl
deleted file mode 100644
index 779835d78a..0000000000
--- a/lib/tv/src/tv_new_table.erl
+++ /dev/null
@@ -1,666 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%k
--module(tv_new_table).
--compile([{nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,checkbutton,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,frame,3}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,radiobutton,3}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--export([start/2,
- init/3
- ]).
-
-
-
--define(DEFAULT_BG_COLOR, {217, 217, 217}).
--define(FONT, {screen, 12}).
-
--define(WIN_WIDTH, 400).
--define(WIN_HEIGHT, 555). %% 510
-
--define(FRAME_WIDTH, 400).
--define(FRAME1_HEIGHT, 170).
--define(FRAME2_HEIGHT, 260).
--define(FRAME3_HEIGHT, 125). %% 80
--define(BW, 2).
-
--define(FRAME_X, 0).
--define(FRAME1_Y, 0).
--define(FRAME2_Y, 170).
--define(FRAME3_Y, 430).
-
-
--define(LBL_HEIGHT, 30).
--define(NODE_LBL_WIDTH, 45).
--define(NAME_LBL_WIDTH, 85).
--define(TYPE_LBL_WIDTH, 45).
--define(PROT_LBL_WIDTH, 85).
--define(KEYPOS_LBL_WIDTH, 95).
-
--define(LBL_X, 10).
--define(NODE_LBL_Y, 20).
--define(NAME_LBL_Y, 80).
--define(TYPE_LBL_Y, 10).
--define(PROT_LBL_Y, 100).
--define(KEYPOS_LBL_Y, 200).
-
-
--define(ENTRY_HEIGHT, 30).
--define(NODE_ENTRY_WIDTH, 275).
--define(NAME_ENTRY_WIDTH, 275).
--define(KEYPOS_ENTRY_WIDTH, 50).
-
--define(ENTRY_X1, 110).
--define(ENTRY_X2, 110).
--define(NODE_ENTRY_Y, 20).
--define(NAME_ENTRY_Y, 80).
--define(KEYPOS_ENTRY_Y, 200).
-
--define(RBTN_HEIGHT, 30).
--define(RBTN_WIDTH1, 105).
--define(RBTN_WIDTH2, 115).
-
--define(RBTN_X1, 60).
--define(RBTN_X2, 165).
--define(RBTN_X3, 270).
--define(RBTN_Y1, 40).
--define(RBTN_Y1PLUS, 70).
--define(RBTN_Y2, 130).
-
-
--define(CBTN_HEIGHT, 30).
--define(NAMED_TABLE_CBTN_WIDTH, 100).
--define(OPEN_BROWSER_CBTN_WIDTH, 105).
-
--define(NAMED_TABLE_CBTN_X, 110).
--define(NAMED_TABLE_CBTN_Y, 120).
-
--define(OPEN_BROWSER_CBTN_X, 85). %% 215
--define(OPEN_BROWSER_CBTN_Y, 10). %% 200
-
-
--define(BTN_WIDTH, 100).
--define(BTN_HEIGHT, 30).
-
--define(BTN_X1, 85).
--define(BTN_X2, 225).
--define(BTN_Y, 65). %% 30
-
-
--define(VLINE_LBL_WIDTH, (380 - 2 * ?BW)).
--define(VLINE_LBL_HEIGHT, 1).
--define(HLINE_LBL_WIDTH, 1).
--define(HLINE_LBL_HEIGHT, 70).
-
--define(VLINE_LBL_X, (10 - ?BW)).
--define(VLINE_LBL_Y1, 85).
--define(VLINE_LBL_Y2, 180).
--define(HLINE_LBL_X, 188).
--define(HLINE_LBL_Y, 180).
-
-
--define(DEFAULT_NAME, my_table).
--define(DEFAULT_TYPE, set).
--define(DEFAULT_PROT, public).
--define(DEFAULT_KEYPOS, 1).
-
-
-
-
-start(Node, ErrMsgMode) ->
- spawn_link(?MODULE, init, [Node, ErrMsgMode, self()]).
-
-
-
-
-
-init(Node, ErrMsgMode, MPid) ->
- process_flag(trap_exit, true),
- put(error_msg_mode, ErrMsgMode),
- create_window(Node),
- loop(false, ?DEFAULT_TYPE, ?DEFAULT_PROT, true, MPid).
-
-
-
-
-
-loop(NamedTab, Type, Prot, OpenBrowser, MPid) ->
- receive
-
- {gs, ok, click, _Data, _Args} ->
- gs:config(win, [{cursor, busy}]),
- case create_table(NamedTab, Type, Prot, OpenBrowser, MPid) of
- ok ->
- exit(normal);
- error ->
- gs:config(win, [{cursor, arrow}]),
- loop(NamedTab, Type, Prot, OpenBrowser, MPid)
- end;
-
-
- {gs, cancel, click, _Data, _Args} ->
- exit(normal);
-
-
- {gs, set, click, _Data, _Args} ->
- loop(NamedTab, set, Prot, OpenBrowser, MPid);
-
-
- {gs, ordered_set, click, _Data, _Args} ->
- loop(NamedTab, ordered_set, Prot, OpenBrowser, MPid);
-
-
- {gs, bag, click, _Data, _Args} ->
- loop(NamedTab, bag, Prot, OpenBrowser, MPid);
-
-
- {gs, duplicate_bag, click, _Data, _Args} ->
- loop(NamedTab, duplicate_bag, Prot, OpenBrowser, MPid);
-
-
- {gs, public, click, _Data, _Args} ->
- gs:config(open_browser, [{enable, true}, {select, OpenBrowser}]),
- loop(NamedTab, Type, public, OpenBrowser, MPid);
-
-
- {gs, protected, click, _Data, _Args} ->
- gs:config(open_browser, [{enable, true}, {select, OpenBrowser}]),
- loop(NamedTab, Type, protected, OpenBrowser, MPid);
-
-
- {gs, private, click, _Data, _Args} ->
- gs:config(open_browser, [{select, false}, {enable, false}]),
- loop(NamedTab, Type, private, OpenBrowser, MPid);
-
-
- {gs, named_table, click, Data, _Args} ->
- gs:config(named_table, [{data, not(Data)}]),
- loop(Data, Type, Prot, OpenBrowser, MPid);
-
-
- {gs, open_browser, click, Data, _Args} ->
- gs:config(open_browser, [{data, not(Data)}]),
- loop(Data, Type, Prot, Data, MPid);
-
-
- {gs, EntryId, keypress, _Data, ['Tab', _No, 0 | _T]} ->
- case get_entry_term(EntryId) of
- {ok, _Term} ->
- gs:config(next_entry(EntryId, forward), [{setfocus, true},
- {select, {0, 100000000}}]);
- error ->
- done
- end,
- loop(NamedTab, Type, Prot, OpenBrowser, MPid);
-
-
- {gs, EntryId, keypress, _Data, ['Tab', _No, 1 | _T]} ->
- case get_entry_term(EntryId) of
- {ok, _Term} ->
- gs:config(next_entry(EntryId, backward), [{setfocus, true},
- {select, {0, 100000000}}]);
- error ->
- done
- end,
- loop(NamedTab, Type, Prot, OpenBrowser, MPid);
-
-
- {gs, EntryId, keypress, _Data, ['Down' | _T]} ->
- case get_entry_term(EntryId) of
- {ok, _Term} ->
- gs:config(next_entry(EntryId, forward), [{setfocus, true},
- {select, {0, 100000000}}]);
- error ->
- done
- end,
- loop(NamedTab, Type, Prot, OpenBrowser, MPid);
-
-
- {gs, EntryId, keypress, _Data, ['Up' | _T]} ->
- case get_entry_term(EntryId) of
- {ok, _Term} ->
- gs:config(next_entry(EntryId, backward), [{setfocus, true},
- {select, {0, 100000000}}]);
- error ->
- done
- end,
- loop(NamedTab, Type, Prot, OpenBrowser, MPid);
-
-
- {gs, _EntryId, keypress, _Data, ['Return' | _T]} ->
- gs:config(win, [{cursor, busy}]),
- case create_table(NamedTab, Type, Prot, OpenBrowser, MPid) of
- ok ->
- exit(normal);
- error ->
- gs:config(win, [{cursor, arrow}]),
- loop(NamedTab, Type, Prot, OpenBrowser, MPid)
- end;
-
-
- {gs, win, configure, _Data, _Args} ->
- gs:config(win, [{width, ?WIN_WIDTH},
- {height, ?WIN_HEIGHT}]),
- loop(NamedTab, Type, Prot, OpenBrowser, MPid);
-
-
- {gs, win, destroy, _Data, _Args} ->
- exit(normal);
-
-
- raise ->
- gs:config(win, [raise]),
- loop(NamedTab, Type, Prot, OpenBrowser, MPid);
-
-
- {error_msg_mode, ErrMsgMode} ->
- put(error_msg_mode, ErrMsgMode),
- loop(NamedTab, Type, Prot, OpenBrowser, MPid);
-
-
- {'EXIT', _Pid, _Reason} ->
- exit(normal);
-
-
- _Other ->
- loop(NamedTab, Type, Prot, OpenBrowser, MPid)
-
- end.
-
-
-
-
-create_table(NamedTab, Type, Prot, OpenBrowser, MPid) ->
- case get_entry_term(node_entry) of
- error ->
- error;
- {ok, Node} ->
- case get_entry_term(name_entry) of
- error ->
- error;
- {ok, TabName} ->
- case get_entry_term(keypos_entry) of
- error ->
- error;
- {ok, KeyPos} ->
- Options =
- [Type, Prot, {keypos, KeyPos}] ++
- case NamedTab of
- true ->
- [named_table];
- false ->
- []
- end,
- {Readable, NewOpenBrowser} =
- case Prot of
- private ->
- {false, false};
- _Other ->
- {true, OpenBrowser}
- end,
- MPid ! {tv_new_table, self(), Node, TabName, Options, ets,
- Readable, NewOpenBrowser},
- receive
- ok ->
- ok;
- error ->
- show_error_msg(),
- error
- after
- 5000 ->
- show_error_msg(),
- error
- end
- end
- end
- end.
-
-
-
-
-
-show_error_msg() ->
- Msg =
- case get(error_msg_mode) of
- normal ->
- ["Couldn't create a table using",
- "the specified settings!"];
- haiku ->
- ["The table you want",
- "Could maybe be created.",
- "But I don't know how."]
- end,
- tv_utils:notify(win, "TV Notification", Msg).
-
-
-
-
-
-
-
-get_entry_term(Id) ->
- EditedStr = gs:read(Id, text),
- case tv_db_search:string_to_term(EditedStr) of
- {ok, NewTerm} when Id =:= node_entry, is_atom(NewTerm) ->
- {ok,NewTerm};
- {ok, NewTerm} when Id =:= name_entry, is_atom(NewTerm) ->
- {ok,NewTerm};
- {ok, NewTerm} when Id =:= keypos_entry, is_integer(NewTerm), NewTerm > 0 ->
- {ok,NewTerm};
- _Other ->
- NewMsg =
- case get(error_msg_mode) of
- normal ->
- case Id of
- node_entry ->
- ["Please enter a valid node name!"];
- name_entry ->
- ["Please enter a valid table name!"];
- keypos_entry ->
- ["Please enter a valid key position!"]
- end;
- haiku ->
- E1 = "Aborted effort",
- L =
- case Id of
- node_entry ->
- ["Reflect, repent and retype:",
- "Enter valid node."];
- name_entry ->
- ["Reflect, repent and retype:",
- "Enter valid name."];
- keypos_entry ->
- ["Reflect, repent and retype",
- "Key position, please."]
- end,
- [E1 | L]
- end,
- gs:config(Id, [beep, {select, {0, 100000000}}, {setfocus, true}]),
- tv_utils:notify(win, "TV Notification", NewMsg),
- error
- end.
-
-
-
-
-
-next_entry(node_entry, forward) ->
- name_entry;
-next_entry(node_entry, backward) ->
- keypos_entry;
-next_entry(name_entry, forward) ->
- keypos_entry;
-next_entry(name_entry, backward) ->
- node_entry;
-next_entry(keypos_entry, forward) ->
- node_entry;
-next_entry(keypos_entry, backward) ->
- name_entry.
-
-
-
-
-create_window(Node) ->
- gs:window(win, gs:start(), [{width, ?WIN_WIDTH},
- {height, ?WIN_HEIGHT},
- {bg, ?DEFAULT_BG_COLOR},
- {title, "[TV] Create New ETS Table"},
- {configure, true},
- {destroy, true},
- {cursor, arrow}
- ]),
-
- gs:frame(frame1, win, [{width, ?FRAME_WIDTH},
- {height, ?FRAME1_HEIGHT},
- {x, ?FRAME_X},
- {y, ?FRAME1_Y},
- {bg, ?DEFAULT_BG_COLOR},
- {bw, ?BW}]),
- gs:frame(frame2, win, [{width, ?FRAME_WIDTH},
- {height, ?FRAME2_HEIGHT},
- {x, ?FRAME_X},
- {y, ?FRAME2_Y},
- {bg, ?DEFAULT_BG_COLOR},
- {bw, ?BW}]),
- gs:frame(frame3, win, [{width, ?FRAME_WIDTH},
- {height, ?FRAME3_HEIGHT},
- {x, ?FRAME_X},
- {y, ?FRAME3_Y},
- {bg, ?DEFAULT_BG_COLOR},
- {bw, ?BW}]),
-
- gs:label(frame1, [{width, ?NODE_LBL_WIDTH},
- {height, ?LBL_HEIGHT},
- {x, ?LBL_X},
- {y, ?NODE_LBL_Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}},
- {align, w},
- {font, ?FONT},
- {label, {text, "Node:"}}
- ]),
- gs:label(frame1, [{width, ?NAME_LBL_WIDTH},
- {height, ?LBL_HEIGHT},
- {x, ?LBL_X},
- {y, ?NAME_LBL_Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}},
- {align, w},
- {font, ?FONT},
- {label, {text, "Table name:"}}
- ]),
- gs:label(frame2, [{width, ?TYPE_LBL_WIDTH},
- {height, ?LBL_HEIGHT},
- {x, ?LBL_X},
- {y, ?TYPE_LBL_Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}},
- {align, w},
- {font, ?FONT},
- {label, {text, "Type:"}}
- ]),
- gs:label(frame2, [{width, ?PROT_LBL_WIDTH},
- {height, ?LBL_HEIGHT},
- {x, ?LBL_X},
- {y, ?PROT_LBL_Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}},
- {align, w},
- {font, ?FONT},
- {label, {text, "Protection:"}}
- ]),
- gs:label(frame2, [{width, ?KEYPOS_LBL_WIDTH},
- {height, ?LBL_HEIGHT},
- {x, ?LBL_X},
- {y, ?KEYPOS_LBL_Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}},
- {align, w},
- {font, ?FONT},
- {label, {text, "Key position:"}}
- ]),
-
- gs:entry(node_entry, frame1, [{width, ?NODE_ENTRY_WIDTH},
- {height, ?ENTRY_HEIGHT},
- {x, ?ENTRY_X1},
- {y, ?NODE_ENTRY_Y},
- {bg, {255,255,255}},
- {fg, {0,0,0}},
- {font, ?FONT},
- {enable, true},
- {text, "'" ++ atom_to_list(Node) ++ "'"},
- {keypress, true}
- ]),
- gs:entry(name_entry, frame1, [{width, ?NAME_ENTRY_WIDTH},
- {height, ?ENTRY_HEIGHT},
- {x, ?ENTRY_X1},
- {y, ?NAME_ENTRY_Y},
- {bg, {255,255,255}},
- {fg, {0,0,0}},
- {font, ?FONT},
- {enable, true},
- {text, atom_to_list(?DEFAULT_NAME)},
- {keypress, true},
- {setfocus, true},
- {select, {0,100000000}}
- ]),
- gs:entry(keypos_entry, frame2, [{width, ?KEYPOS_ENTRY_WIDTH},
- {height, ?ENTRY_HEIGHT},
- {x, ?ENTRY_X2},
- {y, ?KEYPOS_ENTRY_Y},
- {bg, {255,255,255}},
- {fg, {0,0,0}},
- {font, ?FONT},
- {enable, true},
- {keypress, true},
- {text, integer_to_list(?DEFAULT_KEYPOS)}
- ]),
-
- gs:radiobutton(set, frame2, [{width, ?RBTN_WIDTH1},
- {height, ?RBTN_HEIGHT},
- {x, ?RBTN_X1},
- {y, ?RBTN_Y1},
- {align, w},
- {label, {text, "set"}},
- {group, type}
- ]),
- gs:radiobutton(ordered_set, frame2, [{width, ?RBTN_WIDTH1},
- {height, ?RBTN_HEIGHT},
- {x, ?RBTN_X2},
- {y, ?RBTN_Y1},
- {align, w},
- {label, {text, "ordered_set"}},
- {group, type}
- ]),
- gs:radiobutton(bag, frame2, [{width, ?RBTN_WIDTH1},
- {height, ?RBTN_HEIGHT},
- {x, ?RBTN_X1},
- {y, ?RBTN_Y1PLUS},
- {align, w},
- {label, {text, "bag"}},
- {group, type}
- ]),
- gs:radiobutton(duplicate_bag, frame2, [{width, ?RBTN_WIDTH2},
- {height, ?RBTN_HEIGHT},
- {x, ?RBTN_X2},
- {y, ?RBTN_Y1PLUS},
- {align, w},
- {label, {text, "duplicate_bag"}},
- {group, type}
- ]),
-
- gs:radiobutton(public, frame2, [{width, ?RBTN_WIDTH1},
- {height, ?RBTN_HEIGHT},
- {x, ?RBTN_X1},
- {y, ?RBTN_Y2},
- {align, w},
- {label, {text, "public"}},
- {group, protection}
- ]),
- gs:radiobutton(protected, frame2, [{width, ?RBTN_WIDTH1},
- {height, ?RBTN_HEIGHT},
- {x, ?RBTN_X2},
- {y, ?RBTN_Y2},
- {align, w},
- {label, {text, "protected"}},
- {group, protection}
- ]),
- gs:radiobutton(private, frame2, [{width, ?RBTN_WIDTH2},
- {height, ?RBTN_HEIGHT},
- {x, ?RBTN_X3},
- {y, ?RBTN_Y2},
- {align, w},
- {label, {text, "private"}},
- {group, protection}
- ]),
-
- gs:checkbutton(named_table, frame1, [{width, ?NAMED_TABLE_CBTN_WIDTH},
- {height, ?CBTN_HEIGHT},
- {x, ?NAMED_TABLE_CBTN_X},
- {y, ?NAMED_TABLE_CBTN_Y},
- {align, w},
- {label, {text, "Named table"}},
- {select, false},
- {data, true}
- ]),
-
- gs:checkbutton(open_browser, frame3, [{width, ?OPEN_BROWSER_CBTN_WIDTH},
- {height, ?CBTN_HEIGHT},
- {x, ?OPEN_BROWSER_CBTN_X},
- {y, ?OPEN_BROWSER_CBTN_Y},
- {align, w},
- {label, {text, "Open browser"}},
- {select, true},
- {data, false}
- ]),
-
-%% gs:label(frame2, [{width, ?VLINE_LBL_WIDTH},
-%% {height, ?VLINE_LBL_HEIGHT},
-%% {x, ?VLINE_LBL_X},
-%% {y, ?VLINE_LBL_Y1},
-%% {bg, {0,0,0}}
-%% ]),
-%% gs:label(frame2, [{width, ?VLINE_LBL_WIDTH},
-%% {height, ?VLINE_LBL_HEIGHT},
-%% {x, ?VLINE_LBL_X},
-%% {y, ?VLINE_LBL_Y2},
-%% {bg, {0,0,0}}
-%% ]),
-%% gs:label(frame2, [{width, ?HLINE_LBL_WIDTH},
-%% {height, ?HLINE_LBL_HEIGHT},
-%% {x, ?HLINE_LBL_X},
-%% {y, ?HLINE_LBL_Y},
-%% {bg, {0,0,0}}
-%% ]),
-%%
- gs:button(ok, frame3, [{width, ?BTN_WIDTH},
- {height, ?BTN_HEIGHT},
- {x, ?BTN_X1},
- {y, ?BTN_Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}},
- {label, {text, "OK"}}
- ]),
- gs:button(cancel, frame3, [{width, ?BTN_WIDTH},
- {height, ?BTN_HEIGHT},
- {x, ?BTN_X2},
- {y, ?BTN_Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}},
- {label, {text, "Cancel"}}
- ]),
-
- gs:config(?DEFAULT_TYPE, [{select, true}]),
- gs:config(?DEFAULT_PROT, [{select, true}]),
-
- gs:config(win, [{map, true}]).
-
-
-
-
-
-
-
diff --git a/lib/tv/src/tv_nodewin.erl b/lib/tv/src/tv_nodewin.erl
deleted file mode 100644
index 8376c4a7aa..0000000000
--- a/lib/tv/src/tv_nodewin.erl
+++ /dev/null
@@ -1,412 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_nodewin).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,listbox,3}},
- {nowarn_deprecated_function,{gs,menu,3}},
- {nowarn_deprecated_function,{gs,menubar,3}},
- {nowarn_deprecated_function,{gs,menubutton,3}},
- {nowarn_deprecated_function,{gs,menuitem,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--export([start/2, init/3]).
-
-
--include("tv_int_msg.hrl").
-
-
-
--define(WINDOW_WIDTH, 230).
--define(WINDOW_HEIGHT, 260).
--define(DEFAULT_BG_COLOR, {217,217,217}).
--define(POLL_INTERVAL, 5000).
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-start(CurrNode, ErrMsgMode) ->
- spawn_link(?MODULE, init, [self(), CurrNode, ErrMsgMode]).
-
-
-
-
-
-init(Pid, CurrNode, ErrMsgMode) ->
- process_flag(trap_exit, true),
- net_kernel:monitor_nodes(true),
- put(error_msg_mode, ErrMsgMode),
- gs:start(),
- NewCurrNode = update_node_listbox(CurrNode, false),
- tell_master(NewCurrNode, CurrNode, Pid),
- loop(Pid, NewCurrNode, node(), false).
-
-
-
-
-%%%*********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-init_window(CurrNode, Pid) ->
- create_window(),
- NewCurrNode = update_node_listbox(CurrNode, true),
- tell_master(NewCurrNode, CurrNode, Pid),
- gs:config(win, [{map,true}]),
- NewCurrNode.
-
-
-
-
-handle_error(nodedown) ->
- gs:window(errorwin, gs:start(), []),
- gs:config(errorwin, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(errorwin, "TV Notification", ["The selected node is down!"]);
- haiku ->
- Msg = ["With searching comes loss",
- "And the presence of absence:",
- "Node is down."],
- tv_utils:notify(errorwin, "TV Notification", Msg)
- end,
- gs:destroy(errorwin);
-handle_error(distributed) ->
- gs:window(errorwin, gs:start(), []),
- gs:config(errorwin, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(errorwin, "TV Notification",
- ["The system has become distributed!"]);
- haiku ->
- Msg = [],
- tv_utils:notify(errorwin, "TV Notification", Msg)
- end,
- gs:destroy(errorwin);
-handle_error(undistributed) ->
- gs:window(errorwin, gs:start(), []),
- gs:config(errorwin, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(errorwin, "TV Notification",
- ["The system is no longer distributed!"]);
- haiku ->
- Msg = ["The system you see",
- "Is not a distributed",
- "system anymore."],
- tv_utils:notify(errorwin, "TV Notification", Msg)
- end,
- gs:destroy(errorwin).
-
-get_node_lists(CurrNode) ->
- NodeDataList = lists:sort([node() | nodes()]),
- NodeTextList = lists:map(fun(Item) ->
- " " ++ atom_to_list(Item)
- end,
- NodeDataList),
-
- %% It *may* be possible that CurrNode has disappeared!
- %% If this is the case, use the node where TV resides
- %% as new current node.
- %% This also covers the case when our own node (or some
- %% other node) suddenly goes distributed.
-
- NewCurrNode = case lists:member(CurrNode, NodeDataList) of
- true ->
- CurrNode;
- false ->
- node()
- end,
-
- %% Now get the index that shall be marked in the node listbox.
- %% Remember that the first item has number 0 (zero)!
- NodeMarkIndex = get_node_mark_index(NewCurrNode, NodeDataList, 0),
-
- {NewCurrNode, NodeDataList, NodeTextList, NodeMarkIndex}.
-
-
-
-
-%% We know that CurrNode is *somewhere* in the list, since we have checked.
-%% If the original CurrNode wasn't there, then we are using node() instead,
-%% which definitely is in the list. (node() may have gone distributed in the
-%% meantime, but it *IS* in the list!) :-)
-
-get_node_mark_index(CurrNode, [H | T], Acc) when CurrNode =/= H ->
- get_node_mark_index(CurrNode, T, Acc + 1);
-get_node_mark_index(CurrNode, [CurrNode | _], Acc) ->
- Acc. %% Acc tells the index of the current head. :-)
-
-
-
-
-
-check_selected_node('nonode@nohost', _OldNode, _WinCreated) when node() =:= 'nonode@nohost' ->
- %% Not distributed, OK!
- 'nonode@nohost';
-check_selected_node(_Node, _OldNode, WinCreated) when node() =:= 'nonode@nohost' ->
- %% No longer distributed, but previously was!
- handle_error(undistributed),
- update_node_listbox('nonode@nohost', WinCreated);
-check_selected_node(Node, _OldNode, _WinCreated) when Node =:= node() ->
- %% We are distributed, but on
- %% our own node! Since we
- % still are running, the node
- %% is up.
- Node;
-check_selected_node(Node, 'nonode@nohost', WinCreated) ->
- %% The system has been distributed!
- net_kernel:monitor_nodes(true),
- handle_error(distributed),
- update_node_listbox(Node, WinCreated);
-check_selected_node(Node, _OldNode, WinCreated) ->
- %% We are distributed, and a new node has been chosen!
- %% We better check this node!
- case net_adm:ping(Node) of
- pong ->
- Node;
- _Other ->
- handle_error(nodedown),
- update_node_listbox(Node, WinCreated)
- end.
-
-
-
-available_nodes() ->
- lists:sort([node() | nodes()]).
-
-
-
-loop(Pid, CurrNode, HomeNode, WinCreated) ->
- receive
-
- {nodedown, _Node} ->
- flush_nodedown_messages(),
- flush_nodeup_messages(),
- case lists:member(CurrNode, available_nodes()) of
- true ->
- done;
- false when node() =:= 'nonode@nohost', CurrNode =/= 'nonode@nohost' ->
- handle_error(undistributed);
- false ->
- handle_error(nodedown)
- end,
- NewCurrNode = update_node_listbox(CurrNode, WinCreated),
- tell_master(NewCurrNode, CurrNode, Pid),
- loop(Pid, NewCurrNode, node(), WinCreated);
-
-
- {nodeup, _Node} ->
- flush_nodeup_messages(),
- flush_nodedown_messages(),
- case lists:member(CurrNode, available_nodes()) of
- true ->
- done;
- false when node() =:= 'nonode@nohost', CurrNode =/= 'nonode@nohost' ->
- handle_error(undistributed);
- false when CurrNode =:= 'nonode@nohost' ->
- net_kernel:monitor_nodes(true),
- handle_error(distributed);
- false ->
- handle_error(nodedown)
- end,
- NewCurrNode = update_node_listbox(CurrNode, WinCreated),
- tell_master(NewCurrNode, CurrNode, Pid),
- loop(Pid, NewCurrNode, node(), WinCreated);
-
-
- {gs, node_listbox, click, Data, [Idx, _Txt | _]} ->
- NewCurrNode = check_selected_node(lists:nth(Idx + 1, Data), CurrNode, WinCreated),
- tell_master(NewCurrNode, CurrNode, Pid),
- loop(Pid, NewCurrNode, node(), WinCreated);
-
-
- {gs, win, configure, _, _} ->
- gs:config(win, [{width, ?WINDOW_WIDTH}, {height, ?WINDOW_HEIGHT}]),
- loop(Pid, CurrNode, HomeNode, WinCreated);
-
-
- show_window when WinCreated->
- gs:config(win, [raise]),
- loop(Pid, CurrNode, HomeNode, WinCreated);
-
- show_window when not WinCreated ->
- init_window(CurrNode, Pid),
- loop(Pid, CurrNode, HomeNode, true);
-
- {gs, _Id, click, close_menu, _Args} ->
- gs:destroy(win),
- loop(Pid, CurrNode, HomeNode, false);
-
-
- {gs, _Id, keypress, _Data, [c, _, 0, 1 | _]} ->
- gs:destroy(win),
- loop(Pid, CurrNode, HomeNode, false);
-
-
- {gs, _Id, keypress, _Data, ['C', _, 1, 1 | _]} ->
- gs:destroy(win),
- loop(Pid, CurrNode, HomeNode, false);
-
-
- {gs, _Id, keypress, _Data, _Args} ->
- loop(Pid, CurrNode, HomeNode, WinCreated);
-
-
- {gs, _, destroy, _, _} ->
- loop(Pid, CurrNode, HomeNode, false);
-
-
- {error_msg_mode, Mode} ->
- put(error_msg_mode, Mode),
- loop(Pid, CurrNode, HomeNode, WinCreated);
-
- {'EXIT', Pid, _Reason} ->
- net_kernel:monitor_nodes(false),
- exit(normal);
-
-
- {'EXIT', _OtherPid, _Reason} ->
- loop(Pid, CurrNode, HomeNode, WinCreated);
-
-
- _Other ->
- io:format("Node window received message ~p ~n", [_Other]),
- loop(Pid, CurrNode, HomeNode, WinCreated)
-
- after
- 1000 ->
- NewHomeNode = case node() of
- HomeNode ->
- HomeNode;
- Other ->
- self() ! {nodeup, Other}
- end,
- loop(Pid, CurrNode, NewHomeNode, WinCreated)
- end.
-
-
-
-
-tell_master(NewNode, NewNode, _Pid) ->
- done;
-tell_master(NewNode, _OldNode, Pid) ->
- Pid ! {tv_new_node, self(), NewNode}.
-
-
-
-
-flush_nodedown_messages() ->
- receive
- {nodedown,_Node} ->
- flush_nodedown_messages()
- after
- 0 ->
- done
- end.
-
-
-
-
-flush_nodeup_messages() ->
- receive
- {nodeup,_Node} ->
- flush_nodeup_messages()
- after
- 0 ->
- done
- end.
-
-
-
-
-update_node_listbox(Node, WinCreated) ->
- {NewNode, NodeDataList, NodeTextList, MarkIndex} = get_node_lists(Node),
- case WinCreated of
- false ->
- done;
- true ->
- catch gs:config(node_listbox, [{data, NodeDataList},
- {items, NodeTextList},
- {selection, MarkIndex}
- ])
- end,
- NewNode.
-
-
-
-
-
-create_window() ->
- gs:window(win, gs:start(), [{width, ?WINDOW_WIDTH},
- {height, ?WINDOW_HEIGHT},
- {bg, ?DEFAULT_BG_COLOR},
- {title, "[TV] Connected nodes"},
- {configure, true},
- {destroy, true},
- {cursor, arrow},
- {keypress, true}
- ]),
- gs:menubar(menubar, win, [{bg, ?DEFAULT_BG_COLOR}
- ]),
- gs:menubutton(mbutt, menubar, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}}, % firebrick
- {label, {text, " File "}},
- {underline, 1}
- ]),
-
- % Create the actual menu!
- gs:menu(menu, mbutt, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}}]),
- gs:menuitem(menu, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}},
- {label, {text, " Close Ctrl-C "}},
- {data, close_menu},
- {underline, 1}
- ]),
-
- Xpos = 4,
- Ypos = 40,
- gs:listbox(node_listbox, win, [{x, Xpos},
- {y, Ypos},
- {width, ?WINDOW_WIDTH - 2 * Xpos},
- {height, ?WINDOW_HEIGHT - Ypos - Xpos},
- {bg, {255,255,255}},
- {vscroll, right},
- {hscroll, true},
- {click, true}
- ]).
-
-
-
-
-
-
-
-
diff --git a/lib/tv/src/tv_pb.erl b/lib/tv/src/tv_pb.erl
deleted file mode 100644
index 81e7e7e2d1..0000000000
--- a/lib/tv/src/tv_pb.erl
+++ /dev/null
@@ -1,663 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_pb).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,frame,2}}]).
-
-
-
--export([pb/1]).
-
-
--include("tv_int_def.hrl").
--include("tv_pd_int_msg.hrl").
--include("tv_pb_int_def.hrl").
-
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function: pb.
-%%
-%% Return Value: None.
-%%
-%% Description: Process controlling the grid buttons on the display.
-%%
-%% Parameters: None.
-%%======================================================================
-
-
-pb(ParentPid) ->
- process_flag(trap_exit, true),
- ProcVars = #process_variables{parent_pid = ParentPid},
- loop(ProcVars).
-
-
-
-
-
-
-
-
-%%%********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%********************************************************************
-
-
-
-
-
-%%======================================================================
-%% Function: loop.
-%%
-%% Return Value: None.
-%%
-%% Description: Eternal (well, almost) loop, receiving messages and
-%% handling them.
-%%
-%% Parameters:
-%%======================================================================
-
-
-loop(ProcVars) ->
- receive
- Msg ->
- case Msg of
-
- #pb_update_vbtns{} ->
- NewProcVars = update_vbtns(Msg, ProcVars),
- loop(NewProcVars);
-
- #pb_key_info{} ->
- NewProcVars = update_keys(Msg, ProcVars),
- loop(NewProcVars);
-
- #pb_update_hbtns{} ->
- NewProcVars = update_hbtns(Msg, ProcVars),
- loop(NewProcVars);
-
- #pb_set_sort_col{} ->
- NewProcVars = set_sort_col(Msg, ProcVars),
- loop(NewProcVars);
-
- #pb_remove_marks{} ->
- NewProcVars = remove_marks(ProcVars),
- loop(NewProcVars);
-
- #pb_init_btns{} ->
- NewProcVars = init_btns(Msg, ProcVars),
- loop(NewProcVars);
-
- {gs, Id, Event, Data, Args} ->
- NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars),
- loop(NewProcVars);
-
-
- {'EXIT', Pid, Reason} ->
- ParentPid = ProcVars#process_variables.parent_pid,
- exit_signals({Pid, Reason}, ParentPid, ProcVars),
- loop(ProcVars);
-
- _Other ->
- loop(ProcVars)
- end
- end.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-exit_signals(ExitInfo, ParentPid, _ProcVars) ->
- case ExitInfo of
- {ParentPid, _Reason} ->
- exit(normal);
- _Other ->
- done
- end.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-gs_messages(Msg, ProcVars) ->
-
- case Msg of
-
- {Id, click, {hbtn, RealCol, VirtualCol}, _Args} ->
- handle_col_marking(Id, RealCol, VirtualCol, ProcVars);
-
- {Id, buttonpress, {resbtn, RealCol, VirtualCol, Xpos}, [1 | _Tail]} ->
- handle_col_resizing(Id, RealCol, VirtualCol, Xpos, ProcVars),
- ProcVars;
-
- {_Id, click, {vbtn, RealRow, VirtualRow}, _Args} ->
- handle_row_marking(RealRow, VirtualRow, ProcVars);
-
- _OtherMessage ->
- ProcVars
-
- end.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-remove_marks(ProcVars) ->
- #process_variables{col_mark_params = ColMarkP,
- row_mark_params = RowMarkP} = ProcVars,
-
- #col_mark_params{col_btn_id = BtnId,
- virtual_col_marked = VirtualCol,
- virtual_sort_col = SortCol} = ColMarkP,
-
- case BtnId of
- undefined ->
- done;
- _AnyId ->
- case VirtualCol of
- SortCol ->
- gs:config(BtnId, [{bg, ?SORT_MARK_COLOR},
- {fg, {0, 0, 0}}
- ]);
- _Other ->
- gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}}
- ])
- end
- end,
-
- NewRowMarkP = RowMarkP#row_mark_params{virtual_row_marked = undefined,
- real_row_marked = undefined
- },
- NewColMarkP = ColMarkP#col_mark_params{col_btn_id = undefined,
- virtual_col_marked = undefined
- },
- ProcVars#process_variables{col_mark_params = NewColMarkP,
- row_mark_params = NewRowMarkP
- }.
-
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-handle_col_marking(BtnId, RealCol, VirtualCol, ProcVars) ->
- #process_variables{parent_pid = PdPid,
- col_mark_params = ColMarkP,
- row_mark_params = RowMarkP} = ProcVars,
-
- #col_mark_params{col_btn_id = OldBtnId,
- virtual_col_marked = OldVirtualCol,
- virtual_sort_col = SortCol} = ColMarkP,
-
- {ColMarked, NewColMarkP} = mark_col_btn(BtnId, OldBtnId, VirtualCol,
- OldVirtualCol, RealCol, SortCol,
- ColMarkP),
-
- PdPid ! #pb_col_marked{sender = self(),
- col_marked = ColMarked,
- real_col = RealCol,
- virtual_col = VirtualCol
- },
-
- NewRowMarkP = RowMarkP#row_mark_params{virtual_row_marked = undefined,
- real_row_marked = undefined
- },
- ProcVars#process_variables{col_mark_params = NewColMarkP,
- row_mark_params = NewRowMarkP
- }.
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-handle_row_marking(RealRow, VirtualRow, ProcVars) ->
- #process_variables{parent_pid = PdPid,
- col_mark_params = ColMarkP,
- row_mark_params = RowMarkP} = ProcVars,
-
- #col_mark_params{col_btn_id = OldBtnId,
- virtual_col_marked = OldVirtualCol,
- virtual_sort_col = SortCol} = ColMarkP,
-
- {_ColMarked, NewColMarkP} = mark_col_btn(OldBtnId, OldBtnId, OldVirtualCol,
- OldVirtualCol, undefined, SortCol,
- ColMarkP),
-
- #row_mark_params{virtual_row_marked = OldVirtualRow} = RowMarkP,
-
- % Check if row shall be marked or unmarked!
- {RowMarked, NewRowMarkP} = check_marked_row(VirtualRow, OldVirtualRow, RealRow,
- RowMarkP),
-
- PdPid ! #pb_row_marked{sender = self(),
- row_marked = RowMarked,
- real_row = RealRow,
- virtual_row = VirtualRow
- },
-
- ProcVars#process_variables{row_mark_params = NewRowMarkP,
- col_mark_params = NewColMarkP}.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-%% Three cases: no button previously clicked, or same button clicked,
-%% or some other button clicked.
-
-check_marked_row(NewVirtRow, undefined, RealRow, RowMarkP) ->
- % No btn already pressed!
- {true, RowMarkP#row_mark_params{virtual_row_marked = NewVirtRow,
- real_row_marked = RealRow}};
-check_marked_row(NewVirtRow, OldVirtRow, _RealRow, RowMarkP) when NewVirtRow =:= OldVirtRow ->
- % The button previously pressed has been pressed again!
- {false, RowMarkP#row_mark_params{virtual_row_marked = undefined,
- real_row_marked = undefined}};
-check_marked_row(NewVirtRow, _OldVirtRow, RealRow, RowMarkP) ->
- % A new btn has been pressed!
- {true, RowMarkP#row_mark_params{virtual_row_marked = NewVirtRow,
- real_row_marked = RealRow}}.
-
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-set_sort_col(Msg, ProcVars) ->
- #pb_set_sort_col{virtual_col = SortCol} = Msg,
- tv_pb_funcs:set_new_sort_col(SortCol, ProcVars).
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-%% Three cases: no button previously clicked, or same button clicked,
-%% or some other button clicked.
-
-mark_col_btn(NewId, undefined, NewVirtCol, _OldVirtCol, _RealCol, _SortCol, ColMarkP) ->
- % No btn already pressed!
- gs:config(NewId, [{bg, ?COL_MARK_COLOR},
- {fg, {255, 255, 255}}
- ]),
- {true, ColMarkP#col_mark_params{col_btn_id = NewId,
- virtual_col_marked = NewVirtCol}};
-mark_col_btn(NewId, _OldId, NewVirtCol, OldVirtCol, _RealCol, SortCol, ColMarkP) when NewVirtCol =:= OldVirtCol, NewVirtCol =:= SortCol ->
- % The button previously pressed has been pressed again!
- gs:config(NewId, [{bg, ?SORT_MARK_COLOR},
- {fg, {0, 0, 0}}
- ]),
- {false, ColMarkP#col_mark_params{col_btn_id = undefined,
- virtual_col_marked = undefined}};
-mark_col_btn(NewId, _OldId, NewVirtCol, OldVirtCol, _RealCol, _SortCol, ColMarkP) when NewVirtCol =:= OldVirtCol ->
- % The button previously pressed has been pressed again!
- gs:config(NewId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}}
- ]),
- {false, ColMarkP#col_mark_params{col_btn_id = undefined,
- virtual_col_marked = undefined}};
-mark_col_btn(NewId, OldId, NewVirtCol, _OldVirtCol, _RealCol, _SortCol, ColMarkP) ->
- % A new btn has been pressed!
- gs:config(OldId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}}
- ]),
- gs:config(NewId, [{bg, ?COL_MARK_COLOR},
- {fg, {255, 255, 255}}
- ]),
- {true, ColMarkP#col_mark_params{col_btn_id = NewId,
- virtual_col_marked = NewVirtCol}}.
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-handle_col_resizing(RbtnId, RealCol, VirtualCol, Xpos, ProcVars) ->
- gs:config(RbtnId, [{motion, true}]),
- #process_variables{parent_pid = ParentPid,
- grid_frame_id = GrFrId,
- grid_frame_height = Height,
- hbtn_height = HbtnH,
- resbtn_width = RbtnW,
- cols_shown = ColsShown} = ProcVars,
-
- LineId = gs:frame(GrFrId, [{width, 1},
- {height, Height - HbtnH},
- {x, Xpos},
- {y, HbtnH - 1},
- {bg, ?DEFAULT_BG_COLOR}
- ]),
- MinColWidth = RbtnW,
-
- OldColWidth = lists:nth(RealCol, ColsShown),
- Xdiff = get_xdiff(RbtnId, 1, 0, LineId, Xpos, MinColWidth - OldColWidth),
-
- ParentPid ! #pb_new_colwidth{sender = self(),
- real_col = RealCol,
- virtual_col = VirtualCol,
- xdiff = Xdiff},
-
- gs:config(RbtnId, [{motion, false}]),
- gs:destroy(LineId).
-
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff) ->
- receive
- {gs, Id, motion, {resbtn, _RealCol, _VirtCol, _OldXpos}, [NewXdiff | _T]} ->
- UsedXdiff = erlang:max(MinAllowedXdiff, NewXdiff),
- gs:config(LineId, [{x, LineXpos + UsedXdiff}]),
- get_xdiff(Id, Btn, UsedXdiff, LineId, LineXpos, MinAllowedXdiff);
- {gs, Id, buttonrelease, _Data, [Btn | _T]} ->
- LastXdiff;
- {gs, Id, buttonrelease, _Data, _Args} ->
- get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff);
- {gs, Id, buttonpress, _Data, _Args} ->
- get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff)
- end.
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-init_btns(Msg, ProcVars) ->
- #pb_init_btns{parent_id = ParentId,
- parent_width = Width,
- parent_height = Height,
- ypos = Ypos,
- hbtn_height = HbtnH,
- resbtn_width = RbtnW,
- vbtn_width = VbtnW,
- nof_rows = NofRows,
- row_height = RowHeight,
- first_col_shown = FirstColShown,
- cols_shown = ColsShown} = Msg,
-
- NewProcVars = tv_pb_funcs:init_btns(ParentId, Ypos, HbtnH, VbtnW, RbtnW,
- FirstColShown, ColsShown, NofRows,
- RowHeight, ProcVars),
-
- gs:frame(ParentId, [{bg, {0, 0, 0}},
- {bw, 0},
- {width, 1300},
- {height, 1},
- {x, 0},
- {y, Ypos - 1}
- ]),
- NewProcVars#process_variables{grid_frame_width = Width,
- grid_frame_height = Height
- }.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_hbtns(Msg, ProcVars) ->
- #pb_update_hbtns{parent_width = Width,
- parent_height = Height,
- first_col_shown = FirstColShown,
- cols_shown = ColsShown} = Msg,
-
- NewProcVars = tv_pb_funcs:update_hbtns(FirstColShown, ColsShown, ProcVars),
-
- NewProcVars#process_variables{grid_frame_width = Width,
- grid_frame_height = Height
- }.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_vbtns(Msg, ProcVars) ->
- #pb_update_vbtns{color_list = Colors,
- first_row_shown = FirstRowShown,
- nof_rows_shown = NofRowsShown,
- blinking_enabled = BlinkEnabled} = Msg,
-
- tv_pb_funcs:update_vbtns(NofRowsShown, FirstRowShown, Colors, BlinkEnabled,
- ProcVars).
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_keys(Msg, ProcVars) ->
- #pb_key_info{list_of_keys = KeyList} = Msg,
- tv_pb_funcs:update_keys(KeyList, ProcVars).
diff --git a/lib/tv/src/tv_pb_funcs.erl b/lib/tv/src/tv_pb_funcs.erl
deleted file mode 100644
index 24d1120597..0000000000
--- a/lib/tv/src/tv_pb_funcs.erl
+++ /dev/null
@@ -1,1056 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_pb_funcs).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,canvas,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-
-
--export([init_btns/10,
- update_hbtns/3,
- update_vbtns/5,
- update_keys/2,
- set_new_sort_col/2]).
-
-
--include("tv_int_def.hrl").
--include("tv_pb_int_def.hrl").
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-
-init_btns(ParentId, Ypos, HbtnH,
- VbtnW, ResbtnW, FirstColShown, ColsShown, NofRows, RowH, ProcVars) ->
-
- #process_variables{key_numbers = KeyNos,
- key_ids = KeyIds} = ProcVars,
-
-% C = gs:canvas(ParentId, [{width, VbtnW - 1},
-% {height, HbtnH},
-% {x, 0},
-% {y, HbtnH + 1},
-% {bg, white}
-% ]),
-% gs:create(image, C, [{load_gif, "erlang.gif"}]),
-
- {HbtnsShown, ResBtnsShown} = update_hbtns(ColsShown, [], [],
- FirstColShown, ParentId, Ypos,
- HbtnH, ResbtnW, VbtnW),
-
- NewKeyIds = update_keys(KeyNos, KeyIds, FirstColShown,
- FirstColShown + length(ColsShown) - 1, HbtnsShown,
- ParentId, []),
-
- VbtnsShown = create_vbtns(ParentId, Ypos, NofRows, RowH, VbtnW, HbtnH),
- ProcVars#process_variables{grid_frame_id = ParentId,
- ypos = Ypos,
- hbtn_height = HbtnH,
- vbtn_width = VbtnW,
- resbtn_width = ResbtnW,
- first_col_shown = FirstColShown,
- hbtns_shown = HbtnsShown,
- resbtns_shown = ResBtnsShown,
- vbtns_shown = VbtnsShown,
- cols_shown = ColsShown,
- key_ids = NewKeyIds
- }.
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_hbtns(FirstColShown, ColsShown, ProcVars) ->
- #process_variables{grid_frame_id = ParentId,
- first_col_shown = OldFirstColShown,
- cols_shown = OldColsShown,
- ypos = Ypos,
- hbtn_height = HbtnH,
- vbtn_width = VbtnW,
- resbtn_width = ResbtnW,
- hbtns_shown = HbtnsShown,
- resbtns_shown = ResbtnsShown,
- key_numbers = KeyNos,
- key_ids = KeyIds,
- col_mark_params = ColMarkP} = ProcVars,
-
- % Only if the grid has been scrolled horizontally need we move the
- % col mark!
- case FirstColShown of
- OldFirstColShown ->
- done;
- _NewValue ->
- #col_mark_params{col_btn_id = MarkedBtnId,
- virtual_col_marked = ColMarked,
- sort_btn_id = SortBtnId,
- virtual_sort_col = SortCol} = ColMarkP,
- unmark_marked_col(MarkedBtnId, ColMarked, SortCol),
- unmark_sort_col(SortBtnId, ColMarked, SortCol)
- end,
-
- {NewHbtns, NewResbtns, NewKeys} =
- case {FirstColShown, ColsShown} of
- {OldFirstColShown, OldColsShown} ->
- {HbtnsShown, ResbtnsShown, KeyIds};
- _Other ->
- {NewHbtnsShown, NewResbtnsShown} = update_hbtns(ColsShown,
- HbtnsShown,
- ResbtnsShown,
- FirstColShown,
- ParentId,
- Ypos,
- HbtnH,
- ResbtnW,
- VbtnW),
- NewKeyIds = update_keys(KeyNos, KeyIds, FirstColShown,
- FirstColShown + length(ColsShown) - 1,
- NewHbtnsShown, ParentId, []),
- {NewHbtnsShown, NewResbtnsShown, NewKeyIds}
- end,
-
- % Now mark the marked column again!
- NewColMarkP = mark_marked_col(NewHbtns, FirstColShown, ColMarkP),
-
- ProcVars#process_variables{first_col_shown = FirstColShown,
- hbtns_shown = NewHbtns,
- resbtns_shown = NewResbtns,
- cols_shown = ColsShown,
- key_ids = NewKeys,
- col_mark_params = NewColMarkP
- }.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_vbtns(NofRowsShown, FirstRowShown, Colors, BlinkEnabled, ProcVars) ->
- #process_variables{vbtns_shown = Vbtns,
- blink_color_list = BlinkList} = ProcVars,
-
- update_vbtns(1, NofRowsShown, FirstRowShown, Vbtns, Colors, BlinkEnabled, BlinkList),
- NewProcVars = update_sort_btn_mark(ProcVars),
- NewProcVars.
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-set_new_sort_col(SortCol, ProcVars) ->
- #process_variables{hbtns_shown = HbtnsShown,
- col_mark_params = ColMarkP} = ProcVars,
-
- #col_mark_params{col_btn_id = MarkedColBtnId,
- sort_btn_id = OldSortBtnId} = ColMarkP,
-
- % Set the new color of the sort btn, and remove the mark, if it is the same
- % column!
-
- case MarkedColBtnId of
- undefined ->
- done;
- _AnyId ->
- gs:config(MarkedColBtnId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}}
- ])
- end,
-
- SortBtnId = get_btn_id(SortCol, HbtnsShown),
- case SortBtnId of
- undefined ->
- % The btn isn't visible, or no sorting shall be performed!
- gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}}
- ]);
- _Other ->
- % Unmark the old sort btn id!
- gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}}
- ]),
- gs:config(SortBtnId, [{bg, ?SORT_MARK_COLOR},
- {fg, {0, 0, 0}}
- ])
- end,
-
- NewColMarkP = ColMarkP#col_mark_params{col_btn_id = undefined,
- virtual_col_marked = undefined,
- sort_btn_id = SortBtnId,
- virtual_sort_col = SortCol
- },
- ProcVars#process_variables{col_mark_params = NewColMarkP}.
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_keys(KeyList, ProcVars) ->
- #process_variables{key_numbers = OldKeyList,
- key_ids = KeyIds,
- first_col_shown = FirstColShown,
- cols_shown = ColsShown,
- hbtns_shown = HbtnsShown,
- grid_frame_id = ParentId} = ProcVars,
-
- NewKeyIds = case KeyList of
- OldKeyList ->
- KeyIds;
- NewKeyList ->
- update_keys(NewKeyList, KeyIds, FirstColShown,
- FirstColShown + length(ColsShown) - 1,
- HbtnsShown, ParentId, [])
- end,
-
- ProcVars#process_variables{key_numbers = KeyList,
- key_ids = NewKeyIds
- }.
-
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-unmark_sort_col(undefined, _ColMarked, _SortCol) ->
- done;
-unmark_sort_col(SortBtnId, _ColMarked, _SortCol) ->
- gs:config(SortBtnId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}}
- ]).
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-mark_marked_col(HbtnsShown, _FirstColShown, ColMarkP) ->
- #col_mark_params{virtual_col_marked = VirtualCol,
- virtual_sort_col = SortCol} = ColMarkP,
-
- {NewMarkBtnId, NewSortBtnId} =
- case VirtualCol of
- SortCol ->
- % Same btn!
- BtnId = get_btn_id(VirtualCol,
- HbtnsShown),
- gs:config(BtnId, [{bg, ?SORT_MARK_COLOR},
- {fg, {0, 0, 0}}
- ]),
- {BtnId, BtnId};
- _OtherCol ->
- MarkBtnId = get_btn_id(VirtualCol, HbtnsShown),
- case MarkBtnId of
- undefined ->
- done;
- _Else ->
- gs:config(MarkBtnId, [{bg, ?COL_MARK_COLOR},
- {fg, {255, 255, 255}}
- ])
- end,
-
- SortBtnId = get_btn_id(SortCol, HbtnsShown),
- case SortBtnId of
- undefined ->
- done;
- _OtherId ->
- gs:config(SortBtnId, [{bg, ?SORT_MARK_COLOR},
- {fg, {0, 0, 0}}
- ])
- end,
-
- {MarkBtnId, SortBtnId}
- end,
-
- ColMarkP#col_mark_params{col_btn_id = NewMarkBtnId,
- sort_btn_id = NewSortBtnId}.
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-unmark_marked_col(undefined, _ColMarked, _SortCol) ->
- done;
-unmark_marked_col(BtnId, _ColMarked, _SortCol) ->
- gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}}
- ]).
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_sort_btn_mark(ProcVars) ->
- #process_variables{hbtns_shown = HbtnsShown,
- col_mark_params = ColMarkP} = ProcVars,
-
- #col_mark_params{col_btn_id = MarkedColBtnId,
- virtual_col_marked = ColMarked,
- sort_btn_id = OldSortBtnId,
- virtual_sort_col = SortCol} = ColMarkP,
-
- {NewMarkedColBtnId, NewColMarked} = case ColMarked of
- SortCol ->
- {undefined, undefined};
- _Other ->
- {MarkedColBtnId, ColMarked}
- end,
-
- NewSortBtnId = set_sort_btn_color(OldSortBtnId, SortCol, HbtnsShown),
-
- NewColMarkP = ColMarkP#col_mark_params{col_btn_id = NewMarkedColBtnId,
- virtual_col_marked = NewColMarked,
- sort_btn_id = NewSortBtnId},
-
- ProcVars#process_variables{col_mark_params = NewColMarkP}.
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_btn_id(VirtualCol, HbtnsShown) ->
- case lists:keysearch(VirtualCol, #hbtn.virtual_col, HbtnsShown) of
- false ->
- undefined;
- {value, HbtnRec} ->
- HbtnRec#hbtn.id
- end.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-set_sort_btn_color(undefined, SortCol, HbtnsShown) ->
- case lists:keysearch(SortCol, #hbtn.virtual_col, HbtnsShown) of
- false ->
- undefined;
- {value, HbtnRec} ->
- BtnId = HbtnRec#hbtn.id,
- gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}]),
- BtnId
- end;
-set_sort_btn_color(BtnId, undefined, _HbtnsShown) ->
- gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR}]);
-set_sort_btn_color(OldSortBtnId, SortCol, HbtnsShown) ->
- case gs:read(OldSortBtnId, bg) of
- SortCol ->
- % Btn is already marked!
- OldSortBtnId;
- _OtherColor ->
- % Unmark old btn, mark new btn, if visible.
- gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR}]),
- case lists:keysearch(SortCol, #hbtn.virtual_col, HbtnsShown) of
- false ->
- undefined;
- {value, HbtnRec} ->
- BtnId = HbtnRec#hbtn.id,
- gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}]),
- BtnId
- end
- end.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_vbtns(N, NofRowsShown, _VirtualRowNo,
- _Vbtns, _Colors, _BlinkEnabled, _BlinkList) when N > NofRowsShown ->
- done;
-update_vbtns(_N, _NofRowsShown, _VirtualRowNo, [], [], _BlinkEnabled, _BlinkList) ->
- done;
-update_vbtns(_N, _NofRowsShown, _VirtualRowNo, [], _Colors, _BlinkEnabled, _BlinkList) ->
- % Right now we don't bother with dynamically creating row buttons:
- % we ought too know in advance the maximum number of rows that can
- % be visible.
- io:format("Configuration error: too few rows in grid.~n"),
- done;
-update_vbtns(N, NofRowsShown,
- VirtualRowNo, [VbtnRec | VT], [], BlinkEnabled, BlinkList) ->
- VbtnId = VbtnRec#vbtn.id,
- gs:config(VbtnId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, ?BLACK},
- {label, {text, integer_to_list(VirtualRowNo)}},
- {data, {vbtn, N, VirtualRowNo}} % Real row + virtual row
- ]),
- update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1,VT, [], BlinkEnabled,
- BlinkList);
-update_vbtns(N, NofRowsShown,
- VirtualRowNo, [VbtnRec | VT], [Color | CT], true, BlinkList) ->
- VbtnId = VbtnRec#vbtn.id,
- {Text, TextColor} = get_vbtn_text_and_textcolor(Color, VirtualRowNo),
- case lists:member(Color, BlinkList) of
- true ->
- gs:config(VbtnId, [{bg, Color},
- {fg, TextColor},
- {label, {text, Text}},
- {data, {vbtn, N, VirtualRowNo}}, % Real + virtual row
- flash
- ]);
- false ->
- gs:config(VbtnId, [{bg, Color},
- {fg, TextColor},
- {label, {text, Text}},
- {data, {vbtn, N, VirtualRowNo}} % Real + virtual row
- ])
- end,
- update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1, VT, CT, true, BlinkList);
-update_vbtns(N, NofRowsShown,
- VirtualRowNo, [VbtnRec | VT], [Color | CT], false, BlinkList) ->
- VbtnId = VbtnRec#vbtn.id,
- {Text, TextColor} = get_vbtn_text_and_textcolor(Color, VirtualRowNo),
- gs:config(VbtnId, [{bg, Color},
- {fg, TextColor},
- {label, {text, Text}},
- {data, {vbtn, N, VirtualRowNo}} % Real row + virtual row
- ]),
- update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1, VT, CT, false, BlinkList).
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_vbtn_text_and_textcolor(?BLACK, N) ->
- {integer_to_list(N), ?WHITE};
-get_vbtn_text_and_textcolor(?RED1, N) ->
- {integer_to_list(N), ?BLACK};
-get_vbtn_text_and_textcolor(?RED2, N) ->
- {integer_to_list(N), ?BLACK};
-get_vbtn_text_and_textcolor(?RED3, N) ->
- {integer_to_list(N), ?BLACK};
-get_vbtn_text_and_textcolor(?RED4, N) ->
- {integer_to_list(N), ?BLACK};
-get_vbtn_text_and_textcolor(?RED5, N) ->
- {integer_to_list(N), ?BLACK};
-get_vbtn_text_and_textcolor(?GREEN1, N) ->
- {integer_to_list(N), ?BLACK};
-get_vbtn_text_and_textcolor(?GREEN2, N) ->
- {integer_to_list(N), ?BLACK};
-get_vbtn_text_and_textcolor(?GREEN3, N) ->
- {integer_to_list(N), ?BLACK};
-get_vbtn_text_and_textcolor(?GREEN4, N) ->
- {integer_to_list(N), ?BLACK};
-get_vbtn_text_and_textcolor(?GREEN5, N) ->
- {integer_to_list(N), ?BLACK};
-get_vbtn_text_and_textcolor(_AnyOtherColor, N) ->
- {integer_to_list(N), ?BLACK}.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_vbtns(ParentId, Ypos, NofRows, RowHeight, VbtnW, HbtnH) ->
- create_vbtns(1, NofRows, RowHeight, ParentId, VbtnW, Ypos + HbtnH, []).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_vbtns(N, NofRows, _RowHeight, _ParId, _VbtnW, _Ypos, VAcc) when N > NofRows ->
- lists:reverse(VAcc);
-create_vbtns(N, NofRows, RowHeight, ParId, VbtnW, Ypos, VAcc) ->
- VHeight = RowHeight + 1,
- VInfo = create_one_vbtn(ParId, VHeight, VbtnW, Ypos, N),
- create_vbtns(N + 1, NofRows, RowHeight, ParId, VbtnW, Ypos + VHeight,
- [VInfo | VAcc]).
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_one_vbtn(ParentId, Height, VbtnW, Ypos, N) ->
- Id = gs:button(ParentId, [{width, VbtnW},
- {height, Height},
- {x, 0},
- {y, Ypos},
- {font, ?BTN_FONT},
- {bg, ?DEFAULT_BG_COLOR},
- {align, center},
- {label, {text,integer_to_list(N)}},
- {data, {vbtn, N, N}} % Real row + virtual row
- ]),
- #vbtn{virtual_row = N,
- real_row = N,
- id = Id,
- height = Height,
- ypos = Ypos}.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_hbtns([], _HBtnsShown,
- _ResBtns, _VirtualColNo, _FrId, _Ypos, _HbtnH, _ResBtnW, _VbtnW) ->
- {[], []};
-update_hbtns(ColsShown, HBtns,
- ResBtns, VirtualColNo, FrId, Ypos, HbtnH, ResBtnW, VbtnW) ->
- update_hbtns(1, ColsShown, HBtns, ResBtns, HbtnH, ResBtnW, VbtnW,
- VirtualColNo, FrId, 0, Ypos, [], []).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_hbtns(_N, [],
- [], [], _HbtnH, _ResBtnW, _VbtnW, _ColNo, _FrId, _Xpos, _Ypos, HAcc, RAcc) ->
- {lists:reverse(HAcc), lists:reverse(RAcc)};
-
-update_hbtns(N, [], [HInfo | HT], [RInfo | RT],
- HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) ->
- % If too many buttons, i.e., if the ColsShown list
- % has become empty.
- gs:destroy(HInfo#hbtn.id),
- gs:destroy(RInfo#resbtn.id),
- update_hbtns(N, [], HT, RT, HbtnH, ResBtnW, VbtnW, ColNo, FrId,
- Xpos, Ypos, HAcc, RAcc);
-
-update_hbtns(1, [ColW | T], [], [],
- HbtnH, ResBtnW, VbtnW, ColNo, FrId, _Xpos, Ypos, HAcc, RAcc) ->
- % The first button has to be bigger than the others.
- {HInfo, RInfo} = create_one_hbtn_and_resbtn(FrId, ColW - 2,
- HbtnH, VbtnW - 1,
- Ypos, ResBtnW, 1, ColNo),
- update_hbtns(2, T, [], [], HbtnH, ResBtnW, VbtnW, ColNo + 1,
- FrId, VbtnW - 1 + ColW - 2 + ResBtnW, Ypos, [HInfo | HAcc],
- [RInfo | RAcc]);
-
-update_hbtns(N, [ColW | T], [], [],
- HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) ->
- {HInfo, RInfo} = create_one_hbtn_and_resbtn(FrId, ColW - 4,
- HbtnH, Xpos,
- Ypos, ResBtnW, N, ColNo),
- update_hbtns(N + 1, T, [], [], HbtnH, ResBtnW, VbtnW, ColNo + 1,
- FrId, Xpos + ColW - 4 + ResBtnW, Ypos, [HInfo | HAcc],
- [RInfo | RAcc]);
-
-update_hbtns(1, [ColW | T], [HInfo | HT], [RInfo | RT],
- HbtnH, ResBtnW, VbtnW, ColNo, FrId, _Xpos, Ypos, HAcc, RAcc) ->
- {NewHInfo, NewRInfo} = config_one_hbtn_and_resbtn(HInfo, RInfo,
- ColW - 2,
- VbtnW - 1,
- 1, ColNo),
- update_hbtns(2, T, HT, RT, HbtnH, ResBtnW, VbtnW, ColNo + 1,
- FrId, VbtnW - 1 + ColW - 2 + ResBtnW, Ypos,
- [NewHInfo | HAcc], [NewRInfo | RAcc]);
-
-update_hbtns(N, [ColW | T], [HInfo | HT], [RInfo | RT],
- HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) ->
- {NewHInfo, NewRInfo} = config_one_hbtn_and_resbtn(HInfo, RInfo,
- ColW - 4,
- Xpos, N,
- ColNo),
- update_hbtns(N + 1, T, HT, RT, HbtnH, ResBtnW, VbtnW, ColNo + 1,
- FrId, Xpos + ColW - 4 + ResBtnW, Ypos, [NewHInfo | HAcc],
- [NewRInfo | RAcc]).
-
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_one_hbtn_and_resbtn(ParId, HWidth, HHeight, HXpos, Ypos, RWidth, N, ColNo) ->
- HId = gs:button(ParId, [{width, HWidth},
- {height, HHeight},
- {x, HXpos},
- {y, Ypos},
- {font, ?BTN_FONT},
- {bg, ?DEFAULT_BG_COLOR},
- {data, {hbtn, N, ColNo}},
- {label, {text, integer_to_list(ColNo)}}
- ]),
- RId = gs:button(ParId, [{width, RWidth},
- {height, HHeight},
- {x, HXpos + HWidth},
- {y, Ypos},
- {cursor, resize},
- {buttonpress, true},
- {buttonrelease, true},
- {data, {resbtn, N, ColNo, (HXpos + HWidth + RWidth div 2)}},
- {bg, ?BLACK}
- ]),
- HInfo = #hbtn{virtual_col = ColNo,
- real_col = N,
- id = HId,
- width = HWidth,
- xpos = HXpos},
- RInfo = #resbtn{virtual_col = ColNo,
- real_col = N,
- id = RId,
- width = RWidth,
- xpos = HXpos + HWidth},
- {HInfo, RInfo}.
-
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-config_one_hbtn_and_resbtn(HInfo, RInfo, HWidth, HXpos, N, ColNo) ->
- gs:config(HInfo#hbtn.id, [{width, HWidth},
- {x, HXpos},
- {data, {hbtn, N, ColNo}},
- {label, {text, integer_to_list(ColNo)}}
- ]),
- gs:config(RInfo#resbtn.id, [{x, HXpos + HWidth},
- {data, {resbtn, N, ColNo,
- (HXpos + HWidth + RInfo#resbtn.width div 2)}}
- ]),
- NewHInfo = HInfo#hbtn{virtual_col = ColNo,
- width = HWidth,
- xpos = HXpos},
- NewRInfo = RInfo#resbtn{virtual_col = ColNo,
- xpos = HXpos + HWidth},
- {NewHInfo, NewRInfo}.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_keys([], [], _FirstCol, _LastCol, _HBtns, _ParentId, KeyIdsAcc) ->
- lists:reverse(KeyIdsAcc);
-
-update_keys([], [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) ->
- gs:config(KeyId, [{x, 1200}]),
- update_keys([], IdT, FirstCol, LastCol, HBtns, ParentId,
- [KeyId | KeyIdsAcc]);
-
-update_keys([KeyNo | KT], [], FirstCol, LastCol,
- HBtns,ParentId, KeyIdsAcc) when KeyNo >= FirstCol, KeyNo =< LastCol ->
- {_Width, Xpos} = get_keywidth_and_pos(KeyNo, FirstCol, HBtns),
- NewKeyId = create_key(ParentId, Xpos, 1),
- update_keys(KT, [], FirstCol, LastCol, HBtns, ParentId,
- [NewKeyId | KeyIdsAcc]);
-
-update_keys([_KeyNo | KT], [], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) ->
- update_keys(KT, [], FirstCol, LastCol, HBtns, ParentId,
- KeyIdsAcc);
-
-update_keys([KeyNo | KT], [KeyId | IdT], FirstCol, LastCol,
- HBtns, ParentId, KeyIdsAcc) when KeyNo >= FirstCol, KeyNo =< LastCol ->
- {Width, Xpos} = get_keywidth_and_pos(KeyNo, FirstCol, HBtns),
- gs:config(KeyId, [{width, Width},
- {x, Xpos}
- ]),
- update_keys(KT, IdT, FirstCol, LastCol, HBtns, ParentId,
- [KeyId | KeyIdsAcc]);
-
-update_keys([_KeyNo | KT],
- [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) ->
- update_keys(KT, [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId,
- KeyIdsAcc).
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_keywidth_and_pos(VirtualCol, FirstCol, HBtns) ->
- RealColNo = VirtualCol - FirstCol + 1,
- HBtnR = lists:nth(RealColNo, HBtns),
- #hbtn{width = Width,
- xpos = Xpos} = HBtnR,
- KeyWidth = 10,
- % Compute the x position for the key!
- KeyXpos = (Xpos + (Width div 2) - (KeyWidth div 2)),
- {KeyWidth, KeyXpos}.
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_key(ParentId, Xpos, Ypos) ->
- PicDir = code:priv_dir(tv),
- C = gs:canvas(ParentId, [{width, 10},
- {height, 18},
- {x, Xpos},
- {y, Ypos},
- {bg, ?DEFAULT_BG_COLOR}
- ]),
- gs:create(image, C, [{bitmap, PicDir ++ "/key.xbm"}]),
- C.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/tv/src/tv_pb_int_def.hrl b/lib/tv/src/tv_pb_int_def.hrl
deleted file mode 100644
index 0fe9df193a..0000000000
--- a/lib/tv/src/tv_pb_int_def.hrl
+++ /dev/null
@@ -1,99 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-
--define(WHITE, {255,255,255}).
-
--define(DEFAULT_BG_COLOR, {217,217,217}).
-
--define(COL_MARK_COLOR, {0, 0, 0}).
--define(SORT_MARK_COLOR, {255,215,0}).
-
--define(BLINK_COLOR1, {255,0,0}).
--define(BLINK_COLOR2, {0,255,0}).
--define(BLINK_COLOR3, {0,0,0}).
--define(BTN_FONT, {courier,12}).
-
-
-
-
--record(col_mark_params, {col_btn_id,
- virtual_col_marked,
- sort_btn_id,
- virtual_sort_col
- }).
-
-
-
--record(row_mark_params, {virtual_row_marked,
- real_row_marked
- }).
-
-
-
-
--record(process_variables, {parent_pid,
- grid_frame_id,
- grid_frame_width,
- grid_frame_height,
- ypos,
- hbtn_height,
- vbtn_width,
- resbtn_width,
- first_col_shown,
- hbtns_shown = [],
- vbtns_shown = [],
- resbtns_shown = [],
- cols_shown = [],
- key_numbers = [],
- key_ids = [],
- blink_color_list = [?BLINK_COLOR1,
- ?BLINK_COLOR2,
- ?BLINK_COLOR3],
- col_mark_params = #col_mark_params{},
- row_mark_params = #row_mark_params{}
- }).
-
-
-
--record(hbtn, {virtual_col,
- real_col,
- id,
- width,
- xpos
- }).
-
-
-
--record(resbtn, {virtual_col,
- real_col,
- id,
- width,
- xpos
- }).
-
-
-
--record(vbtn, {virtual_row,
- real_row,
- id,
- height,
- ypos
- }).
-
-
-
diff --git a/lib/tv/src/tv_pc.erl b/lib/tv/src/tv_pc.erl
deleted file mode 100644
index e0612e13eb..0000000000
--- a/lib/tv/src/tv_pc.erl
+++ /dev/null
@@ -1,795 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: pc part of the table tool, i.e., the process
-%%% controlling all other processes, and managing
-%%% the actions to take.
-%%%
-%%%*********************************************************************
-
-
--module(tv_pc).
--compile([{nowarn_deprecated_function,{gs,config,2}}]).
-
-
-
--export([pc/7,
- send_data/2
- ]).
-
-
-
--include("tv_int_def.hrl").
--include("tv_int_msg.hrl").
--include("tv_pc_int_def.hrl").
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-%%======================================================================
-%% Function: pc.
-%%
-%% Return Value: None.
-%%
-%% Description: Process controlling the processes 'pd', 'pw', 'dbs' and 'etsread'.
-%% After necessary initialisations, an eternal loop is
-%% entered, where window created messages are received and
-%% handled, as well as user input.
-%%
-%% Parameters:
-%%======================================================================
-
-
-pc(Master, Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode) ->
- process_flag(trap_exit, true),
- put(error_msg_mode, ErrMsgMode),
- ProcVars = prepare_and_open_table(Node, LocalNode, TableId, KindOfTable, TableName,
- false, #process_variables{parent_pid=Master}),
- loop(ProcVars).
-
-
-
-
-
-
-
-%%%********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%********************************************************************
-
-
-
-
-
-prepare_and_open_table(Node, LocalNode, TabId, TabType, TabName, Raise, ProcVars) ->
- IpPid = spawn(tv_ip, ip, [self()]),
- show_progress(IpPid, 5, "Initializing graphics..."),
-
- TmpProcVars = start_procs(IpPid, ProcVars),
-
- show_progress(IpPid, 5, "Loading table..."),
- NewProcVars = ?MENU_FUNC_FILE:open_table(Node, LocalNode, TabId, TabType, TabName,
- Raise, TmpProcVars),
-
- IpPid ! #ip_quit{sender = self()},
- % Now make window visible!
- WinP = NewProcVars#process_variables.window_params,
- gs:config(WinP#window_params.window_id, [{map, true}]),
- NewProcVars.
-
-
-
-
-
-start_procs(IpPid, ProcVars) ->
- ErrorMsgMode = get(error_msg_mode),
- PwPid = spawn_link(tv_pw, pw, [self()]),
- PdPid = spawn_link(tv_pd, pd, [self(), ErrorMsgMode]),
- DbsPid = spawn_link(tv_db, dbs, [self(), ErrorMsgMode]),
- EtsreadPid = spawn_link(tv_etsread, etsread, [self(), ErrorMsgMode]),
-
- show_progress(IpPid, 5, "Initializing graphics..."),
- NewWinP = init_pw(PwPid, ProcVars),
-
- show_progress(IpPid, 5, "Initializing graphics..."),
- init_pd(PdPid, NewWinP),
- ProcVars#process_variables{pw_pid = PwPid,
- pd_pid = PdPid,
- dbs_pid = DbsPid,
- etsread_pid = EtsreadPid,
- current_node = node(), %% Will be replaced, when table opened.
- local_node = true,
- window_params = NewWinP
- }.
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-show_progress(IpPid, NofElements, Text) ->
- IpPid ! #ip_update{sender = self(),
- nof_elements_to_mark = NofElements,
- text = Text
- }.
-
-
-
-
-
-
-
-%%======================================================================
-%% Function: loop.
-%%
-%% Return Value: None.
-%%
-%% Description: Eternal (well, almost) loop, receiving messages and
-%% handling them.
-%%
-%% Parameters: None.
-%%======================================================================
-
-
-loop(ProcVars) ->
- receive
- Msg ->
- case Msg of
-
- % Normal messages!
- #dbs_subset{} ->
- NewProcVars1 = send_data(Msg, ProcVars),
- NewProcVars2 = check_time_to_poll_table(Msg, NewProcVars1),
- loop(NewProcVars2);
-
- #pc_poll_table{} ->
- TmpProcVars = check_node(ProcVars),
- NewProcVars = ?MENU_FUNC_FILE:poll_table(TmpProcVars),
- loop(NewProcVars);
-
- #pc_search_req{} ->
- DbsPid = ProcVars#process_variables.dbs_pid,
- DbsPid ! #dbs_search_req{sender=self()},
- loop(ProcVars);
-
- #pc_set_sorting_mode{} ->
- set_sorting_mode(Msg, ProcVars),
- loop(ProcVars);
-
-
- #pc_data_req{element = Pos, nof_elements = Length} ->
- DbsPid = ProcVars#process_variables.dbs_pid,
- DbsPid ! #dbs_subset_req{sender = self(),
- subset_pos = Pos,
- subset_length = Length
- },
- loop(ProcVars);
-
-
- #pc_marked_row{row_no=RowNo, object=Obj, color=Color} ->
- DbsPid = ProcVars#process_variables.dbs_pid,
- DbsPid ! #dbs_marked_row{sender = self(),
- row_no = RowNo
- },
- NewProcVars = ProcVars#process_variables{marked_row = RowNo,
- marked_object = Obj,
- marked_color = Color},
- loop(NewProcVars);
-
-
- #pc_menu_msg{} ->
- Fcn = Msg#pc_menu_msg.data,
- NewProcVars = ?MENU_FUNC_FILE:Fcn(ProcVars),
- loop(NewProcVars);
-
-
- #pd_updated_object{object=Obj,old_object=OldObj,old_color=Color,obj_no=ObjNo} ->
- DbsPid = ProcVars#process_variables.dbs_pid,
- DbsPid ! #dbs_updated_object{sender = self(),
- object = Obj,
- old_object = OldObj,
- old_color = Color,
- obj_no = ObjNo},
- loop(ProcVars);
-
-
- #pd_new_object{object=Obj} ->
- DbsPid = ProcVars#process_variables.dbs_pid,
- DbsPid ! #dbs_new_object{sender = self(),
- object = Obj},
- loop(ProcVars);
-
-
- #pc_show_table_info{} ->
- NewProcVars = ?MENU_FUNC_FILE:table_info(ProcVars),
- loop(NewProcVars);
-
- #pc_win_conf{} ->
- NewProcVars = ?GRAPH_FUNC_FILE:win_conf(Msg, ProcVars),
- loop(NewProcVars);
-
- #pc_help{} ->
- NewProcVars = ?MENU_FUNC_FILE:help_button(ProcVars),
- loop(NewProcVars);
-
- #pc_dead_table{automatic_polling = AutoPoll} ->
- WinP = ProcVars#process_variables.window_params,
- WinId = WinP#window_params.window_id,
- gs:config(WinId, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(WinId, "TV Notification",
- ["The table no longer exists!"]);
- haiku ->
- ErrMsg1 = ["A table that big?",
- "It might be very useful.",
- "But now it is gone."],
- tv_utils:notify(WinId, "TV Notification", ErrMsg1)
- end,
- NewProcVars =
- case AutoPoll of
- true ->
- gs:config(WinId, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(WinId, "TV Notification",
- ["The automatic polling is turned off!"]);
- haiku ->
- ErrMsg2 = ["Previously on",
- "The polling is now idled.",
- "That's the way it is."],
- tv_utils:notify(WinId, "TV Notification", ErrMsg2)
- end,
- ProcVars#process_variables{poll_interval = infinity};
- false ->
- ProcVars
- end,
- loop(NewProcVars);
-
- #pc_nodedown{automatic_polling = AutoPoll} ->
- WinP = ProcVars#process_variables.window_params,
- WinId = WinP#window_params.window_id,
- gs:config(WinId, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(WinId, "TV Notification",
- ["The node is down, and the",
- "table cannot be reached."]);
- haiku ->
- ErrMsg1 = ["With searching comes loss",
- "And the presence of absence:",
- "Node is down."],
- tv_utils:notify(WinId, "TV Notification", ErrMsg1)
- end,
- NewProcVars =
- case AutoPoll of
- true ->
- gs:config(WinId, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(WinId, "TV Notification",
- ["The automatic polling is turned off!"]);
- haiku ->
- ErrMsg = ["Previously on,",
- "The polling is now idled.",
- "That's the way it is."],
- tv_utils:notify(WinId, "TV Notification", ErrMsg)
- end,
- ProcVars#process_variables{poll_interval = infinity};
- false ->
- ProcVars
- end,
- loop(NewProcVars);
-
-
- {pc_edit_object, _Sender} ->
- NewProcVars = ?MENU_FUNC_FILE:insert_object(ProcVars),
- loop(NewProcVars);
-
-
- check_node ->
- NewProcVars = check_node(ProcVars),
- loop(NewProcVars);
-
-
- raise ->
- WinP = ProcVars#process_variables.window_params,
- gs:config(WinP#window_params.window_id, [raise]),
- loop(ProcVars);
-
-
- {error_msg_mode, Mode} ->
- ProcVars#process_variables.dbs_pid ! {error_msg_mode, Mode},
- ProcVars#process_variables.etsread_pid ! {error_msg_mode, Mode},
- ProcVars#process_variables.pd_pid ! {error_msg_mode, Mode},
- put(error_msg_mode, Mode),
- loop(ProcVars);
-
- % Exit messages!
- {'EXIT', Sender, Reason} ->
- exit_signals({Sender, Reason}, ProcVars);
-
-
- _Other ->
- loop(ProcVars)
-
- end
- end.
-
-
-
-
-
-
-check_node(ProcVars) ->
- #process_variables{pw_pid = PwPid,
- current_node = OldCurrNode,
- local_node = LocalNode,
- table_id = TableId,
- table_type = TableType,
- table_name = TableName} = ProcVars,
-
- HomeNode = node(),
- case net_adm:ping(OldCurrNode) of
- pong ->
- ProcVars;
- pang when not LocalNode ->
- ProcVars;
- pang when LocalNode ->
- %% XXX [siri] Will this ever happen? I thought local_node
- %% indicated if current_node was the node where tv was
- %% started. If so, we are pinging ourselves here, and
- %% a pang can never happen??
- WinTitle = ?MENU_FUNC_FILE:get_window_title(TableType,HomeNode,TableId,TableName),
- PwPid ! #pw_set_window_title{sender = self(),
- win_title = WinTitle},
- ProcVars#process_variables{current_node = HomeNode}
- end.
-
-
-
-
-
-
-
-send_data(Msg, ProcVars) ->
- #process_variables{pd_pid = PdPid,
- parent_pid = ParentPid,
- table_id = Table,
- table_type = Type,
- current_node = Node} = ProcVars,
-
- ParentPid ! {tv_update_infowin, Table, Node, Type},
-
- #dbs_subset{data = DbData,
- subset_pos = ScalePos,
- db_length = DbLength,
- list_of_keys = ListOfKeys,
- max_elem_size = MaxElemSize,
- requested_row = ReqRowData} = Msg,
-
- Range = case ScalePos of
- 0 ->
- {0, 0};
- _Other ->
- {1, DbLength}
- end,
-
- PdPid ! #pc_data{sender = self(),
- scale_pos = ScalePos,
- scale_range = Range,
- elementlist = DbData,
- list_of_keys = ListOfKeys,
- max_elem_size = MaxElemSize,
- marked_row = ReqRowData
- },
-
- {MarkedObject, MarkedColor} =
- case ReqRowData of
- [] ->
- {undefined, undefined};
- [Data] ->
- Data
- end,
- ProcVars#process_variables{marked_object = MarkedObject,
- marked_color = MarkedColor}.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-set_sorting_mode(Msg, ProcVars) ->
- #pc_set_sorting_mode{sorting = Sorting,
- reverse = Reverse,
- sort_key_no = SortKeyNo} = Msg,
-
- DbsPid = ProcVars#process_variables.dbs_pid,
- PdPid = ProcVars#process_variables.pd_pid,
- PwPid = ProcVars#process_variables.pw_pid,
- TableType = ProcVars#process_variables.table_type,
-
- NewSortKeyNo =
- case SortKeyNo of
- undefined ->
- if
- TableType =:= mnesia ->
- 2;
- true ->
- 1
- end;
- _Other ->
- SortKeyNo
- end,
-
- Menu =
- case Sorting of
- true ->
- case Reverse of
- true ->
- sort_falling_order;
- false ->
- sort_rising_order
- end;
- false ->
- no_sorting
- end,
-
- PwPid ! #pw_select_menu{sender = self(),
- menu = Menu},
-
- DbsPid ! #dbs_sorting_mode{sender = self(),
- sorting = Sorting,
- reverse = Reverse,
- sort_key_no = NewSortKeyNo
- },
-
- PdPid ! #pc_set_sorting_mode_cfm{sender = self(),
- sort_key_no = NewSortKeyNo
- }.
-
-
-
-
-
-
-
-%%======================================================================
-%% Function: init_pw.
-%%
-%% Return Value: Tuple containing the Pid of the pw process, and the id of
-%% the window created by the pw process.
-%%
-%% Description: Starts the pw process, and orders it to create a window.
-%% (The size of the window may be given as option.)
-%%
-%% Parameters: None.
-%%======================================================================
-
-
-
-init_pw(PwPid, ProcVars) ->
- #process_variables{window_params = WinP} = ProcVars,
-
- % Now deblock pw, and order it to create a window!
- PwPid ! #pw_deblock{sender = self(),
- win_title = ?APPLICATION_NAME,
- win_width = ?DEFAULT_WINDOW_WIDTH,
- win_height = ?DEFAULT_WINDOW_HEIGHT,
- min_win_width = ?DEFAULT_MIN_WINDOW_WIDTH,
- min_win_height = ?DEFAULT_MIN_WINDOW_HEIGHT
- },
-
-
- receive
- #pw_deblock_cfm{win_id = WindowId} ->
- ?MENU_FUNC_FILE:create_menus(PwPid),
-
- % Store the window id as well as the size of it.
- WinP#window_params{window_id = WindowId,
- window_width = ?DEFAULT_WINDOW_WIDTH,
- window_height = ?DEFAULT_WINDOW_HEIGHT
- }
-
-
- after 180000 -> % A timeout of 1000 ms is too short, at least the first
- % time the system is started!
- exit(error)
- end.
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-init_pd(PdPid, WinP) ->
- #window_params{window_id = WindowId,
- window_width = WindowWidth,
- window_height = WindowHeight} = WinP,
-
- % Now deblock pd, and order it to create a canvas and a scale!
- PdPid ! #pd_deblock{sender = self(),
- win = WindowId,
- win_width = WindowWidth,
- win_height = WindowHeight,
- scale = true
- },
-
- receive
- #pd_deblock_cfm{} ->
- done
- after 180000 ->
- exit(error)
- end.
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function: exit_signals.
-%%
-%% Return Value: None.
-%%
-%% Description: Decides, given an error message, action to take, i.e., whether
-%% operation shall procede, any process shall be restarted, or
-%% the table tool terminated.
-%%
-%% Parameters: Exit_info: tuple containing sender of the error message, and the
-%% reason.
-%%======================================================================
-
-
-exit_signals(ExitInfo, ProcVars) ->
- #process_variables{parent_pid = ParentPid,
- pd_pid = PdPid,
- pw_pid = PwPid,
- dbs_pid = DbsPid,
- etsread_pid = EtsreadPid,
- table_id = TabId,
- table_type = TabType,
- table_name = TabName,
- current_node = Node,
- local_node = LocalNode
- } = ProcVars,
-
- case ExitInfo of
- {ParentPid, Reason} ->
- exit(Reason);
-
- {PwPid, normal} ->
- exit(normal);
-
- {PwPid, error} ->
- io:format("Internal error... restarting. ~n"),
- kill_procs(normal, [PdPid, EtsreadPid, DbsPid]),
- NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName,
- get(error_msg_mode)),
- loop(NewProcVars);
-
- {PdPid, _Reason} ->
- io:format("Internal error... restarting. ~n"),
- kill_procs(normal, [PwPid, EtsreadPid, DbsPid]),
- NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName,
- get(error_msg_mode)),
- loop(NewProcVars);
-
- {DbsPid, _Reason} ->
- io:format("Internal error... restarting. ~n"),
- kill_procs(normal, [PdPid, PwPid, EtsreadPid]),
- NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName,
- get(error_msg_mode)),
- loop(NewProcVars);
-
- {EtsreadPid, _Reason} ->
- io:format("Internal error... restarting. ~n"),
- kill_procs(normal, [PdPid, PwPid, DbsPid]),
- NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName,
- get(error_msg_mode)),
- loop(NewProcVars);
-
- {_Sender, _OtherReason} ->
- loop(ProcVars)
- end.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-kill_procs(_Status, []) ->
- done;
-kill_procs(Status, [Pid | Tail]) ->
- exit(Pid, Status),
- kill_procs(Status, Tail).
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-check_time_to_poll_table(Msg, ProcVars) ->
- #dbs_subset{required_time_etsread = EtsreadTime,
- required_time_dbs = DbsTime} = Msg,
-
- UserSetPollInterval = ProcVars#process_variables.poll_interval,
- WinP = ProcVars#process_variables.window_params,
- WinId = WinP#window_params.window_id,
-
- case too_short_pollinterval_chosen(UserSetPollInterval, EtsreadTime, DbsTime) of
- true ->
- EtsreadPid = ProcVars#process_variables.etsread_pid,
- EtsreadPid ! #etsread_set_poll_interval{sender = self(),
- interval = infinity},
-
- TimeRequired = trunc(max_time_required(EtsreadTime, DbsTime) / 10 + 0.5) * 10 + 20,
-
- gs:config(WinId, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(WinId, "TV Notification",
- ["The current poll interval is too short!"]),
- Str = "to " ++ lists:flatten(io_lib:write(TimeRequired)) ++ " seconds!",
- tv_utils:notify(WinId, "TV Notification", ["Setting the poll interval", Str]);
- haiku ->
- ErrMsg = ["Being way too short",
- "The interval of polling",
- "Is simply increased."],
- tv_utils:notify(WinId, "TV Notification", ErrMsg)
- end,
- clear_message_buffer(),
- EtsreadPid ! #etsread_set_poll_interval{sender = self(),
- interval = TimeRequired},
-
- ProcVars#process_variables{poll_interval = TimeRequired};
- false ->
- ProcVars
- end.
-
-
-
-
-
-
-clear_message_buffer() ->
- receive
- #dbs_subset{} ->
- clear_message_buffer()
- after 100 ->
- done
- end.
-
-
-
-
-
-max_time_required(T1, T2) when is_number(T1), is_number(T2) ->
- if
- T1 > T2 ->
- T1;
- true ->
- T2
- end;
-max_time_required(T1, _T2) when is_number(T1) ->
- T1;
-max_time_required(_T1, T2) ->
- T2.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-too_short_pollinterval_chosen(infinity, _EtsreadTime, _DbsTime) ->
- false;
-too_short_pollinterval_chosen(undefined, _EtsreadTime, _DbsTime) ->
- false;
-too_short_pollinterval_chosen(PollInt, EtsreadTime, _DbsTime) when EtsreadTime >= PollInt, is_number(EtsreadTime) ->
- true;
-too_short_pollinterval_chosen(PollInt, _EtsreadTime, DbsTime) when DbsTime >= PollInt, is_number(DbsTime) ->
- true;
-too_short_pollinterval_chosen(_PollInt, _EtsreadTime, _DbsTime) ->
- false.
diff --git a/lib/tv/src/tv_pc_graph_ctrl.erl b/lib/tv/src/tv_pc_graph_ctrl.erl
deleted file mode 100644
index 3fc3ded565..0000000000
--- a/lib/tv/src/tv_pc_graph_ctrl.erl
+++ /dev/null
@@ -1,120 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_pc_graph_ctrl).
-
-
-
--export([create_menu/4, win_conf/2]).
-
-
--include("tv_int_msg.hrl").
--include("tv_pc_int_def.hrl").
-
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_menu(PwPid, MenuTitle, TitleAccPos, MenuList) ->
- PwPid ! #pw_create_menu{sender = self(),
- menutitle = MenuTitle,
- title_acc_pos = TitleAccPos,
- menulist = MenuList
- },
- receive
- #pw_create_menu_cfm{} ->
- done
- after 10000 ->
- exit(error)
- end.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function: win_conf.
-%%
-%% Return Value: None.
-%%
-%% Description: Configures all objects in the window according to new coordinates.
-%%
-%% Parameters:
-%%======================================================================
-
-
-win_conf(Msg, ProcVars) ->
- #pc_win_conf{width = NewWidth,
- height = NewHeight} = Msg,
-
- #process_variables{pd_pid = PdPid,
- window_params = WinP} = ProcVars,
-
- #window_params{window_width = OldWindowWidth,
- window_height = OldWindowHeight} = WinP,
-
-
- case {NewWidth, NewHeight} of
- {OldWindowWidth, OldWindowHeight} ->
- ProcVars;
- _Other ->
- PdPid ! #pd_win_conf{sender = self(),
- width = NewWidth,
- height = NewHeight
- },
- NewWinP = WinP#window_params{window_width = NewWidth,
- window_height = NewHeight},
-
- ProcVars#process_variables{window_params = NewWinP}
- end.
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/tv/src/tv_pc_int_def.hrl b/lib/tv/src/tv_pc_int_def.hrl
deleted file mode 100644
index 22f8dcd5d8..0000000000
--- a/lib/tv/src/tv_pc_int_def.hrl
+++ /dev/null
@@ -1,62 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Include file for the pc parts of the table tool.
-%%%
-%%%*********************************************************************
-
-
--define(HEAD_FILE, pc).
--define(GRAPH_FUNC_FILE, tv_pc_graph_ctrl).
--define(MENU_FUNC_FILE, tv_pc_menu_handling).
-
-
-
--define(APPLICATION_NAME, "Table Visualizer").
--define(DEFAULT_WINDOW_WIDTH, 750).
--define(DEFAULT_WINDOW_HEIGHT, 600).
--define(DEFAULT_MIN_WINDOW_WIDTH, 300).
--define(DEFAULT_MIN_WINDOW_HEIGHT, 250).
-
-
--record(window_params, {window_id,
- window_width,
- window_height
- }).
-
-
-
--record(process_variables, {parent_pid,
- pw_pid,
- pd_pid,
- dbs_pid,
- etsread_pid,
- current_node,
- local_node,
- table_id = undefined,
- table_type = ets,
- table_name,
- table_protection,
- marked_row,
- marked_object,
- marked_color,
- lists_as_strings = true,
- poll_interval = infinity, % seconds or 'infinity'
- window_params = #window_params{}
- }).
diff --git a/lib/tv/src/tv_pc_menu_handling.erl b/lib/tv/src/tv_pc_menu_handling.erl
deleted file mode 100644
index 64a06743b7..0000000000
--- a/lib/tv/src/tv_pc_menu_handling.erl
+++ /dev/null
@@ -1,489 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Part of pc handling the creation of menus, as well as
-%%% treating the signals these menus results in,
-%%% when chosen.
-%%%
-%%%*********************************************************************
-
-
--module(tv_pc_menu_handling).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--export([create_menus/1,
- exit_button/1,
- insert_object/1,
- delete_object/1,
- search_object/1,
- open_table/7,
- set_poll_interval/1,
- poll_table/1,
- sort_rising_order/1,
- sort_falling_order/1,
- no_sorting/1,
- lists_as_strings/1,
- lists_as_lists/1,
- table_info/1,
- help_button/1,
- otp_help_button/1,
- get_window_title/4]).
-
-
-
-
-
--include("tv_int_def.hrl").
--include("tv_int_msg.hrl").
--include("tv_pc_int_def.hrl").
-
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-%% Shortcuts currently used, in alphabetical order:
-%%
-%% c -> "Exit"
-%% d -> "Delete Object"
-%% f -> "Sort Falling Order"
-%% h -> "Help"
-%% i -> "Table Info"
-%% n -> "No Sorting"
-%% o -> "Edit Object"
-%% p -> "Poll Table"
-%% r -> "Sort Rising Order"
-%% s -> "Search Object"
-%% v -> "Set Poll Interval"
-%% x -> "Exit"
-
-
-create_menus(PwPid) ->
- %% Due to a bug (or some other reason), only one of the radiobuttons belonging
- %% to a specified group can be selected, even if different processes have created
- %% the radiobuttons! This means that, if we have started more than one tv_main
- %% process, selecting one radiobutton will affect the radiobuttons in the other
- %% tv_main process(es)!!! Since this is a highly undesirable bahaviour, we have to
- %% create unique group names (i.e., atoms).
- %% (We need to group the radiobuttons, since otherwise all created by one process
- %% belongs to the same group, which also is undesirable...)
- SelfStr = pid_to_list(self()),
- SortGroup = list_to_atom("sorting" ++ SelfStr),
- ListGroup = list_to_atom("lists" ++ SelfStr),
-
- % Order pw to create the 'File' menu.
- ?GRAPH_FUNC_FILE:create_menu(PwPid,
- " File ",
- 1,
- [{" Table Info ", normal, table_info, 7, i},
- separator,
- {" Close ", normal, exit_button, 1, c}
- ]),
- ?GRAPH_FUNC_FILE:create_menu(PwPid,
- " Edit ",
- 1,
- [{" Edit Object... ", normal, insert_object, 1, o},
- {" Delete Object ", normal, delete_object, 1, d}
- ]),
- ?GRAPH_FUNC_FILE:create_menu(PwPid,
- " View ",
- 1,
- [{" Lists as Lists ",{radio,false,ListGroup},lists_as_lists,10,no_char},
- {" Lists as Strings ",{radio,true,ListGroup},lists_as_strings,10,no_char}
- ]),
- % Order pw to create the 'Options' menu.
- ?GRAPH_FUNC_FILE:create_menu(PwPid,
- " Options ",
- 1,
- [{" Poll Table ", normal, poll_table, 1, p},
- {" Poll Interval... ",normal,set_poll_interval,6,no_char},
- separator,
- {" Search Object ", normal, search_object, 1, s},
- separator,
- {" Sort Ascending Order ",{radio,false,SortGroup},sort_rising_order,6,no_char},
- {" Sort Descending Order ",{radio,false,SortGroup},sort_falling_order,6,no_char},
- {" No Sorting ",{radio,true,SortGroup},no_sorting,1,no_char}
- ]).
-
-
-
-
-
-exit_button(_ProcVars) ->
- exit(normal).
-
-
-
-help_button(ProcVars) ->
- WinP = ProcVars#process_variables.window_params,
- HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]),
- tool_utils:open_help(WinP#window_params.window_id, HelpFile),
- ProcVars.
-
-
-
-
-otp_help_button(ProcVars) ->
- WinP = ProcVars#process_variables.window_params,
- IndexFile = filename:join([code:root_dir(), "doc", "index.html"]),
-
- tool_utils:open_help(WinP#window_params.window_id, IndexFile),
- ProcVars.
-
-
-
-
-table_info(ProcVars) ->
- #process_variables{table_id = TableId,
- current_node = Node,
- local_node = LocalNode,
- table_type = Type,
- parent_pid = ParentPid} = ProcVars,
-
- case TableId of
- undefined ->
- done;
- _OtherValue ->
- ParentPid ! {tv_start_infowin, TableId, Node, LocalNode, Type}
- end,
- ProcVars.
-
-
-
-sort_rising_order(ProcVars) ->
- request_sort_settings(ProcVars#process_variables.pd_pid, true, false),
- ProcVars.
-
-
-sort_falling_order(ProcVars) ->
- request_sort_settings(ProcVars#process_variables.pd_pid, true, true),
- ProcVars.
-
-
-no_sorting(ProcVars) ->
- request_sort_settings(ProcVars#process_variables.pd_pid, false, false),
- ProcVars.
-
-
-set_poll_interval(ProcVars) ->
- #process_variables{etsread_pid = EtsreadPid,
- poll_interval = PollInterval} = ProcVars,
-
- case tv_poll_dialog:start(PollInterval) of
- cancel ->
- ProcVars;
- NewPollInterval ->
- EtsreadPid ! #etsread_set_poll_interval{sender = self(),
- interval = NewPollInterval},
- ProcVars#process_variables{poll_interval = NewPollInterval}
- end.
-
-
-
-poll_table(ProcVars) ->
- EtsreadPid = ProcVars#process_variables.etsread_pid,
- EtsreadPid ! #etsread_poll_table{sender = self()},
- ProcVars.
-
-
-search_object(ProcVars) ->
- DbsPid = ProcVars#process_variables.dbs_pid,
- DbsPid ! #dbs_search_req{sender=self()},
- ProcVars.
-
-
-
-lists_as_strings(ProcVars) ->
- PdPid = ProcVars#process_variables.pd_pid,
- PdPid ! #pc_list_info{sender=self(), lists_as_strings=true},
- DbsPid = ProcVars#process_variables.dbs_pid,
- DbsPid ! #pc_list_info{sender=self(), lists_as_strings=true},
- ProcVars#process_variables{lists_as_strings=true}.
-
-
-
-
-lists_as_lists(ProcVars) ->
- PdPid = ProcVars#process_variables.pd_pid,
- PdPid ! #pc_list_info{sender=self(), lists_as_strings=false},
- DbsPid = ProcVars#process_variables.dbs_pid,
- DbsPid ! #pc_list_info{sender=self(), lists_as_strings=false},
- ProcVars#process_variables{lists_as_strings=false}.
-
-
-
-
-
-
-insert_object(ProcVars) ->
- #process_variables{pd_pid = PdPid,
- current_node = Node,
- local_node = LocalNode,
- table_type = TabType,
- table_name = TabName,
- table_protection = Protection,
- window_params = WinP} = ProcVars,
-
- case Protection of
- public ->
- case TabType of
- mnesia ->
- case catch tv_mnesia_rpc:table_info(Node, LocalNode, TabName, attributes) of
- nodedown ->
- handle_error(nodedown);
- no_table ->
- handle_error(nodedown);
- mnesia_not_started ->
- handle_error(mnesia_not_started);
- {unexpected_error,Reason} ->
- handle_error({unexpected_error,Reason});
- AttrList ->
- PdPid ! #pd_rec_edit{sender = self(),
- attributes = AttrList
- }
- end;
- ets ->
- PdPid ! #pd_rec_edit{sender = self(),
- attributes = [tuple]
- }
- end;
- _OtherProtection ->
- WinId = WinP#window_params.window_id,
- gs:config(WinId, [beep]),
- ErrMsg =
- case get(error_msg_mode) of
- normal ->
- ["The table is protected and",
- " cannot be edited."];
- haiku ->
- ["The table you see",
- "Is cunningly protected:",
- "You can only watch."]
- end,
- tv_utils:notify(WinId, "TV Notification", ErrMsg)
- end,
- ProcVars.
-
-
-
-
-
-
-delete_object(ProcVars) ->
- #process_variables{dbs_pid = DbsPid,
- table_protection = Protection,
- marked_row = MarkedRow,
- marked_object = MarkedObject,
- marked_color = MarkedColor,
- window_params = WinP} = ProcVars,
-
- case MarkedRow of
- undefined ->
- done;
- _AnyRow ->
- case Protection of
- public ->
- DbsPid ! #dbs_delete_object{sender = self(),
- object = MarkedObject,
- color = MarkedColor,
- obj_no = MarkedRow};
- _OtherProtection ->
- WinId = WinP#window_params.window_id,
- gs:config(WinId, [beep]),
- ErrMsg =
- case get(error_msg_mode) of
- normal ->
- ["The table is protected and",
- " cannot be edited."];
- haiku ->
- ["The table you see",
- "Is cunningly protected:",
- "You can only watch."]
- end,
- tv_utils:notify(WinId, "TV Notification", ErrMsg)
- end
- end,
- ProcVars.
-
-
-
-
-
-
-open_table(CurrNode, LocalNode, TableId, TableType, TableName, Raise, ProcVars) ->
- #process_variables{dbs_pid = DbsPid,
- etsread_pid = EtsreadPid,
- pw_pid = PwPid,
- pd_pid = PdPid,
- poll_interval = PollInterval,
- window_params = WinP} = ProcVars,
-
- case Raise of
- true ->
- gs:config(WinP#window_params.window_id, [raise]);
- false ->
- done
- end,
-
- {Type, KeyPos, Protection} = init_etsread(EtsreadPid, DbsPid, CurrNode, LocalNode, TableId,
- TableType, PollInterval),
- WinTitle = get_window_title(TableType, CurrNode, TableId, TableName),
- PwPid ! #pw_set_window_title{sender = self(),
- win_title = WinTitle},
- Writable =
- case Protection of
- public ->
- true;
- _Other ->
- false
- end,
- RecordName =
- case TableType of
- mnesia ->
- tv_mnesia_rpc:table_info(CurrNode, LocalNode, TableId, record_name);
- ets ->
- undefined
- end,
- PdPid ! #pd_new_table{sender = self(),
- table_type = TableType,
- table_name = TableName,
- record_name = RecordName,
- writable = Writable},
- init_dbs(DbsPid, Type, KeyPos, EtsreadPid),
- ProcVars#process_variables{current_node = CurrNode,
- local_node = LocalNode,
- table_id = TableId,
- table_type = TableType,
- table_name = TableName,
- table_protection = Protection}.
-
-
-
-
-
-
-get_window_title(ets, Node, TableId, TableName) ->
- NameStr = lists:flatten(io_lib:write(TableName)),
- TableStr = case TableId of
- {TableName, _Pid} ->
- NameStr;
- TableName ->
- NameStr;
- _Other ->
- lists:flatten(io_lib:write(TableId)) ++ " (" ++ NameStr ++ ")"
- end,
-
- WinTitleSuffix = " Node: " ++ atom_to_list(Node),
- "ETS: " ++ TableStr ++ WinTitleSuffix;
-get_window_title(mnesia, Node, _TableId, TableName) ->
- TableNameStr = lists:flatten(io_lib:write(TableName)),
- WinTitleSuffix = " Node: " ++ atom_to_list(Node),
- "Mnesia: " ++ TableNameStr ++ WinTitleSuffix.
-
-
-
-
-%%%*********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-init_etsread(EtsreadPid, DbsPid, Node, LocalNode, TableId, TableType, PollInterval) ->
- EtsreadPid ! #etsread_deblock{sender = self(),
- dbs_pid = DbsPid,
- node = Node,
- local_node = LocalNode,
- table_id = TableId,
- table_type = TableType,
- poll_interval = PollInterval
- },
- receive
- #etsread_deblock_cfm{type=Type, keypos=KeyPos, protection=Protection} ->
- {Type, KeyPos, Protection}
- after 10000 ->
- exit(error)
- end.
-
-
-
-
-init_dbs(DbsPid, Type, KeyPos, EtsreadPid) ->
- DbsPid ! #dbs_deblock{sender = self(),
- etsread_pid = EtsreadPid,
- type = Type,
- keypos = KeyPos,
- sublist_length = ?ITEMS_TO_DISPLAY
- },
- receive
- #dbs_deblock_cfm{} ->
- done
- after 10000 ->
- exit(error)
- end.
-
-
-
-
-
-
-request_sort_settings(PdPid, Sorting, Reverse) ->
- PdPid ! #pd_get_sort_settings{sender = self(),
- sorting = Sorting,
- reverse = Reverse
- }.
-
-
-
-
-
-
-handle_error(mnesia_not_started) ->
- gs:window(errorwin, gs:start(), []),
- gs:config(errorwin, [beep]),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(errorwin, "TV Notification", ["Mnesia not started!"]);
- haiku ->
- tv_utils:notify(errorwin, "TV Notification", ["Mnesia is stopped.",
- "We wish to reach all data",
- "But we never will."])
- end,
- gs:destroy(errorwin);
-handle_error(nodedown) ->
- done; %% Main process handles this!
-handle_error({unexpected_error,Cause}) ->
- gs:window(errorwin, gs:start(), []),
- io:format("Unexpected error: ~p~n", [Cause]),
- gs:config(errorwin, [beep]),
- gs:destroy(errorwin).
-
-
diff --git a/lib/tv/src/tv_pd.erl b/lib/tv/src/tv_pd.erl
deleted file mode 100644
index 6c38148fdd..0000000000
--- a/lib/tv/src/tv_pd.erl
+++ /dev/null
@@ -1,1127 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Code for pd, i.e., the data displaying part of the table
-%%% tool.
-%%%
-%%%*********************************************************************
-
-
--module(tv_pd).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,destroy,1}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--export([pd/2]).
-
-
-
-
--include("tv_int_def.hrl").
--include("tv_int_msg.hrl").
--include("tv_pd_int_def.hrl").
--include("tv_pd_int_msg.hrl").
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function: pd.
-%%
-%% Return Value: None.
-%%
-%% Description: Process controlling the display part of the window,
-%% i.e., showing diagrams and handling the scale used for scrolling.
-%%
-%% Parameters: None.
-%%======================================================================
-
-
-pd(Master, ErrMsgMode) ->
- process_flag(trap_exit, true),
- put(error_msg_mode, ErrMsgMode),
- PgPid = spawn_link(tv_pg, pg, [self()]),
- PbPid = spawn_link(tv_pb, pb, [self()]),
-
- ProcVars = #process_variables{master_pid = Master,
- pg_pid = PgPid,
- pb_pid = PbPid},
- blocked(ProcVars).
-
-
-
-
-
-
-
-%%%********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%********************************************************************
-
-
-
-
-
-%%======================================================================
-%% Function: blocked.
-%%
-%% Return Value: None.
-%%
-%% Description: When started or explicitly blocked, pd enters this state,
-%% where nothing is performed until the module explicitly is
-%% deblocked.
-%%
-%% Parameters:
-%%======================================================================
-
-
-blocked(ProcVars) ->
- receive
- Msg ->
- case Msg of
-
- #pd_deblock{} ->
- deblock(Msg, ProcVars);
-
-
- {error_msg_mode, Mode} ->
- put(error_msg_mode, Mode),
- blocked(ProcVars);
-
-
- _Other ->
- blocked(ProcVars)
- end
- end.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function: deblock.
-%%
-%% Return Value: None.
-%%
-%% Description: When deblocked, a canvas and scale shall be created according to
-%% specification received in pd_deblock message.
-%%
-%% Parameters: Rec: received pd_deblock message.
-%%======================================================================
-
-
-
-deblock(Msg, ProcVars) ->
- #pd_deblock{win = WindowId,
- win_width = WindowWidth,
- win_height = WindowHeight} = Msg,
-
- NewProcVars = ?DISP_FUNC_FILE:init_display(WindowId, WindowWidth, WindowHeight,
- ProcVars),
- receive
-
- #pg_ready{} ->
- Sender = Msg#pd_deblock.sender,
- Sender ! #pd_deblock_cfm{sender = self()},
- deblocked_loop(NewProcVars)
-
- end.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function: deblocked_loop.
-%%
-%% Return Value: None.
-%%
-%% Description: Eternal (well, almost) loop, receiving messages and
-%% handling them.
-%%
-%% Parameters: Master: Pid to the 'pc' process.
-%% Win: Id of the window created.
-%%======================================================================
-
-
-
-deblocked_loop(ProcVars) ->
- receive
- Msg ->
- case Msg of
-
- {gs, Id, Event, Data, Args} ->
- NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars),
- deblocked_loop(NewProcVars);
-
- _Other ->
- NewProcVars = tv_messages(Msg, ProcVars),
- deblocked_loop(NewProcVars)
- end
- end.
-
-
-
-
-
-tv_messages(Msg, ProcVars) ->
- WinId = ProcVars#process_variables.window_id,
-
- case Msg of
- #pg_cell_marked{} ->
- mark_busy(WinId),
- NewProcVars = handle_cell_marked(Msg, ProcVars),
- mark_nonbusy(WinId),
- NewProcVars;
-
- #pc_data{} ->
- mark_busy(WinId),
- NewProcVars = show_data(Msg, ProcVars),
- mark_nonbusy(WinId),
- NewProcVars;
-
- #pc_list_info{} ->
- handle_list_info(Msg, ProcVars);
-
- #pb_col_marked{} ->
- mark_busy(WinId),
- NewProcVars = handle_col_marked(Msg, ProcVars),
- mark_nonbusy(WinId),
- NewProcVars;
-
- #pb_row_marked{} ->
- mark_busy(WinId),
- NewProcVars = handle_row_marked(Msg, ProcVars),
- mark_nonbusy(WinId),
- NewProcVars;
-
- #pb_new_colwidth{} ->
- mark_busy(WinId),
- NewProcVars = resize_column(Msg, ProcVars),
- mark_nonbusy(WinId),
- NewProcVars;
-
- #pd_get_sort_settings{sorting = Sorting, reverse = Reverse} ->
- mark_busy(WinId),
- NewProcVars =
- case send_sort_info_signal(Sorting, Reverse, ProcVars) of
- ignore ->
- ProcVars;
- TempNewProcVars ->
- set_sort_col(Sorting, TempNewProcVars)
- end,
- mark_nonbusy(WinId),
- NewProcVars;
-
- #pd_new_table{table_type=TabType,table_name=TabName,
- record_name=RecName,writable=Writable} ->
- mark_busy(WinId),
- ToolP = ProcVars#process_variables.toolbar_params,
- ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable),
- mark_nonbusy(WinId),
- ProcVars#process_variables{table_type = TabType,
- table_name = TabName,
- record_name = RecName,
- writable = Writable};
-
- #pd_win_conf{} ->
- mark_busy(WinId),
- NewProcVars = resize_window(Msg, ProcVars),
- mark_nonbusy(WinId),
- NewProcVars;
-
- #pd_rec_edit{} ->
- mark_busy(WinId),
- NewProcVars = open_rec_edit(Msg, ProcVars),
- mark_nonbusy(WinId),
- NewProcVars;
-
-
- {updated_object, UpdObj} ->
- get_updated_elem2(true, UpdObj, ProcVars),
- ProcVars;
-
- {new_object, NewObj} ->
- get_updated_elem2(true, NewObj, ProcVars),
- ProcVars;
-
- {error_msg_mode, Mode} ->
- put(error_msg_mode, Mode),
- ProcVars;
-
- {'EXIT', Pid, Reason} ->
- exit_signals({Pid, Reason}, ProcVars);
-
- _Other ->
- ProcVars
- end.
-
-
-
-
-
-
-exit_signals(ExitInfo, ProcVars) ->
- #process_variables{master_pid = MasterPid,
- pg_pid = PgPid,
- pb_pid = PbPid,
- rec_pid = RecPid} = ProcVars,
-
- case ExitInfo of
- {MasterPid, _Reason} ->
- exit(normal);
- {PgPid, _Reason} ->
- exit(normal);
- {PbPid, _Reason} ->
- exit(normal);
- {RecPid, _Reason} ->
- ProcVars#process_variables{rec_pid = undefined};
- _Other ->
- ProcVars
- end.
-
-
-
-
-open_rec_edit(Msg, ProcVars) ->
- #pd_rec_edit{attributes = AttrList} = Msg,
-
- #process_variables{rec_pid = RecPid,
- table_type = TabType,
- table_name = TabName,
- record_name = RecordName,
- lists_as_strings = ListsAsStr,
- mark_params = MarkP} = ProcVars,
-
- #mark_params{marked_object = MarkedObject} = MarkP,
-
- TabOrRecName =
- case TabType of
- mnesia ->
- RecordName;
- ets ->
- TabName
- end,
-
- case RecPid of
- undefined ->
- NewRecPid =
- case MarkedObject of
- undefined ->
- tv_rec_edit:start(TabType, TabOrRecName, AttrList, ListsAsStr,
- get(error_msg_mode));
- _Other ->
- AttrVals =
- case TabType of
- mnesia ->
- tl(tuple_to_list(MarkedObject));
- ets ->
- [MarkedObject]
- end,
- tv_rec_edit:start(TabType, TabOrRecName, AttrList, AttrVals, ListsAsStr,
- get(error_msg_mode))
- end,
- ProcVars#process_variables{rec_pid = NewRecPid};
- _AnyPid ->
- RecPid ! raise,
- ProcVars
- end.
-
-
-
-
-
-
-
-gs_messages(Msg, ProcVars) ->
-
- case Msg of
-
- {editentry, keypress, _Data, ['Tab' | _T]} ->
- gs:config(editentry, [{select, {0,100000000}}]),
- ProcVars;
-
- {editentry, keypress, _Data, ['Return' | _T]} ->
- get_updated_elem(ProcVars),
- ProcVars;
-
- {Id, enter, {toolbar, Btn, Str}, _} ->
- gs:config(Id, [{motion, true}]),
- NewProcVars = handle_toolbar_buttons(Id, Btn, Str, false, 0, 0,
- ProcVars),
- NewProcVars;
-
-
- {_Id, buttonpress, _Data, [3 | _Rest]} ->
- ProcVars;
-
-
- {_Id, buttonpress, vscale, [MouseBtn | _Tail]} ->
- WinId = ProcVars#process_variables.window_id,
- mark_busy(WinId),
- NewProcVars = ?DISP_FUNC_FILE:scroll_vertically(MouseBtn, ProcVars),
- mark_nonbusy(WinId),
- NewProcVars;
-
-
- % The order of messages from gs ought to be
- % 1. 'buttonpress'
- % 2. 'click' and
- % 3. 'buttonrelease'
- % However, quite often the 'click' message comes last, meaning we have
- % to check for this. :-(
-
- {_Id, click, vscale, [NewScalePos | _Tail]} ->
- WinId = ProcVars#process_variables.window_id,
- mark_busy(WinId),
- NewProcVars = ?DISP_FUNC_FILE:perform_vertical_scroll(NewScalePos,
- ProcVars),
- mark_nonbusy(WinId),
- NewProcVars;
-
-
- {_Id, buttonpress, hscale, [MouseBtn | _Tail]} ->
- WinId = ProcVars#process_variables.window_id,
- mark_busy(WinId),
- NewProcVars = ?DISP_FUNC_FILE:scroll_horizontally(MouseBtn, ProcVars),
- mark_nonbusy(WinId),
- NewProcVars;
-
-
- {_Id, click, hscale, [NewScalePos | _Tail]} ->
- WinId = ProcVars#process_variables.window_id,
- mark_busy(WinId),
- NewProcVars = ?DISP_FUNC_FILE:perform_horizontal_scroll(NewScalePos,
- ProcVars),
- mark_nonbusy(WinId),
- NewProcVars;
-
-
- {_Id, click, {toolbar, poll_table, _Str}, _Arg} ->
- WinId = ProcVars#process_variables.window_id,
- mark_busy(WinId),
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! #pc_poll_table{sender = self()},
- mark_nonbusy(WinId),
- ProcVars;
-
-
- {_Id, click, {toolbar, select_browser, _Str}, _Arg} ->
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! #pc_select{sender = self()},
- ProcVars;
-
-
- {_Id, click, {toolbar, help_button, _Str}, _Arg} ->
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! #pc_help{sender = self()},
- ProcVars;
-
-
-
- {_Id, click, {toolbar, insert_object, _Str}, _Arg} ->
- WinId = ProcVars#process_variables.window_id,
- mark_busy(WinId),
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! {pc_edit_object, self()},
- mark_nonbusy(WinId),
- ProcVars;
-
-
- {_Id, click, {toolbar, search_object, _Str}, _Arg} ->
- WinId = ProcVars#process_variables.window_id,
- mark_busy(WinId),
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! #pc_search_req{sender = self()},
- mark_nonbusy(WinId),
- ProcVars;
-
-
- {_Id, click, {toolbar, sort_rising_order, _Str}, _Arg} ->
- WinId = ProcVars#process_variables.window_id,
- mark_busy(WinId),
- NewProcVars = case send_sort_info_signal(true, false, ProcVars) of
- ignore ->
- ProcVars;
- TempNewProcVars ->
- set_sort_col(true, TempNewProcVars)
- end,
- mark_nonbusy(WinId),
- NewProcVars;
-
-
- {_Id, click, {toolbar, sort_falling_order, _Str}, _Arg} ->
- WinId = ProcVars#process_variables.window_id,
- mark_busy(WinId),
- NewProcVars = case send_sort_info_signal(true, true, ProcVars) of
- ignore ->
- ProcVars;
- TempNewProcVars ->
- set_sort_col(true, TempNewProcVars)
- end,
- mark_nonbusy(WinId),
- NewProcVars;
-
-
- {_Id, click, {toolbar, no_sorting, _Str}, _Arg} ->
- NewProcVars = case send_sort_info_signal(false, false, ProcVars) of
- ignore ->
- ProcVars;
- TempNewProcVars ->
- set_sort_col(false, TempNewProcVars)
- end,
- NewProcVars;
-
-
- {Id, click, {toolbar, table_info, _Str}, _Arg} ->
- ToolP = ProcVars#process_variables.toolbar_params,
- F = ToolP#toolbar_params.pop_up_frame_id,
- gs:config(F, [{y, -30}]),
- gs:config(Id, [{motion, false}]),
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! #pc_show_table_info{sender = self()},
- ProcVars;
-
-
- {Id, click, {labelbtn, pop_up}, _Arg} ->
- gs:config(Id, [{data, {labelbtn, pop_down}}]),
- NewProcVars = ?DISP_FUNC_FILE:show_toolbar_editor(ProcVars),
- NewProcVars;
-
-
- {Id, click, {labelbtn, pop_down}, _Arg} ->
- gs:config(Id, [{data, {labelbtn, pop_up}}]),
- NewProcVars = ?DISP_FUNC_FILE:hide_toolbar_editor(ProcVars),
- NewProcVars;
-
-
- _OtherMessage ->
- ProcVars
-
- end.
-
-
-
-
-
-get_updated_elem(ProcVars) ->
- EditedStr = gs:read(editentry, text),
- case tv_db_search:string_to_term(EditedStr) of
- {error, {_Reason, Msg}} ->
- gs:config(editentry, [beep]),
- gs:window(pdwin, gs:start(), []),
- tv_utils:notify(pdwin, "TV Notification", Msg),
- gs:destroy(pdwin),
- ProcVars;
- {ok, NewTerm} ->
- get_updated_elem2(false, NewTerm, ProcVars)
- end.
-
-
-
-
-
-get_updated_elem2(FromRecEdit, NewTerm, ProcVars) ->
- #process_variables{table_type = TableType,
- record_name = RecordName,
- mark_params = MarkP,
- master_pid = PcPid} = ProcVars,
-
- #mark_params{marked_object = ObjToUpdate,
- marked_color = ObjColor,
- virtual_row_no = VirtualRow,
- cell_col_no = VirtualCol} = MarkP,
-
- case ObjToUpdate of
- undefined ->
- case new_object_ok(TableType, RecordName, NewTerm) of
- true ->
- PcPid ! #pd_new_object{sender = self(),
- object = NewTerm},
- ProcVars;
- {false, Msg} ->
- gs:window(pdwin, gs:start(), []),
- tv_utils:notify(pdwin, "TV Notification", Msg),
- gs:destroy(pdwin),
- ProcVars
- end;
- _AnyObj ->
- %% We need to know if the object has been deleted!
- NewObj =
- case VirtualCol of
- undefined ->
- NewTerm;
- _AnyCol when FromRecEdit ->
- NewTerm;
- _AnyCol ->
- if
- is_tuple(ObjToUpdate) ->
- erlang:setelement(VirtualCol, ObjToUpdate, NewTerm);
- true ->
- NewTerm
- end
- end,
- %% Is the update OK?
- case update_ok(TableType, ObjToUpdate, NewObj) of
- true ->
- PcPid ! #pd_updated_object{sender = self(),
- object = NewObj,
- old_object = ObjToUpdate,
- old_color = ObjColor,
- obj_no = VirtualRow},
- ProcVars;
- false ->
- gs:window(pdwin, gs:start(), []),
- case get(error_msg_mode) of
- normal ->
- tv_utils:notify(pdwin, "TV Notification",
- ["The record name cannot be changed!"]);
- haiku ->
- tv_utils:notify(pdwin, "TV Notification",
- ["The attempt to change",
- "The permanent record name",
- "Is simply ignored."])
- end,
- gs:destroy(pdwin),
- ProcVars
- end
- end.
-
-
-
-
-new_object_ok(ets, _RecordName, NewTerm) when is_tuple(NewTerm) ->
- true;
-new_object_ok(ets, _RecordName, _NewTerm) ->
- Msg = case get(error_msg_mode) of
- normal ->
- ["Object is not a tuple!"];
- haiku ->
- ["Yes, it is a term.",
- "It is pretty, but it's not",
- "A proper tuple."]
- end,
- {false, Msg};
-new_object_ok(mnesia, RecordName, NewTerm) when is_tuple(NewTerm) ->
- NewRecName = element(1, NewTerm),
- case NewRecName of
- RecordName ->
- true;
- _OtherName ->
- Msg = case get(error_msg_mode) of
- normal ->
- ["Erroneous record name!"];
- haiku ->
- ["The attempt to use",
- "An invalid record name",
- "Is simply ignored."]
- end,
- {false, Msg}
- end;
-new_object_ok(mnesia, _RecordName, _NewTerm) ->
- Msg = case get(error_msg_mode) of
- normal ->
- ["Object is not a record!"];
- haiku ->
- ["Yes, it is a term.",
- "It is pretty, but it's not",
- "The proper record."]
- end,
- {false, Msg}.
-
-
-
-
-update_ok(ets, _ObjectToUpdate, _NewObject) ->
- true;
-update_ok(mnesia, ObjectToUpdate, NewObject) ->
- OldRecName = element(1, ObjectToUpdate),
- NewRecName = element(1, NewObject),
- case NewRecName of
- OldRecName ->
- true;
- _Other ->
- false
- end.
-
-
-
-
-handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars) ->
- WinId = ProcVars#process_variables.window_id,
- ToolP = ProcVars#process_variables.toolbar_params,
- F = ToolP#toolbar_params.pop_up_frame_id,
-
- receive
-
- {gs, Id, motion, _Data, [NewX, NewY | _]} ->
- handle_toolbar_buttons(Id, Btn, Str, LabelShown, NewX, NewY,
- ProcVars);
-
- {gs, editentry, keypress, _Data, ['Tab' | _T]} ->
- gs:config(editentry, [{select, {0,100000000}}]),
- handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars);
-
- {gs, editentry, keypress, _Data, ['Return' | _T]} ->
- get_updated_elem(ProcVars),
- handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars);
-
- {gs, Id, leave, {toolbar, Btn, Str}, _Arg} ->
- gs:config(F, [{y, -30}]),
- gs:config(Id, [{motion, false}]),
- ProcVars;
-
- {gs, Id, click, {toolbar, poll_table, _Str}, _Arg} ->
- mark_busy(WinId),
- gs:config(F, [{y, -30}]),
- gs:config(Id, [{motion, false}]),
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! #pc_poll_table{sender = self()},
- mark_nonbusy(WinId),
- ProcVars;
-
- {gs, Id, click, {toolbar, select_browser, _Str}, _Arg} ->
- gs:config(F, [{y, -30}]),
- gs:config(Id, [{motion, false}]),
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! #pc_select{sender = self()},
- ProcVars;
-
- {gs, Id, click, {toolbar, help_button, _Str}, _Arg} ->
- gs:config(F, [{y, -30}]),
- gs:config(Id, [{motion, false}]),
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! #pc_help{sender = self()},
- ProcVars;
-
- {gs, Id, click, {toolbar, insert_object, _Str}, _Arg} ->
- mark_busy(WinId),
- gs:config(F, [{y, -30}]),
- gs:config(Id, [{motion, false}]),
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! {pc_edit_object, self()},
- mark_nonbusy(WinId),
- ProcVars;
-
-
- {gs, Id, click, {toolbar, search_object, _Str}, _Arg} ->
- mark_busy(WinId),
- gs:config(F, [{y, -30}]),
- gs:config(Id, [{motion, false}]),
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! #pc_search_req{sender = self()},
- mark_nonbusy(WinId),
- ProcVars;
-
- {gs, Id, click, {toolbar, sort_rising_order, _Str}, _Arg} ->
- mark_busy(WinId),
- gs:config(F, [{y, -30}]),
- gs:config(Id, [{motion, false}]),
- NewProcVars =
- case send_sort_info_signal(true, false, ProcVars) of
- ignore ->
- ProcVars;
- TempNewProcVars ->
- set_sort_col(true, TempNewProcVars)
- end,
- mark_nonbusy(WinId),
- NewProcVars;
-
- {gs, Id, click, {toolbar, sort_falling_order, _Str}, _Arg} ->
- mark_busy(WinId),
- gs:config(F, [{y, -30}]),
- gs:config(Id, [{motion, false}]),
- NewProcVars =
- case send_sort_info_signal(true, true, ProcVars) of
- ignore ->
- ProcVars;
- TempNewProcVars ->
- set_sort_col(true, TempNewProcVars)
- end,
- mark_nonbusy(WinId),
- NewProcVars;
-
- {gs, Id, click, {toolbar, no_sorting, _Str}, _Arg} ->
- gs:config(F, [{y, -30}]),
- gs:config(Id, [{motion, false}]),
- NewProcVars =
- case send_sort_info_signal(false, false, ProcVars) of
- ignore ->
- ProcVars;
- TempNewProcVars ->
- set_sort_col(false, TempNewProcVars)
- end,
- NewProcVars;
-
- {gs, Id, click, {toolbar, table_info, _Str}, _Arg} ->
- gs:config(F, [{y, -30}]),
- gs:config(Id, [{motion, false}]),
- PcPid = ProcVars#process_variables.master_pid,
- PcPid ! #pc_show_table_info{sender = self()},
- ProcVars;
-
- {'EXIT', Pid, Reason} ->
- exit_signals({Pid, Reason}, ProcVars),
- handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars);
-
- OtherMsg ->
- NewProcVars = tv_messages(OtherMsg, ProcVars),
- handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, NewProcVars)
-
- after 600 ->
- case LabelShown of
- false ->
- FrameP = ProcVars#process_variables.frame_params,
- L = ToolP#toolbar_params.pop_up_label_id,
-
- #frame_params{toolbar_frame_width = TWidth,
- toolbar_frame_height = THeight} = FrameP,
-
- BtnHeight = gs:read(Id, height),
- BtnXpos = gs:read(Id, x),
- BtnYpos = gs:read(Id, y),
- FrameHeight = gs:read(F, height),
- FontUsed = gs:read(L, font),
- {StringWidth, _H} = gs:read(L, {font_wh, {FontUsed, Str}}),
-
- Width = StringWidth + 6,
- Xpos = BtnXpos + X,
- LblXpos = if
- Xpos + Width > TWidth ->
- Xpos - Width;
- true ->
- Xpos
- end,
- % Ypos = BtnYpos + Y + 15,
- Ypos = BtnYpos + BtnHeight + 6,
- LblYpos = if
- Ypos + FrameHeight > THeight ->
- Ypos - FrameHeight - 25;
- true ->
- Ypos
- end,
- gs:config(L, [{width, Width - 2},
- {label, {text, Str}}]),
- gs:config(F, [{width, Width},
- {x, LblXpos},
- {y, LblYpos}
- ]);
- true ->
- done
- end,
- handle_toolbar_buttons(Id, Btn, Str, true, X, Y, ProcVars)
- end.
-
-
-
-
-
-
-set_sort_col(SortingOn, ProcVars) ->
- #process_variables{pb_pid = PbPid,
- mark_params = MarkP} = ProcVars,
-
- SortCol = case SortingOn of
- true ->
- MarkP#mark_params.col_no;
- false ->
- undefined
- end,
- PbPid ! #pb_set_sort_col{sender = self(),
- virtual_col = SortCol
- },
- remove_all_marks(SortCol, ProcVars).
-
-
-
-
-
-send_sort_info_signal(Sorting, Reverse, ProcVars) ->
- #process_variables{master_pid = PcPid,
- mark_params = MarkP} = ProcVars,
-
- SortColNo = MarkP#mark_params.col_no,
-
- PcPid ! #pc_set_sorting_mode{sender = self(),
- sorting = Sorting,
- reverse = Reverse,
- sort_key_no = SortColNo
- },
- receive
- #pc_set_sorting_mode_cfm{sort_key_no = FinalSortColNo} ->
- NewMarkP = MarkP#mark_params{col_no = FinalSortColNo},
- ProcVars#process_variables{mark_params = NewMarkP};
-
- #pd_ignore{} ->
- ignore
-
- end.
-
-
-
-
-
-show_data(Msg, ProcVars) ->
- #pc_data{scale_pos = Pos,
- scale_range = Range,
- list_range = MaxValue,
- elementlist = List,
- list_of_keys = KeyList,
- max_elem_size = MaxElemSize,
- marked_row = MarkedRowData} = Msg,
-
- ?DISP_FUNC_FILE:display_data(Pos, Range, MaxValue, List, KeyList, MaxElemSize,
- MarkedRowData, ProcVars).
-
-
-
-
-
-
-handle_list_info(Msg, ProcVars) ->
- ListAsStr = Msg#pc_list_info.lists_as_strings,
- PgPid = ProcVars#process_variables.pg_pid,
- PgPid ! #pg_list_info{sender = self(),
- lists_as_strings = ListAsStr},
- ProcVars#process_variables{lists_as_strings = ListAsStr}.
-
-
-
-
-
-handle_col_marked(Msg, ProcVars) ->
- #pb_col_marked{col_marked = ColMarked,
- virtual_col = VirtualCol} = Msg,
-
- #process_variables{master_pid = MasterPid,
- pg_pid = PgPid,
- rec_pid = RecPid,
- writable = Writable,
- toolbar_params = ToolP,
- mark_params = MarkP} = ProcVars,
- SortCol = MarkP#mark_params.sort_col_no,
-
- PgPid ! #pg_remove_marks{sender = self()},
-
- case ColMarked of
- true ->
- PgPid ! #pg_col_marked{sender = self(),
- virtual_col = VirtualCol};
- false ->
- done
- end,
-
- MasterPid ! #pc_marked_row{sender = self(),
- row_no = undefined,
- object = undefined,
- color = undefined
- },
-
- ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable),
- send_to_rec_edit(RecPid, insert_mode),
-
- NewMarkP =
- if
- ColMarked ->
- MarkP#mark_params{col_no = VirtualCol};
- true ->
- if
- SortCol =:= undefined ->
- MarkP;
- true ->
- MarkP#mark_params{col_no = SortCol}
- end
- end,
- ProcVars#process_variables{mark_params = NewMarkP}.
-
-
-
-
-
-
-remove_all_marks(SortCol, ProcVars) ->
- #process_variables{master_pid = MasterPid,
- pb_pid = PbPid,
- pg_pid = PgPid,
- toolbar_params = ToolP} = ProcVars,
-
- PgPid ! #pg_remove_marks{sender = self()},
- PbPid ! #pb_remove_marks{sender = self()},
- MasterPid ! #pc_marked_row{sender = self(),
- row_no = undefined,
- object = undefined,
- color = undefined
- },
-%% ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable),
- ?DISP_FUNC_FILE:update_toolbar_editor(ToolP#toolbar_params.editor_id, notext),
-%% send_to_rec_edit(RecPid, insert_mode),
- ProcVars#process_variables{mark_params = #mark_params{sort_col_no = SortCol,
- cell_col_no = undefined,
- row_no = undefined,
- virtual_row_no = undefined,
- marked_object = undefined,
- marked_color = undefined}
- }.
-
-
-
-
-
-
-handle_row_marked(Msg, ProcVars) ->
- #pb_row_marked{row_marked = RowMarked,
- virtual_row = VirtualRow,
- real_row = RealRow} = Msg,
-
- #process_variables{master_pid = MasterPid,
- rec_pid = RecPid,
- pg_pid = PgPid,
- data_list = DataList,
- color_list = ColorList,
- writable = Writable,
- toolbar_params = ToolP,
- mark_params = MarkP} = ProcVars,
-
- PgPid ! #pg_remove_marks{sender = self()},
-
- case RowMarked of
- true ->
- PgPid ! #pg_row_marked{sender = self(),
- virtual_row = VirtualRow};
- false ->
- done
- end,
-
- {DataElement, NewMarkP} =
- if
- RowMarked ->
- {MarkedRowOrCol, RowObj} =
- ?DISP_FUNC_FILE:get_data_element(row, DataList, RealRow, undefined),
-
- MarkedRowColor =
- case MarkedRowOrCol of
- notext ->
- undefined;
- _OtherObject ->
- lists:nth(RealRow, ColorList)
- end,
- MasterPid ! #pc_marked_row{sender = self(),
- row_no = VirtualRow,
- object = RowObj,
- color = MarkedRowColor
- },
- send_to_rec_edit(RecPid, {update_mode,RowObj}),
- {MarkedRowOrCol, MarkP#mark_params{virtual_row_no = VirtualRow,
- row_no = RealRow,
- cell_col_no = undefined,
- col_no = undefined,
- marked_object = RowObj,
- marked_color = MarkedRowColor}};
- true ->
- MasterPid ! #pc_marked_row{sender = self(),
- row_no = undefined,
- object = undefined,
- color = undefined
- },
- send_to_rec_edit(RecPid, insert_mode),
- {notext, MarkP#mark_params{virtual_row_no = undefined,
- row_no = undefined,
- cell_col_no = undefined,
- col_no = undefined,
- marked_object = undefined,
- marked_color = undefined}}
- end,
-
- ?DISP_FUNC_FILE:update_toolbar_label(DataElement, ToolP, VirtualRow,
- undefined, Writable),
- ProcVars#process_variables{mark_params = NewMarkP}.
-
-
-
-
-
-handle_cell_marked(Msg, ProcVars) ->
- #pg_cell_marked{cell_marked = CellMarked,
- virtual_col = VirtualCol,
- real_row = RealRow,
- virtual_row = VirtualRow} = Msg,
-
- % We are interested in the real row number, since we only have a sublist
- % stored in pd.
- ?DISP_FUNC_FILE:marked_cell(CellMarked, VirtualCol, RealRow, VirtualRow,
- ProcVars).
-
-
-
-
-resize_window(Msg, ProcVars) ->
- #pd_win_conf{width = NewWindowWidth,
- height = NewWindowHeight} = Msg,
-
- ?DISP_FUNC_FILE:resize_display(NewWindowWidth, NewWindowHeight, ProcVars).
-
-
-
-
-resize_column(Msg, ProcVars) ->
- #pb_new_colwidth{real_col = RealCol,
- virtual_col = VirtualCol,
- xdiff = Xdiff} = Msg,
-
- ?DISP_FUNC_FILE:resize_column(RealCol, VirtualCol, Xdiff, ProcVars).
-
-
-
-
-mark_busy(Id) ->
- gs:config(Id, [{cursor, busy}]).
-
-
-
-
-mark_nonbusy(Id) ->
- gs:config(Id, [{cursor, arrow}]).
-
-
-
-
-send_to_rec_edit(undefined, _Msg) ->
- done;
-send_to_rec_edit(RecPid, Msg) ->
- RecPid ! Msg.
-
diff --git a/lib/tv/src/tv_pd_display.erl b/lib/tv/src/tv_pd_display.erl
deleted file mode 100644
index 804180da16..0000000000
--- a/lib/tv/src/tv_pd_display.erl
+++ /dev/null
@@ -1,1066 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Part of pd controlling the graphics.
-%%%
-%%%*********************************************************************
-
--module(tv_pd_display).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,editor,2}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-
-
-
--export([init_display/4,
- display_data/8,
- resize_display/3,
- resize_column/4,
- scroll_horizontally/2,
- scroll_vertically/2,
- perform_horizontal_scroll/2,
- perform_vertical_scroll/2,
- marked_cell/5,
- update_toolbar_label/5,
- update_toolbar_editor/2,
- get_data_element/4,
- hide_toolbar_editor/1,
- show_toolbar_editor/1]).
-
-
-
-
-
--include("tv_int_def.hrl").
--include("tv_int_msg.hrl").
--include("tv_pd_int_def.hrl").
--include("tv_pd_int_msg.hrl").
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-%%======================================================================
-%% Function: init_display.
-%%
-%% Return Value: Id of the display (here:canvas) created.
-%%
-%% Description: Creates the canvas and the scale.
-%%
-%% Parameters: Id of the window the display shall be created in.
-%%======================================================================
-
-
-init_display(WindowId, WindowWidth, WindowHeight, ProcVars) ->
- % Get all necessary window parameters!
- #process_variables{pg_pid = PgPid,
- pb_pid = PbPid,
- frame_params = FrameP,
- scale_params = ScaleP,
- toolbar_params = ToolP} = ProcVars,
-
- NewFrameP = tv_pd_frames:create_display_frames(WindowId, WindowWidth,
- WindowHeight, FrameP),
-
- #frame_params{grid_frame_id = GridParentId,
- grid_frame_width = GridParentWidth,
- grid_frame_height = GridParentHeight} = NewFrameP,
-
- PgPid ! #pg_init_grid{sender = self(),
- parent_id = GridParentId,
- width = GridParentWidth,
- height = GridParentHeight,
- xpos = ?VBTN_WIDTH - 1,
- ypos = ?KEY_MARK_AREA_HEIGHT + ?HBTN_HEIGHT - 1,
- nof_rows = ?NOF_GRIDROWS,
- row_height = ?ROW_HEIGHT
- },
-
-
- receive
- #pg_col_info{first_col_shown = FirstColShown,
- width_of_cols_shown = ColsShown,
- nof_rows_shown = NofRowsShown} ->
-
- PbPid ! #pb_init_btns{sender = self(),
- parent_id = GridParentId,
- parent_width = GridParentWidth,
- parent_height = GridParentHeight,
- ypos = ?KEY_MARK_AREA_HEIGHT,
- hbtn_height = ?HBTN_HEIGHT,
- resbtn_width = ?RESBTN_WIDTH,
- vbtn_width = ?VBTN_WIDTH,
- nof_rows = ?NOF_GRIDROWS,
- row_height = ?ROW_HEIGHT,
- first_col_shown = FirstColShown,
- cols_shown = ColsShown
- },
-
- NewScaleP = tv_pd_scale:init_scale(NewFrameP, ScaleP),
-
- NewToolP = init_toolbar(NewFrameP, ToolP),
-
- ProcVars#process_variables{window_id = WindowId,
- window_width = WindowWidth,
- window_height = WindowHeight,
- first_col_shown = FirstColShown,
- nof_rows_shown = NofRowsShown,
- cols_shown = ColsShown,
- frame_params = NewFrameP,
- scale_params = NewScaleP,
- toolbar_params = NewToolP
- }
- end.
-
-
-
-
-
-resize_display(NewWinW, NewWinH, ProcVars) ->
- #process_variables{pg_pid = PgPid,
- pb_pid = PbPid,
- color_list = ColorList,
- first_row_shown = FirstRowShown,
- frame_params = FrameP,
- scale_params = ScaleP,
- toolbar_params = ToolP} = ProcVars,
-
- NewFrameP = tv_pd_frames:resize_display_frames(NewWinW, NewWinH, FrameP),
-
- #frame_params{grid_frame_width = GridParentWidth,
- grid_frame_height = GridParentHeight} = NewFrameP,
-
- PgPid ! #pg_resize_grid{sender = self(),
- width = GridParentWidth,
- height = GridParentHeight
- },
-
- receive
- #pg_col_info{first_col_shown = FirstColShown,
- width_of_cols_shown = ColsShown,
- nof_rows_shown = NofRowsShown} ->
-
- PbPid ! #pb_update_hbtns{sender = self(),
- parent_width = GridParentWidth,
- parent_height = GridParentHeight,
- first_col_shown = FirstColShown,
- cols_shown = ColsShown
- },
-
- PbPid ! #pb_update_vbtns{sender = self(),
- color_list = ColorList,
- first_row_shown = FirstRowShown,
- nof_rows_shown = NofRowsShown,
- blinking_enabled = false
- },
-
- NewScaleP = tv_pd_scale:resize_scale(NewFrameP, ScaleP),
-
- NewToolP = resize_toolbar(NewFrameP, ToolP),
-
- ProcVars#process_variables{window_width = NewWinW,
- window_height = NewWinH,
- first_col_shown = FirstColShown,
- nof_rows_shown = NofRowsShown,
- cols_shown = ColsShown,
- frame_params = NewFrameP,
- scale_params = NewScaleP,
- toolbar_params = NewToolP
- }
- end.
-
-
-
-
-
-
-
-resize_column(RealCol, VirtualCol, Xdiff, ProcVars) ->
- #process_variables{pg_pid = PgPid,
- pb_pid = PbPid,
- frame_params = FrameP} = ProcVars,
-
- PgPid ! #pg_resize_grid_col{sender = self(),
- real_col_no = RealCol,
- virtual_col_no = VirtualCol,
- xdiff = Xdiff
- },
-
- #frame_params{grid_frame_width = GridFrameWidth,
- grid_frame_height = GridFrameHeight} = FrameP,
- receive
- #pg_col_info{first_col_shown = FirstColShown,
- width_of_cols_shown = ColsShown,
- nof_rows_shown = NofRowsShown} ->
-
- PbPid ! #pb_update_hbtns{parent_width = GridFrameWidth,
- parent_height = GridFrameHeight,
- first_col_shown = FirstColShown,
- cols_shown = ColsShown
- },
-
- ProcVars#process_variables{first_col_shown = FirstColShown,
- nof_rows_shown = NofRowsShown,
- cols_shown = ColsShown
- }
- end.
-
-
-
-
-
-
-
-
-display_data(Pos, Range, _MaxValue, List, KeyList, MaxElemSize, MarkedRowData,ProcVars) ->
- #process_variables{master_pid = PcPid,
- rec_pid = RecPid,
- pg_pid = PgPid,
- pb_pid = PbPid,
- writable = Writable,
- sorting_on = SortingOn,
- nof_rows_shown = NofRowsShown,
- scale_params = ScaleP,
- toolbar_params = ToolP,
- mark_params = MarkP} = ProcVars,
-
- {DataList, ColorList} = split_dblist(List, [], []),
-
- NewMarkP = update_marks(SortingOn, DataList, ColorList, MarkedRowData, Pos, NofRowsShown,
- Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP),
-
- PgPid ! #pg_data{sender = self(),
- data = DataList,
- first_row_shown = Pos
- },
-
- PbPid ! #pb_update_vbtns{sender = self(),
- color_list = ColorList,
- first_row_shown = Pos,
- nof_rows_shown = NofRowsShown,
- blinking_enabled = false
- },
-
- PbPid ! #pb_key_info{sender = self(),
- list_of_keys = KeyList
- },
-
- % May be new number of elements in the total list!
- ?SCALE_FUNC_FILE:set_scale_range(vscale, Range, ScaleP),
- % May be new vertical scale position required!
- NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(vscale, Pos, ScaleP),
- % May be new maximum size of elements!
- ?SCALE_FUNC_FILE:set_scale_range(hscale, {1, MaxElemSize}, NewScaleP),
-
- ProcVars#process_variables{data_list = DataList,
- color_list = ColorList,
- first_row_shown = Pos,
- initialising = false,
- scale_params = NewScaleP,
- mark_params = NewMarkP
- }.
-
-
-
-
-
-
-
-scroll_vertically(MouseBtn, ProcVars) ->
- #process_variables{scale_params = ScaleP} = ProcVars,
-
- OldScalePos = ScaleP#scale_params.vscale_pos,
- NewScalePos = get_new_scalepos(MouseBtn, OldScalePos),
-
- case NewScalePos of
- OldScalePos ->
- ProcVars;
- NewValue ->
- perform_vertical_scroll(NewValue, ProcVars)
- end.
-
-
-
-
-
-
-
-scroll_horizontally(MouseBtn, ProcVars) ->
- #process_variables{scale_params = ScaleP} = ProcVars,
-
- OldScalePos = ScaleP#scale_params.hscale_pos,
- NewScalePos = get_new_scalepos(MouseBtn, OldScalePos),
-
- case NewScalePos of
- OldScalePos ->
- ProcVars;
- NewValue ->
- perform_horizontal_scroll(NewValue, ProcVars)
- end.
-
-
-
-
-
-
-
-
-perform_vertical_scroll(NewScalePos, ProcVars) ->
- #process_variables{master_pid = MasterPid,
- initialising = Init,
- scale_params = ScaleP} = ProcVars,
-
- %% To avoid erroneous scrollbar signals during creation of the display.
- case Init of
- true ->
- done;
- false ->
- MasterPid ! #pc_data_req{sender = self(),
- element = NewScalePos,
- nof_elements = ?NOF_GRIDROWS}
- end,
-
- % Since the order of click/buttonrelease messages isn't
- % precise, set the scale to the returned pos (may otherwise
- % differ one unit).
- NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(vscale,
- NewScalePos,
- ScaleP),
-
- ProcVars#process_variables{scale_params = NewScaleP}.
-
-
-
-
-
-
-
-perform_horizontal_scroll(NewScalePos, ProcVars) ->
- #process_variables{pg_pid = PgPid,
- pb_pid = PbPid,
- frame_params = FrameP,
- scale_params = ScaleP} = ProcVars,
-
- % Since the order of click/buttonrelease messages isn't
- % precise, set the scale to the returned pos (may otherwise
- % differ one unit).
- NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(hscale,
- NewScalePos,
- ScaleP),
-
- PgPid ! #pg_horizontal_scroll{sender = self(),
- leftmost_virtual_col = NewScalePos
- },
-
- #frame_params{grid_frame_width = GridFrameWidth,
- grid_frame_height = GridFrameHeight} = FrameP,
- receive
- #pg_col_info{first_col_shown = FirstColShown,
- width_of_cols_shown = ColsShown,
- nof_rows_shown = NofRowsShown} ->
-
- PbPid ! #pb_update_hbtns{parent_width = GridFrameWidth,
- parent_height = GridFrameHeight,
- first_col_shown = FirstColShown,
- cols_shown = ColsShown
- },
-
- ProcVars#process_variables{first_col_shown = FirstColShown,
- cols_shown = ColsShown,
- nof_rows_shown = NofRowsShown,
- scale_params = NewScaleP
- }
- end.
-
-
-
-
-
-
-
-
-marked_cell(true, VirtualCol, RealRow, VirtualRow, ProcVars) ->
- #process_variables{master_pid = MasterPid,
- rec_pid = RecPid,
- data_list = DataList,
- color_list = ColorList,
- writable = Writable,
- mark_params = MarkP,
- toolbar_params = ToolP} = ProcVars,
-
- {DataElement, MarkedRowObject} = get_data_element(cell, DataList, RealRow, VirtualCol),
- update_toolbar_label(DataElement, ToolP, VirtualRow, VirtualCol, Writable),
- send_to_rec_edit(RecPid, {update_mode,MarkedRowObject}),
-
- MarkedRowColor = lists:nth(RealRow, ColorList),
-
- MasterPid ! #pc_marked_row{sender = self(),
- row_no = VirtualRow,
- object = MarkedRowObject,
- color = MarkedRowColor
- },
- NewMarkP = MarkP#mark_params{cell_col_no = VirtualCol,
- row_no = RealRow,
- virtual_row_no = VirtualRow,
- marked_object = MarkedRowObject,
- marked_color = MarkedRowColor
- },
- ProcVars#process_variables{mark_params = NewMarkP
- };
-marked_cell(false, VirtualCol, _RealRow, VirtualRow, ProcVars) ->
- #process_variables{master_pid = MasterPid,
- rec_pid = RecPid,
- pb_pid = PbPid,
- writable = Writable,
- mark_params = MarkP} = ProcVars,
-
- PbPid ! #pb_remove_marks{sender = self()},
-
- case VirtualRow of
- undefined ->
- done;
- _AnyRow ->
- update_toolbar_label(notext, ProcVars#process_variables.toolbar_params,
- VirtualRow, VirtualCol, Writable),
- send_to_rec_edit(RecPid, insert_mode)
- end,
- MasterPid ! #pc_marked_row{sender = self(),
- %% row_no = VirtualRow
- row_no = undefined,
- object = undefined,
- color = undefined
- },
- NewMarkP = MarkP#mark_params{cell_col_no = undefined,
- row_no = undefined,
- virtual_row_no = undefined,
- marked_object = undefined,
- marked_color = undefined
- },
- ProcVars#process_variables{mark_params = NewMarkP
- }.
-
-
-
-
-
-
-
-
-update_toolbar_label(notext, ToolP, _VirtualRowNo, _VirtualColNo, Writable) ->
- #toolbar_params{row_col_label_id = RowColLblId,
- fg_label_id = FgLblId,
- editor_id = EdId} = ToolP,
- gs:config(RowColLblId, [{label, {text,""}}]),
- gs:config(FgLblId, [{enable,true}]),
- gs:config(FgLblId, [{delete, {0,1000000000}}]),
- gs:config(FgLblId, [{insert, {0, ""}}]),
- case Writable of
- true ->
- gs:config(FgLblId, [{cursor, text},
- {setfocus, true}]);
- false ->
- gs:config(FgLblId, [{enable, false},
- {cursor, arrow},
- {setfocus, false}])
- end,
- update_toolbar_editor(EdId, notext);
-update_toolbar_label({DataToShow}, ToolP, VirtualRowNo, VirtualColNo, Writable) ->
- #toolbar_params{row_col_label_id = RowColLblId,
- fg_label_id = FgLblId,
- editor_id = EdId} = ToolP,
-
- case VirtualRowNo of
- undefined ->
- %% No row - nothing can possibly be marked!
- case Writable of
- true ->
- gs:config(FgLblId, [{setfocus,true},
- {cursor, text}]);
- false ->
- gs:config(FgLblId, [{enable,false},
- {setfocus, false},
- {cursor, arrow}])
- end;
- _AnyRow ->
- RowStr = "R" ++ integer_to_list(VirtualRowNo),
- ColStr = case VirtualColNo of
- undefined ->
- "";
- _AnyCol ->
- " x C" ++ integer_to_list(VirtualColNo)
- end,
- DataStr = lists:flatten(tv_io_lib:format("~p", [DataToShow])),
- gs:config(RowColLblId, [{label, {text,RowStr++ColStr}}]),
- gs:config(FgLblId, [{enable,true}]),
- gs:config(FgLblId, [{delete, {0,10000000}}]),
- gs:config(FgLblId, [{insert, {0,DataStr}}]),
- case Writable of
- true ->
- gs:config(FgLblId, [{setfocus,true},
- {cursor, text}]);
- false ->
- gs:config(FgLblId, [{enable,false},
- {setfocus, false},
- {cursor, arrow}])
- end,
- update_toolbar_editor(EdId, {DataToShow})
- end.
-
-
-
-
-
-
-
-
-get_data_element(row, DataList, RowNo, _VirtualCol) ->
- if
- length(DataList) < RowNo ->
- {notext, undefined};
- true ->
- RowObj = lists:nth(RowNo, DataList),
- {{RowObj}, RowObj}
- end;
-get_data_element(cell, DataList, RowNo, ColNo) ->
- %% It's the responsibility of pg to ensure that there is a data item
- %% for the cell marked, meaning we don't *have* to check the length of
- %% the data items. However, since we in the future may want to edit
- %% even empty cells, we check it!
- if
- length(DataList) < RowNo ->
- {notext, undefined};
- true ->
- DataItem = lists:nth(RowNo, DataList),
- if
- is_tuple(DataItem) ->
- if size(DataItem) < ColNo ->
- {notext, DataItem};
- true ->
- {{element(ColNo, DataItem)}, DataItem}
- end;
- true ->
- {{DataItem}, DataItem}
- end
- end.
-
-
-
-
-
-
-
-
-show_toolbar_editor(ProcVars) ->
- #process_variables{frame_params = FrameP,
- toolbar_params = ToolP} = ProcVars,
-
- #frame_params{toolbar_frame_height = THeight} = FrameP,
-
- #toolbar_params{editor_frame_id = EdFrameId} = ToolP,
-
- Xpos = 0,
- Ypos = THeight - 8 - ?ROW_COL_LBL_HEIGHT + 1,
- gs:config(EdFrameId, [{x, Xpos},
- {y, Ypos}
- ]),
- ProcVars.
-
-
-
-
-
-
-
-
-hide_toolbar_editor(ProcVars) ->
- #process_variables{toolbar_params = ToolP} = ProcVars,
-
- #toolbar_params{editor_frame_id = EdFrameId} = ToolP,
-
- Xpos = 0,
- Ypos = (-1) * gs:read(EdFrameId, height) - 50,
- gs:config(EdFrameId, [{x, Xpos},
- {y, Ypos}
- ]),
- ProcVars.
-
-
-
-
-
-
-%%%********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%********************************************************************
-
-
-
-
-
-update_toolbar_editor(EdId, notext) ->
- gs:config(EdId, [{enable, true}]),
- gs:config(EdId, [clear]),
- gs:config(EdId, [{enable, false}]);
-update_toolbar_editor(EdId, {DataToShow}) ->
- Str = io_lib:format("~n~p~n", [DataToShow]),
- gs:config(EdId, [{enable, true}]),
- gs:config(EdId, [clear]),
- gs:config(EdId, [{overwrite, {insert, Str}}]),
- gs:config(EdId, [{enable, false}]).
-
-
-
-
-
-
-update_marks(true, _DataList, _ColorList, _MarkedRowData,
- _Pos, _NofRowsShown, _Writable, _Range, PcPid, PgPid, RecPid, ToolP, MarkP) ->
- PgPid ! #pg_remove_marks{sender = self()},
- %% Too much trouble trying to find the marked object again!
- %% On the other hand, is the mark based on the row number
- %% or the row content? Probably different strategies now, depending
- %% on where in the code we are... :-(
- %% update_toolbar_label(notext, ToolP, undefined, undefined, Writable),
- update_toolbar_editor(ToolP#toolbar_params.editor_id, notext),
- send_to_rec_edit(RecPid, insert_mode),
- PcPid ! #pc_marked_row{sender = self(),
- row_no = undefined,
- object = undefined,
- color = undefined
- },
- MarkP#mark_params{cell_col_no = undefined,
- row_no = undefined,
- virtual_row_no = undefined,
- marked_object = undefined,
- marked_color = undefined
- };
-update_marks(false, DataList, ColorList, MarkedRowData,
- Pos, NofRowsShown, Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP) ->
- #mark_params{cell_col_no = CellColNo,
- virtual_row_no = VirtualRowNo} = MarkP,
-
- % Marked row data contains the color also!
- {RowData, RowColors} = split_dblist(MarkedRowData, [], []),
-
- case VirtualRowNo of
- undefined ->
- MarkP;
- _AnyRow ->
- if
- VirtualRowNo > element(2, Range) ->
- %% Mark outside the existing list! Uh-uh, remove the mark immediately! 8-0
- update_marks(true, DataList, ColorList, MarkedRowData, Pos, NofRowsShown,
- Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP);
- true ->
- {DataElement, RowObj} = choose_data_to_show(VirtualRowNo, CellColNo, RowData,
- DataList, Pos),
- {_, RowObjColor} = choose_data_to_show(VirtualRowNo, CellColNo, RowColors,
- ColorList, Pos),
- case DataElement of
- notext ->
- %% send_to_rec_edit(RecPid, insert_mode);
- done;
- _OtherElement ->
- %% send_to_rec_edit(RecPid, {update_mode, RowObj})
- send_to_rec_edit(RecPid, {reset_info, RowObj})
- end,
-
- %% case RowObj of
- %% OldMarkedObj ->
- %% done;
- %% _NewObj ->
- %% update_toolbar_label(DataElement, ToolP, VirtualRowNo,
- %% CellColNo, Writable)
- %% end,
-
- %% update_toolbar_label(DataElement,ToolP,VirtualRowNo,CellColNo,Writable),
-
- update_toolbar_editor(ToolP#toolbar_params.editor_id, DataElement),
- MarkP#mark_params{marked_object = RowObj,
- marked_color = RowObjColor}
- end
- end.
-
-
-
-
-
-choose_data_to_show(VirtualRowNo, undefined, _RowData, DataList, Pos) when VirtualRowNo >= Pos, VirtualRowNo =< (Pos + length(DataList) - 1) ->
- get_data_element(row, DataList, VirtualRowNo - Pos + 1, undefined);
-choose_data_to_show(_VirtualRowNo, undefined, RowData, _DataList, _Pos) ->
- get_data_element(row, RowData, 1, undefined);
-choose_data_to_show(VirtualRowNo, CellColNo, _RowData, DataList, Pos)
- when VirtualRowNo >= Pos, VirtualRowNo =< (Pos + length(DataList) - 1) ->
- get_data_element(cell, DataList, VirtualRowNo - Pos + 1, CellColNo);
-choose_data_to_show(_VirtualRowNo, CellColNo, RowData, _DataList, _Pos) ->
- get_data_element(cell, RowData, 1, CellColNo).
-
-
-
-
-
-
-get_new_scalepos(Btn, LastScalePos) ->
- receive
- {gs, _Id, click, _Data, [NewScalePos | _T]} ->
- get_new_scalepos(Btn, NewScalePos);
-
- {gs, _Id, buttonrelease, _Data, [Btn | _T]} ->
- LastScalePos;
-
- {gs, _Id, buttonrelease, _Data, _Args} ->
- get_new_scalepos(Btn, LastScalePos);
-
- {gs, _Id, buttonpress, _Data, _Args} ->
- get_new_scalepos(Btn, LastScalePos)
-
- end.
-
-
-
-
-
-
-
-split_dblist([], DataAcc, ColorAcc) ->
- {lists:reverse(DataAcc), lists:reverse(ColorAcc)};
-split_dblist([{Data, Color} | Tail], DataAcc, ColorAcc) ->
- split_dblist(Tail, [Data | DataAcc], [Color | ColorAcc]).
-
-
-
-
-
-
-
-
-init_toolbar(FrameP, ToolP) ->
- #frame_params{display_id = DispId,
- toolbar_frame_id = TId,
- toolbar_frame_width = TWidth,
- toolbar_frame_height = THeight,
- grid_frame_width = GWidth} = FrameP,
-
- NewToolP = init_toolbar_btns(TId, ToolP),
- {RowColLblId, BgLabelId, FgLabelId, BtnId} =
- init_toolbar_label(TId, TWidth, THeight, GWidth),
-
- PopUpFrame = gs:frame(TId, [{width, 80},
- {height, 20},
- {x, 0},
- {y, -30},
- {bg, {0, 0, 0}}
- ]),
-
- PopUpLabel = gs:label(PopUpFrame, [{width, 78},
- {height, 18},
- {bg, {255,255,190}},
- {x,1},
- {y,1},
- {align, center},
- {label, {text,""}},
- {font,{screen,12}}]),
-
- {EditorFrameId, EditorId} = init_toolbar_editor(DispId, TWidth, THeight),
-
- NewToolP#toolbar_params{parent_id = TId,
- row_col_label_id = RowColLblId,
- bg_label_id = BgLabelId,
- fg_label_id = FgLabelId,
- label_btn_id = BtnId,
- pop_up_frame_id = PopUpFrame,
- pop_up_label_id = PopUpLabel,
- editor_frame_id = EditorFrameId,
- editor_id = EditorId
- }.
-
-
-
-
-
-
-init_toolbar_btns(TId, ToolP) ->
- PicDir = code:priv_dir(tv),
-% PicDir = "../priv",
- % Toolbar btns are 25x25, the bitmaps are 20x20.
- create_one_toolbar_btn(TId, 1, PicDir ++ "/edit1.xbm",
- {toolbar, insert_object, "Edit Object"}),
- create_one_toolbar_btn(TId, 3, PicDir ++ "/search.xbm",
- {toolbar, search_object, "Search Object"}),
- create_one_toolbar_btn(TId, 5, PicDir ++ "/sort.xbm",
- {toolbar, sort_rising_order, "Sort Ascending"}),
- create_one_toolbar_btn(TId, 6, PicDir ++ "/no_sort.xbm",
- {toolbar, no_sorting,"No Sorting"}),
- create_one_toolbar_btn(TId, 7, PicDir ++ "/sort_reverse.xbm",
- {toolbar, sort_falling_order,"Sort Descending"}),
- create_one_toolbar_btn(TId, 9, PicDir ++ "/poll.xbm",
- {toolbar, poll_table,"Poll Table"}),
- create_one_toolbar_btn(TId, 11, PicDir ++ "/info.xbm",
- {toolbar, table_info,"Table Info"}),
- create_one_toolbar_btn(TId, 13, PicDir ++ "/help.xbm",
- {toolbar, help_button, "Help"}),
- ToolP.
-
-
-
-
-
-
-
-
-create_one_toolbar_btn(ParentId, N, Image, Data) ->
- BtnWidth = 25,
- BtnHeight = 25,
- StartXpos = 0,
- BtnXpos = StartXpos + ((N - 1) * BtnWidth),
- BtnYpos = 2,
- BgColor = ?DEFAULT_BG_COLOR,
- FgColor = {178,34,34}, % Firebrick
-
- gs:button(ParentId, [{width, BtnWidth},
- {height, BtnHeight},
- {x, BtnXpos},
- {y, BtnYpos},
- {enter, true},
- {leave, true},
- {label, {image, Image}},
- {data, Data},
- {fg, FgColor},
- {bg, BgColor}
- ]).
-
-
-
-
-
-resize_toolbar(FrameP, ToolP) ->
- #frame_params{toolbar_frame_width = TWidth,
- toolbar_frame_height = THeight,
- grid_frame_width = GWidth} = FrameP,
-
- #toolbar_params{bg_label_id = BgId,
- fg_label_id = FgId,
- row_col_label_id = RowColId,
- label_btn_id = BtnId,
- editor_frame_id = FrId,
- editor_id = EdId} = ToolP,
-
- resize_toolbar_label(BgId, FgId, RowColId, BtnId, TWidth, THeight, GWidth),
- resize_toolbar_editor(FrId, EdId, TWidth, THeight),
- ToolP.
-
-
-
-
-
-
-
-
-init_toolbar_label(ParentId, ParentWidth, ParentHeight, GWidth) ->
- {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos, BtnWidth,
- BtnHeight, BtnXpos, BtnYpos} =
- get_toolbar_label_coords(ParentWidth, ParentHeight),
-
- BgId = gs:label(ParentId, [{width, BgWidth},
- {height, BgHeight},
- {x, BgXpos},
- {y, BgYpos},
- {bg, {0, 0, 0}},
- {fg, {0, 0, 0}}
- ]),
-
-
- RowColLblHeight = ?ROW_COL_LBL_HEIGHT,
- RowColLblWidth = GWidth - ?VBTN_WIDTH,
- RowColLblYpos = BgYpos + RowColLblHeight + 18,
-
- RowColLblId = gs:label(ParentId, [{width, RowColLblWidth},
- {height, RowColLblHeight},
- {x, ?VBTN_WIDTH},
- {y, RowColLblYpos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {178,34,34}},
- {align,center},
- {font,{screen,12}},
- {label, {text,""}}
- ]),
-
- FgId = gs:entry(editentry, ParentId, [{width, FgWidth},
- {height, FgHeight},
- {x, FgXpos},
- {y, FgYpos},
- {bg, {255,255,255}},
- {fg, {0,0,0}},
- {bw, 1},
- {font,{screen,12}},
- {justify, left},
- {cursor, arrow},
- {setfocus, false},
- {enable, false},
- {keypress,true}
- ]),
-
- PicDir = code:priv_dir(tv),
- BtnId = gs:button(ParentId, [{width, BtnWidth},
- {height, BtnHeight},
- {x, BtnXpos},
- {y, BtnYpos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {label, {image, PicDir ++ "/more.xbm"}},
- {data, {labelbtn, pop_up}}
- ]),
-
- {RowColLblId, BgId, FgId, BtnId}.
-
-
-
-
-
-
-
-init_toolbar_editor(DispId, TWidth, THeight) ->
- {BgWidth, BgHeight, BgXpos, BgYpos, Width, Height, Xpos, Ypos} =
- get_toolbar_editor_coords(TWidth, THeight),
-
- EditorFrame = gs:frame(DispId, [{width, BgWidth},
- {height, BgHeight},
- {x, BgXpos},
- {y, BgYpos},
- {bg, {0, 0, 0}}
- ]),
-
- Editor = gs:editor(EditorFrame, [{width, Width},
- {height, Height},
- {x, Xpos},
- {y, Ypos},
- {vscroll, right},
- {wrap, word},
- {bg, {255, 255, 255}},
- {fg, {0, 0, 0}},
- {enable, false}
- ]),
-
- {EditorFrame, Editor}.
-
-
-
-
-
-
-
-get_toolbar_editor_coords(TWidth, _THeight) ->
- BgWidth = TWidth,
- BgHeight = 200,
- BgXpos = 0,
- BgYpos = (-1) * BgHeight - 50,
- FgWidth = BgWidth - 2,
- FgHeight = BgHeight - 2,
- FgXpos = 1,
- FgYpos = 1,
-
- {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos}.
-
-
-
-
-
-
-resize_toolbar_editor(FrId, EdId, TWidth, THeight) ->
- {BgWidth, BgHeight, _BgXpos, _BgYpos, FgWidth, FgHeight, _FgXpos, _FgYpos} =
- get_toolbar_editor_coords(TWidth, THeight),
- gs:config(FrId, [{width, BgWidth},
- {height, BgHeight}
- ]),
-
- gs:config(EdId, [{width, FgWidth},
- {height, FgHeight}
- ]).
-
-
-
-
-
-
-resize_toolbar_label(BgId, FgId, RowColId, BtnId, ParentWidth, ParentHeight, GWidth) ->
- {BgWidth, BgHeight, _BgXpos, _BgYpos, FgWidth, FgHeight, _FgXpos, _FgYpos, _BtnWidth,
- _BtnHeight, BtnXpos, BtnYpos} =
- get_toolbar_label_coords(ParentWidth, ParentHeight),
-
- gs:config(RowColId, [{width, GWidth - ?VBTN_WIDTH}]),
-
- gs:config(BgId, [{width, BgWidth},
- {height, BgHeight}
- ]),
-
- gs:config(BtnId, [{x, BtnXpos},
- {y, BtnYpos}
- ]),
-
- gs:config(FgId, [{width, FgWidth},
- {height, FgHeight}
- ]).
-
-
-
-
-
-get_toolbar_label_coords(ParentWidth, ParentHeight) ->
- BtnWidth = 19,
- BgWidth = ParentWidth,
- BgHeight = 26,
- BgXpos = 0,
- BgYpos = ParentHeight - BgHeight - 8 - ?ROW_COL_LBL_HEIGHT + 2,
- FgHeight = BgHeight - 2,
- FgWidth = BgWidth - BtnWidth - 3,
- FgXpos = BgXpos + 1,
- FgYpos = BgYpos + 1,
- BtnHeight = BgHeight - 2,
- BtnXpos = FgWidth + 2,
- BtnYpos = BgYpos + 1,
-
- {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos, BtnWidth,
- BtnHeight, BtnXpos, BtnYpos}.
-
-
-
-
-
-
-send_to_rec_edit(undefined, _Msg) ->
- done;
-send_to_rec_edit(RecPid, Msg) ->
- RecPid ! Msg.
-
-
-
-
diff --git a/lib/tv/src/tv_pd_frames.erl b/lib/tv/src/tv_pd_frames.erl
deleted file mode 100644
index aab40e2bba..0000000000
--- a/lib/tv/src/tv_pd_frames.erl
+++ /dev/null
@@ -1,482 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_pd_frames).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,frame,2}}]).
-
-
-
--export([create_display_frames/4, resize_display_frames/3]).
-
-
-
-
--include("tv_int_def.hrl").
--include("tv_pd_int_def.hrl").
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_display_frames(WindowId, WindowWidth, WindowHeight, FrameP) ->
- {DisplayId, DisplayWidth, DisplayHeight} =
- create_frame(WindowId,
- get_display_coords(WindowWidth, WindowHeight),
- ?DEFAULT_BG_COLOR,
- 0),
-
- {ToolbarId, ToolbarWidth, ToolbarHeight} = create_toolbar_frame(DisplayId,
- DisplayWidth),
-
- {SheetFrameId, SheetBgFrameId, SheetFrameWidth, SheetFrameHeight} =
- create_sheet_frames(DisplayId,
- DisplayWidth,
- DisplayHeight),
-
- {GridFrameId, GridBgFrameId, GridFrameWidth, GridFrameHeight} =
- create_grid_frames(SheetFrameId,
- SheetFrameWidth,
- SheetFrameHeight),
-
-
- FrameP#frame_params{display_id = DisplayId,
- toolbar_frame_id = ToolbarId,
- toolbar_frame_width = ToolbarWidth,
- toolbar_frame_height = ToolbarHeight,
- sheet_frame_id = SheetFrameId,
- sheet_frame_width = SheetFrameWidth,
- sheet_frame_height = SheetFrameHeight,
- sheet_bgframe_id = SheetBgFrameId,
- grid_frame_id = GridFrameId,
- grid_frame_width = GridFrameWidth,
- grid_frame_height = GridFrameHeight,
- grid_bgframe_id = GridBgFrameId
- }.
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-resize_display_frames(NewW, NewH, FrameP) ->
- #frame_params{display_id = DispId,
- toolbar_frame_id = ToolbarId,
- sheet_frame_id = SheetFgId,
- sheet_bgframe_id = SheetBgId,
- grid_frame_id = GridFgId,
- grid_bgframe_id = GridBgId} = FrameP,
-
- {NewDispW, NewDispH} = config_frame(DispId, get_display_coords(NewW, NewH)),
- {NewToolW, NewToolH} = resize_toolbar(ToolbarId, NewDispW),
- {NewSheetFgW, NewSheetFgH} = resize_sheet_frames(SheetFgId, SheetBgId, NewDispW,
- NewDispH),
-
- {NewGridFgW, NewGridFgH} = resize_grid_frames(GridFgId, GridBgId, NewSheetFgW,
- NewSheetFgH),
-
- FrameP#frame_params{toolbar_frame_width = NewToolW,
- toolbar_frame_height = NewToolH,
- sheet_frame_width = NewSheetFgW,
- sheet_frame_height = NewSheetFgH,
- grid_frame_width = NewGridFgW,
- grid_frame_height = NewGridFgH
- }.
-
-
-
-
-
-
-
-
-%%%********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%********************************************************************
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-config_frame(Id, {Width, Height, Xpos, Ypos}) ->
- gs:config(Id, [{width, Width},
- {height, Height},
- {x, Xpos},
- {y, Ypos}
- ]),
- {Width, Height}.
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_frame(ParentId, {Width, Height, Xpos, Ypos}, Color, BorderWidth) ->
- Id = gs:frame(ParentId, [{width, Width},
- {height, Height},
- {x, Xpos},
- {y, Ypos},
- {bw, BorderWidth},
- {bg, Color}
- ]),
- {Id, Width, Height}.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_grid_frames(SheetFrameId, SheetFrameWidth, SheetFrameHeight) ->
- {BgId, _W, _H} =
- create_frame(SheetFrameId,
- get_grid_frame_coords(bg, SheetFrameWidth, SheetFrameHeight),
- ?BLACK,
- 0),
- {FgId, FgWidth, FgHeight} =
- create_frame(SheetFrameId,
- get_grid_frame_coords(fg, SheetFrameWidth, SheetFrameHeight),
- ?DEFAULT_BG_COLOR,
- 0),
- {FgId, BgId, FgWidth, FgHeight}.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_sheet_frames(DispId, DispWidth, DispHeight) ->
- {BgId, _W, _H} = create_frame(DispId,
- get_sheet_frame_coords(bg, DispWidth, DispHeight),
- ?BLACK,
- 0),
- {FgId, FgWidth, FgHeight} =
- create_frame(DispId,
- get_sheet_frame_coords(fg, DispWidth, DispHeight),
- ?DEFAULT_BG_COLOR,
- 0),
- {FgId, BgId, FgWidth, FgHeight}.
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_toolbar_frame(DispId, DispWidth) ->
- create_frame(DispId, get_toolbar_coords(DispWidth), ?DEFAULT_BG_COLOR, 0).
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_display_coords(WindowWidth, WindowHeight) ->
- Xpos = 4,
- {WindowWidth - 2 * Xpos, WindowHeight - ?MENUBAR_HEIGHT - Xpos, Xpos, ?MENUBAR_HEIGHT}.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_grid_frame_coords(bg, FrameWidth, FrameHeight) ->
- get_grid_frame_coords2(FrameWidth, FrameHeight, 0);
-get_grid_frame_coords(fg, FrameWidth, FrameHeight) ->
- get_grid_frame_coords2(FrameWidth, FrameHeight, 1).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_grid_frame_coords2(FrameWidth, FrameHeight, BorderWidth) ->
- Xpos = 0,
- Ypos = 0,
- Width = FrameWidth - ?VSCALE_WIDTH - Xpos - BorderWidth,
- Height = FrameHeight - ?HSCALE_HEIGHT - Ypos - BorderWidth,
- {Width, Height, Xpos, Ypos}.
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_sheet_frame_coords(bg, FrameWidth, FrameHeight) ->
- get_sheet_frame_coords2(FrameWidth, FrameHeight, 0);
-get_sheet_frame_coords(fg, FrameWidth, FrameHeight) ->
- get_sheet_frame_coords2(FrameWidth, FrameHeight, 1).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_sheet_frame_coords2(FrameWidth, FrameHeight, BorderWidth) ->
- Xpos = BorderWidth,
- Ypos = ?TOOLBAR_HEIGHT + BorderWidth,
- Width = FrameWidth - 2 * BorderWidth,
- Height = FrameHeight - Ypos - ?MISC_AREA_HEIGHT - BorderWidth,
- {Width, Height, Xpos, Ypos}.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_toolbar_coords(DispWidth) ->
- Xpos = 0,
- {DispWidth - 2 * Xpos, ?TOOLBAR_HEIGHT, Xpos, 0}.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-resize_grid_frames(FgId, BgId, ParentWidth, ParentHeight) ->
- config_frame(BgId, get_grid_frame_coords(bg, ParentWidth, ParentHeight)),
- config_frame(FgId, get_grid_frame_coords(fg, ParentWidth, ParentHeight)).
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-resize_sheet_frames(FgId, BgId, ParentWidth, ParentHeight) ->
- config_frame(BgId, get_sheet_frame_coords(bg, ParentWidth, ParentHeight)),
- config_frame(FgId, get_sheet_frame_coords(fg, ParentWidth, ParentHeight)).
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-resize_toolbar(Id, DispWidth) ->
- config_frame(Id, get_toolbar_coords(DispWidth)).
-
-
-
diff --git a/lib/tv/src/tv_pd_int_def.hrl b/lib/tv/src/tv_pd_int_def.hrl
deleted file mode 100644
index 2c76bef892..0000000000
--- a/lib/tv/src/tv_pd_int_def.hrl
+++ /dev/null
@@ -1,139 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Internal definitions for the pd part of the table tool.
-%%%
-%%%*********************************************************************
-
--define(SCALE_FUNC_FILE, tv_pd_scale).
--define(DISP_FUNC_FILE, tv_pd_display).
-
-
--define(SCALE_WIDTH, 75).
--define(VSCALE_WIDTH, 75).
--define(HSCALE_HEIGHT, 75).
--define(MENUBAR_HEIGHT, 30).
--define(TOOLBAR_HEIGHT, 84). %% 97
--define(DISPLAY_HEIGHT, 849).
--define(MISC_AREA_HEIGHT, 0).
--define(GRID_HEIGHT, 849).
--define(NOF_GRIDROWS, 35). %% 29
--define(NOF_GRIDCOLS, 10).
--define(DEFAULT_COLWIDTH, 100).
--define(ROW_HEIGHT, 20). %% 24
--define(VBTN_WIDTH, 55). %% 18
--define(HBTN_HEIGHT, 20).
--define(RESBTN_WIDTH, 5).
--define(DEFAULT_GRID_BGCOLOR, {255,255,255}).
--define(DEFAULT_GRID_FGCOLOR, {0,0,0}).
--define(GRID_MARK_COLOR, {0,255,255}).
--define(GRID_FONT, {courier,12}).
-
--define(ROW_COL_LBL_WIDTH, 140).
--define(ROW_COL_LBL_HEIGHT, 14).
-
-
-
--define(KEY_MARK_AREA_HEIGHT, 21).
-
-
--define(DEFAULT_BG_COLOR, {217,217,217}).
--define(DEFAULT_ROW_COLOR, {178,34,34}). % Firebrick!
--define(DEFAULT_GRID_COLOR, {0,0,0}).
--define(LIGHT_GRAY, {226,226,226}).
--define(DARK_VIOLET, {148,0,211}).
--define(FIREBRICK, {178,34,34}).
--define(ANTIQUE_WHITE, {255,255,235}).
-
-
--record(frame_params, {display_id,
- toolbar_frame_id,
- toolbar_frame_width,
- toolbar_frame_height,
- sheet_frame_id,
- sheet_frame_width,
- sheet_frame_height,
- sheet_bgframe_id,
- grid_frame_id,
- grid_frame_width,
- grid_frame_height,
- grid_bgframe_id
- }).
-
-
-
-
--record(scale_params, {vscale_id,
- vscale_pos = 0,
- hscale_id,
- hscale_pos = 0
- }).
-
-
-
-
--record(mark_params, {cell_id,
- cell_col_no, % Virtual number!
- row_no, % Real number!
- virtual_row_no,
- col_no, % Virtual number!
- sort_col_no,
- marked_object,
- marked_color
- }).
-
-
-
--record(toolbar_params, {parent_id,
- row_col_label_id,
- bg_label_id,
- fg_label_id,
- label_btn_id,
- pop_up_frame_id,
- pop_up_label_id,
- editor_frame_id,
- editor_id
- }).
-
-
--record(process_variables, {master_pid,
- pg_pid,
- pb_pid,
- rec_pid,
- window_id,
- window_width,
- window_height,
- initialising = true,
- table_type,
- table_name,
- record_name,
- writable = false,
- lists_as_strings = true,
- sorting_on = false,
- first_col_shown = 1,
- first_row_shown = 1,
- nof_rows_shown,
- cols_shown = [],
- data_list = [],
- color_list = [],
- frame_params = #frame_params{},
- scale_params = #scale_params{},
- mark_params = #mark_params{},
- toolbar_params = #toolbar_params{}
- }).
diff --git a/lib/tv/src/tv_pd_int_msg.hrl b/lib/tv/src/tv_pd_int_msg.hrl
deleted file mode 100644
index faf23a9376..0000000000
--- a/lib/tv/src/tv_pd_int_msg.hrl
+++ /dev/null
@@ -1,433 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-
-
-%%%*********************************************************************
-%%% MESSAGES OWNED BY PG
-%%%*********************************************************************
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pg_init_grid, {sender,
- parent_id,
- width,
- height,
- xpos,
- ypos,
- nof_rows,
- row_height
- }).
-
-
-
--record(pg_list_info, {sender,
- lists_as_strings}).
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pg_col_info, {sender,
- first_col_shown,
- width_of_cols_shown,
- nof_rows_shown
- }).
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pg_col_marked, {sender,
- virtual_col
- }).
-
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pg_row_marked, {sender,
- virtual_row
- }).
-
-
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
--record(pg_data, {sender,
- data,
- first_row_shown
- }).
-
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
--record(pg_cell_marked, {sender,
- cell_marked, % true or false
- real_col,
- real_row,
- virtual_col,
- virtual_row,
- cell_text
- }).
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
--record(pg_resize_grid, {sender,
- width,
- height
- }).
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
--record(pg_resize_grid_col, {sender,
- real_col_no,
- virtual_col_no,
- xdiff
- }).
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
--record(pg_horizontal_scroll, {sender,
- leftmost_virtual_col
- }).
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pg_ready, {sender}).
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pg_remove_marks, {sender}).
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pg_mark_col, {sender,
- virtual_col,
- real_col
- }).
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pg_mark_row, {sender,
- virtual_row,
- real_row
- }).
-
-
-
-
-
-
-%%%*********************************************************************
-%%% MESSAGES OWNED BY PB
-%%%*********************************************************************
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
--record(pb_init_btns, {sender,
- parent_id,
- parent_width,
- parent_height,
- ypos,
- hbtn_height,
- resbtn_width,
- vbtn_width,
- nof_rows,
- row_height,
- first_col_shown,
- cols_shown
- }).
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pb_remove_marks, {sender}).
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pb_update_hbtns, {sender,
- parent_width,
- parent_height,
- first_col_shown,
- cols_shown
- }).
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pb_update_vbtns, {sender,
- color_list,
- first_row_shown,
- nof_rows_shown,
- blinking_enabled
- }).
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pb_key_info, {sender,
- list_of_keys
- }).
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pb_new_colwidth, {sender,
- real_col,
- virtual_col,
- xdiff
- }).
-
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pb_col_marked, {sender,
- col_marked, % 'true' or 'false'
- real_col,
- virtual_col
- }).
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pb_row_marked, {sender,
- row_marked, % 'true' or 'false'
- real_row,
- virtual_row
- }).
-
-
-
-
-%%======================================================================
-%% Message:
-%%
-%% Function:
-%%
-%% Data:
-%%======================================================================
-
-
--record(pb_set_sort_col, {sender,
- virtual_col
- }).
-
-
-
-
diff --git a/lib/tv/src/tv_pd_scale.erl b/lib/tv/src/tv_pd_scale.erl
deleted file mode 100644
index 04af2bb981..0000000000
--- a/lib/tv/src/tv_pd_scale.erl
+++ /dev/null
@@ -1,305 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Part of pd controlling the scale, i.e., the scrollbar
-%%% imitation.
-%%%
-%%%*********************************************************************
-
-
--module(tv_pd_scale).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,scale,2}}]).
-
-
-
--export([init_scale/2,
- resize_scale/2,
- set_scale_range/3,
- set_scale_pos/3]).
-
-
-
--include("tv_int_def.hrl").
--include("tv_pd_int_def.hrl").
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-init_scale(FrameP, ScaleP) ->
- #frame_params{sheet_frame_id = SheetFrameId,
- sheet_frame_width = SheetFrameWidth,
- sheet_frame_height = SheetFrameHeight,
- grid_frame_width = GridFrameWidth,
- grid_frame_height = GridFrameHeight} = FrameP,
-
- VScaleId = create_scale(vscale, SheetFrameId, SheetFrameWidth, GridFrameHeight),
- HScaleId = create_scale(hscale, SheetFrameId, GridFrameWidth, SheetFrameHeight),
-
- ScaleP#scale_params{vscale_id = VScaleId,
- vscale_pos = 0,
- hscale_id = HScaleId,
- hscale_pos = 0
- }.
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-resize_scale(FrameP, ScaleP) ->
- #frame_params{sheet_frame_width = SheetFrameWidth,
- sheet_frame_height = SheetFrameHeight,
- grid_frame_width = GridFrameWidth,
- grid_frame_height = GridFrameHeight} = FrameP,
-
- #scale_params{vscale_id = VScaleId,
- hscale_id = HScaleId} = ScaleP,
-
- config_scale(vscale, VScaleId, SheetFrameWidth, GridFrameHeight),
- config_scale(hscale, HScaleId, GridFrameWidth, SheetFrameHeight),
- ScaleP.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-set_scale_range(vscale, Range, ScaleP) ->
- {Lo, Hi} = Range,
- NewRange = if
- Lo > Hi ->
- {Hi, Hi};
- true ->
- Range
- end,
- VScaleId = ScaleP#scale_params.vscale_id,
- gs:config(VScaleId, [{range, NewRange}]);
-set_scale_range(hscale, Range, ScaleP) ->
- {Lo, Hi} = Range,
- NewRange = if
- Lo > Hi ->
- {Hi, Hi};
- true ->
- Range
- end,
- HScaleId = ScaleP#scale_params.hscale_id,
- gs:config(HScaleId, [{range, NewRange}]).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-set_scale_pos(_ScaleName, undefined, ScaleP) ->
- ScaleP;
-set_scale_pos(vscale, NewPos, ScaleP) ->
- ScaleId = ScaleP#scale_params.vscale_id,
- gs:config(ScaleId, [{pos, NewPos}]),
- ScaleP#scale_params{vscale_pos = NewPos};
-set_scale_pos(hscale, NewPos, ScaleP) ->
- ScaleId = ScaleP#scale_params.hscale_id,
- gs:config(ScaleId, [{pos, NewPos}]),
- ScaleP#scale_params{hscale_pos = NewPos}.
-
-
-
-
-
-
-
-%%%********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%********************************************************************
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-config_scale(ScaleName, ScaleId, FrameWidth, FrameHeight) ->
- {Width, Height, Xpos, Ypos} = get_scale_coords(ScaleName,
- FrameWidth,
- FrameHeight),
- gs:config(ScaleId, [{height, Height},
- {width, Width},
- {x, Xpos},
- {y, Ypos}
- ]).
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_scale(ScaleName, FrameId, FrameWidth, FrameHeight) ->
- {Width, Height, Xpos, Ypos} = get_scale_coords(ScaleName,
- FrameWidth,
- FrameHeight),
- {Orientation, Range} = case ScaleName of
- vscale ->
- {vertical, {1, 1}};
- hscale ->
- {horizontal, {1, 1}}
- end,
- gs:scale(FrameId, [{data, ScaleName},
- {orient, Orientation},
- {buttonpress, true},
- {buttonrelease, true},
- {height, Height},
- {width, Width},
- {x, Xpos},
- {y, Ypos},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {range, Range}
- ]).
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_scale_coords(hscale, FrameWidth, FrameHeight) ->
- Height = ?HSCALE_HEIGHT,
- Xpos = ?VBTN_WIDTH - 3, % Subtracting 3 makes it look better!
- Ypos = FrameHeight - Height,
- Width = FrameWidth - Xpos + 5, % Adding 5 for better look!
- {Width, Height, Xpos, Ypos};
-get_scale_coords(vscale, FrameWidth, FrameHeight) ->
- Width = ?VSCALE_WIDTH,
- Xpos = (FrameWidth - Width),
- Ypos = ?HBTN_HEIGHT - 3, % Subtracting 3 makes it look better!
- Height = FrameHeight - Ypos + 5, % Adding 5 for better look!
- {Width, Height, Xpos, Ypos}.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/tv/src/tv_pg.erl b/lib/tv/src/tv_pg.erl
deleted file mode 100644
index 7194cfb756..0000000000
--- a/lib/tv/src/tv_pg.erl
+++ /dev/null
@@ -1,430 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_pg).
--compile([{nowarn_deprecated_function,{gs,config,2}}]).
-
-
-
--export([pg/1]).
-
-
--include("tv_int_def.hrl").
--include("tv_pg_int_def.hrl").
--include("tv_pd_int_msg.hrl").
-
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function: pg.
-%%
-%% Return Value: None.
-%%
-%% Description: Process controlling the grid part of the display.
-%%
-%% Parameters: None.
-%%======================================================================
-
-
-pg(ParentPid) ->
- process_flag(trap_exit, true),
- ProcVars = #process_variables{parent_pid = ParentPid},
- loop(ProcVars).
-
-
-
-
-
-
-
-%%%********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%********************************************************************
-
-
-
-
-
-%%======================================================================
-%% Function: loop.
-%%
-%% Return Value: None.
-%%
-%% Description: Eternal (well, almost) loop, receiving messages and
-%% handling them.
-%%
-%% Parameters:
-%%======================================================================
-
-
-
-loop(ProcVars) ->
- receive
- Msg ->
- case Msg of
-
-
- #pg_data{} ->
- GridId = mark_busy(ProcVars),
- NewProcVars = update_grid_data(Msg, ProcVars),
- mark_nonbusy(GridId),
- loop(NewProcVars);
-
- #pg_list_info{lists_as_strings=ListAsStr} ->
- NewProcVars = tv_pg_gridfcns:handle_list_info(ListAsStr, ProcVars),
- loop(NewProcVars);
-
- #pg_horizontal_scroll{} ->
- GridId = mark_busy(ProcVars),
- NewProcVars = scroll_grid_horizontally(Msg, ProcVars),
- mark_nonbusy(GridId),
- loop(NewProcVars);
-
- #pg_remove_marks{} ->
- GridId = mark_busy(ProcVars),
- NewProcVars = tv_pg_gridfcns:remove_marks(ProcVars),
- mark_nonbusy(GridId),
- loop(NewProcVars);
-
- #pg_col_marked{} ->
- GridId = mark_busy(ProcVars),
- NewProcVars = mark_grid_col(Msg, ProcVars),
- mark_nonbusy(GridId),
- loop(NewProcVars);
-
- #pg_row_marked{} ->
- GridId = mark_busy(ProcVars),
- NewProcVars = mark_grid_row(Msg, ProcVars),
- mark_nonbusy(GridId),
- loop(NewProcVars);
-
- #pg_resize_grid_col{} ->
- GridId = mark_busy(ProcVars),
- NewProcVars = resize_grid_column(Msg, ProcVars),
- mark_nonbusy(GridId),
- loop(NewProcVars);
-
- #pg_resize_grid{} ->
- GridId = mark_busy(ProcVars),
- NewProcVars = resize_grid(Msg, ProcVars),
- mark_nonbusy(GridId),
- loop(NewProcVars);
-
- #pg_init_grid{} ->
- GridId = mark_busy(ProcVars),
- NewProcVars = init_grid(Msg, ProcVars),
- mark_nonbusy(GridId),
- PdPid = ProcVars#process_variables.parent_pid,
- PdPid ! #pg_ready{sender = self()},
- loop(NewProcVars);
-
- {gs, Id, Event, Data, Args} ->
- GridId = mark_busy(ProcVars),
- NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars),
- mark_nonbusy(GridId),
- loop(NewProcVars);
-
-
- {'EXIT', Pid, Reason} ->
- ParentPid = ProcVars#process_variables.parent_pid,
- exit_signals({Pid, Reason}, ParentPid, ProcVars),
- loop(ProcVars);
-
- _Other ->
- loop(ProcVars)
- end
- end.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-exit_signals(ExitInfo, ParentPid, _ProcVars) ->
- case ExitInfo of
- {ParentPid, _Reason} ->
- exit(normal);
- _Other ->
- done
- end.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-gs_messages(Msg, ProcVars) ->
-
- case Msg of
-
- {Id, buttonpress, {gridcell, RealCol, RealRow, _FrameId}, [1 | _]} ->
- NewProcVars = tv_pg_gridfcns:mark_cell_and_notify(Id, RealCol,
- RealRow, ProcVars),
- NewProcVars;
-
-
- _OtherMessage ->
- ProcVars
-
- end.
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-init_grid(Msg, ProcVars) ->
- #pg_init_grid{parent_id = ParentId,
- width = Width,
- height = Height,
- xpos = Xpos,
- ypos = Ypos,
- nof_rows = NofRows,
- row_height = RowHeight} = Msg,
- tv_pg_gridfcns:init_grid(ParentId, Width, Height, Xpos, Ypos, NofRows,
- RowHeight, ProcVars).
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-resize_grid(Msg, ProcVars) ->
- #pg_resize_grid{width = Width,
- height = Height} = Msg,
- tv_pg_gridfcns:resize_grid(Width, Height, ProcVars).
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-resize_grid_column(Msg, ProcVars) ->
- #pg_resize_grid_col{real_col_no = RealCol,
- virtual_col_no = VirtualCol,
- xdiff = Xdiff} = Msg,
- tv_pg_gridfcns:resize_grid_column(RealCol, VirtualCol, Xdiff, ProcVars).
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-scroll_grid_horizontally(Msg, ProcVars) ->
- FirstColShown = ?COMM_FUNC_FILE:max(1, Msg#pg_horizontal_scroll.leftmost_virtual_col),
- tv_pg_gridfcns:scroll_grid_horizontally(FirstColShown, ProcVars).
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_grid_data(Msg, ProcVars) ->
- #pg_data{data = Data,
- first_row_shown = FirstRowShown} = Msg,
- tv_pg_gridfcns:update_grid_data(Data, FirstRowShown, ProcVars).
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-mark_grid_col(Msg, ProcVars) ->
- #pg_col_marked{virtual_col = VirtualCol} = Msg,
- tv_pg_gridfcns:mark_col(VirtualCol, ProcVars).
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-mark_grid_row(Msg, ProcVars) ->
- #pg_row_marked{virtual_row = VirtualRow} = Msg,
- tv_pg_gridfcns:mark_row(VirtualRow, ProcVars).
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-mark_busy(ProcVars) ->
- GridP = ProcVars#process_variables.grid_params,
- GridId = GridP#grid_params.fg_frame,
- gs:config(GridId, [{cursor, busy}]),
- GridId.
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-mark_nonbusy(GridId) ->
- gs:config(GridId, [{cursor, arrow}]).
-
diff --git a/lib/tv/src/tv_pg_gridfcns.erl b/lib/tv/src/tv_pg_gridfcns.erl
deleted file mode 100644
index d037b42294..0000000000
--- a/lib/tv/src/tv_pg_gridfcns.erl
+++ /dev/null
@@ -1,1918 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_pg_gridfcns).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,read,2}}]).
-
-
-
-
--export([init_grid/8,
- resize_grid/3,
- resize_grid_column/4,
- update_grid_data/3,
- scroll_grid_horizontally/2,
- mark_cell_and_notify/4,
- remove_marks/1,
- mark_col/2,
- mark_row/2,
- handle_list_info/2
- ]).
-
-
-
-
-
--include("tv_pd_int_msg.hrl").
--include("tv_pg_int_def.hrl").
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-init_grid(GridParentId, GridWidth,
- GridHeight, GridXpos, GridYpos, NofRows, RowHeight, ProcVars) ->
-
- % Get the size and ID of the grid-parent frame, i.e., the
- % grid-frame! Do not confuse the base-frames below with
- % the grid-frame!
-
- #process_variables{parent_pid = ParentPid,
- grid_params = GridP} = ProcVars,
-
- #grid_params{fg_color = GridFgColor,
- nof_cols = NofCols,
- col_width = DefaultColWidth,
- first_col_shown = FirstColShown,
- col_widths = ColWidths} = GridP,
-
- % Create the two frames the column frames are placed on!
- % These two frames defines the size of the grid.
- BgFrame = create_base_frame(GridParentId, GridWidth, GridHeight,
- GridXpos, GridYpos, GridFgColor),
- FgFrame = create_base_frame(BgFrame, GridWidth - 1, GridHeight - 1,
- 0, 0, GridFgColor),
-
- % Compute the the colwidths necessary to cover the grid.
- ColsShown = compute_cols_shown(FirstColShown, ColWidths, GridWidth, NofCols,
- DefaultColWidth),
- NofRowsShown = compute_rows_shown(GridHeight, RowHeight),
-
- % Tell parent about the width of columns shown!
- ParentPid ! #pg_col_info{sender = self(),
- first_col_shown = FirstColShown,
- width_of_cols_shown = ColsShown,
- nof_rows_shown = NofRowsShown
- },
-
- NewNofCols = erlang:max(length(ColsShown), NofCols),
-
- % The GridColWidths list shall contain the current width of each frame.
- NewColWidths = update_col_widths(ColsShown, ColWidths, FirstColShown,
- DefaultColWidth),
-
- % Create column frames, one for each column, and rows (labels) on each frame.
- {FrameIdList, ColLabelList} = create_col_frames(NewNofCols, NofRows, RowHeight,
- FgFrame, GridP, [], []),
-
- % Get lists of label-ID's for each row. (When we created the column frames,
- % we got the id's of labels placed on each column, i.e., vertically.
- % However, most often we want the id's for one row, i.e., label id's
- % horisontally.)
- RowIdList = get_row_ids(NofRows, ColLabelList, []),
-
- % Update the grid_params record with the new values!
- NewGridP = GridP#grid_params{bg_frame = BgFrame,
- fg_frame = FgFrame,
- grid_width = GridWidth,
- grid_height = GridHeight,
- grid_xpos = GridXpos,
- grid_ypos = GridYpos,
- nof_cols = NewNofCols,
- col_widths = NewColWidths,
- cols_shown = ColsShown,
- nof_rows = NofRows,
- row_height = RowHeight,
- nof_rows_shown = NofRowsShown,
- col_frame_ids = FrameIdList,
- col_ids = ColLabelList,
- row_ids = RowIdList,
- row_data_list = lists:duplicate(NofRows, notext)
- },
-
- ProcVars#process_variables{grid_parent_id = GridParentId,
- grid_params = NewGridP}.
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-resize_grid(NewWidth, NewHeight, ProcVars) ->
- #process_variables{parent_pid = ParentPid,
- grid_params = GridP,
- mark_params = MarkP} = ProcVars,
-
- #grid_params{bg_frame = BgFrame,
- fg_frame = FgFrame,
- nof_cols = NofCols,
- nof_rows = NofRows,
- col_width = DefaultColWidth,
- first_col_shown = FirstColShown,
- col_widths = ColWidths,
- row_height = RowHeight,
- col_frame_ids = ColFrameIds,
- col_ids = ColIds,
- row_ids = RowIds,
- bg_color = BgColor,
- fg_color = FgColor,
- row_data_list = RowDataList,
- lists_as_strings = ListAsStr} = GridP,
-
- gs:config(BgFrame, [{width, NewWidth},
- {height, NewHeight}
- ]),
- gs:config(FgFrame, [{width, NewWidth - 1},
- {height, NewHeight - 1}
- ]),
-
- ColsShown = compute_cols_shown(FirstColShown, ColWidths, NewWidth, NofCols,
- DefaultColWidth),
-
- NofRowsShown = compute_rows_shown(NewHeight, RowHeight),
-
-
- % Tell parent about the width of columns shown!
- ParentPid ! #pg_col_info{sender = self(),
- first_col_shown = FirstColShown,
- width_of_cols_shown = ColsShown,
- nof_rows_shown = NofRowsShown
- },
-
- NewColWidths = update_col_widths(ColsShown, ColWidths, FirstColShown,
- DefaultColWidth),
-
- NofColsShown = length(ColsShown),
- {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} =
- check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds,
- RowIds, NofRows, RowHeight, FgColor, BgColor ),
-
- clear_fields(safe_nthtail(NofColsShown, NewColIds),
- safe_nthtail(NofRowsShown, NewRowIds)),
-
- RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown),
-
- refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, RowDataList, ListAsStr),
-
- NewGridP = GridP#grid_params{grid_width = NewWidth,
- grid_height = NewHeight,
- nof_cols = NewNofCols,
- nof_rows_shown = NofRowsShown,
- cols_shown = ColsShown,
- col_widths = NewColWidths,
- col_frame_ids = NewColFrameIds,
- col_ids = NewColIds,
- row_ids = NewRowIds
- },
-
- refresh_marks(NewGridP, MarkP),
-
- ProcVars#process_variables{grid_params = NewGridP}.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-resize_grid_column(RealCol, VirtualCol, Xdiff, ProcVars) ->
- #process_variables{parent_pid = ParentPid,
- grid_params = GridP,
- mark_params = MarkP} = ProcVars,
-
- #grid_params{grid_width = GridWidth,
- first_col_shown = FirstColShown,
- nof_cols = NofCols,
- col_widths = ColWidths,
- col_frame_ids = ColFrameIds,
- col_ids = ColIds,
- col_width = DefaultColWidth,
- row_ids = RowIds,
- max_col_width = MaxColWidth,
- min_col_width = MinColWidth,
- nof_rows = NofRows,
- nof_rows_shown = NofRowsShown,
- row_height = RowHeight,
- bg_color = BgColor,
- fg_color = FgColor,
- row_data_list = RowDataList,
- lists_as_strings = ListAsStr} = GridP,
-
- % Get new width!
- Width = erlang:min(MaxColWidth, erlang:max((lists:nth(VirtualCol, ColWidths) + Xdiff),
- MinColWidth)),
-
- % Resize the column.
- NewWidthOfCol = resize_one_column(RealCol, Width, ColFrameIds, MaxColWidth,
- MinColWidth),
-
- % Update the ColWidths list.
- TempColWidths = lists:sublist(ColWidths, VirtualCol - 1) ++
- [NewWidthOfCol | safe_nthtail(VirtualCol, ColWidths)],
-
- % Check the other columns, whether a new column has to be created.
- ColsShown = compute_cols_shown(FirstColShown, TempColWidths, GridWidth,
- NofCols, DefaultColWidth),
-
- % Get the final ColWidths list, after all updates!
- NewColWidths = update_col_widths(ColsShown, TempColWidths, FirstColShown,
- DefaultColWidth),
-
- % Tell parent about the width of columns shown!
- ParentPid ! #pg_col_info{sender = self(),
- first_col_shown = FirstColShown,
- width_of_cols_shown = ColsShown,
- nof_rows_shown = NofRowsShown
- },
-
- % Get the new number of columns (may have changed).
- NofColsShown = length(ColsShown),
- {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} =
- check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds,
- RowIds, NofRows, RowHeight, FgColor, BgColor ),
-
- RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown),
- refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, RowDataList, ListAsStr),
-
- NewGridP = GridP#grid_params{nof_cols = NewNofCols,
- cols_shown = ColsShown,
- col_widths = NewColWidths,
- col_frame_ids = NewColFrameIds,
- col_ids = NewColIds,
- row_ids = NewRowIds
- },
-
- refresh_marks(NewGridP, MarkP),
-
- ProcVars#process_variables{grid_params = NewGridP}.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-handle_list_info(ListAsStr, ProcVars) ->
- #process_variables{grid_params = GridP} = ProcVars,
-
- #grid_params{first_col_shown = FirstColShown,
- cols_shown = ColsShown,
- nof_rows_shown = NofRowsShown,
- row_data_list = RowDataList,
- row_ids = RowIds,
- lists_as_strings = OldListAsStr} = GridP,
-
- case ListAsStr of
- OldListAsStr ->
- ProcVars;
- _NewValue ->
- NofColsShown = length(ColsShown),
- RowsToUpdate = lists:sublist(RowIds, NofRowsShown),
- refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown,
- RowDataList, ListAsStr),
- NewGridP = GridP#grid_params{lists_as_strings = ListAsStr},
- ProcVars#process_variables{grid_params = NewGridP}
- end.
-
-
-
-
-update_grid_data(Data, FirstRowShown, ProcVars) ->
- #process_variables{grid_params = GridP,
- mark_params = MarkP} = ProcVars,
-
- #grid_params{first_col_shown = FirstColShown,
- cols_shown = ColsShown,
- nof_rows = NofRows,
- nof_rows_shown = NofRowsShown,
- row_ids = RowIds,
- lists_as_strings = ListAsStr} = GridP,
-
- NofColsShown = length(ColsShown),
- RowsToUpdate = lists:sublist(RowIds, NofRowsShown),
-
- NewMarkP = move_marks(FirstColShown, FirstRowShown, GridP, MarkP),
-
- update_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, Data, ListAsStr),
- NewRowDataList = make_row_data_list(1, NofRows, Data),
-
- NewGridP = GridP#grid_params{first_row_shown = FirstRowShown,
- row_data_list = NewRowDataList},
-
- ProcVars#process_variables{grid_params = NewGridP,
- mark_params = NewMarkP}.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-scroll_grid_horizontally(NewFirstColShown, ProcVars) ->
- #process_variables{parent_pid = ParentPid,
- grid_params = GridP,
- mark_params = MarkP} = ProcVars,
-
- #grid_params{grid_width = Width,
- nof_cols = NofCols,
- nof_rows = NofRows,
- nof_rows_shown = NofRowsShown,
- first_row_shown = FirstRowShown,
- col_width = DefaultColWidth,
- max_col_width = MaxColWidth,
- min_col_width = MinColWidth,
- col_widths = ColWidths,
- row_height = RowHeight,
- col_frame_ids = ColFrameIds,
- col_ids = ColIds,
- row_ids = RowIds,
- bg_color = BgColor,
- fg_color = FgColor,
- row_data_list = RowDataList,
- lists_as_strings = ListAsStr} = GridP,
-
- % Probably it is unnecessary to check whether any new columns shall be
- % created or not, but what the heck, we don't want to crash...
- ColsShown = compute_cols_shown(NewFirstColShown, ColWidths, Width, NofCols,
- DefaultColWidth),
- NofColsShown = length(ColsShown),
-
- ParentPid ! #pg_col_info{sender = self(),
- first_col_shown = NewFirstColShown,
- width_of_cols_shown = ColsShown,
- nof_rows_shown = NofRowsShown
- },
-
- NewMarkP = move_marks(NewFirstColShown, FirstRowShown, GridP, MarkP),
-
- NewColWidths = update_col_widths(ColsShown, ColWidths, NewFirstColShown,
- DefaultColWidth),
-
- {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} =
- check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds,
- RowIds, NofRows, RowHeight, FgColor, BgColor ),
-
-
- RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown),
- resize_all_grid_columns(1, ColsShown, NewColFrameIds, MaxColWidth, MinColWidth),
-
- refresh_visible_rows(RowsToUpdate, NewFirstColShown, NofColsShown, RowDataList, ListAsStr),
-
- % Clear fields currently not visible.
- clear_fields(safe_nthtail(NofColsShown, NewColIds),
- safe_nthtail(NofRowsShown, NewRowIds)),
-
-
- NewGridP = GridP#grid_params{nof_cols = NewNofCols,
- cols_shown = ColsShown,
- col_widths = NewColWidths,
- col_frame_ids = NewColFrameIds,
- col_ids = NewColIds,
- row_ids = NewRowIds,
- first_col_shown = NewFirstColShown
- },
-
- ProcVars#process_variables{grid_params = NewGridP,
- mark_params = NewMarkP}.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-mark_row(VirtualRow, ProcVars) ->
- #process_variables{grid_params = GridP,
- mark_params = MarkP} = ProcVars,
-
- #grid_params{first_row_shown = FirstRowShown,
- nof_rows_shown = NofRowsShown,
- row_ids = RowIds} = GridP,
-
- mark_row(VirtualRow, FirstRowShown, FirstRowShown + NofRowsShown - 1, RowIds,
- ?GRID_MARK_COLOR),
-
- NewMarkP = MarkP#mark_params{cell_id = undefined,
- virtual_col = undefined,
- virtual_row = VirtualRow
- },
-
- ProcVars#process_variables{mark_params = NewMarkP}.
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-mark_col(VirtualCol, ProcVars) ->
- #process_variables{grid_params = GridP,
- mark_params = MarkP} = ProcVars,
-
- #grid_params{first_col_shown = FirstColShown,
- cols_shown = ColsShown,
- col_ids = ColIds} = GridP,
-
- NofColsShown = length(ColsShown),
- mark_col(VirtualCol, FirstColShown, FirstColShown + NofColsShown - 1, ColIds,
- ?GRID_MARK_COLOR),
-
- NewMarkP = MarkP#mark_params{cell_id = undefined,
- virtual_col = VirtualCol,
- virtual_row = undefined
- },
-
- ProcVars#process_variables{mark_params = NewMarkP}.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-mark_cell_and_notify(CellId, RealCol, RealRow, ProcVars) ->
- #process_variables{parent_pid = ParentPid,
- grid_params = GridP,
- mark_params = MarkP} = ProcVars,
-
- #grid_params{first_col_shown = FirstColShown,
- first_row_shown = FirstRowShown} = GridP,
-
- OldCellId = MarkP#mark_params.cell_id,
-
- VirtualCol = FirstColShown + RealCol - 1,
- VirtualRow = FirstRowShown + RealRow - 1,
-
- %% Right now, when the table tool only is passive, i.e., we cannot edit
- %% the table content, we don't want to be able to mark empty cells.
-
- {text, CellText} = gs:read(CellId, label),
-
- CellMarked = case CellText of
- "" -> false;
- _AnyText when CellId=:=OldCellId -> false;
- _AnyText -> true
- end,
-
- remove_marks(ProcVars),
- update_marked_cells(CellId, OldCellId, CellMarked),
-
- notify_about_cell_marked(ParentPid, CellMarked, RealCol, RealRow,
- VirtualCol, VirtualRow, CellText),
-
- NewMarkP = case CellMarked of
- true ->
- MarkP#mark_params{cell_id = CellId,
- virtual_col = VirtualCol,
- virtual_row = VirtualRow
- };
- false ->
- MarkP#mark_params{cell_id = undefined,
- virtual_col = 0,
- virtual_row = undefined
- }
- end,
-
- ProcVars#process_variables{mark_params = NewMarkP}.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-remove_marks(ProcVars) ->
- #process_variables{mark_params = MarkP,
- grid_params = GridP} = ProcVars,
-
- #grid_params{first_col_shown = FirstColShown,
- cols_shown = ColsShown,
- col_ids = ColIds,
- first_row_shown = FirstRowShown,
- nof_rows_shown = NofRowsShown,
- row_ids = RowIds} = GridP,
-
-
- #mark_params{cell_id = CellId,
- virtual_col = VirtualCol,
- virtual_row = VirtualRow} = MarkP,
-
- case {VirtualCol, VirtualRow} of
- {undefined, undefined} ->
- update_marked_cells(CellId, CellId, false);
- {_AnyCol, undefined} ->
- NofColsShown = length(ColsShown),
- unmark_col(VirtualCol, FirstColShown, FirstColShown + NofColsShown - 1,
- ColIds);
- {undefined, _AnyRow} ->
- unmark_row(VirtualRow, FirstRowShown, FirstRowShown + NofRowsShown - 1,
- RowIds);
- _Other ->
- update_marked_cells(CellId, CellId, false)
- end,
-
- NewMarkP = MarkP#mark_params{cell_id = undefined,
- virtual_col = 0,
- virtual_row = undefined
- },
- ProcVars#process_variables{mark_params = NewMarkP}.
-
-
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-move_marks(FirstCol, FirstRow, GridP, MarkP) ->
- #grid_params{first_col_shown = OldFirstCol,
- cols_shown = ColsShown,
- first_row_shown = OldFirstRow,
- nof_rows_shown = NofRowsShown,
- col_ids = ColIds,
- row_ids = RowIds} = GridP,
-
- #mark_params{virtual_col = VirtualCol,
- virtual_row = VirtualRow} = MarkP,
-
-
- case {VirtualCol, VirtualRow} of
- {undefined, undefined} ->
- NofColsShown = length(ColsShown),
- move_marked_cell(FirstCol, FirstRow, NofColsShown,
- NofRowsShown, RowIds, MarkP);
- {_AnyCol, undefined} ->
- NofColsShown = length(ColsShown),
- OldLastCol = OldFirstCol + NofColsShown - 1,
- LastCol = FirstCol + NofColsShown - 1,
- move_marked_col(VirtualCol, OldFirstCol, OldLastCol,
- FirstCol, LastCol, ColIds, MarkP);
- {undefined, _AnyRow} ->
- OldLastRow = OldFirstRow + NofRowsShown - 1,
- LastRow = FirstRow + NofRowsShown - 1,
- move_marked_row(VirtualRow, OldFirstRow, OldLastRow,
- FirstRow, LastRow, RowIds, MarkP);
- {_CellCol, _CellRow} ->
- NofColsShown = length(ColsShown),
- move_marked_cell(FirstCol, FirstRow, NofColsShown,
- NofRowsShown, RowIds, MarkP)
- end.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-refresh_marks(GridP, MarkP) ->
- #grid_params{first_col_shown = FirstCol,
- cols_shown = ColsShown,
- first_row_shown = FirstRow,
- nof_rows_shown = NofRowsShown,
- col_ids = ColIds,
- row_ids = RowIds} = GridP,
-
- #mark_params{virtual_col = VirtualCol,
- virtual_row = VirtualRow} = MarkP,
-
-
- case {VirtualCol, VirtualRow} of
- {undefined, undefined} ->
- NofColsShown = length(ColsShown),
- move_marked_cell(FirstCol, FirstRow, NofColsShown, NofRowsShown,
- RowIds, MarkP);
- {_AnyCol, undefined} ->
- NofColsShown = length(ColsShown),
- LastCol = FirstCol + NofColsShown - 1,
- mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?GRID_MARK_COLOR);
- {undefined, _AnyRow} ->
- LastRow = FirstRow + NofRowsShown - 1,
- mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?GRID_MARK_COLOR);
- {_CellCol, _CellRow} ->
- NofColsShown = length(ColsShown),
- move_marked_cell(FirstCol, FirstRow, NofColsShown, NofRowsShown,
- RowIds, MarkP)
- end.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-move_marked_col(VirtualCol,
- OldFirstCol, OldLastCol, FirstCol, LastCol, ColIds, MarkP) ->
- unmark_col(VirtualCol, OldFirstCol, OldLastCol, ColIds),
- mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?GRID_MARK_COLOR),
- MarkP#mark_params{cell_id = undefined}.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-mark_col(VirtualCol, FirstCol, _LastCol, _ColIds, _Color) when VirtualCol < FirstCol ->
- done;
-mark_col(VirtualCol, _FirstCol, LastCol, _ColIds, _Color) when VirtualCol > LastCol ->
- done;
-mark_col(VirtualCol, FirstCol, _LastCol, ColIds, Color) ->
- RealCol = VirtualCol - FirstCol + 1,
- MarkedColIds = lists:nth(RealCol, ColIds),
- mark_all_cells(MarkedColIds, Color).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-unmark_col(VirtualCol, FirstCol, LastCol, ColIds) ->
- mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?DEFAULT_GRID_BGCOLOR).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-mark_all_cells([], _Color) ->
- done;
-mark_all_cells([CellId | T], Color) ->
- gs:config(CellId, [{bg, Color}]),
- mark_all_cells(T, Color).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-mark_row(VirtualRow, FirstRow, _LastRow, _RowIds, _Color) when VirtualRow < FirstRow ->
- done;
-mark_row(VirtualRow, _FirstRow, LastRow, _RowIds, _Color) when VirtualRow > LastRow ->
- done;
-mark_row(VirtualRow, FirstRow, _LastRow, RowIds, Color) ->
- RealRow = VirtualRow - FirstRow + 1,
- MarkedRowIds = lists:nth(RealRow, RowIds),
- mark_all_cells(MarkedRowIds, Color).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-unmark_row(VirtualRow, FirstRow, LastRow, RowIds) ->
- mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?DEFAULT_GRID_BGCOLOR).
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-move_marked_row(VirtualRow,
- OldFirstRow, OldLastRow, FirstRow, LastRow, RowIds, MarkP) ->
- unmark_row(VirtualRow, OldFirstRow, OldLastRow, RowIds),
- mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?GRID_MARK_COLOR),
- MarkP#mark_params{cell_id = undefined}.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-move_marked_cell(FirstColShown,
- FirstRowShown, NofColsShown, NofRowsShown, RowIds, MarkP) ->
- #mark_params{cell_id = OldCellId,
- virtual_col = VirtualCol,
- virtual_row = VirtualRow} = MarkP,
-
- case OldCellId of
- undefined ->
- MarkP;
- _OtherId ->
- NewRealCol = VirtualCol - FirstColShown + 1,
- NewRealRow = VirtualRow - FirstRowShown + 1,
- update_marked_cells(undefined, OldCellId, false),
- case check_if_new_mark_visible(NewRealCol, NewRealRow,
- NofColsShown, NofRowsShown) of
- false ->
- MarkP;
- true ->
- NewCellId = lists:nth(NewRealCol,
- lists:nth(NewRealRow, RowIds)),
- update_marked_cells(NewCellId, undefined, true),
- MarkP#mark_params{cell_id = NewCellId}
- end
- end.
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-check_if_new_mark_visible(Col, _Row, NofCols, _NofRows) when Col > NofCols ->
- false;
-check_if_new_mark_visible(Col, _Row, _NofCols, _NofRows) when Col =< 0 ->
- false;
-check_if_new_mark_visible(_Col, Row, _NofCols, NofRows) when Row > NofRows ->
- false;
-check_if_new_mark_visible(_Col, Row, _NofCols, _NofRows) when Row =< 0 ->
- false;
-check_if_new_mark_visible(_Col, _Row, _NofCols, _NofRows) ->
- true.
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_marked_cells(CellId, OldCellId, _MarkedCell) when CellId =:= OldCellId ->
- gs:config(CellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]);
-update_marked_cells(_CellId, undefined, false) ->
- done;
-update_marked_cells(CellId, undefined, true) ->
- gs:config(CellId, [{bg, ?GRID_MARK_COLOR}]);
-update_marked_cells(CellId, OldCellId, true) ->
- gs:config(OldCellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]),
- gs:config(CellId, [{bg, ?GRID_MARK_COLOR}]);
-update_marked_cells(_CellId, OldCellId, false) ->
- gs:config(OldCellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]).
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-notify_about_cell_marked(Pid, Marked, RealCol, RealRow, VirtCol, VirtRow, Text) ->
- Pid ! #pg_cell_marked{sender = self(),
- cell_marked = Marked,
- real_col = RealCol,
- real_row = RealRow,
- virtual_col = VirtCol,
- virtual_row = VirtRow,
- cell_text = Text
- }.
-
-
-
-
-
-
-
-
-%%%---------------------------------------------------------------------
-%%% START of functions used to print data in the grid fields.
-%%%---------------------------------------------------------------------
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-refresh_visible_rows([], _FirstColShown, _NofColsShown, _DataList, _ListAsStr) ->
- done;
-refresh_visible_rows(RowIds, _FirstColShown, _NofColsShown, [], _ListAsStr) ->
- clear_cols_or_rows(RowIds);
-refresh_visible_rows([OneRowIds | RemRowIds], FirstColShown, NofColsShown,
- [DataItemList | RemDataItemLists], ListAsStr) ->
- NewDataItemList = get_data_sublist(DataItemList, FirstColShown, NofColsShown),
- update_one_row(lists:sublist(OneRowIds, NofColsShown), NewDataItemList, ListAsStr),
- refresh_visible_rows(RemRowIds, FirstColShown, NofColsShown, RemDataItemLists, ListAsStr).
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_visible_rows([], _FirstColShown, _NofColsShown, _DataList, _ListAsStr) ->
- done;
-update_visible_rows(RowIds, _FirstColShown, _NofColsShown, [], _ListAsStr) ->
- clear_cols_or_rows(RowIds);
-update_visible_rows([OneRowIds | RemRowIds], FirstColShown, NofColsShown,
- [DataItem | RemData], ListAsStr) ->
- % We convert the received item to a list! This way we know that
- % '[notext]' shall be printed as 'notext', while 'notext' shall
- % be printed as ''.
- TempDataItemList = item_to_list(DataItem),
- DataItemList = get_data_sublist(TempDataItemList, FirstColShown,
- NofColsShown),
- update_one_row(lists:sublist(OneRowIds, NofColsShown), DataItemList, ListAsStr),
- update_visible_rows(RemRowIds, FirstColShown, NofColsShown, RemData, ListAsStr).
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_one_row(OneRowIds, [], _ListAsStr) ->
- clear_one_col_or_row(OneRowIds);
-update_one_row([], _DataItemList, _ListAsStr) ->
- done;
-update_one_row([LabelId | RemLabelIds], [notext | T], ListAsStr) ->
- gs:config(LabelId, [{label, {text, ""}}
- ]),
- update_one_row(RemLabelIds, T, ListAsStr);
-update_one_row([LabelId | RemLabelIds], [DataElem | T], ListAsStr) ->
- Str = case ListAsStr of
- true ->
- tv_io_lib:format(" ~p", [DataElem]);
- false ->
- " " ++ lists:flatten(tv_io_lib:write(DataElem))
- end,
- gs:config(LabelId, [{label, {text, Str}}
- ]),
- update_one_row(RemLabelIds, T, ListAsStr).
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-make_row_data_list(N, NofRows, []) when N > NofRows ->
- [];
-make_row_data_list(N, NofRows, []) ->
- % If NofRows == N, we get the empty list here!
- lists:duplicate(NofRows- N, notext);
-make_row_data_list(N, NofRows, [_DataItem | _RemData]) when N > NofRows ->
- [];
-make_row_data_list(N, NofRows, [DataItem | RemData]) ->
- % We convert the received item to a list! This way we know that
- % '[notext]' shall be printed as 'notext', while 'notext' shall
- % be printed as ''.
- [item_to_list(DataItem) | make_row_data_list(N + 1, NofRows, RemData)].
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-item_to_list(Item) when is_tuple(Item) ->
- tuple_to_list(Item);
-item_to_list(Item) ->
- [Item].
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_data_sublist(DataList, StartPos, Length) ->
- case catch lists:sublist(DataList, StartPos, Length) of
- {'EXIT', _Reason} ->
- [];
- Sublist ->
- Sublist
- end.
-
-
-
-
-
-
-
-%%%---------------------------------------------------------------------
-%%% END of functions used to print data in the grid fields.
-%%%---------------------------------------------------------------------
-
-
-
-
-
-%%%---------------------------------------------------------------------
-%%% START of functions used to resize the grid columns.
-%%%---------------------------------------------------------------------
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-resize_all_grid_columns(_RealCol, [], _ColFrameIds, _MaxColWidth, _MinColWidth) ->
- done;
-resize_all_grid_columns(RealCol, [ColWidth | Tail], ColFrameIds, MaxColWidth, MinColWidth) ->
-
- resize_one_column(RealCol, ColWidth, ColFrameIds, MaxColWidth, MinColWidth),
- resize_all_grid_columns(RealCol + 1, Tail, ColFrameIds, MaxColWidth,
- MinColWidth).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-resize_one_column(RealCol, Width, ColFrameIds, MaxW, MinW) ->
- NewWidthOfCol = erlang:min(MaxW, erlang:max(Width, MinW)),
- case length(ColFrameIds) of
- RealCol ->
- done;
- _Other ->
- FrameId = lists:nth(RealCol + 1, ColFrameIds),
- gs:config(FrameId, [{x, NewWidthOfCol + 1}])
- end,
- NewWidthOfCol.
-
-
-
-
-%%%---------------------------------------------------------------------
-%%% END of functions used to resize the grid columns.
-%%%---------------------------------------------------------------------
-
-
-
-
-
-
-%%%---------------------------------------------------------------------
-%%% START of functions used to update the grid.
-%%%---------------------------------------------------------------------
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-clear_fields(ColIds, RowIds) ->
- clear_cols_or_rows(ColIds),
- clear_cols_or_rows(RowIds).
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-clear_cols_or_rows([]) ->
- done;
-clear_cols_or_rows([IdList | RemIdLists]) ->
- clear_one_col_or_row(IdList),
- clear_cols_or_rows(RemIdLists).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-clear_one_col_or_row([]) ->
- done;
-clear_one_col_or_row([LabelId | RemLabelIds]) ->
- gs:config(LabelId, [{label, {text, ""}}
- ]),
- clear_one_col_or_row(RemLabelIds).
-
-
-
-
-
-%%%---------------------------------------------------------------------
-%%% END of functions used to update the grid.
-%%%---------------------------------------------------------------------
-
-
-
-
-
-
-%%%---------------------------------------------------------------------
-%%% START of functions used to compute the part of the grid that has to
-%%% be updated, as well as deciding whether a new column has to be added.
-%%% Old columns (i.e., columns not visible) are not removed, but they
-%%% shall not be updated until they once again becomes visible.
-%%%---------------------------------------------------------------------
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-check_nof_cols(_ColsShown, NofNewCols, ColFrameIds, ColIds, RowIds,
- _NofRows, _RowHeight, _FgColor, _BgColor) when NofNewCols =< 0 ->
- {length(ColFrameIds), ColFrameIds, ColIds, RowIds};
-check_nof_cols(ColsShown, NofNewCols, ColFrameIds, ColIds,
- RowIds, NofRows, RowHeight, FgColor, BgColor) ->
- NewColNo = length(ColFrameIds) + 1,
- % We don't care about the pathological case where no columns have been
- % created. If the gridwidth, or the columnwidth, was set to =< 0 during
- % initialisation, then no columns will have been created. The program
- % will probably also have crashed. If any smart jackass has set invalid
- % values on these important parameters, then he can only blame himself.
- ParentId = lists:nth((NewColNo - 1), ColFrameIds),
- ParentColWidth = lists:nth((NewColNo - 1), ColsShown),
- Xpos = ParentColWidth + 1,
-
- {ColFrameId, LabelIds} = add_one_col_frame(ParentId, NewColNo, Xpos, FgColor,
- BgColor, NofRows, RowHeight),
-
- NewColFrameIds = ColFrameIds ++ [ColFrameId],
- NewColIds = ColIds ++ [LabelIds],
- NewRowIds = update_row_ids(RowIds, LabelIds),
-
- check_nof_cols(ColsShown, NofNewCols - 1, NewColFrameIds, NewColIds, NewRowIds,
- NofRows, RowHeight, FgColor, BgColor).
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_row_ids([], _LabelIds) ->
- [];
-update_row_ids([OneRowIds | RemainingRows], [NewElemId | RemainingElemIds]) ->
- [OneRowIds ++ [NewElemId] | update_row_ids(RemainingRows, RemainingElemIds)].
-
-
-
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-update_col_widths(ColsShown, ColWidths, FirstColShown, DefaultColWidth) ->
- % What we do here is that we first (if necessary) add default
- % column widths to the ColWidth list until it reaches to where
- % ColsShown starts (vitually seen).
- % In the second step we take the appropriate elements from the
- % ColsShown list and add them to the ColWidths list, until it is
- % of sufficient length.
- % Of course this may seem unnecessary - it would suffice to just
- % add default widths to the ColWidths list until it is long enough,
- % since the compute_cols_shown function right now just adds default
- % width columns to the ColsShown list, when the ColWidths list is empty.
- % However, this could change (maybe we some other time want the last
- % column to carry all remaining width, instead of adding new columns).
- % Besides, we don't like hidden dependencies between functions!!!
-
- NofColsShown = length(ColsShown),
- NewColWidths = set_necessary_col_widths_length(FirstColShown, ColWidths,
- DefaultColWidth),
- % Now NofVirtualCols will always be equal to, or greater
- % than, FirstColShown - 1.
-
- NofVirtualCols = length(NewColWidths),
- NecessaryNofVirtualCols = FirstColShown + (NofColsShown - 1),
- if
- NecessaryNofVirtualCols > NofVirtualCols ->
- TailNo = NofVirtualCols - FirstColShown + 1, % Always >= 0 !!!
- NewColWidths ++ safe_nthtail(TailNo, ColsShown);
- true ->
- NewColWidths
- end.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-set_necessary_col_widths_length(FirstColShown, ColWidths, DefaultColWidth) ->
- % First check that (length(ColWidths) - FirstColShown) >= -1.
- % If not, add elements so the relation holds true!
- MissingDefaultWidthElems = FirstColShown - length(ColWidths),
- if
- MissingDefaultWidthElems > 1 ->
- ColWidths ++ lists:duplicate(MissingDefaultWidthElems - 1,
- DefaultColWidth);
- true ->
- ColWidths
- end.
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-compute_rows_shown(GridHeight, RowHeight) ->
- (GridHeight div RowHeight) + 1.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-compute_cols_shown(FirstColShown, ColWidths, GridWidth, _NofCols, DefaultColWidth) ->
- ColWidthsLength = length(ColWidths),
- % Normally ColWidths shall be long enough, but just to make sure...
- % (We could have chosen to update ColWidths here to, but right now
- % we do it instead explicitly when resizeing the grid, changing the
- % column size(s), and scrolling horizontally.)
- UsedColWidths = if
- ColWidthsLength < FirstColShown ->
- [];
- true ->
- safe_nthtail(FirstColShown - 1, ColWidths)
- end,
- compute_cols_shown(UsedColWidths, GridWidth, DefaultColWidth).
-
-
-
-
-
-
-compute_cols_shown(_ColWidths, RemainingWidth, _DefColW) when RemainingWidth =< 0 ->
- [];
-compute_cols_shown([], RemainingWidth, DefaultColWidth) ->
- [DefaultColWidth | compute_cols_shown([], RemainingWidth - DefaultColWidth,
- DefaultColWidth)];
-compute_cols_shown([VirtualColWidth | T], RemainingWidth, DefaultColWidth) ->
- [VirtualColWidth | compute_cols_shown(T, RemainingWidth - VirtualColWidth,
- DefaultColWidth)].
-
-
-
-
-
-%%%---------------------------------------------------------------------
-%%% END of functions used to compute the part of the grid that has to
-%%% be updated, as well as deciding whether a new column has to be added.
-%%%---------------------------------------------------------------------
-
-
-
-
-
-
-
-%%%---------------------------------------------------------------------
-%%% START of functions used to create the grid (baseframes, columns
-%%% and rows), as well as sorting the ID's appropriately.
-%%%---------------------------------------------------------------------
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_base_frame(ParentId, Width, Height, Xpos, Ypos, BgColor) ->
- gs:frame(ParentId, [{width, Width},
- {height, Height},
- {x, Xpos},
- {y, Ypos},
- {bg, BgColor}
- ]).
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_col_frames(0, _NofRows, _RowHeight, _ParentId, _GridP, ColFrameAcc, LabelAcc) ->
- {lists:reverse(ColFrameAcc), lists:reverse(LabelAcc)};
-create_col_frames(N, NofRows, RowHeight, ParentId, GridP, ColFrameAcc, LabelAcc) ->
- % Yes, it *IS* inefficient to copy GridP for each loop.
- % However, it is only done once, and for a limited number of times,
- % and we avoid having a lot of parameters!
- #grid_params{bg_color = BgColor,
- fg_color = FgColor,
- nof_cols = NofCols,
- col_width = ColWidth} = GridP,
- Xpos = if
- N =:= NofCols ->
- 0;
- true ->
- ColWidth + 1
- end,
-
- ColNo = NofCols - N + 1,
- {ColFrameId, LabelIds} = add_one_col_frame(ParentId, ColNo, Xpos, FgColor,
- BgColor, NofRows, RowHeight),
- create_col_frames(N - 1, NofRows, RowHeight, ColFrameId, GridP,
- [ColFrameId | ColFrameAcc], [LabelIds | LabelAcc]).
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-add_one_col_frame(ParentId, ColNo, Xpos, FgColor, BgColor, NofRows, RowHeight) ->
- ColFrameId = create_one_col_frame(ParentId, Xpos, FgColor),
- FirstRowYpos = 1,
- FirstRowNo = 1,
- LabelIds = create_rows_on_frame(ColFrameId, FirstRowNo, NofRows, RowHeight,
- FirstRowYpos, FgColor, BgColor, ColNo, []),
- {ColFrameId, LabelIds}.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_one_col_frame(ParentId, Xpos, BgColor) ->
- ColFrameWidth = 1200,
- ColFrameHeight = 900,
- Ypos = 0,
- gs:frame(ParentId, [{width, ColFrameWidth},
- {height, ColFrameHeight},
- {x, Xpos},
- {y, Ypos},
- {bg, BgColor}
- ]).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-create_rows_on_frame(_FrameId, RowNo, NofRows, _H, _Y, _Fg, _Bg, _ColNo, Acc) when RowNo > NofRows ->
- lists:reverse(Acc);
-create_rows_on_frame(FrameId, RowNo, NofRows, H, Y, Fg, Bg, ColNo, RAcc) ->
- Width = 1200,
- R = gs:label(FrameId, [{width, Width},
- {height, H},
- {x, 1},
- {y, Y},
- {bg, Bg},
- {fg, Fg},
- {align, w},
- {buttonpress, true},
- {data, {gridcell, ColNo, RowNo, FrameId}}
- ]),
- NextRowNo = RowNo + 1,
- NextY = Y + H +1,
- create_rows_on_frame(FrameId, NextRowNo, NofRows, H, NextY, Fg, Bg, ColNo,
- [R | RAcc]).
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-get_row_ids(0, _Cols, RowAcc) ->
- RowAcc;
-get_row_ids(RowNo, Cols, RowAcc) ->
- Row = extract_ids_for_one_row(RowNo, Cols),
- get_row_ids(RowNo - 1, Cols, [Row | RowAcc]).
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-extract_ids_for_one_row(_N, []) ->
- [];
-extract_ids_for_one_row(N, [ColIds | Tail]) ->
- [lists:nth(N, ColIds) | extract_ids_for_one_row(N, Tail)].
-
-
-
-%%%---------------------------------------------------------------------
-%%% END of functions used to create the grid.
-%%%---------------------------------------------------------------------
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-safe_nthtail(_, []) -> [];
-safe_nthtail(1, [_|T]) -> T;
-safe_nthtail(N, [_|T]) when N > 1 ->
- safe_nthtail(N - 1, T);
-safe_nthtail(0, L) when is_list(L) -> L.
diff --git a/lib/tv/src/tv_pg_int_def.hrl b/lib/tv/src/tv_pg_int_def.hrl
deleted file mode 100644
index 6f88053d47..0000000000
--- a/lib/tv/src/tv_pg_int_def.hrl
+++ /dev/null
@@ -1,92 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Internal definitions for the pd part of the table tool.
-%%%
-%%%*********************************************************************
-
-
--define(GRIDFUNCS, tv_pg_gridfcns).
-
-
-
--define(DEFAULT_COLFRAME_HEIGHT, 870).
--define(DEFAULT_COLWIDTH, 100).
--define(DEFAULT_GRID_BGCOLOR, {255, 255, 255}). % white
--define(DEFAULT_GRID_FGCOLOR, {0, 0, 0}). % black
--define(GRID_MARK_COLOR, {200, 255, 255}).
--define(GRID_FONT, {courier, 12}).
-
-
-
--define(DEFAULT_BG_COLOR, {217, 217, 217}).
--define(DEFAULT_ROW_COLOR, {178, 34, 34}). % Firebrick!
--define(DEFAULT_GRID_COLOR, {0, 0, 0}).
--define(LIGHT_GRAY, {226, 226, 226}).
--define(DARK_VIOLET, {148, 0, 211}).
--define(FIREBRICK, {178, 34, 34}).
--define(ANTIQUE_WHITE, {255, 255, 235}).
-
-
-
-
--record(grid_params, {bg_frame,
- fg_frame,
- grid_width,
- grid_height = ?DEFAULT_COLFRAME_HEIGHT, % Actual height,
- % not the height
- % shown!
- grid_xpos,
- grid_ypos,
- bg_color = ?DEFAULT_GRID_BGCOLOR,
- fg_color = ?DEFAULT_GRID_FGCOLOR,
- nof_cols = 10,
- nof_rows,
- nof_rows_shown,
- row_height,
- col_width = ?DEFAULT_COLWIDTH,
- first_col_shown = 1,
- first_row_shown = 1,
- max_col_width = 1200,
- min_col_width = 5,
- col_widths = [],
- cols_shown = [],
- col_frame_ids = [],
- col_ids = [],
- row_ids = [],
- row_data_list = [],
- current_max_value,
- lists_as_strings = true
- }).
-
-
-
--record(mark_params, {cell_id,
- virtual_col,
- virtual_row
- }).
-
-
-
-
--record(process_variables, {parent_pid,
- grid_parent_id,
- grid_params = #grid_params{},
- mark_params = #mark_params{}
- }).
diff --git a/lib/tv/src/tv_poll_dialog.erl b/lib/tv/src/tv_poll_dialog.erl
deleted file mode 100644
index e33d398898..0000000000
--- a/lib/tv/src/tv_poll_dialog.erl
+++ /dev/null
@@ -1,363 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Code for the "set poll interval" dialog with the user.
-%%%
-%%%*********************************************************************
-
--module(tv_poll_dialog).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,radiobutton,2}},
- {nowarn_deprecated_function,{gs,scale,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,2}}]).
-
-
--export([start/1, init/2]).
-
-
-
--include("tv_int_msg.hrl").
-
-
-
--define(WINDOW_WIDTH, 305).
--define(WINDOW_HEIGHT, 185).
-
--define(DEFAULT_BG_COLOR, {217, 217, 217}).
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-start(Pos) ->
- Pid = self(),
- ProcPid = spawn_link(?MODULE, init, [Pid, Pos]),
- receive_answer(ProcPid).
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-init(Pid, Pos) ->
- process_flag(trap_exit, true),
- {ScalePos, ScaleRange, Poll, Color} = case Pos of
- infinity ->
- {0, {20, 20}, false, {255, 255, 255}};
- _Other ->
- {Pos, {20, 300}, true, {0, 0, 0}}
- end,
- S = gs:start(),
- Win = gs:window(S, [{width, ?WINDOW_WIDTH},
- {height, ?WINDOW_HEIGHT},
- {bg, ?DEFAULT_BG_COLOR},
- {title, "[TV] Set Poll Interval"},
- {configure, true},
- {destroy, true}
- ]),
-
- NoPollBtn = gs:radiobutton(Win, [{height, 30},
- {width, 143},
- {x, 10},
- {y, 10},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {value, no_poll},
- {label, {text, "Manual Polling"}},
- {select, not(Poll)}
- ]),
-
- PollBtn = gs:radiobutton(Win, [{height, 30},
- {width, 163},
- {x, 10},
- {y, 60},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {value, poll},
- {label, {text, "Automatic Polling"}},
- {select, Poll}
- ]),
-
- Lbl = gs:label(Win, [{label, {text, "Poll Interval (seconds):"}},
- {align, center},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, Color},
- {width, 183},
- {height, 30},
- {x, 10},
- {y, 100}
- ]),
-
- Scale = gs:scale(Win, [{bg, ?DEFAULT_BG_COLOR},
- {fg, Color},
- {orient, horizontal},
- {range, ScaleRange},
- {pos, ScalePos},
- {width, 285},
- {height, 50},
- {x, 10},
- {y, 130}
- ]),
-
- OkBtn = gs:button(Win, [{label, {text, "OK"}},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {align, center},
- {width, 60},
- {height, 30},
- {x, 230},
- {y, 10}
- ]),
-
- CancelBtn = gs:button(Win, [{label, {text, "Cancel"}},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0, 0, 0}},
- {align, center},
- {width, 60},
- {height, 30},
- {x, 230},
- {y, 60}
- ]),
-
- gs:config(Win, {map, true}),
- browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, CancelBtn, Poll, Pos).
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-receive_answer(ProcPid) ->
- receive_answer(ProcPid, undefined, undefined, undefined, undefined).
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg) ->
- receive Msg ->
- case Msg of
-
- {browser, ProcPid, cancel} ->
- PcPid = self(),
- PcPid ! DataReqMsg,
- PcPid ! WinConfMsg,
- PcPid ! MarkedRowMsg,
- PcPid ! SubsetMsg,
- cancel;
-
- {browser, ProcPid, {true, PollInterval}} ->
- PcPid = self(),
- PcPid ! DataReqMsg,
- PcPid ! WinConfMsg,
- PcPid ! MarkedRowMsg,
- PcPid ! SubsetMsg,
- PollInterval;
-
- {browser, ProcPid, {false, _Pollinterval}} ->
- PcPid = self(),
- PcPid ! DataReqMsg,
- PcPid ! WinConfMsg,
- PcPid ! MarkedRowMsg,
- PcPid ! SubsetMsg,
- infinity;
-
- #pc_data_req{} ->
- receive_answer(ProcPid, Msg, WinConfMsg, MarkedRowMsg, SubsetMsg);
-
- #pc_win_conf{} ->
- receive_answer(ProcPid, DataReqMsg, Msg, MarkedRowMsg, SubsetMsg);
-
- #pc_marked_row{} ->
- receive_answer(ProcPid, DataReqMsg, WinConfMsg, Msg, SubsetMsg);
-
- #dbs_subset{} ->
- receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, Msg);
-
- #pc_menu_msg{data = exit_button} ->
- self() ! Msg,
- cancel;
-
- #pc_set_sorting_mode{sender = Sender} ->
- Sender ! #pd_ignore{sender = self()},
- ProcPid ! raise_and_beep,
- receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg);
-
- {'EXIT', _Sender, _Reason} ->
- self() ! Msg,
- cancel;
-
- _Other ->
- ProcPid ! raise_and_beep,
- receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg)
- end
- end.
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, CancelBtn, Poll, Pos) ->
- receive
- {gs, Scale, click, _, [NewPos | _]} ->
- browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
- CancelBtn, Poll, NewPos);
-
- {gs, NoPollBtn, click, _, _} ->
- gs:config(Lbl, [{fg, {255, 255, 255}}]),
- gs:config(Scale, [{fg, {255, 255, 255}}, {pos, 0}, {range, {20, 20}}]),
- receive
- {gs, Scale, click, _, _} ->
- done
- after 500 ->
- done
- end,
- browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
- CancelBtn, false, Pos);
-
- {gs, PollBtn, click, _, _} ->
- gs:config(Lbl, [{fg, {0, 0, 0}}]),
- gs:config(Scale, [{fg, {0, 0, 0}}, {pos, Pos}, {range, {20, 300}}]),
- receive
- {gs, Scale, click, _, _} ->
- done
- after 500 ->
- done
- end,
- browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
- CancelBtn, true, Pos);
-
- {gs, OkBtn, click, _, _} ->
- Pid ! {browser, self(), {Poll, Pos}};
-
- {gs, CancelBtn, click, _, _} ->
- Pid ! {browser, self(), cancel};
-
- {gs, _, destroy, _, _} ->
- Pid ! {browser, self(), cancel};
-
-
- {gs, Win, configure, _, _} ->
- gs:config(Win, [{width, ?WINDOW_WIDTH},
- {height, ?WINDOW_HEIGHT}
- ]),
- browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
- CancelBtn, Poll, Pos);
-
-
- raise_and_beep ->
- gs:config(Win, [raise,
- beep]),
- browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
- CancelBtn, Poll, Pos);
-
-
- {'EXIT', _Sender, _Reason} ->
- Pid ! {browser, self(), cancel};
-
-
- _Other ->
- io:format("Poll dialog received message ~w ~n", [_Other]),
- browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
- CancelBtn, Poll, Pos)
-
- end.
-
diff --git a/lib/tv/src/tv_pw.erl b/lib/tv/src/tv_pw.erl
deleted file mode 100644
index 5f88c9f1fd..0000000000
--- a/lib/tv/src/tv_pw.erl
+++ /dev/null
@@ -1,328 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Code for pw, the window controlling part of the table tool.
-%%%
-%%%*********************************************************************
-
-
--module(tv_pw).
--compile([{nowarn_deprecated_function,{gs,config,2}}]).
-
-
-
--export([pw/1]).
-
-
-
-
--include("tv_int_def.hrl").
--include("tv_int_msg.hrl").
--include("tv_pw_int_def.hrl").
-
-
-
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function: pw.
-%%
-%% Return Value: None.
-%%
-%% Description: Process controlling the graphical window, as well as the
-%% menubuttons.
-%%
-%% Parameters: None.
-%%======================================================================
-
-
-
-pw(Master) ->
- process_flag(trap_exit, true),
- ProcVars = #process_variables{master_pid = Master},
- blocked(ProcVars).
-
-
-
-
-
-
-
-
-
-%%%********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%********************************************************************
-
-
-
-
-
-%%======================================================================
-%% Function: blocked.
-%%
-%% Return Value: None.
-%%
-%% Description: When started or explicitly blocked, pw enters this state,
-%% where nothing is performed until the module explicitly is
-%% deblocked.
-%%
-%% Parameters:
-%%======================================================================
-
-
-blocked(ProcVars) ->
- receive
- Msg ->
- case Msg of
- #pw_deblock{} ->
- deblock(Msg, ProcVars);
- _Other ->
- blocked(ProcVars)
- end
- end.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function: deblocked.
-%%
-%% Return Value: None.
-%%
-%% Description: When deblocked, a window shall be created according to
-%% specification received in pw_deblock message.
-%%
-%% Parameters: Rec: received pw_deblock message.
-%%======================================================================
-
-
-
-deblock(Msg, ProcVars) ->
- #process_variables{window_params = WinP,
- menu_params = MenuP} = ProcVars,
-
- NewWinP = ?WIN_FUNC_FILE:create_window(Msg, WinP),
- NewMenuP = ?WIN_FUNC_FILE:create_menubar(NewWinP, MenuP),
-
- Sender = Msg#pw_deblock.sender,
- Sender ! #pw_deblock_cfm{sender = self(),
- win_id = NewWinP#window_params.window_id
- },
-
- NewProcVars = ProcVars#process_variables{window_params = NewWinP,
- menu_params = NewMenuP
- },
- deblocked_loop(NewProcVars).
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-deblocked_loop(ProcVars) ->
- receive
- Msg ->
- case Msg of
-
- {gs, Id, Event, Data, Args} ->
- NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars),
- deblocked_loop(NewProcVars);
-
- % Messages from pc!
- #pw_select_menu{menu=Menu} ->
- gs:config(Menu, [{select,true}]),
- deblocked_loop(ProcVars);
-
- #pw_create_menu{} ->
- NewProcVars = ?WIN_FUNC_FILE:create_menu(Msg, ProcVars),
- % Send confirmation...
- Sender = Msg#pw_create_menu.sender,
- Sender ! #pw_create_menu_cfm{sender = self()},
- deblocked_loop(NewProcVars);
-
- #pw_set_window_title{win_title = WinTitle} ->
- WinP = ProcVars#process_variables.window_params,
- gs:config(WinP#window_params.window_id, [{title, "[TV] " ++ WinTitle}]),
- NewWinP = WinP#window_params{window_title = WinTitle},
- NewProcVars = ProcVars#process_variables{window_params = NewWinP},
- deblocked_loop(NewProcVars);
-
- #pw_deblock{} ->
- deblock(Msg, ProcVars);
-
- % Exit signals!
- {'EXIT', Pid, Reason} ->
- MasterPid = ProcVars#process_variables.master_pid,
- exit_signals({Pid, Reason}, MasterPid),
- deblocked_loop(ProcVars);
-
- _Other ->
- deblocked_loop(ProcVars)
-
- end
- end.
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-exit_signals(Exit_info, MasterPid) ->
- case Exit_info of
- {MasterPid, _Reason} -> % When from master, just quit!
- exit(normal);
- _Other ->
- done
- end.
-
-
-
-
-
-
-
-
-
-
-%%======================================================================
-%% Function:
-%%
-%% Return Value:
-%%
-%% Description:
-%%
-%% Parameters:
-%%======================================================================
-
-
-gs_messages(Msg, ProcVars) ->
- MasterPid = ProcVars#process_variables.master_pid,
- case Msg of
-
- {_Id, click, Data, _Args} ->
- MasterPid ! #pc_menu_msg{sender = self(),
- data = Data},
- ProcVars;
-
- {_Win, keypress, _Data, [Key, _ , _, 1 | _T]} ->
- MenuP = ProcVars#process_variables.menu_params,
- ShortcutList = MenuP#menu_params.shortcuts,
- send_shortcut_data(Key, ShortcutList, MasterPid),
- ProcVars;
-
- Msg0 = {Win, configure, _, _} ->
- {Win, configure, _, [W, H | _T]} = flush_msgs(Msg0),
- WinP = ProcVars#process_variables.window_params,
- #window_params{window_id = WindowId,
- min_window_width = MinAllowedWidth,
- min_window_height = MinAllowedHeight} = WinP,
- FinalWidth = ?COMM_FUNC_FILE:max(W, MinAllowedWidth),
- FinalHeight = ?COMM_FUNC_FILE:max(H, MinAllowedHeight),
- ?WIN_FUNC_FILE:resize_window(WindowId, FinalWidth, FinalHeight),
- MasterPid ! #pc_win_conf{sender = self(),
- width = FinalWidth,
- height = FinalHeight},
- NewWinP = WinP#window_params{window_width = FinalWidth,
- window_height = FinalHeight
- },
- ProcVars#process_variables{window_params = NewWinP};
-
- {_Win, destroy, _Data, _Args} ->
- exit(normal);
-
- _Other ->
- ProcVars
- end.
-
-flush_msgs(Msg0 = {Win, Op, _, _}) ->
- receive {gs, Win,Op,D,P} ->
- flush_msgs({Win,Op,D,P})
- after 200 ->
- Msg0
- end.
-
-send_shortcut_data(_Key, [], _MasterPid) ->
- done;
-send_shortcut_data(Key, ShortcutList, MasterPid) ->
- case lists:keysearch(Key, 1, ShortcutList) of
- {value, {Key, Data}} ->
- MasterPid ! #pc_menu_msg{sender = self(),
- data = Data};
- false ->
- done
- end.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/tv/src/tv_pw_int_def.hrl b/lib/tv/src/tv_pw_int_def.hrl
deleted file mode 100644
index fabfbc2762..0000000000
--- a/lib/tv/src/tv_pw_int_def.hrl
+++ /dev/null
@@ -1,55 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Internal definitions for the pw part of the table tool.
-%%%
-%%%*********************************************************************
-
--define(WIN_FUNC_FILE, tv_pw_window).
-
-
-
--define(DEFAULT_WINDOW_WIDTH, 1000).
--define(DEFAULT_WINDOW_HEIGHT, 800).
--define(DEFAULT_MIN_WINDOW_WIDTH, 50).
--define(DEFAULT_MIN_WINDOW_HEIGHT, 50).
-
-
-
--record(window_params, {window_id,
- window_title,
- window_width,
- window_height,
- min_window_width,
- min_window_height
- }).
-
-
--record(menu_params, {menubar_id,
- shortcuts
- }).
-
-
-
-
-
--record(process_variables, {master_pid,
- window_params = #window_params{},
- menu_params = #menu_params{}
- }).
diff --git a/lib/tv/src/tv_pw_window.erl b/lib/tv/src/tv_pw_window.erl
deleted file mode 100644
index 81f29dc41c..0000000000
--- a/lib/tv/src/tv_pw_window.erl
+++ /dev/null
@@ -1,277 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1997-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%%*********************************************************************
-%%%
-%%% Description: Part of the pw component controlling the graphics.
-%%%
-%%%*********************************************************************
-
-
--module(tv_pw_window).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,menuitem,3}},
- {nowarn_deprecated_function,{gs,start,0}}]).
-
-
-
--export([create_window/2,
- resize_window/3,
- create_menubar/2,
- create_menu/2]).
-
-
-
-
--include("tv_int_def.hrl").
--include("tv_int_msg.hrl").
--include("tv_pw_int_def.hrl").
-
-
-
--define(DEFAULT_BG_COLOR, {217, 217, 217}).
-
-
-
-
-%%%*********************************************************************
-%%% EXTERNAL FUNCTIONS
-%%%*********************************************************************
-
-
-
-
-%%======================================================================
-%% Function: create_menu.
-%%
-%% Return Value: Identifier to the menu created.
-%%
-%% Description: Creates a menu in the window.
-%%
-%% Parameters: Win: ID of parent window.
-%%======================================================================
-
-
-create_menu(Msg, ProcVars) ->
- MenuP = ProcVars#process_variables.menu_params,
- MenubarId = MenuP#menu_params.menubar_id,
- ShortcutList = MenuP#menu_params.shortcuts,
-
- #pw_create_menu{menutitle = MenuTitle,
- title_acc_pos = TitleAccPos,
- menulist = MenuList} = Msg,
-
- % Create the menubutton!
- Label = def_or_param(MenuTitle, "NoName"),
- Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}}, % firebrick
- % {font, {helvetica, bold, 14}},
- {label, {text, Label}},
- {underline, TitleAccPos}
- ]),
-
- % Create the actual menu!
- Menu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}}
- ]),
-
- NewMenuP = MenuP#menu_params{shortcuts = ShortcutList ++ create_menulist(MenuList, Menu)},
-
- ProcVars#process_variables{menu_params = NewMenuP}.
-
-
-
-
-
-
-
-create_menubar(WinP, MenuP) ->
- WindowId = WinP#window_params.window_id,
- MenubarId = gs:create(menubar, WindowId, [{bg, ?DEFAULT_BG_COLOR}
- ]),
- Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}}, % firebrick
- % {font, {helvetica, bold, 14}},
- {label, {text, " Help "}},
- {underline, 1},
- {side, right}
- ]),
-
- % Create the actual menu!
- Menu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}}
- ]),
- MenuP#menu_params{menubar_id = MenubarId,
- shortcuts = create_menulist([{" Help ", normal, help_button, 1, h},
- separator,
- {" OTP Documentation ",normal,otp_help_button,1,no_char}],
- Menu) ++ [{x,exit_button}, {'X',exit_button}]
- }.
-
-
-
-
-
-create_window(Msg, WinP) ->
- #pw_deblock{win_title = Title,
- win_width = Width,
- win_height = Height,
- min_win_width = MinWidth} = Msg,
-
-
- S = gs:start(),
- WindowTitle = def_or_param(Title, "NoName"),
- WindowMinWidth = def_or_param(MinWidth, ?DEFAULT_MIN_WINDOW_WIDTH),
- WindowMinHeight = def_or_param(MinWidth, ?DEFAULT_MIN_WINDOW_HEIGHT),
- WindowWidth = ?COMM_FUNC_FILE:max(def_or_param(Width,
- ?DEFAULT_WINDOW_WIDTH),
- WindowMinWidth),
- WindowHeight = ?COMM_FUNC_FILE:max(def_or_param(Height,
- ?DEFAULT_WINDOW_HEIGHT),
- WindowMinHeight),
-
-
- WindowId = gs:create(window, S, [{title, WindowTitle},
- {width, WindowWidth},
- {height, WindowHeight},
- {bg, ?DEFAULT_BG_COLOR},
- {configure, true},
- {destroy, true},
- {keypress, true},
- {cursor, arrow}
- ]),
-
- WinP#window_params{window_id = WindowId,
- window_title = WindowTitle,
- window_width = WindowWidth,
- window_height = WindowHeight,
- min_window_width = WindowMinWidth,
- min_window_height = WindowMinHeight
- }.
-
-
-
-
-
-
-
-resize_window(WindowId, NewWidth, NewHeight) ->
- gs:config(WindowId, [{width, NewWidth},
- {height, NewHeight}
- ]).
-
-
-
-
-%%%********************************************************************
-%%% INTERNAL FUNCTIONS
-%%%********************************************************************
-
-
-
-create_menulist([], _Menu) ->
- [];
-create_menulist(List, Menu) ->
- MaxLength = get_length_of_longest_menu_text(List, 0),
- create_menulist(List, Menu, MaxLength).
-
-
-
-
-create_menulist([], _Menu, _MaxLength) ->
- [];
-create_menulist([{Text, Type, Data, AccCharPos, ShortcutChar} | Rest], Menu, MaxLength) ->
- ShortcutCapitalChar =
- if
- ShortcutChar =:= no_char ->
- no_char;
- true ->
- CharAsciiValue = lists:nth(1, atom_to_list(ShortcutChar)),
- CapitalCharValue = CharAsciiValue - ($a - $A),
- list_to_atom([CapitalCharValue])
- end,
-
- FinalText = if
- ShortcutChar =:= no_char ->
- Text;
- true ->
- Text ++ lists:duplicate(MaxLength - length(Text), " ") ++
- " Ctrl+" ++ atom_to_list(ShortcutCapitalChar) ++ " "
- end,
- TypeAndSel =
- case Type of
- normal ->
- [{itemtype, normal}];
- {radio, Selected, Group} ->
- [{itemtype, radio},
- {select, Selected},
- {group, Group}];
- {check, Selected} ->
- [{itemtype, check},
- {select, Selected}]
- end,
- gs:menuitem(Data, Menu, [{bg, ?DEFAULT_BG_COLOR},
- {fg, {178, 34, 34}},
- {label, {text, FinalText}},
- {underline, AccCharPos},
- {data, Data} |
- TypeAndSel
- ]),
- [{ShortcutChar, Data}, {ShortcutCapitalChar, Data} | create_menulist(Rest, Menu, MaxLength)];
-create_menulist([separator | Rest], Menu, MaxLength) ->
- gs:create(menuitem, Menu, [{itemtype, separator}
- ]),
- create_menulist(Rest, Menu, MaxLength).
-
-
-
-
-
-
-
-get_length_of_longest_menu_text([], MaxLength) ->
- MaxLength;
-get_length_of_longest_menu_text([{Text, _Type, _Data, _APos, _SChar} | Rest], CurrMax) ->
- L = length(Text),
- if
- L > CurrMax ->
- get_length_of_longest_menu_text(Rest, L);
- true ->
- get_length_of_longest_menu_text(Rest, CurrMax)
- end;
-get_length_of_longest_menu_text([separator | Rest], CurrMax) ->
- get_length_of_longest_menu_text(Rest, CurrMax).
-
-
-
-
-
-def_or_param(undefined, DefaultValue) ->
- DefaultValue;
-def_or_param(Param, _Default) ->
- Param.
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/tv/src/tv_rec_edit.erl b/lib/tv/src/tv_rec_edit.erl
deleted file mode 100644
index 3f9ea8b5f5..0000000000
--- a/lib/tv/src/tv_rec_edit.erl
+++ /dev/null
@@ -1,754 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_rec_edit).
--compile([{nowarn_deprecated_function,{gs,button,2}},
- {nowarn_deprecated_function,{gs,button,3}},
- {nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,entry,3}},
- {nowarn_deprecated_function,{gs,frame,2}},
- {nowarn_deprecated_function,{gs,frame,3}},
- {nowarn_deprecated_function,{gs,label,2}},
- {nowarn_deprecated_function,{gs,read,2}},
- {nowarn_deprecated_function,{gs,start,0}},
- {nowarn_deprecated_function,{gs,window,3}}]).
-
-
-
--export([start/5,
- start/6,
- init/8
- ]).
-
-
--include("tv_int_def.hrl").
-
-
-
--define(DEFAULT_BG_COLOR, {217,217,217}).
-
--define(WIN_WIDTH, 375).
--define(WIN_HEIGHT, 341).
--define(ETS_WIN_HEIGHT, 154).
-
--define(FRAME_WIDTH, 375).
--define(FRAME_HEIGHT, 265).
--define(ETS_FRAME_HEIGHT, 74).
-
--define(MAX_LABEL_WIDTH, 165).
--define(X0, 15).
--define(Y0, 20).
--define(LABEL_HEIGHT, 30).
--define(ENTRY_HEIGHT, 30).
--define(FONT, {screen,12}).
--define(NEXT_BTN_WIDTH, 57).
--define(NEXT_BTN_HEIGHT, 22).
--define(NEXT_BTN_FG, {178,34,34}).
--define(INSERT_BTN_WIDTH, 80).
--define(INSERT_BTN_HEIGHT, 30).
--define(INSERT_BTN_DIST_BETWEEN, 23).
--define(INSERT_BTN_DIST_FROM_BOTTOM, 23).
-
-
-
-
-
-start(TableType, TableName, AttributeList, ListsAsStr, ErrMsgMode) ->
- AttributeValues = lists:duplicate(length(AttributeList), undefined),
- spawn_link(?MODULE, init, [TableType, TableName, AttributeList,
- AttributeValues, ListsAsStr, ErrMsgMode, self(), true]).
-
-
-
-start(TableType, TableName, AttributeList, AttributeValues, ListsAsStr, ErrMsgMode) ->
- spawn_link(?MODULE, init, [TableType, TableName, AttributeList,
- AttributeValues, ListsAsStr, ErrMsgMode, self(), false]).
-
-
-
-
-init(TableType,TableName,AttributeList,AttributeValues,ListsAsStr,ErrMsgMode,MasterPid,Insert) ->
- process_flag(trap_exit, true),
- put(error_msg_mode, ErrMsgMode),
- Frames = create_window(TableType, TableName, AttributeList, AttributeValues,
- ListsAsStr, Insert),
- loop(TableType, TableName, Frames, AttributeList, AttributeValues, MasterPid, ListsAsStr).
-
-
-
-
-
-loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr) ->
- receive
-
- {gs, insert, click, Insert, _Args} ->
- gs:config(win, [{cursor, busy}]),
- case get_record(TabType, TabName, AttrList, AttrList, Frames) of
- {ok, NewRec} ->
- case Insert of
- insert ->
- MPid ! {new_object, NewRec};
- change ->
- MPid ! {updated_object, NewRec}
- end;
- error ->
- done
- end,
- gs:config(win, [{cursor, arrow}]),
- loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
-
-
- {gs, cancel, click, _Data, _Args} ->
- exit(normal);
-
-
- {gs, reset, click, _Data, _Args} ->
- gs:config(win, [{cursor, busy}]),
- set_entry_values(TabType, AttrList, AttrVals, ListsAsStr),
- gs:config(win, [{cursor, arrow}]),
- loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
-
-
-
- {gs, EntryId, keypress, _Data, ['Tab', _No, 0 | _T]} ->
- {_Term, {NextEntry, NextFrame}} =
- check_entry_content(EntryId, AttrList, Frames, forward),
- case NextEntry of
- EntryId ->
- gs:config(NextEntry, [{setfocus, true}]);
- _OtherId ->
- gs:config(NextFrame, [raise]),
- gs:config(NextEntry, [{setfocus, true},
- {select, {0,100000000}}])
- end,
- loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
-
-
- {gs, EntryId, keypress, _Data, ['Down' | _T]} ->
- {_Term, {NextEntry, NextFrame}} =
- check_entry_content(EntryId, AttrList, Frames, forward),
- case NextEntry of
- EntryId ->
- gs:config(NextEntry, [{setfocus, true}]);
- _OtherId ->
- gs:config(NextFrame, [raise]),
- gs:config(NextEntry, [{setfocus, true},
- {select, {0,100000000}}])
- end,
- loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
-
-
- {gs, EntryId, keypress, _Data, ['Tab', _No, 1 | _T]} ->
- {_Term, {NextEntry, NextFrame}} =
- check_entry_content(EntryId, AttrList, Frames, backward),
- gs:config(NextFrame, [raise]),
- case NextEntry of
- EntryId ->
- gs:config(NextEntry, [{setfocus, true}]);
- _OtherId ->
- gs:config(NextFrame, [raise]),
- gs:config(NextEntry, [{setfocus, true},
- {select, {0,100000000}}])
- end,
- loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
-
-
- {gs, EntryId, keypress, _Data, ['Up' | _T]} ->
- {_Term, {NextEntry, NextFrame}} =
- check_entry_content(EntryId, AttrList, Frames, backward),
- gs:config(NextFrame, [raise]),
- case NextEntry of
- EntryId ->
- gs:config(NextEntry, [{setfocus, true}]);
- _OtherId ->
- gs:config(NextFrame, [raise]),
- gs:config(NextEntry, [{setfocus, true},
- {select, {0,100000000}}])
- end,
- loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
-
-
- {gs, Id, keypress, _Data, ['Return' | _T]} ->
- OldCursor = gs:read(Id, cursor),
- gs:config(Id, [{cursor, busy}]),
- gs:config(win, [{cursor, busy}]),
- Insert = gs:read(insert, data),
- case get_record(TabType, TabName, AttrList, AttrList, Frames) of
- {ok, NewRec} ->
- case Insert of
- insert ->
- MPid ! {new_object, NewRec};
- change ->
- MPid ! {updated_object, NewRec}
- end;
- error ->
- done
- end,
- gs:config(win, [{cursor, arrow}]),
- gs:config(Id, [{cursor, OldCursor}]),
- loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
-
-
-
- {gs, _Id, click, FrameNo, _Args} ->
- gs:config(lists:nth(FrameNo, Frames), [raise]),
- loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
-
-
- {gs, win, configure, _Data, [Width | _T]} ->
- resize_window(TabType, lists:max([Width, ?WIN_WIDTH]), Frames, AttrList),
- loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr);
-
-
- {gs, win, destroy, _Data, _Args} ->
- exit(normal);
-
-
- insert_mode ->
- NewAttrVals = lists:duplicate(length(AttrList), undefined),
- set_entry_values(TabType, AttrList, NewAttrVals, ListsAsStr),
- loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr);
-
-
- {update_mode, Obj} ->
- NewAttrVals =
- case TabType of
- mnesia ->
- case Obj of
- undefined ->
- lists:duplicate(length(AttrList), undefined);
- _AnyRec ->
- tl(tuple_to_list(Obj))
- end;
- ets ->
- [Obj]
- end,
- set_entry_values(TabType, AttrList, NewAttrVals, ListsAsStr),
- loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr);
-
-
- {reset_info, Obj} ->
- %% Info to use, instead of old info, when reset button is pressed.
- NewAttrVals =
- case TabType of
- mnesia ->
- case Obj of
- undefined ->
- lists:duplicate(length(AttrList), undefined);
- _AnyRec ->
- tl(tuple_to_list(Obj))
- end;
- ets ->
- [Obj]
- end,
- loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr);
-
-
- raise ->
- gs:config(win, [raise]),
- loop(TabType, TabName, Frames, AttrList,AttrVals, MPid, ListsAsStr);
-
-
- {'EXIT', _Pid, _Reason} ->
- exit(normal);
-
-
- _Other ->
- loop(TabType, TabName, Frames, AttrList,AttrVals, MPid, ListsAsStr)
- end.
-
-
-
-
-resize_window(TabType, WinWidth, Frames, AttrList) ->
- WinHeight =
- case TabType of
- mnesia ->
- get_window_height(length(AttrList));
- ets ->
- ?ETS_WIN_HEIGHT
- end,
- gs:config(win, [{width, WinWidth},
- {height, WinHeight}
- ]),
- FrameWidth = WinWidth,
- LblL = lists:map(fun(H) ->
- gs:config(H, [{width, FrameWidth}]),
- {LblW, BId, NId} = gs:read(H, data),
- XNext = get_next_btn_xpos(FrameWidth),
- XBack = XNext - ?NEXT_BTN_WIDTH,
- gs:config(BId, [{x, XBack}]),
- gs:config(NId, [{x, XNext}]),
- LblW
- end,
- Frames),
- LblW = hd(LblL),
- EntryW = get_entry_width(TabType, FrameWidth, LblW),
- lists:foreach(fun(H) ->
- gs:config(H, [{width, EntryW}])
- end,
- AttrList),
- gs:config(btnframe, [{width, FrameWidth}]),
- {XInsert, XCancel, XReset} = get_insert_btn_coords(WinWidth),
- gs:config(insert, [{x, XInsert}]),
- gs:config(cancel, [{x, XCancel}]),
- gs:config(reset, [{x, XReset}]).
-
-
-
-
-check_entry_content(EntryId, AttributeList, Frames, Direction) ->
- EditedStr = gs:read(EntryId, text),
- case tv_db_search:string_to_term(EditedStr) of
- {error, {_Reason, Msg}} ->
- gs:config(EntryId, [beep]),
- tv_utils:notify(gs:start(), "TV Notification", Msg),
- {error, {EntryId, no_matter}};
- {ok, NewTerm} ->
- {{ok,NewTerm}, get_next_entry_id(EntryId, AttributeList, Frames, Direction)}
- end.
-
-
-
-
-get_next_entry_id(EntryId, AttributeList, Frames, Direction) ->
- OldPos = get_pos(EntryId, AttributeList),
- MaxPos = length(AttributeList),
- NewPos = case Direction of
- forward when OldPos < MaxPos ->
- OldPos + 1;
- forward ->
- 1;
- backward when OldPos > 1 ->
- OldPos - 1;
- backward ->
- MaxPos;
- stationary ->
- OldPos
- end,
- FramePos = get_next_frame_id(NewPos),
- {lists:nth(NewPos, AttributeList), lists:nth(FramePos, Frames)}.
-
-
-
-
-get_next_frame_id(Pos) ->
- case Pos rem 5 of
- 0 ->
- Pos div 5;
- _Other ->
- (Pos div 5) + 1
- end.
-
-
-
-
-get_record(TabType, TabName, AttrList, AttrList, Frames) ->
- case get_record(AttrList, AttrList, Frames, []) of
- {ok, RecList} ->
- case TabType of
- mnesia ->
- NewRecList = [TabName | RecList],
- {ok, list_to_tuple(NewRecList)};
- ets ->
- {ok, hd(RecList)} %% Only one element, a tuple!
- end;
- error ->
- error
- end.
-
-
-
-
-get_record([H | T], AttrList, Frames, Acc) ->
- case check_entry_content(H, AttrList, Frames, forward) of
- {{ok, NewTerm}, _PosTuple} ->
- get_record(T, AttrList, Frames, [NewTerm | Acc]);
- {error, _PosTuple} ->
- {EntryId, FrameId} = get_next_entry_id(H, AttrList, Frames, stationary),
- gs:config(FrameId, [raise]),
- gs:config(EntryId, [{setfocus, true}]),
- error
- end;
-get_record([], _AttrList, _Frames, Acc) ->
- {ok, lists:reverse(Acc)}.
-
-
-
-
-
-
-get_pos(Elem, L) ->
- get_pos(Elem, L, 1).
-
-
-get_pos(Elem, [Elem | _T], N) ->
- N;
-get_pos(Elem, [_H | T], N) ->
- get_pos(Elem, T, N + 1).
-
-
-
-
-create_window(mnesia, TableName, AttrList, AttrValues, ListsAsStr, Insert) ->
- NofAttr = length(AttrList),
- NofFrames =
- case NofAttr rem 5 of
- 0 ->
- NofAttr div 5;
- _Rem ->
- (NofAttr div 5) + 1
- end,
-
- WinHeight = get_window_height(NofAttr),
- FrameHeight = get_frame_height(NofAttr),
-
- Attr = get_longest_attribute_name(AttrList),
- LabelWidth = lists:min([?MAX_LABEL_WIDTH,
- element(1, gs:read(gs:start(),
- {font_wh, {?FONT, atom_to_list(Attr)}}))]),
-
- gs:window(win, gs:start(), [{width, ?WIN_WIDTH},
- {height, WinHeight},
- {title, "[TV] Record Editor: '" ++
- atom_to_list(TableName) ++ "'"},
- {bg, ?DEFAULT_BG_COLOR},
- {configure, true},
- {destroy, true},
- {cursor, arrow}
- ]),
-
- create_insert_and_cancel_btns(Insert, WinHeight, FrameHeight),
- FrameList = create_frames(NofFrames, LabelWidth, AttrList, AttrValues, NofFrames,
- ListsAsStr, FrameHeight),
- gs:config(hd(FrameList), [raise]),
- gs:config(hd(AttrList), [{setfocus, true},
- {select, {0,100000000}}]),
- gs:config(win, [{map,true}]),
- FrameList;
-create_window(ets, TableName, [Attr], [AttrVal], ListsAsStr, Insert) ->
- gs:window(win, gs:start(), [{width, ?WIN_WIDTH},
- {height, ?ETS_WIN_HEIGHT},
- {title, "[TV] Tuple Editor, table '" ++
- atom_to_list(TableName) ++ "'"},
- {bg, ?DEFAULT_BG_COLOR},
- {configure, true},
- {destroy, true},
- {cursor, arrow}
- ]),
-
- F = gs:frame(win, [{width, ?FRAME_WIDTH},
- {height, ?ETS_FRAME_HEIGHT},
- {x, 0},
- {y, 0},
- {bg, ?DEFAULT_BG_COLOR},
- {bw,2},
- {data, {0, undefined, undefined}}
- ]),
-
- create_insert_and_cancel_btns(Insert, ?ETS_WIN_HEIGHT, ?ETS_FRAME_HEIGHT),
-
- EntryW = get_entry_width(ets, ?FRAME_WIDTH, 0),
- EntryX = ?X0 - 2,
-
- EntryText =
- case AttrVal of
- undefined ->
- "";
- _OtherVal ->
- case ListsAsStr of
- true ->
- tv_io_lib:format("~p", [AttrVal]);
- false ->
- lists:flatten(io_lib:write(AttrVal))
- end
- end,
- gs:entry(Attr, F, [{width, EntryW},
- {height, ?LABEL_HEIGHT},
- {x, EntryX},
- {y, ?Y0},
- {bg, {255,255,255}},
- {fg, {0,0,0}},
- {bw, 1},
- {font, ?FONT},
- {justify, left},
- {text, EntryText},
- {cursor, text},
- {setfocus, true},
- {enable, true},
- {keypress,true},
- {select, {0,100000000}}
- ]),
- gs:config(win, [{map,true}]),
- [F].
-
-
-
-
-get_insert_btn_coords(WinWidth) ->
- Middle = round(WinWidth / 2),
- XInsert = Middle - round(1.5 * ?INSERT_BTN_WIDTH) - ?INSERT_BTN_DIST_BETWEEN,
- XCancel = Middle - round(0.5 * ?INSERT_BTN_WIDTH),
- XReset = Middle + round(0.5 * ?INSERT_BTN_WIDTH) + ?INSERT_BTN_DIST_BETWEEN,
- {XInsert, XCancel, XReset}.
-
-
-
-
-create_insert_and_cancel_btns(Insert, WinHeight, FrameHeight) ->
- LowerFrameHeight = WinHeight - FrameHeight,
- Y = ?INSERT_BTN_DIST_FROM_BOTTOM,
- {XInsert, XCancel, XReset} = get_insert_btn_coords(?WIN_WIDTH),
-
- {InsertBtnText, InsertBtnData} =
- case Insert of
- true ->
- {"Insert", insert};
- false ->
- {"Change", change}
- end,
-
- gs:frame(btnframe, win, [{width, ?FRAME_WIDTH},
- {height, LowerFrameHeight},
- {x, 0},
- {y, FrameHeight},
- {bg, ?DEFAULT_BG_COLOR},
- {bw,2}
- ]),
- gs:button(insert, btnframe, [{width, ?INSERT_BTN_WIDTH},
- {height, ?INSERT_BTN_HEIGHT},
- {x, XInsert},
- {y, Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}},
- {font, ?FONT},
- {label, {text, InsertBtnText}},
- {align, center},
- {data, InsertBtnData}
- ]),
- gs:button(cancel, btnframe, [{width, ?INSERT_BTN_WIDTH},
- {height, ?INSERT_BTN_HEIGHT},
- {x, XCancel},
- {y, Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}},
- {font, ?FONT},
- {label, {text, "Cancel"}},
- {align, center}
- ]),
- gs:button(reset, btnframe, [{width, ?INSERT_BTN_WIDTH},
- {height, ?INSERT_BTN_HEIGHT},
- {x, XReset},
- {y, Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}},
- {font, ?FONT},
- {label, {text, "Reset"}},
- {align, center}
- ]).
-
-
-
-
-
-create_frames(0, _LblW, _AttrList, _AttrValues, _NofFrames, _ListsAsStr, _FrameHeight) ->
- [];
-create_frames(N, LblW, AttrList, AttrValues, NofFrames, ListsAsStr, FrameHeight) ->
- F = gs:frame(win, [{width, ?FRAME_WIDTH},
- {height, FrameHeight},
- {x, 0},
- {y, 0},
- {bg, ?DEFAULT_BG_COLOR},
- {bw,2}
- ]),
- {BId, NId} = create_back_and_next_btns(F, 5, N, NofFrames),
- gs:config(F, [{data, {LblW, BId, NId}}]),
- {RemAttrList, RemAttrValues} =
- create_labels_and_entries(5, AttrList, AttrValues, LblW, F, ListsAsStr),
- [F | create_frames(N - 1,LblW,RemAttrList,RemAttrValues,NofFrames,ListsAsStr,FrameHeight)].
-
-
-
-
-
-
-create_back_and_next_btns(FrameId, NofEntries, FrameNo, NofFrames) ->
- Y = ?Y0 + NofEntries * (?LABEL_HEIGHT + 10) + 8,
- XNext = get_next_btn_xpos(?FRAME_WIDTH),
- XBack = XNext - ?NEXT_BTN_WIDTH,
- DataNext = (NofFrames - FrameNo + 1) + 1,
- DataBack = (NofFrames - FrameNo + 1) - 1,
- BId =
- if
- DataBack =< 0 ->
- undefined;
- true ->
- gs:button(FrameId, [{width, ?NEXT_BTN_WIDTH},
- {height, ?NEXT_BTN_HEIGHT},
- {x, XBack},
- {y, Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, ?NEXT_BTN_FG},
- {font, ?FONT},
- {align, center},
- {label, {text, "< Back"}},
- %% {underline, 2},
- {data, DataBack}
- ])
- end,
- NId =
- if
- DataNext > NofFrames ->
- undefined;
- true ->
- gs:button(FrameId, [{width, ?NEXT_BTN_WIDTH},
- {height, ?NEXT_BTN_HEIGHT},
- {x, XNext},
- {y, Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, ?NEXT_BTN_FG},
- {font, ?FONT},
- {align, center},
- {label, {text, " Next >"}},
- %% {underline, 1},
- {data, DataNext}
- ])
- end,
- {BId, NId}.
-
-
-
-
-get_next_btn_xpos(FrameWidth) ->
- FrameWidth - ?X0 - ?NEXT_BTN_WIDTH.
-
-
-
-get_entry_width(TableType, FrameWidth, LblWidth) ->
- HorizontalSpacing =
- case TableType of
- mnesia ->
- 10;
- ets ->
- 0
- end,
- FrameWidth - LblWidth - 2 * ?X0 - HorizontalSpacing.
-
-
-
-create_labels_and_entries(N, [H | T], [VH | VT], LblW, F, ListsAsStr) when N > 0 ->
- Y = ?Y0 + (5 - N) * (?LABEL_HEIGHT + 10),
- EntryW = get_entry_width(mnesia, ?FRAME_WIDTH, LblW),
- EntryX = ?FRAME_WIDTH - EntryW - ?X0 - 2,
-
- EntryText =
- case ListsAsStr of
- true ->
- tv_io_lib:format("~p", [VH]);
- false ->
- lists:flatten(io_lib:write(VH))
- end,
- gs:label(F, [{width, LblW},
- {height, ?LABEL_HEIGHT},
- {x, ?X0},
- {y, Y},
- {bg, ?DEFAULT_BG_COLOR},
- {fg, {0,0,0}},
- {align,w},
- {font, ?FONT},
- {label, {text, atom_to_list(H)}}
- ]),
- gs:entry(H, F, [{width, EntryW},
- {height, ?LABEL_HEIGHT},
- {x, EntryX},
- {y, Y},
- {bg, {255,255,255}},
- {fg, {0,0,0}},
- {bw, 1},
- {font, ?FONT},
- {justify, left},
- {text, EntryText},
- {cursor, text},
- {setfocus, false},
- {enable, true},
- {keypress,true}
- ]),
- create_labels_and_entries(N - 1, T, VT, LblW, F, ListsAsStr);
-create_labels_and_entries(0, RemAttrList, RemAttrValues, _LblW, _F, _ListsAsStr) ->
- {RemAttrList, RemAttrValues};
-create_labels_and_entries(_N, [], [], _LblW, _F, _ListsAsStr) ->
- {[], []}.
-
-
-
-
-get_longest_attribute_name(AttrList) ->
- get_longest_attribute_name(AttrList, 0, undefined).
-
-
-get_longest_attribute_name([H | T], Max, Attr) ->
- CurrLength = length(atom_to_list(H)),
- if
- CurrLength >= Max ->
- get_longest_attribute_name(T, CurrLength, H);
- true ->
- get_longest_attribute_name(T, Max, Attr)
- end;
-get_longest_attribute_name([], _Max, Attr) ->
- Attr.
-
-
-
-
-get_window_height(N) ->
- if
- N >= 5 ->
- ?WIN_HEIGHT;
- true ->
- ?WIN_HEIGHT - ((5 - N) * (?LABEL_HEIGHT + 10) + ?NEXT_BTN_HEIGHT + 8)
- end.
-
-
-
-get_frame_height(N) ->
- if
- N >= 5 ->
- ?FRAME_HEIGHT;
- true ->
- ?FRAME_HEIGHT - ((5 - N) * (?LABEL_HEIGHT + 10) + ?NEXT_BTN_HEIGHT + 8)
- end.
-
-
-
-
-set_entry_values(TabType, [H | T], [VH | VT], ListsAsStr) ->
- EntryText =
- case VH of
- undefined when TabType =:= ets ->
- "";
- _AnyValue ->
- case ListsAsStr of
- true ->
- tv_io_lib:format("~p", [VH]);
- false ->
- lists:flatten(io_lib:write(VH))
- end
- end,
- gs:config(H, [{text, EntryText}]),
- set_entry_values(TabType, T, VT, ListsAsStr);
-set_entry_values(_TabType, [], [], _ListsAsStr) ->
- done.
diff --git a/lib/tv/src/tv_table_owner.erl b/lib/tv/src/tv_table_owner.erl
deleted file mode 100644
index bccac6c236..0000000000
--- a/lib/tv/src/tv_table_owner.erl
+++ /dev/null
@@ -1,122 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_table_owner).
-
-
-
--export([create/5
- ]).
-
-
--export([internal_create/3,
- start/0,
- init/0
- ]).
-
-
-
--define(REGISTERED_NAME, tv_table_owner).
-
-
-
-create(mnesia, _Node, _LocalNode, _TableName, _Options) ->
- error;
-create(ets, _Node, true, TabName, Options) ->
- case catch internal_create(ets, TabName, Options) of
- {TabName, Pid} when is_pid(Pid) ->
- {ok, {TabName,Pid}};
- {TabNo, Pid} when is_pid(Pid) ->
- {ok, {TabNo,Pid}};
- _OtherResult ->
- error
- end;
-create(ets, Node, false, TabName, Options) ->
- case catch rpc:block_call(Node, ?MODULE, internal_create, [ets, TabName, Options]) of
- {TabName, Pid} when is_pid(Pid) ->
- {ok, {TabName,Pid}};
- {TabNo, Pid} when is_pid(Pid) ->
- {ok, {TabNo,Pid}};
- _OtherResult ->
- error
- end.
-
-
-
-
-
-internal_create(ets, TabName, Options) ->
- ?MODULE:start(),
- ?REGISTERED_NAME ! {create, self(), ets, TabName, Options},
- receive
- {?REGISTERED_NAME, Result} ->
- Result
- after
- 5000 ->
- error
- end.
-
-
-
-
-
-
-start() ->
- case whereis(?REGISTERED_NAME) of
- undefined ->
- ServerPid = spawn(?MODULE, init, []),
- case catch register(?REGISTERED_NAME, ServerPid) of
- true ->
- ok;
- {'EXIT', _Reason} ->
- exit(ServerPid, kill),
- timer:sleep(500),
- start()
- end;
- Pid when is_pid(Pid) ->
- ok
- end.
-
-
-
-
-
-
-
-
-init() ->
- %% Currently no initialisations!
- loop().
-
-
-
-
-
-
-loop() ->
- receive
-
- {create, Sender, ets, TabName, Options} ->
- Sender ! {?REGISTERED_NAME, (catch ets:new(TabName, Options))},
- loop();
-
-
- _Other ->
- loop()
-
- end.
-
diff --git a/lib/tv/src/tv_utils.erl b/lib/tv/src/tv_utils.erl
deleted file mode 100644
index 799e3994cb..0000000000
--- a/lib/tv/src/tv_utils.erl
+++ /dev/null
@@ -1,179 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
--module(tv_utils).
--compile([{nowarn_deprecated_function,{gs,config,2}},
- {nowarn_deprecated_function,{gs,create,3}},
- {nowarn_deprecated_function,{gs,destroy,1}}]).
-
-
-
--export([notify/3]).
-
-
-
- %% Minimum size of help windows
--define(wwin, 300).
--define(hwin, 180).
-
- %% Button sizes
--define(wbut, 60).
--define(hbut, 30).
-
--define(pad, 10).
-
-
-%----------------------------------------
-% notify(S,Strings) -> ok
-% S = pid() GS
-% Strings = string() | [string()]
-% A notification window contains a message to the user.
-% Will lock the GUI until the user confirms the message by
-% pressing the 'Ok' button.
-%----------------------------------------
-notify(S,Title,Strings) ->
- W = required_width(Strings, ?wwin),
- Htop = round(2 * ?hwin / 3),
- Hbot = ?hwin - Htop,
-
- %% Open a new window
- Win = gs:create(window,S,[{width, W},
- {height, ?hwin},
- {title, Title},
- {data, notifywin}
- ]),
-
- %% Top frame containing a label
- Top = gs:create(frame,Win,[{width, W},
- {height, Htop},
- {x, 0},
- {y, 0},
- {data, notifywin},
- {keypress, true}
- ]),
-
- Lbl = gs:create(label,Top,[{width,W},
- {height, Htop - 2 * ?pad},
- {x, 0},
- {y, ?pad},
- {align, c},
- {justify, center},
- {data, notifywin},
- {keypress, true}
- ]),
-
- gs:config(Lbl, {label, {text, insert_newlines(Strings)}}),
-
- %% Bottom frame containing an 'Ok' button
- Bot = gs:create(frame,Win,[{width, W},
- {height, Hbot},
- {x, 0},
- {y, Htop}
- ]),
- gs:create(button,Bot,[{width, ?wbut},
- {height, ?hbut},
- {x, W / 2 - ?wbut/2},
- {y, Hbot / 2 - ?hbut / 2},
- {label, {text, "OK"}},
- {data, notifywin},
- {keypress, true}]),
-
- gs:config(Win, [{map,true}]),
-
- event_loop(Win,null).
-
-
-
-
-insert_newlines([String|Rest]) when is_list(String), Rest=/=[]->
- String ++ "\n" ++ insert_newlines(Rest);
-insert_newlines([Last]) ->
- [Last];
-insert_newlines(Other) ->
- Other.
-
-
-
-
-event_loop(Win,Entry) ->
- receive
-
- %%
- %% Notify window
- %%
-
- %% 'Ok' pressed in notify window
- {gs,_Obj,_Event,notifywin,["OK"|_]} ->
- gs:destroy(Win),
- ok;
-
- %% 'Window manager destroy' received in notify window
- {gs,_Obj,destroy,notifywin,_} ->
- gs:destroy(Win),
- ok;
-
- %% 'Return' pressed in notify or confirm window
- {gs,_Obj,_Event,helpwin,['Return'|_]} ->
- gs:destroy(Win),
- ok;
-
-
- %%
- %% Common or partly common events
- %%
-
- %% 'Window manager destroy' received in notify,
- %% confirm,confirm_exit or request window
- {gs,_Obj,destroy,_,_} ->
- gs:destroy(Win),
- cancel;
-
- %% Flush any other GS events
- {gs,_Obj,_Event,_Data,_Arg} ->
- event_loop(Win,Entry)
- end.
-
-
-
-
-%----------------------------------------
-% required_width(Strings,Min) -> Req
-% Strings = string() | [string()]
-% Min = Req = integer()
-% Returns the minimum required width in pixels for a help window,
-% which is the maximum of Min and the required width for Strings.
-% NOTE: Font dependant really!
-%----------------------------------------
-required_width([First|Rest],Min) when is_list(First) ->
- Req = 7*length(First), % 7 pixels per character
- if
- Req>Min ->
- required_width(Rest,Req);
- true ->
- required_width(Rest,Min)
- end;
-required_width([],Min) ->
- Min;
-required_width(String,Min) ->
- Req = 7*length(String),
- if
- Req>Min ->
- Req;
- true ->
- Min
- end.
-
diff --git a/lib/tv/vsn.mk b/lib/tv/vsn.mk
deleted file mode 100644
index 59d124a3b7..0000000000
--- a/lib/tv/vsn.mk
+++ /dev/null
@@ -1 +0,0 @@
-TV_VSN = 2.1.4.10
diff --git a/system/doc/definitions/term.defs b/system/doc/definitions/term.defs
index f3d6f865d2..6091a46a20 100644
--- a/system/doc/definitions/term.defs
+++ b/system/doc/definitions/term.defs
@@ -1,8 +1,6 @@
[{"agent","agent","An entity that terminates a management protocol in the Network Element.","mbj"},
{"API","API","Application Programming Interface. The interface towards an application. Usually this is a set of functions available, but can also be a set of messages sent to or from an application.","mbj"},
{"application","application","A collection of resources which is required to offer a specific service.","mbj"},
-{"appmon","Application Monitor","A graphical node and application process tree viewer. See also appmon.","mbj"},
-{"Appmon","Appmon","Application name for the Application Monitor within Erlang/OTP. A graphical node and process viewer.","mbj"},
{"app callback","application callback module","A module which is called when the application is started, and when it has stopped. Every application has one application callback module.","mbj"},
{"AC","application controller","A process which coordinates all operations on applications.","mbj"},
{"app master","application master","The application master is a process that monitors the application. It is provided by the Erlang run-time system. Every application has an application master process.","mbj"},
@@ -137,7 +135,6 @@ the module Erlang in the application kernel","kenneth"},
{"pattern matching","pattern matching","A basic mechanism in Erlang for assigning values to variables and for controlling the flow of a program.","kenneth"},
{"permanent child","permanent child","A supervised process which always is restarted when it dies.","mbj"},
{"Pid","Pid","Process Identifier. A data type in Erlang for storing process references. The process identity of the process displayed in the line.","kenneth"},
-{"Pman","Pman","Module and application name for the Process Trace Tool.","olin"},
{"point","point","A unit used to indicate the size of a typeface. Equal to 1/72 inches.","jocke"},
{"pointer","pointer","A pointer tells where data is stored. Memory pointers are not used in Erlang.","kent"},
{"port","port","A data type in Erlang. Ports provide the basic mechanism for communication with the external world.","peterl"},
@@ -196,10 +193,8 @@ the module Erlang in the application kernel","kenneth"},
{"sup_bridge","supervisor bridge"," A behaviour used to connect a process, or subsystem, to a supervisor tree.","mbj"},
{"SASLlong","System Architecture Support Libraries (SASL)","An Erlang/OTP application which contains services for error logging, release handling and report browsing.","mbj"}, {".config","system configuration file","A file which specifies configuration parameters for the applications in the system.","mbj"},
{"table lock","table lock","Table locks are locks which are set on whole tables. They may either be read locks or write locks.","hakan"},
-{"Table Visualizer","Table Visualizer","A tool which enables the user to examine ETS and Mnesia tables.","olin"},
{"temporary child","temporary child","A supervised process which is never restarted when it dies.","mbj"},
{"term","term","The super type of all Erlang types.","kenneth"},
-{"Toolbar","Toolbar","A tool that provides an simplistic interface to the other various Erlang/OTP tools","olin"},
{"tools","tools","An application within Erlang/OTP which contains the tools which are not applications themselves.","olin"},
{"transaction","transaction","Transactions groups a set of database accesses into an atomic unit. All transactions has the ACID (atomicity, concistency, isolation and durability) properties.","hakan"},
{"transient child","transient child","A supervised process which is restarted if it dies non-normally.","mbj"},
diff --git a/system/doc/reference_manual/expressions.xml b/system/doc/reference_manual/expressions.xml
index 0dc6bfe576..e9de3e006e 100644
--- a/system/doc/reference_manual/expressions.xml
+++ b/system/doc/reference_manual/expressions.xml
@@ -954,19 +954,20 @@ Ei = Value |
<title>Fun Expressions</title>
<pre>
fun
- (Pattern11,...,Pattern1N) [when GuardSeq1] ->
- Body1;
+ [Name](Pattern11,...,Pattern1N) [when GuardSeq1] ->
+ Body1;
...;
- (PatternK1,...,PatternKN) [when GuardSeqK] ->
- BodyK
+ [Name](PatternK1,...,PatternKN) [when GuardSeqK] ->
+ BodyK
end</pre>
<p>A fun expression begins with the keyword <c>fun</c> and ends
with the keyword <c>end</c>. Between them should be a function
declaration, similar to a
- <seealso marker="functions#syntax">regular function declaration</seealso>, except that no function name is
- specified.</p>
- <p>Variables in a fun head shadow variables in the
- function clause surrounding the fun expression, and
+ <seealso marker="functions#syntax">regular function declaration</seealso>,
+ except that the function name is optional and should be a variable if
+ any.</p>
+ <p>Variables in a fun head shadow the function name and both shadow
+ variables in the function clause surrounding the fun expression, and
variables bound in a fun body are local to the fun body.</p>
<p>The return value of the expression is the resulting fun.</p>
<p>Examples:</p>
@@ -978,7 +979,11 @@ end</pre>
3> <input>Fun2 = fun (X) when X>=5 -> gt; (X) -> lt end.</input>
#Fun&lt;erl_eval.6.39074546&gt;
4> <input>Fun2(7).</input>
-gt</pre>
+gt
+5> <input>Fun3 = fun Fact(1) -> 1; Fact(X) when X > 1 -> X * Fact(X - 1) end.</input>
+#Fun&lt;erl_eval.6.39074546&gt;
+6> <input>Fun3(4).</input>
+24</pre>
<p>The following fun expressions are also allowed:</p>
<pre>
fun Name/Arity