diff options
Diffstat (limited to 'lib')
313 files changed, 143 insertions, 86316 deletions
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/html/.gitignore b/lib/appmon/doc/html/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/appmon/doc/html/.gitignore +++ /dev/null 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 Binary files differdeleted file mode 100644 index 06f21d04a9..0000000000 --- a/lib/appmon/doc/src/app_win.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 38258b7552..0000000000 --- a/lib/appmon/doc/src/listbox_win.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 36d742e91e..0000000000 --- a/lib/appmon/doc/src/main_win.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6fffe30419..0000000000 --- a/lib/appmon/doc/src/note.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index fda0900436..0000000000 --- a/lib/appmon/doc/src/pinfo_win.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 96af52360e..0000000000 --- a/lib/appmon/doc/src/warning.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 583fcb8311..0000000000 --- a/lib/appmon/priv/appmon.gif +++ /dev/null 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"> - -</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"> -</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," " ++ 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()\"> - </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()\"> " ++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()\"> " ++ 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) ++" - "++ - 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>"++ - "   - <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> </TD><TD> </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> </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> </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:"," ") ++ - 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:"," ") ++ - print_secondary_list(Names,[])); - -print_key_list([{applications,Apps}|Rest],Result)-> - print_key_list(Rest,Result ++ print_key("Depends on:"," ") ++ - 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> </TD> - </TR>". - -print_key2(Label,Val)-> - "<TR> - <TD> </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)," ")). 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/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/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_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/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_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_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/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/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 Binary files differdeleted file mode 100644 index 9650176366..0000000000 --- a/lib/observer/doc/src/etop_5.gif +++ /dev/null diff --git a/lib/observer/doc/src/etop_lines.gif b/lib/observer/doc/src/etop_lines.gif Binary files differdeleted file mode 100644 index 10620a1155..0000000000 --- a/lib/observer/doc/src/etop_lines.gif +++ /dev/null diff --git a/lib/observer/doc/src/etop_main.gif b/lib/observer/doc/src/etop_main.gif Binary files differdeleted file mode 100644 index 699cb986c8..0000000000 --- a/lib/observer/doc/src/etop_main.gif +++ /dev/null diff --git a/lib/observer/doc/src/etop_opt.gif b/lib/observer/doc/src/etop_opt.gif Binary files differdeleted file mode 100644 index e420bff7f6..0000000000 --- a/lib/observer/doc/src/etop_opt.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index e12754631c..0000000000 --- a/lib/pman/doc/src/main_window.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6fffe30419..0000000000 --- a/lib/pman/doc/src/note.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 18377fbed1..0000000000 --- a/lib/pman/doc/src/options.gif +++ /dev/null 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> 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->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->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 Binary files differdeleted file mode 100644 index 116e32ace8..0000000000 --- a/lib/pman/doc/src/toolbar.gif +++ /dev/null diff --git a/lib/pman/doc/src/trace.gif b/lib/pman/doc/src/trace.gif Binary files differdeleted file mode 100644 index 8b34ec7ea0..0000000000 --- a/lib/pman/doc/src/trace.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 96af52360e..0000000000 --- a/lib/pman/doc/src/warning.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 4575a397d8..0000000000 --- a/lib/pman/priv/pman.gif +++ /dev/null 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/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 Binary files differdeleted file mode 100644 index c249d891dd..0000000000 --- a/lib/toolbar/doc/src/bar.gif +++ /dev/null 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ö</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 Binary files differdeleted file mode 100644 index b55bb809d3..0000000000 --- a/lib/toolbar/doc/src/create_tool.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6fffe30419..0000000000 --- a/lib/toolbar/doc/src/note.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 96af52360e..0000000000 --- a/lib/toolbar/doc/src/warning.gif +++ /dev/null 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/test/xref_SUITE.erl b/lib/tools/test/xref_SUITE.erl index 3e9eaf259c..353275ae3b 100644 --- a/lib/tools/test/xref_SUITE.erl +++ b/lib/tools/test/xref_SUITE.erl @@ -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}}}, @@ -1206,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}}}, 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 Binary files differdeleted file mode 100644 index 7913fc4230..0000000000 --- a/lib/tv/doc/src/info_window.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6fffe30419..0000000000 --- a/lib/tv/doc/src/note.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index c09c84322f..0000000000 --- a/lib/tv/doc/src/set_poll_int.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index d78cf7d8ed..0000000000 --- a/lib/tv/doc/src/tv.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 7fae7f30cf..0000000000 --- a/lib/tv/doc/src/tv_create_table.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index fbbdcab515..0000000000 --- a/lib/tv/doc/src/tv_record_editor_mnesia.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index bc80eb34f1..0000000000 --- a/lib/tv/doc/src/tv_row_marked.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9b3bc87959..0000000000 --- a/lib/tv/doc/src/tv_row_marked_popup.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 3e615b4875..0000000000 --- a/lib/tv/doc/src/tv_search_result.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index d6e72dda2f..0000000000 --- a/lib/tv/doc/src/tv_search_window.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 7a8a0cf6ce..0000000000 --- a/lib/tv/doc/src/tv_start.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 0ad04331cd..0000000000 --- a/lib/tv/doc/src/tv_start_mnesia.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 897686e5ef..0000000000 --- a/lib/tv/doc/src/tv_start_other_node.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 390f98541f..0000000000 --- a/lib/tv/doc/src/tv_start_pid_sorted.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 3d9502b00c..0000000000 --- a/lib/tv/doc/src/tv_start_system.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 38b69deb8e..0000000000 --- a/lib/tv/doc/src/tv_start_system_unreadable.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9c7cb042ff..0000000000 --- a/lib/tv/doc/src/tv_table_browser.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 547497487d..0000000000 --- a/lib/tv/doc/src/tv_table_browser_updated.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 1786426f4d..0000000000 --- a/lib/tv/doc/src/tv_table_loaded.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index fd69e3cc58..0000000000 --- a/lib/tv/doc/src/tv_table_sorted.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 96af52360e..0000000000 --- a/lib/tv/doc/src/warning.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 8d06e98065..0000000000 --- a/lib/tv/priv/erlang.gif +++ /dev/null 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 Binary files differdeleted file mode 100644 index 44daac2912..0000000000 --- a/lib/tv/priv/tv.gif +++ /dev/null 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 |