diff --git a/vendor/github.com/leethomason/tinyxml2/.gitignore b/vendor/github.com/leethomason/tinyxml2/.gitignore index ca32242..1456145 100644 --- a/vendor/github.com/leethomason/tinyxml2/.gitignore +++ b/vendor/github.com/leethomason/tinyxml2/.gitignore @@ -7,6 +7,8 @@ tinyxml2/tinyxml2-cbp/bin/ tinyxml2/tinyxml2-cbp/obj/ tinyxml2/bin/ tinyxml2/temp/ +.artifacts/ +.projects/ *.sdf *.suo *.opensdf @@ -15,4 +17,4 @@ tinyxml2/temp/ *.layout *.o *.vc.db -*.vc.opendb \ No newline at end of file +*.vc.opendb diff --git a/vendor/github.com/leethomason/tinyxml2/CMakeLists.txt b/vendor/github.com/leethomason/tinyxml2/CMakeLists.txt index cec4470..a64e68e 100644 --- a/vendor/github.com/leethomason/tinyxml2/CMakeLists.txt +++ b/vendor/github.com/leethomason/tinyxml2/CMakeLists.txt @@ -21,13 +21,13 @@ include(CTest) ################################ # set lib version here -set(GENERIC_LIB_VERSION "5.0.1") -set(GENERIC_LIB_SOVERSION "5") +set(GENERIC_LIB_VERSION "6.2.0") +set(GENERIC_LIB_SOVERSION "6") ################################ # Add definitions -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DTINYXML2_DEBUG") ################################ # Add targets @@ -138,7 +138,7 @@ if(BUILD_TESTING AND BUILD_TESTS) COMMENT "Configuring xmltest resources directory: ${CMAKE_BINARY_DIR}/resources" ) - add_test(NAME xmltest COMMAND xmltest) + add_test(NAME xmltest COMMAND xmltest WORKING_DIRECTORY $) endif() install(FILES tinyxml2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) @@ -170,7 +170,7 @@ file(WRITE install(FILES ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake - DESTINATION lib/cmake/${CMAKE_PROJECT_NAME}) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}) install(EXPORT ${CMAKE_PROJECT_NAME}Targets - DESTINATION lib/cmake/${CMAKE_PROJECT_NAME}) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}) diff --git a/vendor/github.com/leethomason/tinyxml2/Makefile b/vendor/github.com/leethomason/tinyxml2/Makefile index eba6fef..66b1bc9 100644 --- a/vendor/github.com/leethomason/tinyxml2/Makefile +++ b/vendor/github.com/leethomason/tinyxml2/Makefile @@ -1,19 +1,74 @@ +# For GNU conventions and targets see https://www.gnu.org/prep/standards/standards.html +# Using GNU standards makes it easier for some users to keep doing what they are used to. + +# 'mkdir -p' is non-portable, but it is widely supported. A portable solution +# is elusive due to race conditions on testing the directory and creating it. +# Anemic toolchain users can sidestep the problem using MKDIR="mkdir". + +AR = ar +ARFLAGS = cr +RM = rm -f +RANLIB = ranlib +MKDIR = mkdir -p + +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) +INSTALL_DATA = $(INSTALL) -m 644 + +prefix = /usr/local +bindir = $(prefix)/bin +libdir = $(prefix)/lib +includedir = $(prefix)/include + all: xmltest staticlib rebuild: clean all xmltest: xmltest.cpp libtinyxml2.a +effc: + gcc -Werror -Wall -Wextra -Wshadow -Wpedantic -Wformat-nonliteral \ + -Wformat-security -Wswitch-default -Wuninitialized -Wundef \ + -Wpointer-arith -Woverloaded-virtual -Wctor-dtor-privacy \ + -Wnon-virtual-dtor -Woverloaded-virtual -Wsign-promo \ + -Wno-unused-parameter -Weffc++ xmltest.cpp tinyxml2.cpp -o xmltest + clean: - $(RM) *.o xmltest libtinyxml2.a - + -$(RM) *.o xmltest libtinyxml2.a + +# Standard GNU target +distclean: + -$(RM) *.o xmltest libtinyxml2.a + test: clean xmltest ./xmltest +# Standard GNU target +check: clean xmltest + ./xmltest + staticlib: libtinyxml2.a libtinyxml2.a: tinyxml2.o - $(AR) $(ARFLAGS)s $@ $^ - + $(AR) $(ARFLAGS) $@ $^ + $(RANLIB) $@ + tinyxml2.o: tinyxml2.cpp tinyxml2.h +directories: + $(MKDIR) $(DESTDIR)$(prefix) + $(MKDIR) $(DESTDIR)$(bindir) + $(MKDIR) $(DESTDIR)$(libdir) + $(MKDIR) $(DESTDIR)$(includedir) + +# Standard GNU target. +install: xmltest staticlib directories + $(INSTALL_PROGRAM) xmltest $(DESTDIR)$(bindir)/xmltest + $(INSTALL_DATA) tinyxml2.h $(DESTDIR)$(includedir)/tinyxml2.h + $(INSTALL_DATA) libtinyxml2.a $(DESTDIR)$(libdir)/libtinyxml2.a + +# Standard GNU target +uninstall: + $(RM) $(DESTDIR)$(bindir)/xmltest + $(RM) $(DESTDIR)$(includedir)/tinyxml2.h + $(RM) $(DESTDIR)$(libdir)/libtinyxml2.a diff --git a/vendor/github.com/leethomason/tinyxml2/appveyor.yml b/vendor/github.com/leethomason/tinyxml2/appveyor.yml index 0c60b67..0d5e86b 100644 --- a/vendor/github.com/leethomason/tinyxml2/appveyor.yml +++ b/vendor/github.com/leethomason/tinyxml2/appveyor.yml @@ -2,6 +2,9 @@ before_build: - cmake . build_script: + - msbuild tinyxml2.sln /m /p:Configuration=Debug /t:ALL_BUILD - msbuild tinyxml2.sln /m /p:Configuration=Release /t:ALL_BUILD - - cd Release + - cd %APPVEYOR_BUILD_FOLDER%\Debug + - xmltest.exe + - cd %APPVEYOR_BUILD_FOLDER%\Release - xmltest.exe diff --git a/vendor/github.com/leethomason/tinyxml2/contrib/html5-printer.cpp b/vendor/github.com/leethomason/tinyxml2/contrib/html5-printer.cpp index 7728b69..e9a423d 100644 --- a/vendor/github.com/leethomason/tinyxml2/contrib/html5-printer.cpp +++ b/vendor/github.com/leethomason/tinyxml2/contrib/html5-printer.cpp @@ -40,7 +40,7 @@ distribution. */ -#include +#include "../tinyxml2.h" #include #if defined (_MSC_VER) diff --git a/vendor/github.com/leethomason/tinyxml2/docs/_example_1.html b/vendor/github.com/leethomason/tinyxml2/docs/_example_1.html new file mode 100644 index 0000000..29362d6 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/_example_1.html @@ -0,0 +1,75 @@ + + + + + + + +TinyXML-2: Load an XML File + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Load an XML File
+
+
+
Basic XML file loading. The basic syntax to load an XML file from disk and check for an error. (ErrorID() will return 0 for no error.)
int example_1()
{
XMLDocument doc;
doc.LoadFile( "resources/dream.xml" );
return doc.ErrorID();
}

+
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/_example_2.html b/vendor/github.com/leethomason/tinyxml2/docs/_example_2.html new file mode 100644 index 0000000..e4fe6c6 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/_example_2.html @@ -0,0 +1,75 @@ + + + + + + + +TinyXML-2: Parse an XML from char buffer + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Parse an XML from char buffer
+
+
+
Basic XML string parsing. The basic syntax to parse an XML for a char* and check for an error. (ErrorID() will return 0 for no error.)
int example_2()
{
static const char* xml = "<element/>";
XMLDocument doc;
doc.Parse( xml );
return doc.ErrorID();
}

+
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/_example_3.html b/vendor/github.com/leethomason/tinyxml2/docs/_example_3.html new file mode 100644 index 0000000..34551d3 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/_example_3.html @@ -0,0 +1,104 @@ + + + + + + + +TinyXML-2: Get information out of XML + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Get information out of XML
+
+
+
In this example, we navigate a simple XML file, and read some interesting text. Note that this example doesn't use error checking; working code should check for null pointers when walking an XML tree, or use XMLHandle.

+

(The XML is an excerpt from "dream.xml").

+

int example_3()
{
static const char* xml =
"<?xml version=\"1.0\"?>"
"<!DOCTYPE PLAY SYSTEM \"play.dtd\">"
"<PLAY>"
"<TITLE>A Midsummer Night's Dream</TITLE>"
"</PLAY>";

+

The structure of the XML file is:

+
    +
  • +(declaration)
  • +
  • +(dtd stuff)
  • +
  • +Element "PLAY"
      +
    • +Element "TITLE"
        +
      • +Text "A Midsummer Night's Dream"
      • +
      +
    • +
    +
  • +
+

For this example, we want to print out the title of the play. The text of the title (what we want) is child of the "TITLE" element which is a child of the "PLAY" element.

+

We want to skip the declaration and dtd, so the method FirstChildElement() is a good choice. The FirstChildElement() of the Document is the "PLAY" Element, the FirstChildElement() of the "PLAY" Element is the "TITLE" Element.

+

XMLDocument doc;
doc.Parse( xml );
XMLElement* titleElement = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" );

+

We can then use the convenience function GetText() to get the title of the play.

+

const char* title = titleElement->GetText();
printf( "Name of play (1): %s\n", title );

+

Text is just another Node in the XML DOM. And in fact you should be a little cautious with it, as text nodes can contain elements.

+
Consider: A Midsummer Night's <b>Dream</b>
+

It is more correct to actually query the Text Node if in doubt:

+

XMLText* textNode = titleElement->FirstChild()->ToText();
title = textNode->Value();
printf( "Name of play (2): %s\n", title );

+

Noting that here we use FirstChild() since we are looking for XMLText, not an element, and ToText() is a cast from a Node to a XMLText.

+
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/_example_4.html b/vendor/github.com/leethomason/tinyxml2/docs/_example_4.html new file mode 100644 index 0000000..ad871b9 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/_example_4.html @@ -0,0 +1,81 @@ + + + + + + + +TinyXML-2: Read attributes and text information. + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Read attributes and text information.
+
+
+

There are fundamentally 2 ways of writing a key-value pair into an XML file. (Something that's always annoyed me about XML.) Either by using attributes, or by writing the key name into an element and the value into the text node wrapped by the element. Both approaches are illustrated in this example, which shows two ways to encode the value "2" into the key "v":

+

bool example_4()
{
static const char* xml =
"<information>"
" <attributeApproach v='2' />"
" <textApproach>"
" <v>2</v>"
" </textApproach>"
"</information>";

+

TinyXML-2 has accessors for both approaches.

+

When using an attribute, you navigate to the XMLElement with that attribute and use the QueryIntAttribute() group of methods. (Also QueryFloatAttribute(), etc.)

+

XMLElement* attributeApproachElement = doc.FirstChildElement()->FirstChildElement( "attributeApproach" );
attributeApproachElement->QueryIntAttribute( "v", &v0 );

+

When using the text approach, you need to navigate down one more step to the XMLElement that contains the text. Note the extra FirstChildElement( "v" ) in the code below. The value of the text can then be safely queried with the QueryIntText() group of methods. (Also QueryFloatText(), etc.)

+

XMLElement* textApproachElement = doc.FirstChildElement()->FirstChildElement( "textApproach" );
textApproachElement->FirstChildElement( "v" )->QueryIntText( &v1 );

+
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/annotated.html b/vendor/github.com/leethomason/tinyxml2/docs/annotated.html new file mode 100644 index 0000000..795cea1 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/annotated.html @@ -0,0 +1,91 @@ + + + + + + + +TinyXML-2: Class List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + +
 Ntinyxml2
 CXMLAttribute
 CXMLComment
 CXMLConstHandle
 CXMLDeclaration
 CXMLDocument
 CXMLElement
 CXMLHandle
 CXMLNode
 CXMLPrinter
 CXMLText
 CXMLUnknown
 CXMLVisitor
+
+
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/bc_s.png b/vendor/github.com/leethomason/tinyxml2/docs/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/bc_s.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/bdwn.png b/vendor/github.com/leethomason/tinyxml2/docs/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/bdwn.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classes.html b/vendor/github.com/leethomason/tinyxml2/docs/classes.html new file mode 100644 index 0000000..e7d20bc --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classes.html @@ -0,0 +1,83 @@ + + + + + + + +TinyXML-2: Class Index + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+ + + + + + +
  x  
+
XMLComment (tinyxml2)   XMLDocument (tinyxml2)   XMLNode (tinyxml2)   XMLUnknown (tinyxml2)   
XMLConstHandle (tinyxml2)   XMLElement (tinyxml2)   XMLPrinter (tinyxml2)   XMLVisitor (tinyxml2)   
XMLAttribute (tinyxml2)   XMLDeclaration (tinyxml2)   XMLHandle (tinyxml2)   XMLText (tinyxml2)   
+ +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_attribute-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_attribute-members.html new file mode 100644 index 0000000..e25e284 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_attribute-members.html @@ -0,0 +1,103 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLAttribute Member List
+
+ + + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_attribute.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_attribute.html new file mode 100644 index 0000000..2e82a10 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_attribute.html @@ -0,0 +1,223 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLAttribute Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLAttribute Class Reference
+
+
+ +

#include <tinyxml2.h>

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

+Public Member Functions

+const char * Name () const
 The name of the attribute.
 
+const char * Value () const
 The value of the attribute.
 
+int GetLineNum () const
 Gets the line number the attribute is in, if the document was parsed from a file.
 
+const XMLAttributeNext () const
 The next attribute in the list.
 
int IntValue () const
 
+unsigned UnsignedValue () const
 Query as an unsigned integer. See IntValue()
 
+bool BoolValue () const
 Query as a boolean. See IntValue()
 
+double DoubleValue () const
 Query as a double. See IntValue()
 
+float FloatValue () const
 Query as a float. See IntValue()
 
XMLError QueryIntValue (int *value) const
 
+XMLError QueryUnsignedValue (unsigned int *value) const
 See QueryIntValue.
 
+XMLError QueryInt64Value (int64_t *value) const
 See QueryIntValue.
 
+XMLError QueryBoolValue (bool *value) const
 See QueryIntValue.
 
+XMLError QueryDoubleValue (double *value) const
 See QueryIntValue.
 
+XMLError QueryFloatValue (float *value) const
 See QueryIntValue.
 
+void SetAttribute (const char *value)
 Set the attribute to a string value.
 
+void SetAttribute (int value)
 Set the attribute to value.
 
+void SetAttribute (unsigned value)
 Set the attribute to value.
 
+void SetAttribute (int64_t value)
 Set the attribute to value.
 
+void SetAttribute (bool value)
 Set the attribute to value.
 
+void SetAttribute (double value)
 Set the attribute to value.
 
+void SetAttribute (float value)
 Set the attribute to value.
 
+

Detailed Description

+

An attribute is a name-value pair. Elements have an arbitrary number of attributes, each with a unique name.

+
Note
The attributes are not XMLNodes. You may only query the Next() attribute in a list.
+

Member Function Documentation

+ +

◆ IntValue()

+ +
+
+ + + + + +
+ + + + + + + +
int tinyxml2::XMLAttribute::IntValue () const
+
+inline
+
+

IntValue interprets the attribute as an integer, and returns the value. If the value isn't an integer, 0 will be returned. There is no error checking; use QueryIntValue() if you need error checking.

+ +
+
+ +

◆ QueryIntValue()

+ +
+
+ + + + + + + + +
XMLError tinyxml2::XMLAttribute::QueryIntValue (int * value) const
+
+

QueryIntValue interprets the attribute as an integer, and returns the value in the provided parameter. The function will return XML_SUCCESS on success, and XML_WRONG_ATTRIBUTE_TYPE if the conversion is not successful.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_comment-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_comment-members.html new file mode 100644 index 0000000..e4e8d8a --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_comment-members.html @@ -0,0 +1,113 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLComment Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLComment, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLCommentvirtual
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) consttinyxml2::XMLCommentvirtual
ShallowEqual(const XMLNode *compare) consttinyxml2::XMLCommentvirtual
ToComment()tinyxml2::XMLCommentinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_comment.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_comment.html new file mode 100644 index 0000000..1c60c12 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_comment.html @@ -0,0 +1,300 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLComment Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLComment Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLComment:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
virtual bool Accept (XMLVisitor *visitor) const
 
virtual XMLNodeShallowClone (XMLDocument *document) const
 
virtual bool ShallowEqual (const XMLNode *compare) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

An XML Comment.

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLComment::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLComment::ShallowClone (XMLDocumentdocument) const
+
+virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLComment::ShallowEqual (const XMLNodecompare) const
+
+virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_comment.png b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_comment.png new file mode 100644 index 0000000..3a076f0 Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_comment.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_const_handle-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_const_handle-members.html new file mode 100644 index 0000000..7f02f67 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_const_handle-members.html @@ -0,0 +1,81 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLConstHandle Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLConstHandle, including all inherited members.

+ +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_const_handle.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_const_handle.html new file mode 100644 index 0000000..4f5b6c5 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_const_handle.html @@ -0,0 +1,87 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLConstHandle Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLConstHandle Class Reference
+
+
+ +

#include <tinyxml2.h>

+

Detailed Description

+

A variant of the XMLHandle class for working with const XMLNodes and Documents. It is the same in all regards, except for the 'const' qualifiers. See XMLHandle for API.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_declaration-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_declaration-members.html new file mode 100644 index 0000000..416c830 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_declaration-members.html @@ -0,0 +1,113 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLDeclaration Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLDeclaration, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLDeclarationvirtual
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) consttinyxml2::XMLDeclarationvirtual
ShallowEqual(const XMLNode *compare) consttinyxml2::XMLDeclarationvirtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLDeclarationinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_declaration.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_declaration.html new file mode 100644 index 0000000..a3e5d66 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_declaration.html @@ -0,0 +1,302 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLDeclaration Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLDeclaration Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLDeclaration:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
virtual bool Accept (XMLVisitor *visitor) const
 
virtual XMLNodeShallowClone (XMLDocument *document) const
 
virtual bool ShallowEqual (const XMLNode *compare) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

In correct XML the declaration is the first entry in the file.

    <?xml version="1.0" standalone="yes"?>
+

TinyXML-2 will happily read or write files without a declaration, however.

+

The text of the declaration isn't interpreted. It is parsed and written as a string.

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLDeclaration::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLDeclaration::ShallowClone (XMLDocumentdocument) const
+
+virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLDeclaration::ShallowEqual (const XMLNodecompare) const
+
+virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_declaration.png b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_declaration.png new file mode 100644 index 0000000..c7aa631 Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_declaration.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_document-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_document-members.html new file mode 100644 index 0000000..e3d048d --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_document-members.html @@ -0,0 +1,136 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLDocument Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLDocument, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLDocumentvirtual
Clear()tinyxml2::XMLDocument
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeepCopy(XMLDocument *target) consttinyxml2::XMLDocument
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
DeleteNode(XMLNode *node)tinyxml2::XMLDocument
Error() consttinyxml2::XMLDocumentinline
ErrorID() consttinyxml2::XMLDocumentinline
ErrorLineNum() consttinyxml2::XMLDocumentinline
ErrorStr() consttinyxml2::XMLDocument
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
HasBOM() consttinyxml2::XMLDocumentinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
LoadFile(const char *filename)tinyxml2::XMLDocument
LoadFile(FILE *)tinyxml2::XMLDocument
NewComment(const char *comment)tinyxml2::XMLDocument
NewDeclaration(const char *text=0)tinyxml2::XMLDocument
NewElement(const char *name)tinyxml2::XMLDocument
NewText(const char *text)tinyxml2::XMLDocument
NewUnknown(const char *text)tinyxml2::XMLDocument
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
Parse(const char *xml, size_t nBytes=(size_t)(-1))tinyxml2::XMLDocument
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
Print(XMLPrinter *streamer=0) consttinyxml2::XMLDocument
PrintError() consttinyxml2::XMLDocument
RootElement()tinyxml2::XMLDocumentinline
SaveFile(const char *filename, bool compact=false)tinyxml2::XMLDocument
SaveFile(FILE *fp, bool compact=false)tinyxml2::XMLDocument
SetBOM(bool useBOM)tinyxml2::XMLDocumentinline
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *) consttinyxml2::XMLDocumentinlinevirtual
ShallowEqual(const XMLNode *) consttinyxml2::XMLDocumentinlinevirtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLDocumentinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
XMLDocument(bool processEntities=true, Whitespace whitespaceMode=PRESERVE_WHITESPACE)tinyxml2::XMLDocument
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_document.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_document.html new file mode 100644 index 0000000..61d46e1 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_document.html @@ -0,0 +1,742 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLDocument Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLDocument Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLDocument:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

XMLDocument (bool processEntities=true, Whitespace whitespaceMode=PRESERVE_WHITESPACE)
 constructor
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
XMLError Parse (const char *xml, size_t nBytes=(size_t)(-1))
 
XMLError LoadFile (const char *filename)
 
XMLError LoadFile (FILE *)
 
XMLError SaveFile (const char *filename, bool compact=false)
 
XMLError SaveFile (FILE *fp, bool compact=false)
 
bool HasBOM () const
 
void SetBOM (bool useBOM)
 
XMLElementRootElement ()
 
void Print (XMLPrinter *streamer=0) const
 
virtual bool Accept (XMLVisitor *visitor) const
 
XMLElementNewElement (const char *name)
 
XMLCommentNewComment (const char *comment)
 
XMLTextNewText (const char *text)
 
XMLDeclarationNewDeclaration (const char *text=0)
 
XMLUnknownNewUnknown (const char *text)
 
void DeleteNode (XMLNode *node)
 
+bool Error () const
 Return true if there was an error parsing the document.
 
+XMLError ErrorID () const
 Return the errorID.
 
const char * ErrorStr () const
 
+void PrintError () const
 A (trivial) utility function that prints the ErrorStr() to stdout.
 
+int ErrorLineNum () const
 Return the line where the error occured, or zero if unknown.
 
+void Clear ()
 Clear the document, resetting it to the initial state.
 
void DeepCopy (XMLDocument *target) const
 
virtual XMLNodeShallowClone (XMLDocument *) const
 
virtual bool ShallowEqual (const XMLNode *) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

A Document binds together all the functionality. It can be saved, loaded, and printed to the screen. All Nodes are connected and allocated to a Document. If the Document is deleted, all its Nodes are also deleted.

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLDocument::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ DeepCopy()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLDocument::DeepCopy (XMLDocumenttarget) const
+
+

Copies this document to a target document. The target will be completely cleared before the copy. If you want to copy a sub-tree, see XMLNode::DeepClone().

+

NOTE: that the 'target' must be non-null.

+ +
+
+ +

◆ DeleteNode()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLDocument::DeleteNode (XMLNodenode)
+
+

Delete a node associated with this document. It will be unlinked from the DOM.

+ +
+
+ +

◆ ErrorStr()

+ +
+
+ + + + + + + +
const char* tinyxml2::XMLDocument::ErrorStr () const
+
+

Returns a "long form" error description. A hopefully helpful diagnostic with location, line number, and/or additional info.

+ +
+
+ +

◆ HasBOM()

+ +
+
+ + + + + +
+ + + + + + + +
bool tinyxml2::XMLDocument::HasBOM () const
+
+inline
+
+

Returns true if this document has a leading Byte Order Mark of UTF8.

+ +
+
+ +

◆ LoadFile() [1/2]

+ +
+
+ + + + + + + + +
XMLError tinyxml2::XMLDocument::LoadFile (const char * filename)
+
+

Load an XML file from disk. Returns XML_SUCCESS (0) on success, or an errorID.

+ +
+
+ +

◆ LoadFile() [2/2]

+ +
+
+ + + + + + + + +
XMLError tinyxml2::XMLDocument::LoadFile (FILE * )
+
+

Load an XML file from disk. You are responsible for providing and closing the FILE*.

+

NOTE: The file should be opened as binary ("rb") not text in order for TinyXML-2 to correctly do newline normalization.

+

Returns XML_SUCCESS (0) on success, or an errorID.

+ +
+
+ +

◆ NewComment()

+ +
+
+ + + + + + + + +
XMLComment* tinyxml2::XMLDocument::NewComment (const char * comment)
+
+

Create a new Comment associated with this Document. The memory for the Comment is managed by the Document.

+ +
+
+ +

◆ NewDeclaration()

+ +
+
+ + + + + + + + +
XMLDeclaration* tinyxml2::XMLDocument::NewDeclaration (const char * text = 0)
+
+

Create a new Declaration associated with this Document. The memory for the object is managed by the Document.

+

If the 'text' param is null, the standard declaration is used.:

    <?xml version="1.0" encoding="UTF-8"?>
+
+
+
+ +

◆ NewElement()

+ +
+
+ + + + + + + + +
XMLElement* tinyxml2::XMLDocument::NewElement (const char * name)
+
+

Create a new Element associated with this Document. The memory for the Element is managed by the Document.

+ +
+
+ +

◆ NewText()

+ +
+
+ + + + + + + + +
XMLText* tinyxml2::XMLDocument::NewText (const char * text)
+
+

Create a new Text associated with this Document. The memory for the Text is managed by the Document.

+ +
+
+ +

◆ NewUnknown()

+ +
+
+ + + + + + + + +
XMLUnknown* tinyxml2::XMLDocument::NewUnknown (const char * text)
+
+

Create a new Unknown associated with this Document. The memory for the object is managed by the Document.

+ +
+
+ +

◆ Parse()

+ +
+
+ + + + + + + + + + + + + + + + + + +
XMLError tinyxml2::XMLDocument::Parse (const char * xml,
size_t nBytes = (size_t)(-1) 
)
+
+

Parse an XML file from a character string. Returns XML_SUCCESS (0) on success, or an errorID.

+

You may optionally pass in the 'nBytes', which is the number of bytes which will be parsed. If not specified, TinyXML-2 will assume 'xml' points to a null terminated string.

+ +
+
+ +

◆ Print()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLDocument::Print (XMLPrinterstreamer = 0) const
+
+

Print the Document. If the Printer is not provided, it will print to stdout. If you provide Printer, this can print to a file:

XMLPrinter printer( fp );
+doc.Print( &printer );
+

Or you can use a printer to print to memory:

XMLPrinter printer;
+doc.Print( &printer );
+// printer.CStr() has a const char* to the XML
+
+
+
+ +

◆ RootElement()

+ +
+
+ + + + + +
+ + + + + + + +
XMLElement* tinyxml2::XMLDocument::RootElement ()
+
+inline
+
+

Return the root element of DOM. Equivalent to FirstChildElement(). To get the first node, use FirstChild().

+ +
+
+ +

◆ SaveFile() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
XMLError tinyxml2::XMLDocument::SaveFile (const char * filename,
bool compact = false 
)
+
+

Save the XML file to disk. Returns XML_SUCCESS (0) on success, or an errorID.

+ +
+
+ +

◆ SaveFile() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
XMLError tinyxml2::XMLDocument::SaveFile (FILE * fp,
bool compact = false 
)
+
+

Save the XML file to disk. You are responsible for providing and closing the FILE*.

+

Returns XML_SUCCESS (0) on success, or an errorID.

+ +
+
+ +

◆ SetBOM()

+ +
+
+ + + + + +
+ + + + + + + + +
void tinyxml2::XMLDocument::SetBOM (bool useBOM)
+
+inline
+
+

Sets whether to write the BOM when writing the file.

+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLDocument::ShallowClone (XMLDocumentdocument) const
+
+inlinevirtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLDocument::ShallowEqual (const XMLNodecompare) const
+
+inlinevirtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_document.png b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_document.png new file mode 100644 index 0000000..4fcf9f4 Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_document.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_element-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_element-members.html new file mode 100644 index 0000000..251fbf7 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_element-members.html @@ -0,0 +1,158 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLElement Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLElement, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLElementvirtual
Attribute(const char *name, const char *value=0) consttinyxml2::XMLElement
BoolAttribute(const char *name, bool defaultValue=false) consttinyxml2::XMLElement
BoolText(bool defaultValue=false) consttinyxml2::XMLElement
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteAttribute(const char *name)tinyxml2::XMLElement
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
DoubleAttribute(const char *name, double defaultValue=0) consttinyxml2::XMLElement
DoubleText(double defaultValue=0) consttinyxml2::XMLElement
FindAttribute(const char *name) consttinyxml2::XMLElement
FirstAttribute() consttinyxml2::XMLElementinline
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
FloatAttribute(const char *name, float defaultValue=0) consttinyxml2::XMLElement
FloatText(float defaultValue=0) consttinyxml2::XMLElement
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetText() consttinyxml2::XMLElement
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
Int64Attribute(const char *name, int64_t defaultValue=0) consttinyxml2::XMLElement
Int64Text(int64_t defaultValue=0) consttinyxml2::XMLElement
IntAttribute(const char *name, int defaultValue=0) consttinyxml2::XMLElement
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
Name() consttinyxml2::XMLElementinline
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
QueryAttribute(const char *name, int *value) consttinyxml2::XMLElementinline
QueryBoolAttribute(const char *name, bool *value) consttinyxml2::XMLElementinline
QueryBoolText(bool *bval) consttinyxml2::XMLElement
QueryDoubleAttribute(const char *name, double *value) consttinyxml2::XMLElementinline
QueryDoubleText(double *dval) consttinyxml2::XMLElement
QueryFloatAttribute(const char *name, float *value) consttinyxml2::XMLElementinline
QueryFloatText(float *fval) consttinyxml2::XMLElement
QueryInt64Attribute(const char *name, int64_t *value) consttinyxml2::XMLElementinline
QueryInt64Text(int64_t *uval) consttinyxml2::XMLElement
QueryIntAttribute(const char *name, int *value) consttinyxml2::XMLElementinline
QueryIntText(int *ival) consttinyxml2::XMLElement
QueryUnsignedAttribute(const char *name, unsigned int *value) consttinyxml2::XMLElementinline
QueryUnsignedText(unsigned *uval) consttinyxml2::XMLElement
SetAttribute(const char *name, const char *value)tinyxml2::XMLElementinline
SetAttribute(const char *name, int value)tinyxml2::XMLElementinline
SetAttribute(const char *name, unsigned value)tinyxml2::XMLElementinline
SetAttribute(const char *name, int64_t value)tinyxml2::XMLElementinline
SetAttribute(const char *name, bool value)tinyxml2::XMLElementinline
SetAttribute(const char *name, double value)tinyxml2::XMLElementinline
SetAttribute(const char *name, float value)tinyxml2::XMLElementinline
SetName(const char *str, bool staticMem=false)tinyxml2::XMLElementinline
SetText(const char *inText)tinyxml2::XMLElement
SetText(int value)tinyxml2::XMLElement
SetText(unsigned value)tinyxml2::XMLElement
SetText(int64_t value)tinyxml2::XMLElement
SetText(bool value)tinyxml2::XMLElement
SetText(double value)tinyxml2::XMLElement
SetText(float value)tinyxml2::XMLElement
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) consttinyxml2::XMLElementvirtual
ShallowEqual(const XMLNode *compare) consttinyxml2::XMLElementvirtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLElementinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
UnsignedAttribute(const char *name, unsigned defaultValue=0) consttinyxml2::XMLElement
UnsignedText(unsigned defaultValue=0) consttinyxml2::XMLElement
Value() consttinyxml2::XMLNode
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_element.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_element.html new file mode 100644 index 0000000..1b4af4e --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_element.html @@ -0,0 +1,708 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLElement Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLElement Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLElement:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+const char * Name () const
 Get the name of an element (which is the Value() of the node.)
 
+void SetName (const char *str, bool staticMem=false)
 Set the name of the element.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
virtual bool Accept (XMLVisitor *visitor) const
 
const char * Attribute (const char *name, const char *value=0) const
 
int IntAttribute (const char *name, int defaultValue=0) const
 
+unsigned UnsignedAttribute (const char *name, unsigned defaultValue=0) const
 See IntAttribute()
 
+int64_t Int64Attribute (const char *name, int64_t defaultValue=0) const
 See IntAttribute()
 
+bool BoolAttribute (const char *name, bool defaultValue=false) const
 See IntAttribute()
 
+double DoubleAttribute (const char *name, double defaultValue=0) const
 See IntAttribute()
 
+float FloatAttribute (const char *name, float defaultValue=0) const
 See IntAttribute()
 
XMLError QueryIntAttribute (const char *name, int *value) const
 
+XMLError QueryUnsignedAttribute (const char *name, unsigned int *value) const
 See QueryIntAttribute()
 
+XMLError QueryInt64Attribute (const char *name, int64_t *value) const
 See QueryIntAttribute()
 
+XMLError QueryBoolAttribute (const char *name, bool *value) const
 See QueryIntAttribute()
 
+XMLError QueryDoubleAttribute (const char *name, double *value) const
 See QueryIntAttribute()
 
+XMLError QueryFloatAttribute (const char *name, float *value) const
 See QueryIntAttribute()
 
int QueryAttribute (const char *name, int *value) const
 
+void SetAttribute (const char *name, const char *value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, int value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, unsigned value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, int64_t value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, bool value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, double value)
 Sets the named attribute to value.
 
+void SetAttribute (const char *name, float value)
 Sets the named attribute to value.
 
void DeleteAttribute (const char *name)
 
+const XMLAttributeFirstAttribute () const
 Return the first attribute in the list.
 
+const XMLAttributeFindAttribute (const char *name) const
 Query a specific attribute in the list.
 
const char * GetText () const
 
void SetText (const char *inText)
 
+void SetText (int value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
+void SetText (unsigned value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
+void SetText (int64_t value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
+void SetText (bool value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
+void SetText (double value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
+void SetText (float value)
 Convenience method for setting text inside an element. See SetText() for important limitations.
 
XMLError QueryIntText (int *ival) const
 
+XMLError QueryUnsignedText (unsigned *uval) const
 See QueryIntText()
 
+XMLError QueryInt64Text (int64_t *uval) const
 See QueryIntText()
 
+XMLError QueryBoolText (bool *bval) const
 See QueryIntText()
 
+XMLError QueryDoubleText (double *dval) const
 See QueryIntText()
 
+XMLError QueryFloatText (float *fval) const
 See QueryIntText()
 
+unsigned UnsignedText (unsigned defaultValue=0) const
 See QueryIntText()
 
+int64_t Int64Text (int64_t defaultValue=0) const
 See QueryIntText()
 
+bool BoolText (bool defaultValue=false) const
 See QueryIntText()
 
+double DoubleText (double defaultValue=0) const
 See QueryIntText()
 
+float FloatText (float defaultValue=0) const
 See QueryIntText()
 
virtual XMLNodeShallowClone (XMLDocument *document) const
 
virtual bool ShallowEqual (const XMLNode *compare) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

The element is a container class. It has a value, the element name, and can contain other elements, text, comments, and unknowns. Elements also contain an arbitrary number of attributes.

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLElement::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ Attribute()

+ +
+
+ + + + + + + + + + + + + + + + + + +
const char* tinyxml2::XMLElement::Attribute (const char * name,
const char * value = 0 
) const
+
+

Given an attribute name, Attribute() returns the value for the attribute of that name, or null if none exists. For example:

+
const char* value = ele->Attribute( "foo" );
+

The 'value' parameter is normally null. However, if specified, the attribute will only be returned if the 'name' and 'value' match. This allow you to write code:

+
if ( ele->Attribute( "foo", "bar" ) ) callFooIsBar();
+

rather than:

if ( ele->Attribute( "foo" ) ) {
+    if ( strcmp( ele->Attribute( "foo" ), "bar" ) == 0 ) callFooIsBar();
+}
+
+
+
+ +

◆ DeleteAttribute()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLElement::DeleteAttribute (const char * name)
+
+

Delete an attribute.

+ +
+
+ +

◆ GetText()

+ +
+
+ + + + + + + +
const char* tinyxml2::XMLElement::GetText () const
+
+

Convenience function for easy access to the text inside an element. Although easy and concise, GetText() is limited compared to getting the XMLText child and accessing it directly.

+

If the first child of 'this' is a XMLText, the GetText() returns the character string of the Text node, else null is returned.

+

This is a convenient method for getting the text of simple contained text:

<foo>This is text</foo>
+    const char* str = fooElement->GetText();
+

'str' will be a pointer to "This is text".

+

Note that this function can be misleading. If the element foo was created from this XML:

    <foo><b>This is text</b></foo>
+

then the value of str would be null. The first child node isn't a text node, it is another element. From this XML:

    <foo>This is <b>text</b></foo>
+

GetText() will return "This is ".

+ +
+
+ +

◆ IntAttribute()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int tinyxml2::XMLElement::IntAttribute (const char * name,
int defaultValue = 0 
) const
+
+

Given an attribute name, IntAttribute() returns the value of the attribute interpreted as an integer. The default value will be returned if the attribute isn't present, or if there is an error. (For a method with error checking, see QueryIntAttribute()).

+ +
+
+ +

◆ QueryAttribute()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int tinyxml2::XMLElement::QueryAttribute (const char * name,
int * value 
) const
+
+inline
+
+

Given an attribute name, QueryAttribute() returns XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion can't be performed, or XML_NO_ATTRIBUTE if the attribute doesn't exist. It is overloaded for the primitive types, and is a generally more convenient replacement of QueryIntAttribute() and related functions.

+

If successful, the result of the conversion will be written to 'value'. If not successful, nothing will be written to 'value'. This allows you to provide default value:

+
int value = 10;
+QueryAttribute( "foo", &value );        // if "foo" isn't found, value will still be 10
+
+
+
+ +

◆ QueryIntAttribute()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
XMLError tinyxml2::XMLElement::QueryIntAttribute (const char * name,
int * value 
) const
+
+inline
+
+

Given an attribute name, QueryIntAttribute() returns XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion can't be performed, or XML_NO_ATTRIBUTE if the attribute doesn't exist. If successful, the result of the conversion will be written to 'value'. If not successful, nothing will be written to 'value'. This allows you to provide default value:

+
int value = 10;
+QueryIntAttribute( "foo", &value );     // if "foo" isn't found, value will still be 10
+
+
+
+ +

◆ QueryIntText()

+ +
+
+ + + + + + + + +
XMLError tinyxml2::XMLElement::QueryIntText (int * ival) const
+
+

Convenience method to query the value of a child text node. This is probably best shown by example. Given you have a document is this form:

    <point>
+        <x>1</x>
+        <y>1.4</y>
+    </point>
+

The QueryIntText() and similar functions provide a safe and easier way to get to the "value" of x and y.

+
    int x = 0;
+    float y = 0;    // types of x and y are contrived for example
+    const XMLElement* xElement = pointElement->FirstChildElement( "x" );
+    const XMLElement* yElement = pointElement->FirstChildElement( "y" );
+    xElement->QueryIntText( &x );
+    yElement->QueryFloatText( &y );
+
Returns
XML_SUCCESS (0) on success, XML_CAN_NOT_CONVERT_TEXT if the text cannot be converted to the requested type, and XML_NO_TEXT_NODE if there is no child text to query.
+ +
+
+ +

◆ SetText()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLElement::SetText (const char * inText)
+
+

Convenience function for easy access to the text inside an element. Although easy and concise, SetText() is limited compared to creating an XMLText child and mutating it directly.

+

If the first child of 'this' is a XMLText, SetText() sets its value to the given string, otherwise it will create a first child that is an XMLText.

+

This is a convenient method for setting the text of simple contained text:

<foo>This is text</foo>
+    fooElement->SetText( "Hullaballoo!" );
+<foo>Hullaballoo!</foo>
+

Note that this function can be misleading. If the element foo was created from this XML:

    <foo><b>This is text</b></foo>
+

then it will not change "This is text", but rather prefix it with a text element:

    <foo>Hullaballoo!<b>This is text</b></foo>
+

For this XML:

    <foo />
+

SetText() will generate

    <foo>Hullaballoo!</foo>
+
+
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLElement::ShallowClone (XMLDocumentdocument) const
+
+virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLElement::ShallowEqual (const XMLNodecompare) const
+
+virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_element.png b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_element.png new file mode 100644 index 0000000..b76dc5b Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_element.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_handle-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_handle-members.html new file mode 100644 index 0000000..ee29d71 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_handle-members.html @@ -0,0 +1,98 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLHandle Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLHandle, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
FirstChild()tinyxml2::XMLHandleinline
FirstChildElement(const char *name=0)tinyxml2::XMLHandleinline
LastChild()tinyxml2::XMLHandleinline
LastChildElement(const char *name=0)tinyxml2::XMLHandleinline
NextSibling()tinyxml2::XMLHandleinline
NextSiblingElement(const char *name=0)tinyxml2::XMLHandleinline
operator=(const XMLHandle &ref)tinyxml2::XMLHandleinline
PreviousSibling()tinyxml2::XMLHandleinline
PreviousSiblingElement(const char *name=0)tinyxml2::XMLHandleinline
ToDeclaration()tinyxml2::XMLHandleinline
ToElement()tinyxml2::XMLHandleinline
ToNode()tinyxml2::XMLHandleinline
ToText()tinyxml2::XMLHandleinline
ToUnknown()tinyxml2::XMLHandleinline
XMLHandle(XMLNode *node)tinyxml2::XMLHandleinline
XMLHandle(XMLNode &node)tinyxml2::XMLHandleinline
XMLHandle(const XMLHandle &ref)tinyxml2::XMLHandleinline
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_handle.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_handle.html new file mode 100644 index 0000000..c97e671 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_handle.html @@ -0,0 +1,189 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLHandle Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLHandle Class Reference
+
+
+ +

#include <tinyxml2.h>

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

+Public Member Functions

XMLHandle (XMLNode *node)
 Create a handle from any node (at any depth of the tree.) This can be a null pointer.
 
XMLHandle (XMLNode &node)
 Create a handle from a node.
 
XMLHandle (const XMLHandle &ref)
 Copy constructor.
 
+XMLHandleoperator= (const XMLHandle &ref)
 Assignment.
 
+XMLHandle FirstChild ()
 Get the first child of this handle.
 
+XMLHandle FirstChildElement (const char *name=0)
 Get the first child element of this handle.
 
+XMLHandle LastChild ()
 Get the last child of this handle.
 
+XMLHandle LastChildElement (const char *name=0)
 Get the last child element of this handle.
 
+XMLHandle PreviousSibling ()
 Get the previous sibling of this handle.
 
+XMLHandle PreviousSiblingElement (const char *name=0)
 Get the previous sibling element of this handle.
 
+XMLHandle NextSibling ()
 Get the next sibling of this handle.
 
+XMLHandle NextSiblingElement (const char *name=0)
 Get the next sibling element of this handle.
 
+XMLNodeToNode ()
 Safe cast to XMLNode. This can return null.
 
+XMLElementToElement ()
 Safe cast to XMLElement. This can return null.
 
+XMLTextToText ()
 Safe cast to XMLText. This can return null.
 
+XMLUnknownToUnknown ()
 Safe cast to XMLUnknown. This can return null.
 
+XMLDeclarationToDeclaration ()
 Safe cast to XMLDeclaration. This can return null.
 
+

Detailed Description

+

A XMLHandle is a class that wraps a node pointer with null checks; this is an incredibly useful thing. Note that XMLHandle is not part of the TinyXML-2 DOM structure. It is a separate utility class.

+

Take an example:

<Document>
+    <Element attributeA = "valueA">
+        <Child attributeB = "value1" />
+        <Child attributeB = "value2" />
+    </Element>
+</Document>
+

Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very easy to write a lot of code that looks like:

+
XMLElement* root = document.FirstChildElement( "Document" );
+if ( root )
+{
+    XMLElement* element = root->FirstChildElement( "Element" );
+    if ( element )
+    {
+        XMLElement* child = element->FirstChildElement( "Child" );
+        if ( child )
+        {
+            XMLElement* child2 = child->NextSiblingElement( "Child" );
+            if ( child2 )
+            {
+                // Finally do something useful.
+

And that doesn't even cover "else" cases. XMLHandle addresses the verbosity of such code. A XMLHandle checks for null pointers so it is perfectly safe and correct to use:

+
XMLHandle docHandle( &document );
+XMLElement* child2 = docHandle.FirstChildElement( "Document" ).FirstChildElement( "Element" ).FirstChildElement().NextSiblingElement();
+if ( child2 )
+{
+    // do something useful
+

Which is MUCH more concise and useful.

+

It is also safe to copy handles - internally they are nothing more than node pointers.

XMLHandle handleCopy = handle;
+

See also XMLConstHandle, which is the same as XMLHandle, but operates on const objects.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_node-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_node-members.html new file mode 100644 index 0000000..b50e248 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_node-members.html @@ -0,0 +1,113 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLNode Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLNode, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) const =0tinyxml2::XMLNodepure virtual
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) const =0tinyxml2::XMLNodepure virtual
ShallowEqual(const XMLNode *compare) const =0tinyxml2::XMLNodepure virtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_node.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_node.html new file mode 100644 index 0000000..7ef3181 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_node.html @@ -0,0 +1,581 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLNode Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLNode Class Referenceabstract
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLNode:
+
+
+ + +tinyxml2::XMLComment +tinyxml2::XMLDeclaration +tinyxml2::XMLDocument +tinyxml2::XMLElement +tinyxml2::XMLText +tinyxml2::XMLUnknown + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
virtual XMLNodeShallowClone (XMLDocument *document) const =0
 
XMLNodeDeepClone (XMLDocument *target) const
 
virtual bool ShallowEqual (const XMLNode *compare) const =0
 
virtual bool Accept (XMLVisitor *visitor) const =0
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

XMLNode is a base class for every object that is in the XML Document Object Model (DOM), except XMLAttributes. Nodes have siblings, a parent, and children which can be navigated. A node is always in a XMLDocument. The type of a XMLNode can be queried, and it can be cast to its more defined type.

+

A XMLDocument allocates memory for all its Nodes. When the XMLDocument gets deleted, all its Nodes will also be deleted.

+
A Document can contain: Element (container or leaf)
+                        Comment (leaf)
+                        Unknown (leaf)
+                        Declaration( leaf )
+
+An Element can contain: Element (container or leaf)
+                        Text    (leaf)
+                        Attributes (not on tree)
+                        Comment (leaf)
+                        Unknown (leaf)

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLNode::Accept (XMLVisitorvisitor) const
+
+pure virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implemented in tinyxml2::XMLDocument, tinyxml2::XMLElement, tinyxml2::XMLUnknown, tinyxml2::XMLDeclaration, tinyxml2::XMLComment, and tinyxml2::XMLText.

+ +
+
+ +

◆ DeepClone()

+ +
+
+ + + + + + + + +
XMLNode* tinyxml2::XMLNode::DeepClone (XMLDocumenttarget) const
+
+

Make a copy of this node and all its children.

+

If the 'target' is null, then the nodes will be allocated in the current document. If 'target' is specified, the memory will be allocated is the specified XMLDocument.

+

NOTE: This is probably not the correct tool to copy a document, since XMLDocuments can have multiple top level XMLNodes. You probably want to use XMLDocument::DeepCopy()

+ +
+
+ +

◆ DeleteChild()

+ +
+
+ + + + + + + + +
void tinyxml2::XMLNode::DeleteChild (XMLNodenode)
+
+

Delete a child of this node.

+ +
+
+ +

◆ DeleteChildren()

+ +
+
+ + + + + + + +
void tinyxml2::XMLNode::DeleteChildren ()
+
+

Delete all the children of this node.

+ +
+
+ +

◆ FirstChildElement()

+ +
+
+ + + + + + + + +
const XMLElement* tinyxml2::XMLNode::FirstChildElement (const char * name = 0) const
+
+

Get the first child element, or optionally the first child element with the specified name.

+ +
+
+ +

◆ GetUserData()

+ +
+
+ + + + + +
+ + + + + + + +
void* tinyxml2::XMLNode::GetUserData () const
+
+inline
+
+

Get user data set into the XMLNode. TinyXML-2 in no way processes or interprets user data. It is initially 0.

+ +
+
+ +

◆ InsertAfterChild()

+ +
+
+ + + + + + + + + + + + + + + + + + +
XMLNode* tinyxml2::XMLNode::InsertAfterChild (XMLNodeafterThis,
XMLNodeaddThis 
)
+
+

Add a node after the specified child node. If the child node is already part of the document, it is moved from its old location to the new location. Returns the addThis argument or 0 if the afterThis node is not a child of this node, or if the node does not belong to the same document.

+ +
+
+ +

◆ InsertEndChild()

+ +
+
+ + + + + + + + +
XMLNode* tinyxml2::XMLNode::InsertEndChild (XMLNodeaddThis)
+
+

Add a child node as the last (right) child. If the child node is already part of the document, it is moved from its old location to the new location. Returns the addThis argument or 0 if the node does not belong to the same document.

+ +
+
+ +

◆ InsertFirstChild()

+ +
+
+ + + + + + + + +
XMLNode* tinyxml2::XMLNode::InsertFirstChild (XMLNodeaddThis)
+
+

Add a child node as the first (left) child. If the child node is already part of the document, it is moved from its old location to the new location. Returns the addThis argument or 0 if the node does not belong to the same document.

+ +
+
+ +

◆ LastChildElement()

+ +
+
+ + + + + + + + +
const XMLElement* tinyxml2::XMLNode::LastChildElement (const char * name = 0) const
+
+

Get the last child element or optionally the last child element with the specified name.

+ +
+
+ +

◆ SetUserData()

+ +
+
+ + + + + +
+ + + + + + + + +
void tinyxml2::XMLNode::SetUserData (void * userData)
+
+inline
+
+

Set user data into the XMLNode. TinyXML-2 in no way processes or interprets user data. It is initially 0.

+ +
+
+ +

◆ SetValue()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void tinyxml2::XMLNode::SetValue (const char * val,
bool staticMem = false 
)
+
+

Set the Value of an XML node.

See also
Value()
+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLNode::ShallowClone (XMLDocumentdocument) const
+
+pure virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implemented in tinyxml2::XMLDocument, tinyxml2::XMLElement, tinyxml2::XMLUnknown, tinyxml2::XMLDeclaration, tinyxml2::XMLComment, and tinyxml2::XMLText.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLNode::ShallowEqual (const XMLNodecompare) const
+
+pure virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implemented in tinyxml2::XMLDocument, tinyxml2::XMLElement, tinyxml2::XMLUnknown, tinyxml2::XMLDeclaration, tinyxml2::XMLComment, and tinyxml2::XMLText.

+ +
+
+ +

◆ Value()

+ +
+
+ + + + + + + +
const char* tinyxml2::XMLNode::Value () const
+
+

The meaning of 'value' changes for the specific type.

Document:   empty (NULL is returned, not an empty string)
+Element:    name of the element
+Comment:    the comment text
+Unknown:    the tag contents
+Text:       the text string
+
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_node.png b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_node.png new file mode 100644 index 0000000..cb1e7ce Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_node.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_printer-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_printer-members.html new file mode 100644 index 0000000..cad8dc2 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_printer-members.html @@ -0,0 +1,106 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLPrinter Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLPrinter, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
ClearBuffer()tinyxml2::XMLPrinterinline
CloseElement(bool compactMode=false)tinyxml2::XMLPrintervirtual
CStr() consttinyxml2::XMLPrinterinline
CStrSize() consttinyxml2::XMLPrinterinline
OpenElement(const char *name, bool compactMode=false)tinyxml2::XMLPrinter
PrintSpace(int depth)tinyxml2::XMLPrinterprotectedvirtual
PushAttribute(const char *name, const char *value)tinyxml2::XMLPrinter
PushComment(const char *comment)tinyxml2::XMLPrinter
PushHeader(bool writeBOM, bool writeDeclaration)tinyxml2::XMLPrinter
PushText(const char *text, bool cdata=false)tinyxml2::XMLPrinter
PushText(int value)tinyxml2::XMLPrinter
PushText(unsigned value)tinyxml2::XMLPrinter
PushText(int64_t value)tinyxml2::XMLPrinter
PushText(bool value)tinyxml2::XMLPrinter
PushText(float value)tinyxml2::XMLPrinter
PushText(double value)tinyxml2::XMLPrinter
Visit(const XMLText &text)tinyxml2::XMLPrintervirtual
Visit(const XMLComment &comment)tinyxml2::XMLPrintervirtual
Visit(const XMLDeclaration &declaration)tinyxml2::XMLPrintervirtual
Visit(const XMLUnknown &unknown)tinyxml2::XMLPrintervirtual
VisitEnter(const XMLDocument &)tinyxml2::XMLPrintervirtual
VisitEnter(const XMLElement &element, const XMLAttribute *attribute)tinyxml2::XMLPrintervirtual
VisitExit(const XMLDocument &)tinyxml2::XMLPrinterinlinevirtual
VisitExit(const XMLElement &element)tinyxml2::XMLPrintervirtual
XMLPrinter(FILE *file=0, bool compact=false, int depth=0)tinyxml2::XMLPrinter
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_printer.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_printer.html new file mode 100644 index 0000000..76237b2 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_printer.html @@ -0,0 +1,410 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLPrinter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLPrinter Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLPrinter:
+
+
+ + +tinyxml2::XMLVisitor + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 XMLPrinter (FILE *file=0, bool compact=false, int depth=0)
 
void PushHeader (bool writeBOM, bool writeDeclaration)
 
void OpenElement (const char *name, bool compactMode=false)
 
+void PushAttribute (const char *name, const char *value)
 If streaming, add an attribute to an open element.
 
+virtual void CloseElement (bool compactMode=false)
 If streaming, close the Element.
 
+void PushText (const char *text, bool cdata=false)
 Add a text node.
 
+void PushText (int value)
 Add a text node from an integer.
 
+void PushText (unsigned value)
 Add a text node from an unsigned.
 
+void PushText (int64_t value)
 Add a text node from an unsigned.
 
+void PushText (bool value)
 Add a text node from a bool.
 
+void PushText (float value)
 Add a text node from a float.
 
+void PushText (double value)
 Add a text node from a double.
 
+void PushComment (const char *comment)
 Add a comment.
 
+virtual bool VisitEnter (const XMLDocument &)
 Visit a document.
 
+virtual bool VisitExit (const XMLDocument &)
 Visit a document.
 
+virtual bool VisitEnter (const XMLElement &element, const XMLAttribute *attribute)
 Visit an element.
 
+virtual bool VisitExit (const XMLElement &element)
 Visit an element.
 
+virtual bool Visit (const XMLText &text)
 Visit a text node.
 
+virtual bool Visit (const XMLComment &comment)
 Visit a comment node.
 
+virtual bool Visit (const XMLDeclaration &declaration)
 Visit a declaration.
 
+virtual bool Visit (const XMLUnknown &unknown)
 Visit an unknown node.
 
const char * CStr () const
 
int CStrSize () const
 
void ClearBuffer ()
 
+ + + +

+Protected Member Functions

virtual void PrintSpace (int depth)
 
+

Detailed Description

+

Printing functionality. The XMLPrinter gives you more options than the XMLDocument::Print() method.

+

It can:

    +
  1. Print to memory.
  2. +
  3. Print to a file you provide.
  4. +
  5. Print XML without a XMLDocument.
  6. +
+

Print to Memory

+
XMLPrinter printer;
+doc.Print( &printer );
+SomeFunction( printer.CStr() );
+

Print to a File

+

You provide the file pointer.

XMLPrinter printer( fp );
+doc.Print( &printer );
+

Print without a XMLDocument

+

When loading, an XML parser is very useful. However, sometimes when saving, it just gets in the way. The code is often set up for streaming, and constructing the DOM is just overhead.

+

The Printer supports the streaming case. The following code prints out a trivially simple XML file without ever creating an XML document.

+
XMLPrinter printer( fp );
+printer.OpenElement( "foo" );
+printer.PushAttribute( "foo", "bar" );
+printer.CloseElement();
+

Constructor & Destructor Documentation

+ +

◆ XMLPrinter()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
tinyxml2::XMLPrinter::XMLPrinter (FILE * file = 0,
bool compact = false,
int depth = 0 
)
+
+

Construct the printer. If the FILE* is specified, this will print to the FILE. Else it will print to memory, and the result is available in CStr(). If 'compact' is set to true, then output is created with only required whitespace and newlines.

+ +
+
+

Member Function Documentation

+ +

◆ ClearBuffer()

+ +
+
+ + + + + +
+ + + + + + + +
void tinyxml2::XMLPrinter::ClearBuffer ()
+
+inline
+
+

If in print to memory mode, reset the buffer to the beginning.

+ +
+
+ +

◆ CStr()

+ +
+
+ + + + + +
+ + + + + + + +
const char* tinyxml2::XMLPrinter::CStr () const
+
+inline
+
+

If in print to memory mode, return a pointer to the XML file in memory.

+ +
+
+ +

◆ CStrSize()

+ +
+
+ + + + + +
+ + + + + + + +
int tinyxml2::XMLPrinter::CStrSize () const
+
+inline
+
+

If in print to memory mode, return the size of the XML file in memory. (Note the size returned includes the terminating null.)

+ +
+
+ +

◆ OpenElement()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void tinyxml2::XMLPrinter::OpenElement (const char * name,
bool compactMode = false 
)
+
+

If streaming, start writing an element. The element must be closed with CloseElement()

+ +
+
+ +

◆ PrintSpace()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void tinyxml2::XMLPrinter::PrintSpace (int depth)
+
+protectedvirtual
+
+

Prints out the space before an element. You may override to change the space and tabs used. A PrintSpace() override should call Print().

+ +
+
+ +

◆ PushHeader()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void tinyxml2::XMLPrinter::PushHeader (bool writeBOM,
bool writeDeclaration 
)
+
+

If streaming, write the BOM and declaration.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_printer.png b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_printer.png new file mode 100644 index 0000000..9bc6748 Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_printer.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_text-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_text-members.html new file mode 100644 index 0000000..ce0f317 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_text-members.html @@ -0,0 +1,115 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLText Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLText, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLTextvirtual
CData() consttinyxml2::XMLTextinline
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetCData(bool isCData)tinyxml2::XMLTextinline
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) consttinyxml2::XMLTextvirtual
ShallowEqual(const XMLNode *compare) consttinyxml2::XMLTextvirtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLTextinlinevirtual
ToUnknown()tinyxml2::XMLNodeinlinevirtual
Value() consttinyxml2::XMLNode
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_text.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_text.html new file mode 100644 index 0000000..0a3b095 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_text.html @@ -0,0 +1,310 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLText Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLText Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLText:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual bool Accept (XMLVisitor *visitor) const
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+void SetCData (bool isCData)
 Declare whether this should be CDATA or standard text.
 
+bool CData () const
 Returns true if this is a CDATA text element.
 
virtual XMLNodeShallowClone (XMLDocument *document) const
 
virtual bool ShallowEqual (const XMLNode *compare) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

XML text.

+

Note that a text node can have child element nodes, for example:

<root>This is <b>bold</b></root>
+

A text node can have 2 ways to output the next. "normal" output and CDATA. It will default to the mode it was parsed from the XML file and you generally want to leave it alone, but you can change the output mode with SetCData() and query it with CData().

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLText::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLText::ShallowClone (XMLDocumentdocument) const
+
+virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLText::ShallowEqual (const XMLNodecompare) const
+
+virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_text.png b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_text.png new file mode 100644 index 0000000..5a9863a Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_text.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_unknown-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_unknown-members.html new file mode 100644 index 0000000..e00b2e4 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_unknown-members.html @@ -0,0 +1,113 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLUnknown Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLUnknown, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Accept(XMLVisitor *visitor) consttinyxml2::XMLUnknownvirtual
DeepClone(XMLDocument *target) consttinyxml2::XMLNode
DeleteChild(XMLNode *node)tinyxml2::XMLNode
DeleteChildren()tinyxml2::XMLNode
FirstChild() consttinyxml2::XMLNodeinline
FirstChildElement(const char *name=0) consttinyxml2::XMLNode
GetDocument() consttinyxml2::XMLNodeinline
GetDocument()tinyxml2::XMLNodeinline
GetLineNum() consttinyxml2::XMLNodeinline
GetUserData() consttinyxml2::XMLNodeinline
InsertAfterChild(XMLNode *afterThis, XMLNode *addThis)tinyxml2::XMLNode
InsertEndChild(XMLNode *addThis)tinyxml2::XMLNode
InsertFirstChild(XMLNode *addThis)tinyxml2::XMLNode
LastChild() consttinyxml2::XMLNodeinline
LastChildElement(const char *name=0) consttinyxml2::XMLNode
NextSibling() consttinyxml2::XMLNodeinline
NextSiblingElement(const char *name=0) consttinyxml2::XMLNode
NoChildren() consttinyxml2::XMLNodeinline
Parent() consttinyxml2::XMLNodeinline
PreviousSibling() consttinyxml2::XMLNodeinline
PreviousSiblingElement(const char *name=0) consttinyxml2::XMLNode
SetUserData(void *userData)tinyxml2::XMLNodeinline
SetValue(const char *val, bool staticMem=false)tinyxml2::XMLNode
ShallowClone(XMLDocument *document) consttinyxml2::XMLUnknownvirtual
ShallowEqual(const XMLNode *compare) consttinyxml2::XMLUnknownvirtual
ToComment()tinyxml2::XMLNodeinlinevirtual
ToDeclaration()tinyxml2::XMLNodeinlinevirtual
ToDocument()tinyxml2::XMLNodeinlinevirtual
ToElement()tinyxml2::XMLNodeinlinevirtual
ToText()tinyxml2::XMLNodeinlinevirtual
ToUnknown()tinyxml2::XMLUnknowninlinevirtual
Value() consttinyxml2::XMLNode
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_unknown.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_unknown.html new file mode 100644 index 0000000..52235fc --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_unknown.html @@ -0,0 +1,301 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLUnknown Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLUnknown Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLUnknown:
+
+
+ + +tinyxml2::XMLNode + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual XMLUnknownToUnknown ()
 Safely cast to an Unknown, or null.
 
virtual bool Accept (XMLVisitor *visitor) const
 
virtual XMLNodeShallowClone (XMLDocument *document) const
 
virtual bool ShallowEqual (const XMLNode *compare) const
 
- Public Member Functions inherited from tinyxml2::XMLNode
+const XMLDocumentGetDocument () const
 Get the XMLDocument that owns this XMLNode.
 
+XMLDocumentGetDocument ()
 Get the XMLDocument that owns this XMLNode.
 
+virtual XMLElementToElement ()
 Safely cast to an Element, or null.
 
+virtual XMLTextToText ()
 Safely cast to Text, or null.
 
+virtual XMLCommentToComment ()
 Safely cast to a Comment, or null.
 
+virtual XMLDocumentToDocument ()
 Safely cast to a Document, or null.
 
+virtual XMLDeclarationToDeclaration ()
 Safely cast to a Declaration, or null.
 
const char * Value () const
 
void SetValue (const char *val, bool staticMem=false)
 
+int GetLineNum () const
 Gets the line number the node is in, if the document was parsed from a file.
 
+const XMLNodeParent () const
 Get the parent of this node on the DOM.
 
+bool NoChildren () const
 Returns true if this node has no children.
 
+const XMLNodeFirstChild () const
 Get the first child node, or null if none exists.
 
const XMLElementFirstChildElement (const char *name=0) const
 
+const XMLNodeLastChild () const
 Get the last child node, or null if none exists.
 
const XMLElementLastChildElement (const char *name=0) const
 
+const XMLNodePreviousSibling () const
 Get the previous (left) sibling node of this node.
 
+const XMLElementPreviousSiblingElement (const char *name=0) const
 Get the previous (left) sibling element of this node, with an optionally supplied name.
 
+const XMLNodeNextSibling () const
 Get the next (right) sibling node of this node.
 
+const XMLElementNextSiblingElement (const char *name=0) const
 Get the next (right) sibling element of this node, with an optionally supplied name.
 
XMLNodeInsertEndChild (XMLNode *addThis)
 
XMLNodeInsertFirstChild (XMLNode *addThis)
 
XMLNodeInsertAfterChild (XMLNode *afterThis, XMLNode *addThis)
 
void DeleteChildren ()
 
void DeleteChild (XMLNode *node)
 
XMLNodeDeepClone (XMLDocument *target) const
 
void SetUserData (void *userData)
 
void * GetUserData () const
 
+

Detailed Description

+

Any tag that TinyXML-2 doesn't recognize is saved as an unknown. It is a tag of text, but should not be modified. It will be written back to the XML, unchanged, when the file is saved.

+

DTD tags get thrown into XMLUnknowns.

+

Member Function Documentation

+ +

◆ Accept()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLUnknown::Accept (XMLVisitorvisitor) const
+
+virtual
+
+

Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the XMLVisitor interface.

+

This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this interface versus any other.)

+

The interface has been based on ideas from:

+ +

Which are both good references for "visiting".

+

An example of using Accept():

XMLPrinter printer;
+tinyxmlDoc.Accept( &printer );
+const char* xmlcstr = printer.CStr();
+
+

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowClone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual XMLNode* tinyxml2::XMLUnknown::ShallowClone (XMLDocumentdocument) const
+
+virtual
+
+

Make a copy of this node, but not its children. You may pass in a Document pointer that will be the owner of the new Node. If the 'document' is null, then the node returned will be allocated from the current Document. (this->GetDocument())

+

Note: if called on a XMLDocument, this will return null.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+ +

◆ ShallowEqual()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool tinyxml2::XMLUnknown::ShallowEqual (const XMLNodecompare) const
+
+virtual
+
+

Test if 2 nodes are the same, but don't test children. The 2 nodes do not need to be in the same Document.

+

Note: if called on a XMLDocument, this will return false.

+ +

Implements tinyxml2::XMLNode.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_unknown.png b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_unknown.png new file mode 100644 index 0000000..217b62c Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_unknown.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_visitor-members.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_visitor-members.html new file mode 100644 index 0000000..dc04079 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_visitor-members.html @@ -0,0 +1,89 @@ + + + + + + + +TinyXML-2: Member List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyxml2::XMLVisitor Member List
+
+
+ +

This is the complete list of members for tinyxml2::XMLVisitor, including all inherited members.

+ + + + + + + + + +
Visit(const XMLDeclaration &)tinyxml2::XMLVisitorinlinevirtual
Visit(const XMLText &)tinyxml2::XMLVisitorinlinevirtual
Visit(const XMLComment &)tinyxml2::XMLVisitorinlinevirtual
Visit(const XMLUnknown &)tinyxml2::XMLVisitorinlinevirtual
VisitEnter(const XMLDocument &)tinyxml2::XMLVisitorinlinevirtual
VisitEnter(const XMLElement &, const XMLAttribute *)tinyxml2::XMLVisitorinlinevirtual
VisitExit(const XMLDocument &)tinyxml2::XMLVisitorinlinevirtual
VisitExit(const XMLElement &)tinyxml2::XMLVisitorinlinevirtual
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_visitor.html b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_visitor.html new file mode 100644 index 0000000..5333aec --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_visitor.html @@ -0,0 +1,138 @@ + + + + + + + +TinyXML-2: tinyxml2::XMLVisitor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
tinyxml2::XMLVisitor Class Reference
+
+
+ +

#include <tinyxml2.h>

+
+Inheritance diagram for tinyxml2::XMLVisitor:
+
+
+ + +tinyxml2::XMLPrinter + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual bool VisitEnter (const XMLDocument &)
 Visit a document.
 
+virtual bool VisitExit (const XMLDocument &)
 Visit a document.
 
+virtual bool VisitEnter (const XMLElement &, const XMLAttribute *)
 Visit an element.
 
+virtual bool VisitExit (const XMLElement &)
 Visit an element.
 
+virtual bool Visit (const XMLDeclaration &)
 Visit a declaration.
 
+virtual bool Visit (const XMLText &)
 Visit a text node.
 
+virtual bool Visit (const XMLComment &)
 Visit a comment node.
 
+virtual bool Visit (const XMLUnknown &)
 Visit an unknown node.
 
+

Detailed Description

+

Implements the interface to the "Visitor pattern" (see the Accept() method.) If you call the Accept() method, it requires being passed a XMLVisitor class to handle callbacks. For nodes that contain other nodes (Document, Element) you will get called with a VisitEnter/VisitExit pair. Nodes that are always leafs are simply called with Visit().

+

If you return 'true' from a Visit method, recursive parsing will continue. If you return false, no children of this node or its siblings will be visited.

+

All flavors of Visit methods have a default implementation that returns 'true' (continue visiting). You need to only override methods that are interesting to you.

+

Generally Accept() is called on the XMLDocument, although all nodes support visiting.

+

You should never change the document from a callback.

+
See also
XMLNode::Accept()
+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_visitor.png b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_visitor.png new file mode 100644 index 0000000..8ae4c23 Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/classtinyxml2_1_1_x_m_l_visitor.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/closed.png b/vendor/github.com/leethomason/tinyxml2/docs/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/closed.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/doc.png b/vendor/github.com/leethomason/tinyxml2/docs/doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/doc.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/doxygen.css b/vendor/github.com/leethomason/tinyxml2/docs/doxygen.css new file mode 100644 index 0000000..4f1ab91 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/doxygen.css @@ -0,0 +1,1596 @@ +/* The standard CSS for doxygen 1.8.13 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + + +/* @end */ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/doxygen.png b/vendor/github.com/leethomason/tinyxml2/docs/doxygen.png new file mode 100644 index 0000000..3ff17d8 Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/doxygen.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/dynsections.js b/vendor/github.com/leethomason/tinyxml2/docs/dynsections.js new file mode 100644 index 0000000..85e1836 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +TinyXML-2: File List + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+ + +
 tinyxml2.h
+
+
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/folderclosed.png b/vendor/github.com/leethomason/tinyxml2/docs/folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/folderclosed.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/folderopen.png b/vendor/github.com/leethomason/tinyxml2/docs/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/folderopen.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/functions.html b/vendor/github.com/leethomason/tinyxml2/docs/functions.html new file mode 100644 index 0000000..14c8996 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/functions.html @@ -0,0 +1,541 @@ + + + + + + + +TinyXML-2: Class Members + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+ + +

- x -

+
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/functions_func.html b/vendor/github.com/leethomason/tinyxml2/docs/functions_func.html new file mode 100644 index 0000000..bfc9182 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/functions_func.html @@ -0,0 +1,541 @@ + + + + + + + +TinyXML-2: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+ + +

- x -

+
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/hierarchy.html b/vendor/github.com/leethomason/tinyxml2/docs/hierarchy.html new file mode 100644 index 0000000..5c9166a --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/hierarchy.html @@ -0,0 +1,90 @@ + + + + + + + +TinyXML-2: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/index.html b/vendor/github.com/leethomason/tinyxml2/docs/index.html new file mode 100644 index 0000000..e5171f8 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/index.html @@ -0,0 +1,230 @@ + + + + + + + +TinyXML-2: TinyXML-2 + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
TinyXML-2
+
+
+

+
+TinyXML-2 Logo +
+

TinyXML-2 is a simple, small, efficient, C++ XML parser that can be easily integrated into other programs.

+

The master is hosted on github: https://github.com/leethomason/tinyxml2

+

The online HTML version of these docs: http://leethomason.github.io/tinyxml2/

+

Examples are in the "related pages" tab of the HTML docs.

+

What it does.

+

In brief, TinyXML-2 parses an XML document, and builds from that a Document Object Model (DOM) that can be read, modified, and saved.

+

XML stands for "eXtensible Markup Language." It is a general purpose human and machine readable markup language to describe arbitrary data. All those random file formats created to store application data can all be replaced with XML. One parser for everything.

+

http://en.wikipedia.org/wiki/XML

+

There are different ways to access and interact with XML data. TinyXML-2 uses a Document Object Model (DOM), meaning the XML data is parsed into a C++ objects that can be browsed and manipulated, and then written to disk or another output stream. You can also construct an XML document from scratch with C++ objects and write this to disk or another output stream. You can even use TinyXML-2 to stream XML programmatically from code without creating a document first.

+

TinyXML-2 is designed to be easy and fast to learn. It is one header and one cpp file. Simply add these to your project and off you go. There is an example file - xmltest.cpp - to get you started.

+

TinyXML-2 is released under the ZLib license, so you can use it in open source or commercial code. The details of the license are at the top of every source file.

+

TinyXML-2 attempts to be a flexible parser, but with truly correct and compliant XML output. TinyXML-2 should compile on any reasonably C++ compliant system. It does not rely on exceptions, RTTI, or the STL.

+

What it doesn't do.

+

TinyXML-2 doesn't parse or use DTDs (Document Type Definitions) or XSLs (eXtensible Stylesheet Language.) There are other parsers out there that are much more fully featured. But they are also much bigger, take longer to set up in your project, have a higher learning curve, and often have a more restrictive license. If you are working with browsers or have more complete XML needs, TinyXML-2 is not the parser for you.

+

TinyXML-1 vs. TinyXML-2

+

TinyXML-2 is now the focus of all development, well tested, and your best choice unless you have a requirement to maintain TinyXML-1 code.

+

TinyXML-2 uses a similar API to TinyXML-1 and the same rich test cases. But the implementation of the parser is completely re-written to make it more appropriate for use in a game. It uses less memory, is faster, and uses far fewer memory allocations.

+

TinyXML-2 has no requirement for STL, but has also dropped all STL support. All strings are query and set as 'const char*'. This allows the use of internal allocators, and keeps the code much simpler.

+

Both parsers:

+
    +
  1. Simple to use with similar APIs.
  2. +
  3. DOM based parser.
  4. +
  5. UTF-8 Unicode support. http://en.wikipedia.org/wiki/UTF-8
  6. +
+

Advantages of TinyXML-2

+
    +
  1. The focus of all future dev.
  2. +
  3. Many fewer memory allocation (1/10th to 1/100th), uses less memory (about 40% of TinyXML-1), and faster.
  4. +
  5. No STL requirement.
  6. +
  7. More modern C++, including a proper namespace.
  8. +
  9. Proper and useful handling of whitespace
  10. +
+

Advantages of TinyXML-1

+
    +
  1. Support for some C++ STL conventions: streams and strings
  2. +
  3. Very mature and well debugged code base.
  4. +
+

Features

+

Memory Model

+

An XMLDocument is a C++ object like any other, that can be on the stack, or new'd and deleted on the heap.

+

However, any sub-node of the Document, XMLElement, XMLText, etc, can only be created by calling the appropriate XMLDocument::NewElement, NewText, etc. method. Although you have pointers to these objects, they are still owned by the Document. When the Document is deleted, so are all the nodes it contains.

+

White Space

+

Whitespace Preservation (default)

+

Microsoft has an excellent article on white space: http://msdn.microsoft.com/en-us/library/ms256097.aspx

+

By default, TinyXML-2 preserves white space in a (hopefully) sane way that is almost compliant with the spec. (TinyXML-1 used a completely different model, much more similar to 'collapse', below.)

+

As a first step, all newlines / carriage-returns / line-feeds are normalized to a line-feed character, as required by the XML spec.

+

White space in text is preserved. For example:

<element> Hello,  World</element>
+

The leading space before the "Hello" and the double space after the comma are preserved. Line-feeds are preserved, as in this example:

<element> Hello again,  
+          World</element>
+

However, white space between elements is not preserved. Although not strictly compliant, tracking and reporting inter-element space is awkward, and not normally valuable. TinyXML-2 sees these as the same XML:

<document>
+    <data>1</data>
+    <data>2</data>
+    <data>3</data>
+</document>
+
+<document><data>1</data><data>2</data><data>3</data></document>
+

Whitespace Collapse

+

For some applications, it is preferable to collapse whitespace. Collapsing whitespace gives you "HTML-like" behavior, which is sometimes more suitable for hand typed documents.

+

TinyXML-2 supports this with the 'whitespace' parameter to the XMLDocument constructor. (The default is to preserve whitespace, as described above.)

+

However, you may also use COLLAPSE_WHITESPACE, which will:

+
    +
  • Remove leading and trailing whitespace
  • +
  • Convert newlines and line-feeds into a space character
  • +
  • Collapse a run of any number of space characters into a single space character
  • +
+

Note that (currently) there is a performance impact for using COLLAPSE_WHITESPACE. It essentially causes the XML to be parsed twice.

+

Error Reporting

+

TinyXML-2 reports the line number of any errors in an XML document that cannot be parsed correctly. In addition, all nodes (elements, declarations, text, comments etc.) and attributes have a line number recorded as they are parsed. This allows an application that performs additional validation of the parsed XML document (e.g. application-implemented DTD validation) to report line number information in it's errors.

+

Entities

+

TinyXML-2 recognizes the pre-defined "character entities", meaning special characters. Namely:

&amp;   &
+&lt;    <
+&gt;    >
+&quot;  "
+&apos;  '
+

These are recognized when the XML document is read, and translated to their UTF-8 equivalents. For instance, text with the XML of:

Far &amp; Away
+

will have the Value() of "Far & Away" when queried from the XMLText object, and will be written back to the XML stream/file as an ampersand.

+

Additionally, any character can be specified by its Unicode code point: The syntax &#xA0; or &#160; are both to the non-breaking space character. This is called a 'numeric character reference'. Any numeric character reference that isn't one of the special entities above, will be read, but written as a regular code point. The output is correct, but the entity syntax isn't preserved.

+

Printing

+

Print to file

+

You can directly use the convenience function:

XMLDocument doc;
+...
+doc.SaveFile( "foo.xml" );
+

Or the XMLPrinter class:

XMLPrinter printer( fp );
+doc.Print( &printer );
+

Print to memory

+

Printing to memory is supported by the XMLPrinter.

XMLPrinter printer;
+doc.Print( &printer );
+// printer.CStr() has a const char* to the XML
+

Print without an XMLDocument

+

When loading, an XML parser is very useful. However, sometimes when saving, it just gets in the way. The code is often set up for streaming, and constructing the DOM is just overhead.

+

The Printer supports the streaming case. The following code prints out a trivially simple XML file without ever creating an XML document.

XMLPrinter printer( fp );
+printer.OpenElement( "foo" );
+printer.PushAttribute( "foo", "bar" );
+printer.CloseElement();
+

Examples

+

Load and parse an XML file.

+
/* ------ Example 1: Load and parse an XML file. ---- */    
+{
+    XMLDocument doc;
+    doc.LoadFile( "dream.xml" );
+}
+

Lookup information.

+
/* ------ Example 2: Lookup information. ---- */    
+{
+    XMLDocument doc;
+    doc.LoadFile( "dream.xml" );
+
+    // Structure of the XML file:
+    // - Element "PLAY"      the root Element, which is the 
+    //                       FirstChildElement of the Document
+    // - - Element "TITLE"   child of the root PLAY Element
+    // - - - Text            child of the TITLE Element
+
+    // Navigate to the title, using the convenience function,
+    // with a dangerous lack of error checking.
+    const char* title = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->GetText();
+    printf( "Name of play (1): %s\n", title );
+
+    // Text is just another Node to TinyXML-2. The more
+    // general way to get to the XMLText:
+    XMLText* textNode = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->FirstChild()->ToText();
+    title = textNode->Value();
+    printf( "Name of play (2): %s\n", title );
+}
+

Using and Installing

+

There are 2 files in TinyXML-2:

+

And additionally a test file:

    +
  • xmltest.cpp
  • +
+

Simply compile and run. There is a visual studio 2015 project included, a simple Makefile, an Xcode project, a Code::Blocks project, and a cmake CMakeLists.txt included to help you. The top of tinyxml.h even has a simple g++ command line if you are are *nix and don't want to use a build system.

+

Versioning

+

TinyXML-2 uses semantic versioning. http://semver.org/ Releases are now tagged in github.

+

Note that the major version will (probably) change fairly rapidly. API changes are fairly common.

+

Documentation

+

The documentation is build with Doxygen, using the 'dox' configuration file.

+

License

+

TinyXML-2 is released under the zlib license:

+

This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.

+

Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

+
    +
  1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
  2. +
  3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
  4. +
  5. This notice may not be removed or altered from any source distribution.
  6. +
+

Contributors

+

Thanks very much to everyone who sends suggestions, bugs, ideas, and encouragement. It all helps, and makes this project fun.

+

The original TinyXML-1 has many contributors, who all deserve thanks in shaping what is a very successful library. Extra thanks to Yves Berquin and Andrew Ellerton who were key contributors.

+

TinyXML-2 grew from that effort. Lee Thomason is the original author of TinyXML-2 (and TinyXML-1) but TinyXML-2 has been and is being improved by many contributors.

+

Thanks to John Mackay at http://john.mackay.rosalilastudio.com for the TinyXML-2 logo!

+
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/jquery.js b/vendor/github.com/leethomason/tinyxml2/docs/jquery.js new file mode 100644 index 0000000..f5343ed --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/jquery.js @@ -0,0 +1,87 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + +
+
+
Related Pages
+
+
+
Here is a list of all related documentation pages:
+
+ + + + +
 Load an XML File
 Parse an XML from char buffer
 Get information out of XML
 Read attributes and text information.
+ + + + + + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_0.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_0.html new file mode 100644 index 0000000..f25360b --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_0.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_0.js new file mode 100644 index 0000000..28cfce2 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['accept',['Accept',['../classtinyxml2_1_1_x_m_l_node.html#a81e66df0a44c67a7af17f3b77a152785',1,'tinyxml2::XMLNode::Accept()'],['../classtinyxml2_1_1_x_m_l_text.html#a1b2c1448f1a21299d0a7913f18b55206',1,'tinyxml2::XMLText::Accept()'],['../classtinyxml2_1_1_x_m_l_comment.html#a4a33dc32fae0285b03f9cfcb3e43e122',1,'tinyxml2::XMLComment::Accept()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a5f376019fb34752eb248548f42f32045',1,'tinyxml2::XMLDeclaration::Accept()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a70983aa1b1cff3d3aa6d4d0a80e5ee48',1,'tinyxml2::XMLUnknown::Accept()'],['../classtinyxml2_1_1_x_m_l_element.html#a3ea8a40e788fb9ad876c28a32932c6d5',1,'tinyxml2::XMLElement::Accept()'],['../classtinyxml2_1_1_x_m_l_document.html#a9efa54f7ecb37c17ab1fa2b3078ccca1',1,'tinyxml2::XMLDocument::Accept()']]], + ['attribute',['Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a70e49ed60b11212ae35f7e354cfe1de9',1,'tinyxml2::XMLElement']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_1.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_1.html new file mode 100644 index 0000000..b13f0f7 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_1.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_1.js new file mode 100644 index 0000000..2f5497b --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['boolattribute',['BoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a53eda26131e1ad1031ef8ec8adb51bd8',1,'tinyxml2::XMLElement']]], + ['booltext',['BoolText',['../classtinyxml2_1_1_x_m_l_element.html#a68569f59f6382bcea7f5013ec59736d2',1,'tinyxml2::XMLElement']]], + ['boolvalue',['BoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a98ce5207344ad33a265b0422addae1ff',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_10.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_10.html new file mode 100644 index 0000000..d1345a1 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_10.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_10.js new file mode 100644 index 0000000..280048c --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_10.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['tinyxml_2d2',['TinyXML-2',['../index.html',1,'']]], + ['tocomment',['ToComment',['../classtinyxml2_1_1_x_m_l_node.html#aff47671055aa99840a1c1ebd661e63e3',1,'tinyxml2::XMLNode::ToComment()'],['../classtinyxml2_1_1_x_m_l_comment.html#a8093e1dc8a34fa446d9dc3fde0e6c0ee',1,'tinyxml2::XMLComment::ToComment()']]], + ['todeclaration',['ToDeclaration',['../classtinyxml2_1_1_x_m_l_node.html#a174fd4c22c010b58138c1b84a0dfbd51',1,'tinyxml2::XMLNode::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a159d8ac45865215e88059ea1e5b52fc5',1,'tinyxml2::XMLDeclaration::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_handle.html#a108858be7ee3eb53f73b5194c1aa8ff0',1,'tinyxml2::XMLHandle::ToDeclaration()']]], + ['todocument',['ToDocument',['../classtinyxml2_1_1_x_m_l_node.html#a836e2966ed736fc3c94f70e12a2a3357',1,'tinyxml2::XMLNode::ToDocument()'],['../classtinyxml2_1_1_x_m_l_document.html#a3e185f880882bd978367bb55937735ec',1,'tinyxml2::XMLDocument::ToDocument()']]], + ['toelement',['ToElement',['../classtinyxml2_1_1_x_m_l_node.html#aab516e699567f75cc9ab2ef2eee501e8',1,'tinyxml2::XMLNode::ToElement()'],['../classtinyxml2_1_1_x_m_l_element.html#ad9ff5c2dbc15df36cf664ce1b0ea0a5d',1,'tinyxml2::XMLElement::ToElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a5e73ed8f3f6f9619d5a8bb1862c47d99',1,'tinyxml2::XMLHandle::ToElement()']]], + ['tonode',['ToNode',['../classtinyxml2_1_1_x_m_l_handle.html#a03ea6ec970a021b71bf1219a0f6717df',1,'tinyxml2::XMLHandle']]], + ['totext',['ToText',['../classtinyxml2_1_1_x_m_l_node.html#a41c55dab9162d1eb62db2008430e376b',1,'tinyxml2::XMLNode::ToText()'],['../classtinyxml2_1_1_x_m_l_text.html#ab1213b4ddebe9b17ec7e7040e9f1caf7',1,'tinyxml2::XMLText::ToText()'],['../classtinyxml2_1_1_x_m_l_handle.html#a6ab9e8cbfb41417246e5657e3842c62a',1,'tinyxml2::XMLHandle::ToText()']]], + ['tounknown',['ToUnknown',['../classtinyxml2_1_1_x_m_l_node.html#a8675a74aa0ada6eccab0c77ef3e5b9bd',1,'tinyxml2::XMLNode::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_unknown.html#af4374856421921cad578c8affae872b6',1,'tinyxml2::XMLUnknown::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_handle.html#aa387368a1ad8d843a9f12df863d298de',1,'tinyxml2::XMLHandle::ToUnknown()']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_11.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_11.html new file mode 100644 index 0000000..2be8b71 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_11.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_11.js new file mode 100644 index 0000000..7e35c72 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_11.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['unsignedattribute',['UnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#afea43a1d4aa33e3703ddee5fc9adc26c',1,'tinyxml2::XMLElement']]], + ['unsignedtext',['UnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a49bad014ffcc17b0b6119d5b2c97dfb5',1,'tinyxml2::XMLElement']]], + ['unsignedvalue',['UnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a0be5343b08a957c42c02c5d32c35d338',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_12.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_12.html new file mode 100644 index 0000000..13c5263 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_12.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_12.js new file mode 100644 index 0000000..bc84876 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_12.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['value',['Value',['../classtinyxml2_1_1_x_m_l_node.html#a66344989a4b436155bcda72bd6b07b82',1,'tinyxml2::XMLNode::Value()'],['../classtinyxml2_1_1_x_m_l_attribute.html#a1aab1dd0e43ecbcfa306adbcf3a3d853',1,'tinyxml2::XMLAttribute::Value()']]], + ['visit',['Visit',['../classtinyxml2_1_1_x_m_l_visitor.html#adc75bd459fc7ba8223b50f0616767f9a',1,'tinyxml2::XMLVisitor::Visit(const XMLDeclaration &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af30233565856480ea48b6fa0d6dec65b',1,'tinyxml2::XMLVisitor::Visit(const XMLText &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#acc8147fb5a85f6c65721654e427752d7',1,'tinyxml2::XMLVisitor::Visit(const XMLComment &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a14e4748387c34bf53d24e8119bb1f292',1,'tinyxml2::XMLVisitor::Visit(const XMLUnknown &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a275ae25544a12199ae40b6994ca6e4de',1,'tinyxml2::XMLPrinter::Visit(const XMLText &text)'],['../classtinyxml2_1_1_x_m_l_printer.html#a3f16a30be1537ac141d9bd2db824ba9e',1,'tinyxml2::XMLPrinter::Visit(const XMLComment &comment)'],['../classtinyxml2_1_1_x_m_l_printer.html#a9ceff5cd85e5db65838962174fcdcc46',1,'tinyxml2::XMLPrinter::Visit(const XMLDeclaration &declaration)'],['../classtinyxml2_1_1_x_m_l_printer.html#aa15e1da81e17dea5da6499ac5b08d9d8',1,'tinyxml2::XMLPrinter::Visit(const XMLUnknown &unknown)']]], + ['visitenter',['VisitEnter',['../classtinyxml2_1_1_x_m_l_visitor.html#acb3c22fc5f60eb9db98f533f2761f67d',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af97980a17dd4e37448b181f5ddfa92b5',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLElement &, const XMLAttribute *)'],['../classtinyxml2_1_1_x_m_l_printer.html#ae966b988a7a28c41e91c5ca17fb2054b',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a2ce2aa508c21ac91615093ddb9c282c5',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLElement &element, const XMLAttribute *attribute)']]], + ['visitexit',['VisitExit',['../classtinyxml2_1_1_x_m_l_visitor.html#a170e9989cd046ba904f302d087e07086',1,'tinyxml2::XMLVisitor::VisitExit(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a772f10ddc83f881956d32628faa16eb6',1,'tinyxml2::XMLVisitor::VisitExit(const XMLElement &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a15fc1f2b922f540917dcf52808737b29',1,'tinyxml2::XMLPrinter::VisitExit(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_printer.html#ae99e0a7086543591edfb565f24689098',1,'tinyxml2::XMLPrinter::VisitExit(const XMLElement &element)']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_13.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_13.html new file mode 100644 index 0000000..b4a8bca --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_13.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_13.js new file mode 100644 index 0000000..9c06153 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_13.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['xmlattribute',['XMLAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html',1,'tinyxml2']]], + ['xmlcomment',['XMLComment',['../classtinyxml2_1_1_x_m_l_comment.html',1,'tinyxml2']]], + ['xmlconsthandle',['XMLConstHandle',['../classtinyxml2_1_1_x_m_l_const_handle.html',1,'tinyxml2']]], + ['xmldeclaration',['XMLDeclaration',['../classtinyxml2_1_1_x_m_l_declaration.html',1,'tinyxml2']]], + ['xmldocument',['XMLDocument',['../classtinyxml2_1_1_x_m_l_document.html',1,'tinyxml2::XMLDocument'],['../classtinyxml2_1_1_x_m_l_document.html#a57ddf17b6e054dda10af98991b1b8f70',1,'tinyxml2::XMLDocument::XMLDocument()']]], + ['xmlelement',['XMLElement',['../classtinyxml2_1_1_x_m_l_element.html',1,'tinyxml2']]], + ['xmlhandle',['XMLHandle',['../classtinyxml2_1_1_x_m_l_handle.html',1,'tinyxml2::XMLHandle'],['../classtinyxml2_1_1_x_m_l_handle.html#a9c240a35c18f053509b4b97ddccd9793',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode *node)'],['../classtinyxml2_1_1_x_m_l_handle.html#aa2edbc1c0d3e3e8259bd98de7f1cf500',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode &node)'],['../classtinyxml2_1_1_x_m_l_handle.html#afd8e01e6018c07347b8e6d80272466aa',1,'tinyxml2::XMLHandle::XMLHandle(const XMLHandle &ref)']]], + ['xmlnode',['XMLNode',['../classtinyxml2_1_1_x_m_l_node.html',1,'tinyxml2']]], + ['xmlprinter',['XMLPrinter',['../classtinyxml2_1_1_x_m_l_printer.html',1,'tinyxml2::XMLPrinter'],['../classtinyxml2_1_1_x_m_l_printer.html#aa6d3841c069085f5b8a27bc7103c04f7',1,'tinyxml2::XMLPrinter::XMLPrinter()']]], + ['xmltext',['XMLText',['../classtinyxml2_1_1_x_m_l_text.html',1,'tinyxml2']]], + ['xmlunknown',['XMLUnknown',['../classtinyxml2_1_1_x_m_l_unknown.html',1,'tinyxml2']]], + ['xmlvisitor',['XMLVisitor',['../classtinyxml2_1_1_x_m_l_visitor.html',1,'tinyxml2']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_2.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_2.html new file mode 100644 index 0000000..9543c57 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_2.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_2.js new file mode 100644 index 0000000..62ab567 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['cdata',['CData',['../classtinyxml2_1_1_x_m_l_text.html#ac1bb5ea4166c320882d9e0ad16fd385b',1,'tinyxml2::XMLText']]], + ['clear',['Clear',['../classtinyxml2_1_1_x_m_l_document.html#a65656b0b2cbc822708eb351504178aaf',1,'tinyxml2::XMLDocument']]], + ['clearbuffer',['ClearBuffer',['../classtinyxml2_1_1_x_m_l_printer.html#a216157765b7267bf389975b1cbf9a909',1,'tinyxml2::XMLPrinter']]], + ['closeelement',['CloseElement',['../classtinyxml2_1_1_x_m_l_printer.html#ad04d29562b46fcdb23ab320f8b664240',1,'tinyxml2::XMLPrinter']]], + ['cstr',['CStr',['../classtinyxml2_1_1_x_m_l_printer.html#a180671d73844f159f2d4aafbc11d106e',1,'tinyxml2::XMLPrinter']]], + ['cstrsize',['CStrSize',['../classtinyxml2_1_1_x_m_l_printer.html#a3256cf3523d4898b91abb18b924be04c',1,'tinyxml2::XMLPrinter']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_3.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_3.html new file mode 100644 index 0000000..03405c0 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_3.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_3.js new file mode 100644 index 0000000..0c8c9f9 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_3.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['deepclone',['DeepClone',['../classtinyxml2_1_1_x_m_l_node.html#a62c71b6bf8734b5424063b8d9a61c266',1,'tinyxml2::XMLNode']]], + ['deepcopy',['DeepCopy',['../classtinyxml2_1_1_x_m_l_document.html#af592ffc91514e25a39664521ac83db45',1,'tinyxml2::XMLDocument']]], + ['deleteattribute',['DeleteAttribute',['../classtinyxml2_1_1_x_m_l_element.html#aebd45aa7118964c30b32fe12e944628a',1,'tinyxml2::XMLElement']]], + ['deletechild',['DeleteChild',['../classtinyxml2_1_1_x_m_l_node.html#a363b6edbd6ebd55f8387d2b89f2b0921',1,'tinyxml2::XMLNode']]], + ['deletechildren',['DeleteChildren',['../classtinyxml2_1_1_x_m_l_node.html#a0360085cc54df5bff85d5c5da13afdce',1,'tinyxml2::XMLNode']]], + ['deletenode',['DeleteNode',['../classtinyxml2_1_1_x_m_l_document.html#ac1d6e2c7fcc1a660624ac4f68e96380d',1,'tinyxml2::XMLDocument']]], + ['doubleattribute',['DoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a10a90c505aea716bf073eea1c97f33b5',1,'tinyxml2::XMLElement']]], + ['doubletext',['DoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a81b1ff0cf2f2cd09be8badc08b39a2b7',1,'tinyxml2::XMLElement']]], + ['doublevalue',['DoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a4aa73513f54ff0087d3e804f0f54e30f',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_4.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_4.html new file mode 100644 index 0000000..8e1f4b9 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_4.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_4.js new file mode 100644 index 0000000..47e3245 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['error',['Error',['../classtinyxml2_1_1_x_m_l_document.html#a34e6318e182e40e3cc4f4ba5d59ed9ed',1,'tinyxml2::XMLDocument']]], + ['errorid',['ErrorID',['../classtinyxml2_1_1_x_m_l_document.html#afa3ed33b3107f920ec2b301f805ac17d',1,'tinyxml2::XMLDocument']]], + ['errorlinenum',['ErrorLineNum',['../classtinyxml2_1_1_x_m_l_document.html#a57400f816dbe7799ece33615ead9ab76',1,'tinyxml2::XMLDocument']]], + ['errorstr',['ErrorStr',['../classtinyxml2_1_1_x_m_l_document.html#ad75aa9d32c4e8b300655186808aa9abf',1,'tinyxml2::XMLDocument']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_5.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_5.html new file mode 100644 index 0000000..89a879e --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_5.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_5.js new file mode 100644 index 0000000..182bbfe --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_5.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['findattribute',['FindAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a2dcd4d5d6fb63396cd2f257c318b42c4',1,'tinyxml2::XMLElement']]], + ['firstattribute',['FirstAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a3e191704c8d499906ec11fe2f60c6686',1,'tinyxml2::XMLElement']]], + ['firstchild',['FirstChild',['../classtinyxml2_1_1_x_m_l_node.html#ae7dc225e1018cdd685f7563593a1fe08',1,'tinyxml2::XMLNode::FirstChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a536447dc7f54c0cd11e031dad94795ae',1,'tinyxml2::XMLHandle::FirstChild()']]], + ['firstchildelement',['FirstChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a1795a35852dc8aae877cc8ded986e59b',1,'tinyxml2::XMLNode::FirstChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a74b04dd0f15e0bf01860e282b840b6a3',1,'tinyxml2::XMLHandle::FirstChildElement()']]], + ['floatattribute',['FloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#ab1f4be2332e27dc640e9b6abd01d64dd',1,'tinyxml2::XMLElement']]], + ['floattext',['FloatText',['../classtinyxml2_1_1_x_m_l_element.html#a45444eb21f99ca46101545992dc2e927',1,'tinyxml2::XMLElement']]], + ['floatvalue',['FloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a27797b45d21c981257720db94f5f8801',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_6.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_6.html new file mode 100644 index 0000000..6afac06 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_6.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_6.js new file mode 100644 index 0000000..cc2aeca --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['get_20information_20out_20of_20xml',['Get information out of XML',['../_example_3.html',1,'']]], + ['getdocument',['GetDocument',['../classtinyxml2_1_1_x_m_l_node.html#a2de84cfa4ec3fe249bad745069d145f1',1,'tinyxml2::XMLNode::GetDocument() const'],['../classtinyxml2_1_1_x_m_l_node.html#af343d1ef0b45c0020e62d784d7e67a68',1,'tinyxml2::XMLNode::GetDocument()']]], + ['getlinenum',['GetLineNum',['../classtinyxml2_1_1_x_m_l_node.html#a9b5fc636646fda761d342c72e91cb286',1,'tinyxml2::XMLNode::GetLineNum()'],['../classtinyxml2_1_1_x_m_l_attribute.html#a02d5ea924586e35f9c13857d1671b765',1,'tinyxml2::XMLAttribute::GetLineNum()']]], + ['gettext',['GetText',['../classtinyxml2_1_1_x_m_l_element.html#a6d5c8d115561ade4e4456b71d91b6f51',1,'tinyxml2::XMLElement']]], + ['getuserdata',['GetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a7f0687574afa03bc479dc44f29db0afe',1,'tinyxml2::XMLNode']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_7.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_7.html new file mode 100644 index 0000000..de19107 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_7.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_7.js new file mode 100644 index 0000000..b7d6d1f --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hasbom',['HasBOM',['../classtinyxml2_1_1_x_m_l_document.html#a33fc5d159db873a179fa26338adb05bd',1,'tinyxml2::XMLDocument']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_8.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_8.html new file mode 100644 index 0000000..11e27cd --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_8.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_8.js new file mode 100644 index 0000000..b1519d5 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_8.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['insertafterchild',['InsertAfterChild',['../classtinyxml2_1_1_x_m_l_node.html#a85adb8f0b7477eec30f9a41d420b09c2',1,'tinyxml2::XMLNode']]], + ['insertendchild',['InsertEndChild',['../classtinyxml2_1_1_x_m_l_node.html#aeb249ed60f4e8bfad3709151c3ee4286',1,'tinyxml2::XMLNode']]], + ['insertfirstchild',['InsertFirstChild',['../classtinyxml2_1_1_x_m_l_node.html#a8ff7dc071f3a1a6ae2ac25a37492865d',1,'tinyxml2::XMLNode']]], + ['int64attribute',['Int64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a66d96972adecd816194191f13cc4a0a0',1,'tinyxml2::XMLElement']]], + ['int64text',['Int64Text',['../classtinyxml2_1_1_x_m_l_element.html#aab6151f7e3b4c2c0a8234e262d7b6b8a',1,'tinyxml2::XMLElement']]], + ['intattribute',['IntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a95a89b13bb14a2d4655e2b5b406c00d4',1,'tinyxml2::XMLElement']]], + ['intvalue',['IntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#adfa2433f0fdafd5c3880936de9affa80',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_9.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_9.html new file mode 100644 index 0000000..f8abbbe --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_9.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_9.js new file mode 100644 index 0000000..7c6cde9 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['load_20an_20xml_20file',['Load an XML File',['../_example_1.html',1,'']]], + ['lastchild',['LastChild',['../classtinyxml2_1_1_x_m_l_node.html#a9b8583a277e8e26f4cbbb5492786778e',1,'tinyxml2::XMLNode::LastChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a9d09f04435f0f2f7d0816b0198d0517b',1,'tinyxml2::XMLHandle::LastChild()']]], + ['lastchildelement',['LastChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a173e9d1341bc56992e2d320a35936551',1,'tinyxml2::XMLNode::LastChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a42cccd0ce8b1ce704f431025e9f19e0c',1,'tinyxml2::XMLHandle::LastChildElement()']]], + ['loadfile',['LoadFile',['../classtinyxml2_1_1_x_m_l_document.html#a2ebd4647a8af5fc6831b294ac26a150a',1,'tinyxml2::XMLDocument::LoadFile(const char *filename)'],['../classtinyxml2_1_1_x_m_l_document.html#a5f1d330fad44c52f3d265338dd2a6dc2',1,'tinyxml2::XMLDocument::LoadFile(FILE *)']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_a.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_a.html new file mode 100644 index 0000000..9601fce --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_a.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_a.js new file mode 100644 index 0000000..953470a --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_a.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['name',['Name',['../classtinyxml2_1_1_x_m_l_attribute.html#ab886c486ec19f02ed826f8dc129e5ad8',1,'tinyxml2::XMLAttribute::Name()'],['../classtinyxml2_1_1_x_m_l_element.html#a63e057fb5baee1dd29f323cb85907b35',1,'tinyxml2::XMLElement::Name()']]], + ['newcomment',['NewComment',['../classtinyxml2_1_1_x_m_l_document.html#ade4874bcb439954972ef2b3723ff3259',1,'tinyxml2::XMLDocument']]], + ['newdeclaration',['NewDeclaration',['../classtinyxml2_1_1_x_m_l_document.html#aee2eb3435923f5494dcc70ac225b60a2',1,'tinyxml2::XMLDocument']]], + ['newelement',['NewElement',['../classtinyxml2_1_1_x_m_l_document.html#a8aa7817d4a1001364b06373763ab99d6',1,'tinyxml2::XMLDocument']]], + ['newtext',['NewText',['../classtinyxml2_1_1_x_m_l_document.html#ab7e8b29ae4099092a8bb947da6361296',1,'tinyxml2::XMLDocument']]], + ['newunknown',['NewUnknown',['../classtinyxml2_1_1_x_m_l_document.html#a5385c937734ff6db9226ab707d2c7147',1,'tinyxml2::XMLDocument']]], + ['next',['Next',['../classtinyxml2_1_1_x_m_l_attribute.html#aee53571b21e7ce5421eb929523a8bbe6',1,'tinyxml2::XMLAttribute']]], + ['nextsibling',['NextSibling',['../classtinyxml2_1_1_x_m_l_node.html#a79db9ef0fe014d27790f2218b87bcbb5',1,'tinyxml2::XMLNode::NextSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#aad2eccc7c7c7b18145877c978c3850b5',1,'tinyxml2::XMLHandle::NextSibling()']]], + ['nextsiblingelement',['NextSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a1264c86233328f0cd36297552d982f80',1,'tinyxml2::XMLNode::NextSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#ae41d88ee061f3c49a081630ff753b2c5',1,'tinyxml2::XMLHandle::NextSiblingElement()']]], + ['nochildren',['NoChildren',['../classtinyxml2_1_1_x_m_l_node.html#ac3ab489e6e202a3cd1762d3b332e89d4',1,'tinyxml2::XMLNode']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_b.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_b.html new file mode 100644 index 0000000..0814e4e --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_b.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_b.js new file mode 100644 index 0000000..9772c30 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['openelement',['OpenElement',['../classtinyxml2_1_1_x_m_l_printer.html#a20fb06c83bd13e5140d7dd13af06c010',1,'tinyxml2::XMLPrinter']]], + ['operator_3d',['operator=',['../classtinyxml2_1_1_x_m_l_handle.html#a75b908322bb4b83be3281b6845252b20',1,'tinyxml2::XMLHandle']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_c.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_c.html new file mode 100644 index 0000000..da08c38 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_c.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_c.js new file mode 100644 index 0000000..2bc8ffa --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_c.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['parse_20an_20xml_20from_20char_20buffer',['Parse an XML from char buffer',['../_example_2.html',1,'']]], + ['parent',['Parent',['../classtinyxml2_1_1_x_m_l_node.html#ae0f62bc186c56c2e0483ebd52dbfbe34',1,'tinyxml2::XMLNode']]], + ['parse',['Parse',['../classtinyxml2_1_1_x_m_l_document.html#a1819bd34f540a7304c105a6232d25a1f',1,'tinyxml2::XMLDocument']]], + ['previoussibling',['PreviousSibling',['../classtinyxml2_1_1_x_m_l_node.html#aac667c513d445f8b783e1e15ef9d3551',1,'tinyxml2::XMLNode::PreviousSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#a428374e756f4db4cbc287fec64eae02c',1,'tinyxml2::XMLHandle::PreviousSibling()']]], + ['previoussiblingelement',['PreviousSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a872936cae46fb473eb47fec99129fc70',1,'tinyxml2::XMLNode::PreviousSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a786957e498039554ed334cdc36612a7e',1,'tinyxml2::XMLHandle::PreviousSiblingElement()']]], + ['print',['Print',['../classtinyxml2_1_1_x_m_l_document.html#a867cf5fa3e3ff6ae4847a8b7ee8ec083',1,'tinyxml2::XMLDocument']]], + ['printerror',['PrintError',['../classtinyxml2_1_1_x_m_l_document.html#a1d033945b42e125d933d6231e4571552',1,'tinyxml2::XMLDocument']]], + ['printspace',['PrintSpace',['../classtinyxml2_1_1_x_m_l_printer.html#a01148e2ebe6776e38c5a3e41bc5feb74',1,'tinyxml2::XMLPrinter']]], + ['pushattribute',['PushAttribute',['../classtinyxml2_1_1_x_m_l_printer.html#a9a4e2c9348b42e147629d5a99f4af3f0',1,'tinyxml2::XMLPrinter']]], + ['pushcomment',['PushComment',['../classtinyxml2_1_1_x_m_l_printer.html#afc8416814219591c2fd5656e0c233140',1,'tinyxml2::XMLPrinter']]], + ['pushheader',['PushHeader',['../classtinyxml2_1_1_x_m_l_printer.html#a178c608ce8476043d5d6513819cde903',1,'tinyxml2::XMLPrinter']]], + ['pushtext',['PushText',['../classtinyxml2_1_1_x_m_l_printer.html#a1cc16a9362df4332012cb13cff6441b3',1,'tinyxml2::XMLPrinter::PushText(const char *text, bool cdata=false)'],['../classtinyxml2_1_1_x_m_l_printer.html#a3e0d4d78de25d4cf081009e1431cea7e',1,'tinyxml2::XMLPrinter::PushText(int value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a661fb50e7e0a4918d2d259cb0fae647e',1,'tinyxml2::XMLPrinter::PushText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a96b0a0bfe105154a0a6c37d725258f0a',1,'tinyxml2::XMLPrinter::PushText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a4390e5fa1ed05189a8686647345ab29f',1,'tinyxml2::XMLPrinter::PushText(bool value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a1dbb1390e829d0673af66b9cd1928bd7',1,'tinyxml2::XMLPrinter::PushText(float value)'],['../classtinyxml2_1_1_x_m_l_printer.html#aa715302dfc09473c77c853cbd5431965',1,'tinyxml2::XMLPrinter::PushText(double value)']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_d.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_d.html new file mode 100644 index 0000000..9986c9c --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_d.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_d.js new file mode 100644 index 0000000..b78f218 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_d.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['queryattribute',['QueryAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a042fc30504347b84a56cf863ad528a4f',1,'tinyxml2::XMLElement']]], + ['queryboolattribute',['QueryBoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a14c1bb77c39689838be01838d86ca872',1,'tinyxml2::XMLElement']]], + ['querybooltext',['QueryBoolText',['../classtinyxml2_1_1_x_m_l_element.html#a3fe5417d59eb8f5c4afe924b7d332736',1,'tinyxml2::XMLElement']]], + ['queryboolvalue',['QueryBoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a5f32e038954256f61c21ff20fd13a09c',1,'tinyxml2::XMLAttribute']]], + ['querydoubleattribute',['QueryDoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a5f0964e2dbd8e2ee7fce9beab689443c',1,'tinyxml2::XMLElement']]], + ['querydoubletext',['QueryDoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a684679c99bb036a25652744cec6c4d96',1,'tinyxml2::XMLElement']]], + ['querydoublevalue',['QueryDoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a2aa6e55e8ea03af0609cf6690bff79b9',1,'tinyxml2::XMLAttribute']]], + ['queryfloatattribute',['QueryFloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#acd5eeddf6002ef90806af794b9d9a5a5',1,'tinyxml2::XMLElement']]], + ['queryfloattext',['QueryFloatText',['../classtinyxml2_1_1_x_m_l_element.html#afa332afedd93210daa6d44b88eb11e29',1,'tinyxml2::XMLElement']]], + ['queryfloatvalue',['QueryFloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a049dea6449a6259b6cfed44a9427b607',1,'tinyxml2::XMLAttribute']]], + ['queryint64attribute',['QueryInt64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a7c0955d80b6f8d196744eacb0f6e90a8',1,'tinyxml2::XMLElement']]], + ['queryint64text',['QueryInt64Text',['../classtinyxml2_1_1_x_m_l_element.html#a120c538c8eead169e635dbc70fb226d8',1,'tinyxml2::XMLElement']]], + ['queryint64value',['QueryInt64Value',['../classtinyxml2_1_1_x_m_l_attribute.html#a4e25344d6e4159026be34dbddf1dcac2',1,'tinyxml2::XMLAttribute']]], + ['queryintattribute',['QueryIntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a8a78bc1187c1c45ad89f2690eab567b1',1,'tinyxml2::XMLElement']]], + ['queryinttext',['QueryIntText',['../classtinyxml2_1_1_x_m_l_element.html#a926357996bef633cb736e1a558419632',1,'tinyxml2::XMLElement']]], + ['queryintvalue',['QueryIntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a6d5176260db00ea301c01af8457cd993',1,'tinyxml2::XMLAttribute']]], + ['queryunsignedattribute',['QueryUnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a26fc84cbfba6769dafcfbf256c05e22f',1,'tinyxml2::XMLElement']]], + ['queryunsignedtext',['QueryUnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a14d38aa4b5e18a46274a27425188a6a1',1,'tinyxml2::XMLElement']]], + ['queryunsignedvalue',['QueryUnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a48a7f3496f1415832e451bd8d09c9cb9',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_e.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_e.html new file mode 100644 index 0000000..9fa42bb --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_e.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_e.js new file mode 100644 index 0000000..8420c7d --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['read_20attributes_20and_20text_20information_2e',['Read attributes and text information.',['../_example_4.html',1,'']]], + ['rootelement',['RootElement',['../classtinyxml2_1_1_x_m_l_document.html#ad2b70320d3c2a071c2f36928edff3e1c',1,'tinyxml2::XMLDocument']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_f.html b/vendor/github.com/leethomason/tinyxml2/docs/search/all_f.html new file mode 100644 index 0000000..6ecfc0e --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/all_f.js b/vendor/github.com/leethomason/tinyxml2/docs/search/all_f.js new file mode 100644 index 0000000..be8e75d --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/all_f.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['savefile',['SaveFile',['../classtinyxml2_1_1_x_m_l_document.html#a73ac416b4a2aa0952e841220eb3da18f',1,'tinyxml2::XMLDocument::SaveFile(const char *filename, bool compact=false)'],['../classtinyxml2_1_1_x_m_l_document.html#a8b95779479a0035acc67b3a61dfe1b74',1,'tinyxml2::XMLDocument::SaveFile(FILE *fp, bool compact=false)']]], + ['setattribute',['SetAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html#a406d2c4a13c7af99a65edb59dd9f7581',1,'tinyxml2::XMLAttribute::SetAttribute(const char *value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ad86d7d7058d76761c3a80662566a57e5',1,'tinyxml2::XMLAttribute::SetAttribute(int value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae70468c0f6df2748ba3529c716999fae',1,'tinyxml2::XMLAttribute::SetAttribute(unsigned value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a7c1240f479722b9aa29b6c030aa116c2',1,'tinyxml2::XMLAttribute::SetAttribute(int64_t value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ab3516def4fe058fe328f2b89fc2d77da',1,'tinyxml2::XMLAttribute::SetAttribute(bool value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a9a65ab3147abe8ccbbd373ce8791e818',1,'tinyxml2::XMLAttribute::SetAttribute(double value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae95e843313aaf5d56c32530b6456df02',1,'tinyxml2::XMLAttribute::SetAttribute(float value)'],['../classtinyxml2_1_1_x_m_l_element.html#a11943abf2d0831548c3790dd5d9f119c',1,'tinyxml2::XMLElement::SetAttribute(const char *name, const char *value)'],['../classtinyxml2_1_1_x_m_l_element.html#aae6568c64c7f1cc88be8461ba41a79cf',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae143997e90064ba82326b29a9930ea8f',1,'tinyxml2::XMLElement::SetAttribute(const char *name, unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#aaeefdf9171fec91b13a776b42299b0dd',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#aa848b696e6a75e4e545c6da9893b11e1',1,'tinyxml2::XMLElement::SetAttribute(const char *name, bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a233397ee81e70eb5d4b814c5f8698533',1,'tinyxml2::XMLElement::SetAttribute(const char *name, double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a554b70d882e65b28fc084b23df9b9759',1,'tinyxml2::XMLElement::SetAttribute(const char *name, float value)']]], + ['setbom',['SetBOM',['../classtinyxml2_1_1_x_m_l_document.html#a14419b698f7c4b140df4e80f3f0c93b0',1,'tinyxml2::XMLDocument']]], + ['setcdata',['SetCData',['../classtinyxml2_1_1_x_m_l_text.html#ad080357d76ab7cc59d7651249949329d',1,'tinyxml2::XMLText']]], + ['setname',['SetName',['../classtinyxml2_1_1_x_m_l_element.html#a97712009a530d8cb8a63bf705f02b4f1',1,'tinyxml2::XMLElement']]], + ['settext',['SetText',['../classtinyxml2_1_1_x_m_l_element.html#a1f9c2cd61b72af5ae708d37b7ad283ce',1,'tinyxml2::XMLElement::SetText(const char *inText)'],['../classtinyxml2_1_1_x_m_l_element.html#aeae8917b5ea6060b3c08d4e3d8d632d7',1,'tinyxml2::XMLElement::SetText(int value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7bbfcc11d516598bc924a8fba4d08597',1,'tinyxml2::XMLElement::SetText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7b62cd33acdfeff7ea2b1b330d4368e4',1,'tinyxml2::XMLElement::SetText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae4b543d6770de76fb6ab68e541c192a4',1,'tinyxml2::XMLElement::SetText(bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a67bd77ac9aaeff58ff20b4275a65ba4e',1,'tinyxml2::XMLElement::SetText(double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a51d560da5ae3ad6b75e0ab9ffb2ae42a',1,'tinyxml2::XMLElement::SetText(float value)']]], + ['setuserdata',['SetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a002978fc889cc011d143185f2377eca2',1,'tinyxml2::XMLNode']]], + ['setvalue',['SetValue',['../classtinyxml2_1_1_x_m_l_node.html#a09dd68cf9eae137579f6e50f36487513',1,'tinyxml2::XMLNode']]], + ['shallowclone',['ShallowClone',['../classtinyxml2_1_1_x_m_l_node.html#a8402cbd3129d20e9e6024bbcc0531283',1,'tinyxml2::XMLNode::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_text.html#af3a81ed4dd49d5151c477b3f265a3011',1,'tinyxml2::XMLText::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_comment.html#a08991cc63fadf7e95078ac4f9ea1b073',1,'tinyxml2::XMLComment::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a118d47518dd9e522644e42efa259aed7',1,'tinyxml2::XMLDeclaration::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a0125f41c89763dea06619b5fd5246b4c',1,'tinyxml2::XMLUnknown::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_element.html#ac035742d68b0c50c3f676374e59fe750',1,'tinyxml2::XMLElement::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_document.html#aa37cc1709d7e1e988bc17dcfb24a69b8',1,'tinyxml2::XMLDocument::ShallowClone()']]], + ['shallowequal',['ShallowEqual',['../classtinyxml2_1_1_x_m_l_node.html#a7ce18b751c3ea09eac292dca264f9226',1,'tinyxml2::XMLNode::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_text.html#ae0fff8a24e2de7eb073fd192e9db0331',1,'tinyxml2::XMLText::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_comment.html#a6f7d227b25afa8cc3c763b7cc8833739',1,'tinyxml2::XMLComment::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_declaration.html#aa26b70011694e9b9e9480b929e9b78d6',1,'tinyxml2::XMLDeclaration::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a0715ab2c05d7f74845c188122213b116',1,'tinyxml2::XMLUnknown::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_element.html#ad9ea913a460b48979bd83cf9871c99f6',1,'tinyxml2::XMLElement::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_document.html#a6fe5ef18699091844fcf64b56ffa5bf9',1,'tinyxml2::XMLDocument::ShallowEqual()']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/classes_0.html b/vendor/github.com/leethomason/tinyxml2/docs/search/classes_0.html new file mode 100644 index 0000000..1c3e406 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/classes_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/classes_0.js b/vendor/github.com/leethomason/tinyxml2/docs/search/classes_0.js new file mode 100644 index 0000000..e1d0d44 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/classes_0.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['xmlattribute',['XMLAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html',1,'tinyxml2']]], + ['xmlcomment',['XMLComment',['../classtinyxml2_1_1_x_m_l_comment.html',1,'tinyxml2']]], + ['xmlconsthandle',['XMLConstHandle',['../classtinyxml2_1_1_x_m_l_const_handle.html',1,'tinyxml2']]], + ['xmldeclaration',['XMLDeclaration',['../classtinyxml2_1_1_x_m_l_declaration.html',1,'tinyxml2']]], + ['xmldocument',['XMLDocument',['../classtinyxml2_1_1_x_m_l_document.html',1,'tinyxml2']]], + ['xmlelement',['XMLElement',['../classtinyxml2_1_1_x_m_l_element.html',1,'tinyxml2']]], + ['xmlhandle',['XMLHandle',['../classtinyxml2_1_1_x_m_l_handle.html',1,'tinyxml2']]], + ['xmlnode',['XMLNode',['../classtinyxml2_1_1_x_m_l_node.html',1,'tinyxml2']]], + ['xmlprinter',['XMLPrinter',['../classtinyxml2_1_1_x_m_l_printer.html',1,'tinyxml2']]], + ['xmltext',['XMLText',['../classtinyxml2_1_1_x_m_l_text.html',1,'tinyxml2']]], + ['xmlunknown',['XMLUnknown',['../classtinyxml2_1_1_x_m_l_unknown.html',1,'tinyxml2']]], + ['xmlvisitor',['XMLVisitor',['../classtinyxml2_1_1_x_m_l_visitor.html',1,'tinyxml2']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/close.png b/vendor/github.com/leethomason/tinyxml2/docs/search/close.png new file mode 100644 index 0000000..9342d3d Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/search/close.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_0.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_0.html new file mode 100644 index 0000000..4e6d87d --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_0.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_0.js new file mode 100644 index 0000000..28cfce2 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['accept',['Accept',['../classtinyxml2_1_1_x_m_l_node.html#a81e66df0a44c67a7af17f3b77a152785',1,'tinyxml2::XMLNode::Accept()'],['../classtinyxml2_1_1_x_m_l_text.html#a1b2c1448f1a21299d0a7913f18b55206',1,'tinyxml2::XMLText::Accept()'],['../classtinyxml2_1_1_x_m_l_comment.html#a4a33dc32fae0285b03f9cfcb3e43e122',1,'tinyxml2::XMLComment::Accept()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a5f376019fb34752eb248548f42f32045',1,'tinyxml2::XMLDeclaration::Accept()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a70983aa1b1cff3d3aa6d4d0a80e5ee48',1,'tinyxml2::XMLUnknown::Accept()'],['../classtinyxml2_1_1_x_m_l_element.html#a3ea8a40e788fb9ad876c28a32932c6d5',1,'tinyxml2::XMLElement::Accept()'],['../classtinyxml2_1_1_x_m_l_document.html#a9efa54f7ecb37c17ab1fa2b3078ccca1',1,'tinyxml2::XMLDocument::Accept()']]], + ['attribute',['Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a70e49ed60b11212ae35f7e354cfe1de9',1,'tinyxml2::XMLElement']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_1.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_1.html new file mode 100644 index 0000000..b343e2d --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_1.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_1.js new file mode 100644 index 0000000..2f5497b --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['boolattribute',['BoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a53eda26131e1ad1031ef8ec8adb51bd8',1,'tinyxml2::XMLElement']]], + ['booltext',['BoolText',['../classtinyxml2_1_1_x_m_l_element.html#a68569f59f6382bcea7f5013ec59736d2',1,'tinyxml2::XMLElement']]], + ['boolvalue',['BoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a98ce5207344ad33a265b0422addae1ff',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_10.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_10.html new file mode 100644 index 0000000..72bc1ea --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_10.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_10.js new file mode 100644 index 0000000..b5500db --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_10.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['tocomment',['ToComment',['../classtinyxml2_1_1_x_m_l_node.html#aff47671055aa99840a1c1ebd661e63e3',1,'tinyxml2::XMLNode::ToComment()'],['../classtinyxml2_1_1_x_m_l_comment.html#a8093e1dc8a34fa446d9dc3fde0e6c0ee',1,'tinyxml2::XMLComment::ToComment()']]], + ['todeclaration',['ToDeclaration',['../classtinyxml2_1_1_x_m_l_node.html#a174fd4c22c010b58138c1b84a0dfbd51',1,'tinyxml2::XMLNode::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a159d8ac45865215e88059ea1e5b52fc5',1,'tinyxml2::XMLDeclaration::ToDeclaration()'],['../classtinyxml2_1_1_x_m_l_handle.html#a108858be7ee3eb53f73b5194c1aa8ff0',1,'tinyxml2::XMLHandle::ToDeclaration()']]], + ['todocument',['ToDocument',['../classtinyxml2_1_1_x_m_l_node.html#a836e2966ed736fc3c94f70e12a2a3357',1,'tinyxml2::XMLNode::ToDocument()'],['../classtinyxml2_1_1_x_m_l_document.html#a3e185f880882bd978367bb55937735ec',1,'tinyxml2::XMLDocument::ToDocument()']]], + ['toelement',['ToElement',['../classtinyxml2_1_1_x_m_l_node.html#aab516e699567f75cc9ab2ef2eee501e8',1,'tinyxml2::XMLNode::ToElement()'],['../classtinyxml2_1_1_x_m_l_element.html#ad9ff5c2dbc15df36cf664ce1b0ea0a5d',1,'tinyxml2::XMLElement::ToElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a5e73ed8f3f6f9619d5a8bb1862c47d99',1,'tinyxml2::XMLHandle::ToElement()']]], + ['tonode',['ToNode',['../classtinyxml2_1_1_x_m_l_handle.html#a03ea6ec970a021b71bf1219a0f6717df',1,'tinyxml2::XMLHandle']]], + ['totext',['ToText',['../classtinyxml2_1_1_x_m_l_node.html#a41c55dab9162d1eb62db2008430e376b',1,'tinyxml2::XMLNode::ToText()'],['../classtinyxml2_1_1_x_m_l_text.html#ab1213b4ddebe9b17ec7e7040e9f1caf7',1,'tinyxml2::XMLText::ToText()'],['../classtinyxml2_1_1_x_m_l_handle.html#a6ab9e8cbfb41417246e5657e3842c62a',1,'tinyxml2::XMLHandle::ToText()']]], + ['tounknown',['ToUnknown',['../classtinyxml2_1_1_x_m_l_node.html#a8675a74aa0ada6eccab0c77ef3e5b9bd',1,'tinyxml2::XMLNode::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_unknown.html#af4374856421921cad578c8affae872b6',1,'tinyxml2::XMLUnknown::ToUnknown()'],['../classtinyxml2_1_1_x_m_l_handle.html#aa387368a1ad8d843a9f12df863d298de',1,'tinyxml2::XMLHandle::ToUnknown()']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_11.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_11.html new file mode 100644 index 0000000..6948a61 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_11.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_11.js new file mode 100644 index 0000000..7e35c72 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_11.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['unsignedattribute',['UnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#afea43a1d4aa33e3703ddee5fc9adc26c',1,'tinyxml2::XMLElement']]], + ['unsignedtext',['UnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a49bad014ffcc17b0b6119d5b2c97dfb5',1,'tinyxml2::XMLElement']]], + ['unsignedvalue',['UnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a0be5343b08a957c42c02c5d32c35d338',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_12.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_12.html new file mode 100644 index 0000000..3df8489 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_12.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_12.js new file mode 100644 index 0000000..bc84876 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_12.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['value',['Value',['../classtinyxml2_1_1_x_m_l_node.html#a66344989a4b436155bcda72bd6b07b82',1,'tinyxml2::XMLNode::Value()'],['../classtinyxml2_1_1_x_m_l_attribute.html#a1aab1dd0e43ecbcfa306adbcf3a3d853',1,'tinyxml2::XMLAttribute::Value()']]], + ['visit',['Visit',['../classtinyxml2_1_1_x_m_l_visitor.html#adc75bd459fc7ba8223b50f0616767f9a',1,'tinyxml2::XMLVisitor::Visit(const XMLDeclaration &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af30233565856480ea48b6fa0d6dec65b',1,'tinyxml2::XMLVisitor::Visit(const XMLText &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#acc8147fb5a85f6c65721654e427752d7',1,'tinyxml2::XMLVisitor::Visit(const XMLComment &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a14e4748387c34bf53d24e8119bb1f292',1,'tinyxml2::XMLVisitor::Visit(const XMLUnknown &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a275ae25544a12199ae40b6994ca6e4de',1,'tinyxml2::XMLPrinter::Visit(const XMLText &text)'],['../classtinyxml2_1_1_x_m_l_printer.html#a3f16a30be1537ac141d9bd2db824ba9e',1,'tinyxml2::XMLPrinter::Visit(const XMLComment &comment)'],['../classtinyxml2_1_1_x_m_l_printer.html#a9ceff5cd85e5db65838962174fcdcc46',1,'tinyxml2::XMLPrinter::Visit(const XMLDeclaration &declaration)'],['../classtinyxml2_1_1_x_m_l_printer.html#aa15e1da81e17dea5da6499ac5b08d9d8',1,'tinyxml2::XMLPrinter::Visit(const XMLUnknown &unknown)']]], + ['visitenter',['VisitEnter',['../classtinyxml2_1_1_x_m_l_visitor.html#acb3c22fc5f60eb9db98f533f2761f67d',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#af97980a17dd4e37448b181f5ddfa92b5',1,'tinyxml2::XMLVisitor::VisitEnter(const XMLElement &, const XMLAttribute *)'],['../classtinyxml2_1_1_x_m_l_printer.html#ae966b988a7a28c41e91c5ca17fb2054b',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a2ce2aa508c21ac91615093ddb9c282c5',1,'tinyxml2::XMLPrinter::VisitEnter(const XMLElement &element, const XMLAttribute *attribute)']]], + ['visitexit',['VisitExit',['../classtinyxml2_1_1_x_m_l_visitor.html#a170e9989cd046ba904f302d087e07086',1,'tinyxml2::XMLVisitor::VisitExit(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_visitor.html#a772f10ddc83f881956d32628faa16eb6',1,'tinyxml2::XMLVisitor::VisitExit(const XMLElement &)'],['../classtinyxml2_1_1_x_m_l_printer.html#a15fc1f2b922f540917dcf52808737b29',1,'tinyxml2::XMLPrinter::VisitExit(const XMLDocument &)'],['../classtinyxml2_1_1_x_m_l_printer.html#ae99e0a7086543591edfb565f24689098',1,'tinyxml2::XMLPrinter::VisitExit(const XMLElement &element)']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_13.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_13.html new file mode 100644 index 0000000..febf8e0 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_13.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_13.js new file mode 100644 index 0000000..3c26364 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_13.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['xmldocument',['XMLDocument',['../classtinyxml2_1_1_x_m_l_document.html#a57ddf17b6e054dda10af98991b1b8f70',1,'tinyxml2::XMLDocument']]], + ['xmlhandle',['XMLHandle',['../classtinyxml2_1_1_x_m_l_handle.html#a9c240a35c18f053509b4b97ddccd9793',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode *node)'],['../classtinyxml2_1_1_x_m_l_handle.html#aa2edbc1c0d3e3e8259bd98de7f1cf500',1,'tinyxml2::XMLHandle::XMLHandle(XMLNode &node)'],['../classtinyxml2_1_1_x_m_l_handle.html#afd8e01e6018c07347b8e6d80272466aa',1,'tinyxml2::XMLHandle::XMLHandle(const XMLHandle &ref)']]], + ['xmlprinter',['XMLPrinter',['../classtinyxml2_1_1_x_m_l_printer.html#aa6d3841c069085f5b8a27bc7103c04f7',1,'tinyxml2::XMLPrinter']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_2.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_2.html new file mode 100644 index 0000000..ecce2f3 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_2.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_2.js new file mode 100644 index 0000000..62ab567 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['cdata',['CData',['../classtinyxml2_1_1_x_m_l_text.html#ac1bb5ea4166c320882d9e0ad16fd385b',1,'tinyxml2::XMLText']]], + ['clear',['Clear',['../classtinyxml2_1_1_x_m_l_document.html#a65656b0b2cbc822708eb351504178aaf',1,'tinyxml2::XMLDocument']]], + ['clearbuffer',['ClearBuffer',['../classtinyxml2_1_1_x_m_l_printer.html#a216157765b7267bf389975b1cbf9a909',1,'tinyxml2::XMLPrinter']]], + ['closeelement',['CloseElement',['../classtinyxml2_1_1_x_m_l_printer.html#ad04d29562b46fcdb23ab320f8b664240',1,'tinyxml2::XMLPrinter']]], + ['cstr',['CStr',['../classtinyxml2_1_1_x_m_l_printer.html#a180671d73844f159f2d4aafbc11d106e',1,'tinyxml2::XMLPrinter']]], + ['cstrsize',['CStrSize',['../classtinyxml2_1_1_x_m_l_printer.html#a3256cf3523d4898b91abb18b924be04c',1,'tinyxml2::XMLPrinter']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_3.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_3.html new file mode 100644 index 0000000..15f06ab --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_3.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_3.js new file mode 100644 index 0000000..0c8c9f9 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_3.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['deepclone',['DeepClone',['../classtinyxml2_1_1_x_m_l_node.html#a62c71b6bf8734b5424063b8d9a61c266',1,'tinyxml2::XMLNode']]], + ['deepcopy',['DeepCopy',['../classtinyxml2_1_1_x_m_l_document.html#af592ffc91514e25a39664521ac83db45',1,'tinyxml2::XMLDocument']]], + ['deleteattribute',['DeleteAttribute',['../classtinyxml2_1_1_x_m_l_element.html#aebd45aa7118964c30b32fe12e944628a',1,'tinyxml2::XMLElement']]], + ['deletechild',['DeleteChild',['../classtinyxml2_1_1_x_m_l_node.html#a363b6edbd6ebd55f8387d2b89f2b0921',1,'tinyxml2::XMLNode']]], + ['deletechildren',['DeleteChildren',['../classtinyxml2_1_1_x_m_l_node.html#a0360085cc54df5bff85d5c5da13afdce',1,'tinyxml2::XMLNode']]], + ['deletenode',['DeleteNode',['../classtinyxml2_1_1_x_m_l_document.html#ac1d6e2c7fcc1a660624ac4f68e96380d',1,'tinyxml2::XMLDocument']]], + ['doubleattribute',['DoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a10a90c505aea716bf073eea1c97f33b5',1,'tinyxml2::XMLElement']]], + ['doubletext',['DoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a81b1ff0cf2f2cd09be8badc08b39a2b7',1,'tinyxml2::XMLElement']]], + ['doublevalue',['DoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a4aa73513f54ff0087d3e804f0f54e30f',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_4.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_4.html new file mode 100644 index 0000000..8985ff2 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_4.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_4.js new file mode 100644 index 0000000..47e3245 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['error',['Error',['../classtinyxml2_1_1_x_m_l_document.html#a34e6318e182e40e3cc4f4ba5d59ed9ed',1,'tinyxml2::XMLDocument']]], + ['errorid',['ErrorID',['../classtinyxml2_1_1_x_m_l_document.html#afa3ed33b3107f920ec2b301f805ac17d',1,'tinyxml2::XMLDocument']]], + ['errorlinenum',['ErrorLineNum',['../classtinyxml2_1_1_x_m_l_document.html#a57400f816dbe7799ece33615ead9ab76',1,'tinyxml2::XMLDocument']]], + ['errorstr',['ErrorStr',['../classtinyxml2_1_1_x_m_l_document.html#ad75aa9d32c4e8b300655186808aa9abf',1,'tinyxml2::XMLDocument']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_5.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_5.html new file mode 100644 index 0000000..0314918 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_5.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_5.js new file mode 100644 index 0000000..182bbfe --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_5.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['findattribute',['FindAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a2dcd4d5d6fb63396cd2f257c318b42c4',1,'tinyxml2::XMLElement']]], + ['firstattribute',['FirstAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a3e191704c8d499906ec11fe2f60c6686',1,'tinyxml2::XMLElement']]], + ['firstchild',['FirstChild',['../classtinyxml2_1_1_x_m_l_node.html#ae7dc225e1018cdd685f7563593a1fe08',1,'tinyxml2::XMLNode::FirstChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a536447dc7f54c0cd11e031dad94795ae',1,'tinyxml2::XMLHandle::FirstChild()']]], + ['firstchildelement',['FirstChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a1795a35852dc8aae877cc8ded986e59b',1,'tinyxml2::XMLNode::FirstChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a74b04dd0f15e0bf01860e282b840b6a3',1,'tinyxml2::XMLHandle::FirstChildElement()']]], + ['floatattribute',['FloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#ab1f4be2332e27dc640e9b6abd01d64dd',1,'tinyxml2::XMLElement']]], + ['floattext',['FloatText',['../classtinyxml2_1_1_x_m_l_element.html#a45444eb21f99ca46101545992dc2e927',1,'tinyxml2::XMLElement']]], + ['floatvalue',['FloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a27797b45d21c981257720db94f5f8801',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_6.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_6.html new file mode 100644 index 0000000..c506123 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_6.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_6.js new file mode 100644 index 0000000..e733119 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getdocument',['GetDocument',['../classtinyxml2_1_1_x_m_l_node.html#a2de84cfa4ec3fe249bad745069d145f1',1,'tinyxml2::XMLNode::GetDocument() const'],['../classtinyxml2_1_1_x_m_l_node.html#af343d1ef0b45c0020e62d784d7e67a68',1,'tinyxml2::XMLNode::GetDocument()']]], + ['getlinenum',['GetLineNum',['../classtinyxml2_1_1_x_m_l_node.html#a9b5fc636646fda761d342c72e91cb286',1,'tinyxml2::XMLNode::GetLineNum()'],['../classtinyxml2_1_1_x_m_l_attribute.html#a02d5ea924586e35f9c13857d1671b765',1,'tinyxml2::XMLAttribute::GetLineNum()']]], + ['gettext',['GetText',['../classtinyxml2_1_1_x_m_l_element.html#a6d5c8d115561ade4e4456b71d91b6f51',1,'tinyxml2::XMLElement']]], + ['getuserdata',['GetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a7f0687574afa03bc479dc44f29db0afe',1,'tinyxml2::XMLNode']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_7.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_7.html new file mode 100644 index 0000000..83a7b84 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_7.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_7.js new file mode 100644 index 0000000..b7d6d1f --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hasbom',['HasBOM',['../classtinyxml2_1_1_x_m_l_document.html#a33fc5d159db873a179fa26338adb05bd',1,'tinyxml2::XMLDocument']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_8.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_8.html new file mode 100644 index 0000000..b55f0e6 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_8.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_8.js new file mode 100644 index 0000000..b1519d5 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_8.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['insertafterchild',['InsertAfterChild',['../classtinyxml2_1_1_x_m_l_node.html#a85adb8f0b7477eec30f9a41d420b09c2',1,'tinyxml2::XMLNode']]], + ['insertendchild',['InsertEndChild',['../classtinyxml2_1_1_x_m_l_node.html#aeb249ed60f4e8bfad3709151c3ee4286',1,'tinyxml2::XMLNode']]], + ['insertfirstchild',['InsertFirstChild',['../classtinyxml2_1_1_x_m_l_node.html#a8ff7dc071f3a1a6ae2ac25a37492865d',1,'tinyxml2::XMLNode']]], + ['int64attribute',['Int64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a66d96972adecd816194191f13cc4a0a0',1,'tinyxml2::XMLElement']]], + ['int64text',['Int64Text',['../classtinyxml2_1_1_x_m_l_element.html#aab6151f7e3b4c2c0a8234e262d7b6b8a',1,'tinyxml2::XMLElement']]], + ['intattribute',['IntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a95a89b13bb14a2d4655e2b5b406c00d4',1,'tinyxml2::XMLElement']]], + ['intvalue',['IntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#adfa2433f0fdafd5c3880936de9affa80',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_9.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_9.html new file mode 100644 index 0000000..c73f07b --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_9.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_9.js new file mode 100644 index 0000000..42991e3 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['lastchild',['LastChild',['../classtinyxml2_1_1_x_m_l_node.html#a9b8583a277e8e26f4cbbb5492786778e',1,'tinyxml2::XMLNode::LastChild()'],['../classtinyxml2_1_1_x_m_l_handle.html#a9d09f04435f0f2f7d0816b0198d0517b',1,'tinyxml2::XMLHandle::LastChild()']]], + ['lastchildelement',['LastChildElement',['../classtinyxml2_1_1_x_m_l_node.html#a173e9d1341bc56992e2d320a35936551',1,'tinyxml2::XMLNode::LastChildElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a42cccd0ce8b1ce704f431025e9f19e0c',1,'tinyxml2::XMLHandle::LastChildElement()']]], + ['loadfile',['LoadFile',['../classtinyxml2_1_1_x_m_l_document.html#a2ebd4647a8af5fc6831b294ac26a150a',1,'tinyxml2::XMLDocument::LoadFile(const char *filename)'],['../classtinyxml2_1_1_x_m_l_document.html#a5f1d330fad44c52f3d265338dd2a6dc2',1,'tinyxml2::XMLDocument::LoadFile(FILE *)']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_a.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_a.html new file mode 100644 index 0000000..f10ad63 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_a.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_a.js new file mode 100644 index 0000000..953470a --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_a.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['name',['Name',['../classtinyxml2_1_1_x_m_l_attribute.html#ab886c486ec19f02ed826f8dc129e5ad8',1,'tinyxml2::XMLAttribute::Name()'],['../classtinyxml2_1_1_x_m_l_element.html#a63e057fb5baee1dd29f323cb85907b35',1,'tinyxml2::XMLElement::Name()']]], + ['newcomment',['NewComment',['../classtinyxml2_1_1_x_m_l_document.html#ade4874bcb439954972ef2b3723ff3259',1,'tinyxml2::XMLDocument']]], + ['newdeclaration',['NewDeclaration',['../classtinyxml2_1_1_x_m_l_document.html#aee2eb3435923f5494dcc70ac225b60a2',1,'tinyxml2::XMLDocument']]], + ['newelement',['NewElement',['../classtinyxml2_1_1_x_m_l_document.html#a8aa7817d4a1001364b06373763ab99d6',1,'tinyxml2::XMLDocument']]], + ['newtext',['NewText',['../classtinyxml2_1_1_x_m_l_document.html#ab7e8b29ae4099092a8bb947da6361296',1,'tinyxml2::XMLDocument']]], + ['newunknown',['NewUnknown',['../classtinyxml2_1_1_x_m_l_document.html#a5385c937734ff6db9226ab707d2c7147',1,'tinyxml2::XMLDocument']]], + ['next',['Next',['../classtinyxml2_1_1_x_m_l_attribute.html#aee53571b21e7ce5421eb929523a8bbe6',1,'tinyxml2::XMLAttribute']]], + ['nextsibling',['NextSibling',['../classtinyxml2_1_1_x_m_l_node.html#a79db9ef0fe014d27790f2218b87bcbb5',1,'tinyxml2::XMLNode::NextSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#aad2eccc7c7c7b18145877c978c3850b5',1,'tinyxml2::XMLHandle::NextSibling()']]], + ['nextsiblingelement',['NextSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a1264c86233328f0cd36297552d982f80',1,'tinyxml2::XMLNode::NextSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#ae41d88ee061f3c49a081630ff753b2c5',1,'tinyxml2::XMLHandle::NextSiblingElement()']]], + ['nochildren',['NoChildren',['../classtinyxml2_1_1_x_m_l_node.html#ac3ab489e6e202a3cd1762d3b332e89d4',1,'tinyxml2::XMLNode']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_b.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_b.html new file mode 100644 index 0000000..172ea1b --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_b.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_b.js new file mode 100644 index 0000000..9772c30 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['openelement',['OpenElement',['../classtinyxml2_1_1_x_m_l_printer.html#a20fb06c83bd13e5140d7dd13af06c010',1,'tinyxml2::XMLPrinter']]], + ['operator_3d',['operator=',['../classtinyxml2_1_1_x_m_l_handle.html#a75b908322bb4b83be3281b6845252b20',1,'tinyxml2::XMLHandle']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_c.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_c.html new file mode 100644 index 0000000..99492ba --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_c.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_c.js new file mode 100644 index 0000000..ce9baee --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_c.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['parent',['Parent',['../classtinyxml2_1_1_x_m_l_node.html#ae0f62bc186c56c2e0483ebd52dbfbe34',1,'tinyxml2::XMLNode']]], + ['parse',['Parse',['../classtinyxml2_1_1_x_m_l_document.html#a1819bd34f540a7304c105a6232d25a1f',1,'tinyxml2::XMLDocument']]], + ['previoussibling',['PreviousSibling',['../classtinyxml2_1_1_x_m_l_node.html#aac667c513d445f8b783e1e15ef9d3551',1,'tinyxml2::XMLNode::PreviousSibling()'],['../classtinyxml2_1_1_x_m_l_handle.html#a428374e756f4db4cbc287fec64eae02c',1,'tinyxml2::XMLHandle::PreviousSibling()']]], + ['previoussiblingelement',['PreviousSiblingElement',['../classtinyxml2_1_1_x_m_l_node.html#a872936cae46fb473eb47fec99129fc70',1,'tinyxml2::XMLNode::PreviousSiblingElement()'],['../classtinyxml2_1_1_x_m_l_handle.html#a786957e498039554ed334cdc36612a7e',1,'tinyxml2::XMLHandle::PreviousSiblingElement()']]], + ['print',['Print',['../classtinyxml2_1_1_x_m_l_document.html#a867cf5fa3e3ff6ae4847a8b7ee8ec083',1,'tinyxml2::XMLDocument']]], + ['printerror',['PrintError',['../classtinyxml2_1_1_x_m_l_document.html#a1d033945b42e125d933d6231e4571552',1,'tinyxml2::XMLDocument']]], + ['printspace',['PrintSpace',['../classtinyxml2_1_1_x_m_l_printer.html#a01148e2ebe6776e38c5a3e41bc5feb74',1,'tinyxml2::XMLPrinter']]], + ['pushattribute',['PushAttribute',['../classtinyxml2_1_1_x_m_l_printer.html#a9a4e2c9348b42e147629d5a99f4af3f0',1,'tinyxml2::XMLPrinter']]], + ['pushcomment',['PushComment',['../classtinyxml2_1_1_x_m_l_printer.html#afc8416814219591c2fd5656e0c233140',1,'tinyxml2::XMLPrinter']]], + ['pushheader',['PushHeader',['../classtinyxml2_1_1_x_m_l_printer.html#a178c608ce8476043d5d6513819cde903',1,'tinyxml2::XMLPrinter']]], + ['pushtext',['PushText',['../classtinyxml2_1_1_x_m_l_printer.html#a1cc16a9362df4332012cb13cff6441b3',1,'tinyxml2::XMLPrinter::PushText(const char *text, bool cdata=false)'],['../classtinyxml2_1_1_x_m_l_printer.html#a3e0d4d78de25d4cf081009e1431cea7e',1,'tinyxml2::XMLPrinter::PushText(int value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a661fb50e7e0a4918d2d259cb0fae647e',1,'tinyxml2::XMLPrinter::PushText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a96b0a0bfe105154a0a6c37d725258f0a',1,'tinyxml2::XMLPrinter::PushText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a4390e5fa1ed05189a8686647345ab29f',1,'tinyxml2::XMLPrinter::PushText(bool value)'],['../classtinyxml2_1_1_x_m_l_printer.html#a1dbb1390e829d0673af66b9cd1928bd7',1,'tinyxml2::XMLPrinter::PushText(float value)'],['../classtinyxml2_1_1_x_m_l_printer.html#aa715302dfc09473c77c853cbd5431965',1,'tinyxml2::XMLPrinter::PushText(double value)']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_d.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_d.html new file mode 100644 index 0000000..5be9ecc --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_d.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_d.js new file mode 100644 index 0000000..b78f218 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_d.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['queryattribute',['QueryAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a042fc30504347b84a56cf863ad528a4f',1,'tinyxml2::XMLElement']]], + ['queryboolattribute',['QueryBoolAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a14c1bb77c39689838be01838d86ca872',1,'tinyxml2::XMLElement']]], + ['querybooltext',['QueryBoolText',['../classtinyxml2_1_1_x_m_l_element.html#a3fe5417d59eb8f5c4afe924b7d332736',1,'tinyxml2::XMLElement']]], + ['queryboolvalue',['QueryBoolValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a5f32e038954256f61c21ff20fd13a09c',1,'tinyxml2::XMLAttribute']]], + ['querydoubleattribute',['QueryDoubleAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a5f0964e2dbd8e2ee7fce9beab689443c',1,'tinyxml2::XMLElement']]], + ['querydoubletext',['QueryDoubleText',['../classtinyxml2_1_1_x_m_l_element.html#a684679c99bb036a25652744cec6c4d96',1,'tinyxml2::XMLElement']]], + ['querydoublevalue',['QueryDoubleValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a2aa6e55e8ea03af0609cf6690bff79b9',1,'tinyxml2::XMLAttribute']]], + ['queryfloatattribute',['QueryFloatAttribute',['../classtinyxml2_1_1_x_m_l_element.html#acd5eeddf6002ef90806af794b9d9a5a5',1,'tinyxml2::XMLElement']]], + ['queryfloattext',['QueryFloatText',['../classtinyxml2_1_1_x_m_l_element.html#afa332afedd93210daa6d44b88eb11e29',1,'tinyxml2::XMLElement']]], + ['queryfloatvalue',['QueryFloatValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a049dea6449a6259b6cfed44a9427b607',1,'tinyxml2::XMLAttribute']]], + ['queryint64attribute',['QueryInt64Attribute',['../classtinyxml2_1_1_x_m_l_element.html#a7c0955d80b6f8d196744eacb0f6e90a8',1,'tinyxml2::XMLElement']]], + ['queryint64text',['QueryInt64Text',['../classtinyxml2_1_1_x_m_l_element.html#a120c538c8eead169e635dbc70fb226d8',1,'tinyxml2::XMLElement']]], + ['queryint64value',['QueryInt64Value',['../classtinyxml2_1_1_x_m_l_attribute.html#a4e25344d6e4159026be34dbddf1dcac2',1,'tinyxml2::XMLAttribute']]], + ['queryintattribute',['QueryIntAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a8a78bc1187c1c45ad89f2690eab567b1',1,'tinyxml2::XMLElement']]], + ['queryinttext',['QueryIntText',['../classtinyxml2_1_1_x_m_l_element.html#a926357996bef633cb736e1a558419632',1,'tinyxml2::XMLElement']]], + ['queryintvalue',['QueryIntValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a6d5176260db00ea301c01af8457cd993',1,'tinyxml2::XMLAttribute']]], + ['queryunsignedattribute',['QueryUnsignedAttribute',['../classtinyxml2_1_1_x_m_l_element.html#a26fc84cbfba6769dafcfbf256c05e22f',1,'tinyxml2::XMLElement']]], + ['queryunsignedtext',['QueryUnsignedText',['../classtinyxml2_1_1_x_m_l_element.html#a14d38aa4b5e18a46274a27425188a6a1',1,'tinyxml2::XMLElement']]], + ['queryunsignedvalue',['QueryUnsignedValue',['../classtinyxml2_1_1_x_m_l_attribute.html#a48a7f3496f1415832e451bd8d09c9cb9',1,'tinyxml2::XMLAttribute']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_e.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_e.html new file mode 100644 index 0000000..e256cb6 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_e.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_e.js new file mode 100644 index 0000000..f56f3e3 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rootelement',['RootElement',['../classtinyxml2_1_1_x_m_l_document.html#ad2b70320d3c2a071c2f36928edff3e1c',1,'tinyxml2::XMLDocument']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_f.html b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_f.html new file mode 100644 index 0000000..424126c --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/functions_f.js b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_f.js new file mode 100644 index 0000000..be8e75d --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/functions_f.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['savefile',['SaveFile',['../classtinyxml2_1_1_x_m_l_document.html#a73ac416b4a2aa0952e841220eb3da18f',1,'tinyxml2::XMLDocument::SaveFile(const char *filename, bool compact=false)'],['../classtinyxml2_1_1_x_m_l_document.html#a8b95779479a0035acc67b3a61dfe1b74',1,'tinyxml2::XMLDocument::SaveFile(FILE *fp, bool compact=false)']]], + ['setattribute',['SetAttribute',['../classtinyxml2_1_1_x_m_l_attribute.html#a406d2c4a13c7af99a65edb59dd9f7581',1,'tinyxml2::XMLAttribute::SetAttribute(const char *value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ad86d7d7058d76761c3a80662566a57e5',1,'tinyxml2::XMLAttribute::SetAttribute(int value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae70468c0f6df2748ba3529c716999fae',1,'tinyxml2::XMLAttribute::SetAttribute(unsigned value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a7c1240f479722b9aa29b6c030aa116c2',1,'tinyxml2::XMLAttribute::SetAttribute(int64_t value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ab3516def4fe058fe328f2b89fc2d77da',1,'tinyxml2::XMLAttribute::SetAttribute(bool value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#a9a65ab3147abe8ccbbd373ce8791e818',1,'tinyxml2::XMLAttribute::SetAttribute(double value)'],['../classtinyxml2_1_1_x_m_l_attribute.html#ae95e843313aaf5d56c32530b6456df02',1,'tinyxml2::XMLAttribute::SetAttribute(float value)'],['../classtinyxml2_1_1_x_m_l_element.html#a11943abf2d0831548c3790dd5d9f119c',1,'tinyxml2::XMLElement::SetAttribute(const char *name, const char *value)'],['../classtinyxml2_1_1_x_m_l_element.html#aae6568c64c7f1cc88be8461ba41a79cf',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae143997e90064ba82326b29a9930ea8f',1,'tinyxml2::XMLElement::SetAttribute(const char *name, unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#aaeefdf9171fec91b13a776b42299b0dd',1,'tinyxml2::XMLElement::SetAttribute(const char *name, int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#aa848b696e6a75e4e545c6da9893b11e1',1,'tinyxml2::XMLElement::SetAttribute(const char *name, bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a233397ee81e70eb5d4b814c5f8698533',1,'tinyxml2::XMLElement::SetAttribute(const char *name, double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a554b70d882e65b28fc084b23df9b9759',1,'tinyxml2::XMLElement::SetAttribute(const char *name, float value)']]], + ['setbom',['SetBOM',['../classtinyxml2_1_1_x_m_l_document.html#a14419b698f7c4b140df4e80f3f0c93b0',1,'tinyxml2::XMLDocument']]], + ['setcdata',['SetCData',['../classtinyxml2_1_1_x_m_l_text.html#ad080357d76ab7cc59d7651249949329d',1,'tinyxml2::XMLText']]], + ['setname',['SetName',['../classtinyxml2_1_1_x_m_l_element.html#a97712009a530d8cb8a63bf705f02b4f1',1,'tinyxml2::XMLElement']]], + ['settext',['SetText',['../classtinyxml2_1_1_x_m_l_element.html#a1f9c2cd61b72af5ae708d37b7ad283ce',1,'tinyxml2::XMLElement::SetText(const char *inText)'],['../classtinyxml2_1_1_x_m_l_element.html#aeae8917b5ea6060b3c08d4e3d8d632d7',1,'tinyxml2::XMLElement::SetText(int value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7bbfcc11d516598bc924a8fba4d08597',1,'tinyxml2::XMLElement::SetText(unsigned value)'],['../classtinyxml2_1_1_x_m_l_element.html#a7b62cd33acdfeff7ea2b1b330d4368e4',1,'tinyxml2::XMLElement::SetText(int64_t value)'],['../classtinyxml2_1_1_x_m_l_element.html#ae4b543d6770de76fb6ab68e541c192a4',1,'tinyxml2::XMLElement::SetText(bool value)'],['../classtinyxml2_1_1_x_m_l_element.html#a67bd77ac9aaeff58ff20b4275a65ba4e',1,'tinyxml2::XMLElement::SetText(double value)'],['../classtinyxml2_1_1_x_m_l_element.html#a51d560da5ae3ad6b75e0ab9ffb2ae42a',1,'tinyxml2::XMLElement::SetText(float value)']]], + ['setuserdata',['SetUserData',['../classtinyxml2_1_1_x_m_l_node.html#a002978fc889cc011d143185f2377eca2',1,'tinyxml2::XMLNode']]], + ['setvalue',['SetValue',['../classtinyxml2_1_1_x_m_l_node.html#a09dd68cf9eae137579f6e50f36487513',1,'tinyxml2::XMLNode']]], + ['shallowclone',['ShallowClone',['../classtinyxml2_1_1_x_m_l_node.html#a8402cbd3129d20e9e6024bbcc0531283',1,'tinyxml2::XMLNode::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_text.html#af3a81ed4dd49d5151c477b3f265a3011',1,'tinyxml2::XMLText::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_comment.html#a08991cc63fadf7e95078ac4f9ea1b073',1,'tinyxml2::XMLComment::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_declaration.html#a118d47518dd9e522644e42efa259aed7',1,'tinyxml2::XMLDeclaration::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a0125f41c89763dea06619b5fd5246b4c',1,'tinyxml2::XMLUnknown::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_element.html#ac035742d68b0c50c3f676374e59fe750',1,'tinyxml2::XMLElement::ShallowClone()'],['../classtinyxml2_1_1_x_m_l_document.html#aa37cc1709d7e1e988bc17dcfb24a69b8',1,'tinyxml2::XMLDocument::ShallowClone()']]], + ['shallowequal',['ShallowEqual',['../classtinyxml2_1_1_x_m_l_node.html#a7ce18b751c3ea09eac292dca264f9226',1,'tinyxml2::XMLNode::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_text.html#ae0fff8a24e2de7eb073fd192e9db0331',1,'tinyxml2::XMLText::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_comment.html#a6f7d227b25afa8cc3c763b7cc8833739',1,'tinyxml2::XMLComment::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_declaration.html#aa26b70011694e9b9e9480b929e9b78d6',1,'tinyxml2::XMLDeclaration::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_unknown.html#a0715ab2c05d7f74845c188122213b116',1,'tinyxml2::XMLUnknown::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_element.html#ad9ea913a460b48979bd83cf9871c99f6',1,'tinyxml2::XMLElement::ShallowEqual()'],['../classtinyxml2_1_1_x_m_l_document.html#a6fe5ef18699091844fcf64b56ffa5bf9',1,'tinyxml2::XMLDocument::ShallowEqual()']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/mag_sel.png b/vendor/github.com/leethomason/tinyxml2/docs/search/mag_sel.png new file mode 100644 index 0000000..81f6040 Binary files /dev/null and b/vendor/github.com/leethomason/tinyxml2/docs/search/mag_sel.png differ diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/nomatches.html b/vendor/github.com/leethomason/tinyxml2/docs/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/pages_0.html b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_0.html new file mode 100644 index 0000000..4955b9e --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/pages_0.js b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_0.js new file mode 100644 index 0000000..e5f2b5d --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['get_20information_20out_20of_20xml',['Get information out of XML',['../_example_3.html',1,'']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/pages_1.html b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_1.html new file mode 100644 index 0000000..aedb14e --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/pages_1.js b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_1.js new file mode 100644 index 0000000..78a399a --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['load_20an_20xml_20file',['Load an XML File',['../_example_1.html',1,'']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/pages_2.html b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_2.html new file mode 100644 index 0000000..bd91593 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/pages_2.js b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_2.js new file mode 100644 index 0000000..ff2d6df --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parse_20an_20xml_20from_20char_20buffer',['Parse an XML from char buffer',['../_example_2.html',1,'']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/pages_3.html b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_3.html new file mode 100644 index 0000000..bc0e37f --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/pages_3.js b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_3.js new file mode 100644 index 0000000..8fa0015 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['read_20attributes_20and_20text_20information_2e',['Read attributes and text information.',['../_example_4.html',1,'']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/pages_4.html b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_4.html new file mode 100644 index 0000000..d4c3e8e --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/pages_4.js b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_4.js new file mode 100644 index 0000000..f9587cc --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['tinyxml_2d2',['TinyXML-2',['../index.html',1,'']]] +]; diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/search.css b/vendor/github.com/leethomason/tinyxml2/docs/search/search.css new file mode 100644 index 0000000..3cf9df9 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 8px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:115px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:8px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/vendor/github.com/leethomason/tinyxml2/docs/search/search.js b/vendor/github.com/leethomason/tinyxml2/docs/search/search.js new file mode 100644 index 0000000..dedce3b --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/search/search.js @@ -0,0 +1,791 @@ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; eli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#doc-content{overflow:auto;display:block;padding:0;margin:0;-webkit-overflow-scrolling:touch}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/vendor/github.com/leethomason/tinyxml2/docs/tinyxml2_8h_source.html b/vendor/github.com/leethomason/tinyxml2/docs/tinyxml2_8h_source.html new file mode 100644 index 0000000..30a2f3e --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/docs/tinyxml2_8h_source.html @@ -0,0 +1,180 @@ + + + + + + + +TinyXML-2: tinyxml2.h Source File + + + + + + + + + +
+
+ + + + + + +
+
TinyXML-2 +  6.0.0 +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
tinyxml2.h
+
+
+
1 /*
2 Original code by Lee Thomason (www.grinninglizard.com)
3 
4 This software is provided 'as-is', without any express or implied
5 warranty. In no event will the authors be held liable for any
6 damages arising from the use of this software.
7 
8 Permission is granted to anyone to use this software for any
9 purpose, including commercial applications, and to alter it and
10 redistribute it freely, subject to the following restrictions:
11 
12 1. The origin of this software must not be misrepresented; you must
13 not claim that you wrote the original software. If you use this
14 software in a product, an acknowledgment in the product documentation
15 would be appreciated but is not required.
16 
17 2. Altered source versions must be plainly marked as such, and
18 must not be misrepresented as being the original software.
19 
20 3. This notice may not be removed or altered from any source
21 distribution.
22 */
23 
24 #ifndef TINYXML2_INCLUDED
25 #define TINYXML2_INCLUDED
26 
27 #if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__)
28 # include <ctype.h>
29 # include <limits.h>
30 # include <stdio.h>
31 # include <stdlib.h>
32 # include <string.h>
33 # if defined(__PS3__)
34 # include <stddef.h>
35 # endif
36 #else
37 # include <cctype>
38 # include <climits>
39 # include <cstdio>
40 # include <cstdlib>
41 # include <cstring>
42 #endif
43 #include <stdint.h>
44 
45 /*
46  TODO: intern strings instead of allocation.
47 */
48 /*
49  gcc:
50  g++ -Wall -DDEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe
51 
52  Formatting, Artistic Style:
53  AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h
54 */
55 
56 #if defined( _DEBUG ) || defined (__DEBUG__)
57 # ifndef DEBUG
58 # define DEBUG
59 # endif
60 #endif
61 
62 #ifdef _MSC_VER
63 # pragma warning(push)
64 # pragma warning(disable: 4251)
65 #endif
66 
67 #ifdef _WIN32
68 # ifdef TINYXML2_EXPORT
69 # define TINYXML2_LIB __declspec(dllexport)
70 # elif defined(TINYXML2_IMPORT)
71 # define TINYXML2_LIB __declspec(dllimport)
72 # else
73 # define TINYXML2_LIB
74 # endif
75 #elif __GNUC__ >= 4
76 # define TINYXML2_LIB __attribute__((visibility("default")))
77 #else
78 # define TINYXML2_LIB
79 #endif
80 
81 
82 #if defined(DEBUG)
83 # if defined(_MSC_VER)
84 # // "(void)0," is for suppressing C4127 warning in "assert(false)", "assert(true)" and the like
85 # define TIXMLASSERT( x ) if ( !((void)0,(x))) { __debugbreak(); }
86 # elif defined (ANDROID_NDK)
87 # include <android/log.h>
88 # define TIXMLASSERT( x ) if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); }
89 # else
90 # include <assert.h>
91 # define TIXMLASSERT assert
92 # endif
93 #else
94 # define TIXMLASSERT( x ) {}
95 #endif
96 
97 
98 /* Versioning, past 1.0.14:
99  http://semver.org/
100 */
101 static const int TIXML2_MAJOR_VERSION = 6;
102 static const int TIXML2_MINOR_VERSION = 0;
103 static const int TIXML2_PATCH_VERSION = 0;
104 
105 namespace tinyxml2
106 {
107 class XMLDocument;
108 class XMLElement;
109 class XMLAttribute;
110 class XMLComment;
111 class XMLText;
112 class XMLDeclaration;
113 class XMLUnknown;
114 class XMLPrinter;
115 
116 /*
117  A class that wraps strings. Normally stores the start and end
118  pointers into the XML file itself, and will apply normalization
119  and entity translation if actually read. Can also store (and memory
120  manage) a traditional char[]
121 */
122 class StrPair
123 {
124 public:
125  enum {
126  NEEDS_ENTITY_PROCESSING = 0x01,
127  NEEDS_NEWLINE_NORMALIZATION = 0x02,
128  NEEDS_WHITESPACE_COLLAPSING = 0x04,
129 
130  TEXT_ELEMENT = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
131  TEXT_ELEMENT_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
132  ATTRIBUTE_NAME = 0,
133  ATTRIBUTE_VALUE = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
134  ATTRIBUTE_VALUE_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
135  COMMENT = NEEDS_NEWLINE_NORMALIZATION
136  };
137 
138  StrPair() : _flags( 0 ), _start( 0 ), _end( 0 ) {}
139  ~StrPair();
140 
141  void Set( char* start, char* end, int flags ) {
142  TIXMLASSERT( start );
143  TIXMLASSERT( end );
144  Reset();
145  _start = start;
146  _end = end;
147  _flags = flags | NEEDS_FLUSH;
148  }
149 
150  const char* GetStr();
151 
152  bool Empty() const {
153  return _start == _end;
154  }
155 
156  void SetInternedStr( const char* str ) {
157  Reset();
158  _start = const_cast<char*>(str);
159  }
160 
161  void SetStr( const char* str, int flags=0 );
162 
163  char* ParseText( char* in, const char* endTag, int strFlags, int* curLineNumPtr );
164  char* ParseName( char* in );
165 
166  void TransferTo( StrPair* other );
167  void Reset();
168 
169 private:
170  void CollapseWhitespace();
171 
172  enum {
173  NEEDS_FLUSH = 0x100,
174  NEEDS_DELETE = 0x200
175  };
176 
177  int _flags;
178  char* _start;
179  char* _end;
180 
181  StrPair( const StrPair& other ); // not supported
182  void operator=( StrPair& other ); // not supported, use TransferTo()
183 };
184 
185 
186 /*
187  A dynamic array of Plain Old Data. Doesn't support constructors, etc.
188  Has a small initial memory pool, so that low or no usage will not
189  cause a call to new/delete
190 */
191 template <class T, int INITIAL_SIZE>
192 class DynArray
193 {
194 public:
195  DynArray() :
196  _mem( _pool ),
197  _allocated( INITIAL_SIZE ),
198  _size( 0 )
199  {
200  }
201 
202  ~DynArray() {
203  if ( _mem != _pool ) {
204  delete [] _mem;
205  }
206  }
207 
208  void Clear() {
209  _size = 0;
210  }
211 
212  void Push( T t ) {
213  TIXMLASSERT( _size < INT_MAX );
214  EnsureCapacity( _size+1 );
215  _mem[_size] = t;
216  ++_size;
217  }
218 
219  T* PushArr( int count ) {
220  TIXMLASSERT( count >= 0 );
221  TIXMLASSERT( _size <= INT_MAX - count );
222  EnsureCapacity( _size+count );
223  T* ret = &_mem[_size];
224  _size += count;
225  return ret;
226  }
227 
228  T Pop() {
229  TIXMLASSERT( _size > 0 );
230  --_size;
231  return _mem[_size];
232  }
233 
234  void PopArr( int count ) {
235  TIXMLASSERT( _size >= count );
236  _size -= count;
237  }
238 
239  bool Empty() const {
240  return _size == 0;
241  }
242 
243  T& operator[](int i) {
244  TIXMLASSERT( i>= 0 && i < _size );
245  return _mem[i];
246  }
247 
248  const T& operator[](int i) const {
249  TIXMLASSERT( i>= 0 && i < _size );
250  return _mem[i];
251  }
252 
253  const T& PeekTop() const {
254  TIXMLASSERT( _size > 0 );
255  return _mem[ _size - 1];
256  }
257 
258  int Size() const {
259  TIXMLASSERT( _size >= 0 );
260  return _size;
261  }
262 
263  int Capacity() const {
264  TIXMLASSERT( _allocated >= INITIAL_SIZE );
265  return _allocated;
266  }
267 
268  void SwapRemove(int i) {
269  TIXMLASSERT(i >= 0 && i < _size);
270  TIXMLASSERT(_size > 0);
271  _mem[i] = _mem[_size - 1];
272  --_size;
273  }
274 
275  const T* Mem() const {
276  TIXMLASSERT( _mem );
277  return _mem;
278  }
279 
280  T* Mem() {
281  TIXMLASSERT( _mem );
282  return _mem;
283  }
284 
285 private:
286  DynArray( const DynArray& ); // not supported
287  void operator=( const DynArray& ); // not supported
288 
289  void EnsureCapacity( int cap ) {
290  TIXMLASSERT( cap > 0 );
291  if ( cap > _allocated ) {
292  TIXMLASSERT( cap <= INT_MAX / 2 );
293  int newAllocated = cap * 2;
294  T* newMem = new T[newAllocated];
295  TIXMLASSERT( newAllocated >= _size );
296  memcpy( newMem, _mem, sizeof(T)*_size ); // warning: not using constructors, only works for PODs
297  if ( _mem != _pool ) {
298  delete [] _mem;
299  }
300  _mem = newMem;
301  _allocated = newAllocated;
302  }
303  }
304 
305  T* _mem;
306  T _pool[INITIAL_SIZE];
307  int _allocated; // objects allocated
308  int _size; // number objects in use
309 };
310 
311 
312 /*
313  Parent virtual class of a pool for fast allocation
314  and deallocation of objects.
315 */
316 class MemPool
317 {
318 public:
319  MemPool() {}
320  virtual ~MemPool() {}
321 
322  virtual int ItemSize() const = 0;
323  virtual void* Alloc() = 0;
324  virtual void Free( void* ) = 0;
325  virtual void SetTracked() = 0;
326  virtual void Clear() = 0;
327 };
328 
329 
330 /*
331  Template child class to create pools of the correct type.
332 */
333 template< int ITEM_SIZE >
334 class MemPoolT : public MemPool
335 {
336 public:
337  MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {}
338  ~MemPoolT() {
339  Clear();
340  }
341 
342  void Clear() {
343  // Delete the blocks.
344  while( !_blockPtrs.Empty()) {
345  Block* lastBlock = _blockPtrs.Pop();
346  delete lastBlock;
347  }
348  _root = 0;
349  _currentAllocs = 0;
350  _nAllocs = 0;
351  _maxAllocs = 0;
352  _nUntracked = 0;
353  }
354 
355  virtual int ItemSize() const {
356  return ITEM_SIZE;
357  }
358  int CurrentAllocs() const {
359  return _currentAllocs;
360  }
361 
362  virtual void* Alloc() {
363  if ( !_root ) {
364  // Need a new block.
365  Block* block = new Block();
366  _blockPtrs.Push( block );
367 
368  Item* blockItems = block->items;
369  for( int i = 0; i < ITEMS_PER_BLOCK - 1; ++i ) {
370  blockItems[i].next = &(blockItems[i + 1]);
371  }
372  blockItems[ITEMS_PER_BLOCK - 1].next = 0;
373  _root = blockItems;
374  }
375  Item* const result = _root;
376  TIXMLASSERT( result != 0 );
377  _root = _root->next;
378 
379  ++_currentAllocs;
380  if ( _currentAllocs > _maxAllocs ) {
381  _maxAllocs = _currentAllocs;
382  }
383  ++_nAllocs;
384  ++_nUntracked;
385  return result;
386  }
387 
388  virtual void Free( void* mem ) {
389  if ( !mem ) {
390  return;
391  }
392  --_currentAllocs;
393  Item* item = static_cast<Item*>( mem );
394 #ifdef DEBUG
395  memset( item, 0xfe, sizeof( *item ) );
396 #endif
397  item->next = _root;
398  _root = item;
399  }
400  void Trace( const char* name ) {
401  printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n",
402  name, _maxAllocs, _maxAllocs * ITEM_SIZE / 1024, _currentAllocs,
403  ITEM_SIZE, _nAllocs, _blockPtrs.Size() );
404  }
405 
406  void SetTracked() {
407  --_nUntracked;
408  }
409 
410  int Untracked() const {
411  return _nUntracked;
412  }
413 
414  // This number is perf sensitive. 4k seems like a good tradeoff on my machine.
415  // The test file is large, 170k.
416  // Release: VS2010 gcc(no opt)
417  // 1k: 4000
418  // 2k: 4000
419  // 4k: 3900 21000
420  // 16k: 5200
421  // 32k: 4300
422  // 64k: 4000 21000
423  // Declared public because some compilers do not accept to use ITEMS_PER_BLOCK
424  // in private part if ITEMS_PER_BLOCK is private
425  enum { ITEMS_PER_BLOCK = (4 * 1024) / ITEM_SIZE };
426 
427 private:
428  MemPoolT( const MemPoolT& ); // not supported
429  void operator=( const MemPoolT& ); // not supported
430 
431  union Item {
432  Item* next;
433  char itemData[ITEM_SIZE];
434  };
435  struct Block {
436  Item items[ITEMS_PER_BLOCK];
437  };
438  DynArray< Block*, 10 > _blockPtrs;
439  Item* _root;
440 
441  int _currentAllocs;
442  int _nAllocs;
443  int _maxAllocs;
444  int _nUntracked;
445 };
446 
447 
448 
468 class TINYXML2_LIB XMLVisitor
469 {
470 public:
471  virtual ~XMLVisitor() {}
472 
474  virtual bool VisitEnter( const XMLDocument& /*doc*/ ) {
475  return true;
476  }
478  virtual bool VisitExit( const XMLDocument& /*doc*/ ) {
479  return true;
480  }
481 
483  virtual bool VisitEnter( const XMLElement& /*element*/, const XMLAttribute* /*firstAttribute*/ ) {
484  return true;
485  }
487  virtual bool VisitExit( const XMLElement& /*element*/ ) {
488  return true;
489  }
490 
492  virtual bool Visit( const XMLDeclaration& /*declaration*/ ) {
493  return true;
494  }
496  virtual bool Visit( const XMLText& /*text*/ ) {
497  return true;
498  }
500  virtual bool Visit( const XMLComment& /*comment*/ ) {
501  return true;
502  }
504  virtual bool Visit( const XMLUnknown& /*unknown*/ ) {
505  return true;
506  }
507 };
508 
509 // WARNING: must match XMLDocument::_errorNames[]
510 enum XMLError {
511  XML_SUCCESS = 0,
512  XML_NO_ATTRIBUTE,
513  XML_WRONG_ATTRIBUTE_TYPE,
514  XML_ERROR_FILE_NOT_FOUND,
515  XML_ERROR_FILE_COULD_NOT_BE_OPENED,
516  XML_ERROR_FILE_READ_ERROR,
517  UNUSED_XML_ERROR_ELEMENT_MISMATCH, // remove at next major version
518  XML_ERROR_PARSING_ELEMENT,
519  XML_ERROR_PARSING_ATTRIBUTE,
520  UNUSED_XML_ERROR_IDENTIFYING_TAG, // remove at next major version
521  XML_ERROR_PARSING_TEXT,
522  XML_ERROR_PARSING_CDATA,
523  XML_ERROR_PARSING_COMMENT,
524  XML_ERROR_PARSING_DECLARATION,
525  XML_ERROR_PARSING_UNKNOWN,
526  XML_ERROR_EMPTY_DOCUMENT,
527  XML_ERROR_MISMATCHED_ELEMENT,
528  XML_ERROR_PARSING,
529  XML_CAN_NOT_CONVERT_TEXT,
530  XML_NO_TEXT_NODE,
531 
532  XML_ERROR_COUNT
533 };
534 
535 
536 /*
537  Utility functionality.
538 */
539 class TINYXML2_LIB XMLUtil
540 {
541 public:
542  static const char* SkipWhiteSpace( const char* p, int* curLineNumPtr ) {
543  TIXMLASSERT( p );
544 
545  while( IsWhiteSpace(*p) ) {
546  if (curLineNumPtr && *p == '\n') {
547  ++(*curLineNumPtr);
548  }
549  ++p;
550  }
551  TIXMLASSERT( p );
552  return p;
553  }
554  static char* SkipWhiteSpace( char* p, int* curLineNumPtr ) {
555  return const_cast<char*>( SkipWhiteSpace( const_cast<const char*>(p), curLineNumPtr ) );
556  }
557 
558  // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't
559  // correct, but simple, and usually works.
560  static bool IsWhiteSpace( char p ) {
561  return !IsUTF8Continuation(p) && isspace( static_cast<unsigned char>(p) );
562  }
563 
564  inline static bool IsNameStartChar( unsigned char ch ) {
565  if ( ch >= 128 ) {
566  // This is a heuristic guess in attempt to not implement Unicode-aware isalpha()
567  return true;
568  }
569  if ( isalpha( ch ) ) {
570  return true;
571  }
572  return ch == ':' || ch == '_';
573  }
574 
575  inline static bool IsNameChar( unsigned char ch ) {
576  return IsNameStartChar( ch )
577  || isdigit( ch )
578  || ch == '.'
579  || ch == '-';
580  }
581 
582  inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX ) {
583  if ( p == q ) {
584  return true;
585  }
586  TIXMLASSERT( p );
587  TIXMLASSERT( q );
588  TIXMLASSERT( nChar >= 0 );
589  return strncmp( p, q, nChar ) == 0;
590  }
591 
592  inline static bool IsUTF8Continuation( char p ) {
593  return ( p & 0x80 ) != 0;
594  }
595 
596  static const char* ReadBOM( const char* p, bool* hasBOM );
597  // p is the starting location,
598  // the UTF-8 value of the entity will be placed in value, and length filled in.
599  static const char* GetCharacterRef( const char* p, char* value, int* length );
600  static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length );
601 
602  // converts primitive types to strings
603  static void ToStr( int v, char* buffer, int bufferSize );
604  static void ToStr( unsigned v, char* buffer, int bufferSize );
605  static void ToStr( bool v, char* buffer, int bufferSize );
606  static void ToStr( float v, char* buffer, int bufferSize );
607  static void ToStr( double v, char* buffer, int bufferSize );
608  static void ToStr(int64_t v, char* buffer, int bufferSize);
609 
610  // converts strings to primitive types
611  static bool ToInt( const char* str, int* value );
612  static bool ToUnsigned( const char* str, unsigned* value );
613  static bool ToBool( const char* str, bool* value );
614  static bool ToFloat( const char* str, float* value );
615  static bool ToDouble( const char* str, double* value );
616  static bool ToInt64(const char* str, int64_t* value);
617 
618  // Changes what is serialized for a boolean value.
619  // Default to "true" and "false". Shouldn't be changed
620  // unless you have a special testing or compatibility need.
621  // Be careful: static, global, & not thread safe.
622  // Be sure to set static const memory as parameters.
623  static void SetBoolSerialization(const char* writeTrue, const char* writeFalse);
624 
625 private:
626  static const char* writeBoolTrue;
627  static const char* writeBoolFalse;
628 };
629 
630 
656 class TINYXML2_LIB XMLNode
657 {
658  friend class XMLDocument;
659  friend class XMLElement;
660 public:
661 
663  const XMLDocument* GetDocument() const {
664  TIXMLASSERT( _document );
665  return _document;
666  }
669  TIXMLASSERT( _document );
670  return _document;
671  }
672 
674  virtual XMLElement* ToElement() {
675  return 0;
676  }
678  virtual XMLText* ToText() {
679  return 0;
680  }
682  virtual XMLComment* ToComment() {
683  return 0;
684  }
686  virtual XMLDocument* ToDocument() {
687  return 0;
688  }
691  return 0;
692  }
694  virtual XMLUnknown* ToUnknown() {
695  return 0;
696  }
697 
698  virtual const XMLElement* ToElement() const {
699  return 0;
700  }
701  virtual const XMLText* ToText() const {
702  return 0;
703  }
704  virtual const XMLComment* ToComment() const {
705  return 0;
706  }
707  virtual const XMLDocument* ToDocument() const {
708  return 0;
709  }
710  virtual const XMLDeclaration* ToDeclaration() const {
711  return 0;
712  }
713  virtual const XMLUnknown* ToUnknown() const {
714  return 0;
715  }
716 
726  const char* Value() const;
727 
731  void SetValue( const char* val, bool staticMem=false );
732 
734  int GetLineNum() const { return _parseLineNum; }
735 
737  const XMLNode* Parent() const {
738  return _parent;
739  }
740 
741  XMLNode* Parent() {
742  return _parent;
743  }
744 
746  bool NoChildren() const {
747  return !_firstChild;
748  }
749 
751  const XMLNode* FirstChild() const {
752  return _firstChild;
753  }
754 
755  XMLNode* FirstChild() {
756  return _firstChild;
757  }
758 
762  const XMLElement* FirstChildElement( const char* name = 0 ) const;
763 
764  XMLElement* FirstChildElement( const char* name = 0 ) {
765  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->FirstChildElement( name ));
766  }
767 
769  const XMLNode* LastChild() const {
770  return _lastChild;
771  }
772 
773  XMLNode* LastChild() {
774  return _lastChild;
775  }
776 
780  const XMLElement* LastChildElement( const char* name = 0 ) const;
781 
782  XMLElement* LastChildElement( const char* name = 0 ) {
783  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->LastChildElement(name) );
784  }
785 
787  const XMLNode* PreviousSibling() const {
788  return _prev;
789  }
790 
791  XMLNode* PreviousSibling() {
792  return _prev;
793  }
794 
796  const XMLElement* PreviousSiblingElement( const char* name = 0 ) const ;
797 
798  XMLElement* PreviousSiblingElement( const char* name = 0 ) {
799  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->PreviousSiblingElement( name ) );
800  }
801 
803  const XMLNode* NextSibling() const {
804  return _next;
805  }
806 
807  XMLNode* NextSibling() {
808  return _next;
809  }
810 
812  const XMLElement* NextSiblingElement( const char* name = 0 ) const;
813 
814  XMLElement* NextSiblingElement( const char* name = 0 ) {
815  return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->NextSiblingElement( name ) );
816  }
817 
825  XMLNode* InsertEndChild( XMLNode* addThis );
826 
827  XMLNode* LinkEndChild( XMLNode* addThis ) {
828  return InsertEndChild( addThis );
829  }
837  XMLNode* InsertFirstChild( XMLNode* addThis );
846  XMLNode* InsertAfterChild( XMLNode* afterThis, XMLNode* addThis );
847 
851  void DeleteChildren();
852 
856  void DeleteChild( XMLNode* node );
857 
867  virtual XMLNode* ShallowClone( XMLDocument* document ) const = 0;
868 
882  XMLNode* DeepClone( XMLDocument* target ) const;
883 
890  virtual bool ShallowEqual( const XMLNode* compare ) const = 0;
891 
914  virtual bool Accept( XMLVisitor* visitor ) const = 0;
915 
921  void SetUserData(void* userData) { _userData = userData; }
922 
928  void* GetUserData() const { return _userData; }
929 
930 protected:
931  XMLNode( XMLDocument* );
932  virtual ~XMLNode();
933 
934  virtual char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr);
935 
936  XMLDocument* _document;
937  XMLNode* _parent;
938  mutable StrPair _value;
939  int _parseLineNum;
940 
941  XMLNode* _firstChild;
942  XMLNode* _lastChild;
943 
944  XMLNode* _prev;
945  XMLNode* _next;
946 
947  void* _userData;
948 
949 private:
950  MemPool* _memPool;
951  void Unlink( XMLNode* child );
952  static void DeleteNode( XMLNode* node );
953  void InsertChildPreamble( XMLNode* insertThis ) const;
954  const XMLElement* ToElementWithName( const char* name ) const;
955 
956  XMLNode( const XMLNode& ); // not supported
957  XMLNode& operator=( const XMLNode& ); // not supported
958 };
959 
960 
973 class TINYXML2_LIB XMLText : public XMLNode
974 {
975  friend class XMLDocument;
976 public:
977  virtual bool Accept( XMLVisitor* visitor ) const;
978 
979  virtual XMLText* ToText() {
980  return this;
981  }
982  virtual const XMLText* ToText() const {
983  return this;
984  }
985 
987  void SetCData( bool isCData ) {
988  _isCData = isCData;
989  }
991  bool CData() const {
992  return _isCData;
993  }
994 
995  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
996  virtual bool ShallowEqual( const XMLNode* compare ) const;
997 
998 protected:
999  XMLText( XMLDocument* doc ) : XMLNode( doc ), _isCData( false ) {}
1000  virtual ~XMLText() {}
1001 
1002  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
1003 
1004 private:
1005  bool _isCData;
1006 
1007  XMLText( const XMLText& ); // not supported
1008  XMLText& operator=( const XMLText& ); // not supported
1009 };
1010 
1011 
1013 class TINYXML2_LIB XMLComment : public XMLNode
1014 {
1015  friend class XMLDocument;
1016 public:
1017  virtual XMLComment* ToComment() {
1018  return this;
1019  }
1020  virtual const XMLComment* ToComment() const {
1021  return this;
1022  }
1023 
1024  virtual bool Accept( XMLVisitor* visitor ) const;
1025 
1026  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
1027  virtual bool ShallowEqual( const XMLNode* compare ) const;
1028 
1029 protected:
1030  XMLComment( XMLDocument* doc );
1031  virtual ~XMLComment();
1032 
1033  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr);
1034 
1035 private:
1036  XMLComment( const XMLComment& ); // not supported
1037  XMLComment& operator=( const XMLComment& ); // not supported
1038 };
1039 
1040 
1052 class TINYXML2_LIB XMLDeclaration : public XMLNode
1053 {
1054  friend class XMLDocument;
1055 public:
1057  return this;
1058  }
1059  virtual const XMLDeclaration* ToDeclaration() const {
1060  return this;
1061  }
1062 
1063  virtual bool Accept( XMLVisitor* visitor ) const;
1064 
1065  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
1066  virtual bool ShallowEqual( const XMLNode* compare ) const;
1067 
1068 protected:
1069  XMLDeclaration( XMLDocument* doc );
1070  virtual ~XMLDeclaration();
1071 
1072  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
1073 
1074 private:
1075  XMLDeclaration( const XMLDeclaration& ); // not supported
1076  XMLDeclaration& operator=( const XMLDeclaration& ); // not supported
1077 };
1078 
1079 
1087 class TINYXML2_LIB XMLUnknown : public XMLNode
1088 {
1089  friend class XMLDocument;
1090 public:
1091  virtual XMLUnknown* ToUnknown() {
1092  return this;
1093  }
1094  virtual const XMLUnknown* ToUnknown() const {
1095  return this;
1096  }
1097 
1098  virtual bool Accept( XMLVisitor* visitor ) const;
1099 
1100  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
1101  virtual bool ShallowEqual( const XMLNode* compare ) const;
1102 
1103 protected:
1104  XMLUnknown( XMLDocument* doc );
1105  virtual ~XMLUnknown();
1106 
1107  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
1108 
1109 private:
1110  XMLUnknown( const XMLUnknown& ); // not supported
1111  XMLUnknown& operator=( const XMLUnknown& ); // not supported
1112 };
1113 
1114 
1115 
1122 class TINYXML2_LIB XMLAttribute
1123 {
1124  friend class XMLElement;
1125 public:
1127  const char* Name() const;
1128 
1130  const char* Value() const;
1131 
1133  int GetLineNum() const { return _parseLineNum; }
1134 
1136  const XMLAttribute* Next() const {
1137  return _next;
1138  }
1139 
1144  int IntValue() const {
1145  int i = 0;
1146  QueryIntValue(&i);
1147  return i;
1148  }
1149 
1150  int64_t Int64Value() const {
1151  int64_t i = 0;
1152  QueryInt64Value(&i);
1153  return i;
1154  }
1155 
1157  unsigned UnsignedValue() const {
1158  unsigned i=0;
1159  QueryUnsignedValue( &i );
1160  return i;
1161  }
1163  bool BoolValue() const {
1164  bool b=false;
1165  QueryBoolValue( &b );
1166  return b;
1167  }
1169  double DoubleValue() const {
1170  double d=0;
1171  QueryDoubleValue( &d );
1172  return d;
1173  }
1175  float FloatValue() const {
1176  float f=0;
1177  QueryFloatValue( &f );
1178  return f;
1179  }
1180 
1185  XMLError QueryIntValue( int* value ) const;
1187  XMLError QueryUnsignedValue( unsigned int* value ) const;
1189  XMLError QueryInt64Value(int64_t* value) const;
1191  XMLError QueryBoolValue( bool* value ) const;
1193  XMLError QueryDoubleValue( double* value ) const;
1195  XMLError QueryFloatValue( float* value ) const;
1196 
1198  void SetAttribute( const char* value );
1200  void SetAttribute( int value );
1202  void SetAttribute( unsigned value );
1204  void SetAttribute(int64_t value);
1206  void SetAttribute( bool value );
1208  void SetAttribute( double value );
1210  void SetAttribute( float value );
1211 
1212 private:
1213  enum { BUF_SIZE = 200 };
1214 
1215  XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {}
1216  virtual ~XMLAttribute() {}
1217 
1218  XMLAttribute( const XMLAttribute& ); // not supported
1219  void operator=( const XMLAttribute& ); // not supported
1220  void SetName( const char* name );
1221 
1222  char* ParseDeep( char* p, bool processEntities, int* curLineNumPtr );
1223 
1224  mutable StrPair _name;
1225  mutable StrPair _value;
1226  int _parseLineNum;
1227  XMLAttribute* _next;
1228  MemPool* _memPool;
1229 };
1230 
1231 
1236 class TINYXML2_LIB XMLElement : public XMLNode
1237 {
1238  friend class XMLDocument;
1239 public:
1241  const char* Name() const {
1242  return Value();
1243  }
1245  void SetName( const char* str, bool staticMem=false ) {
1246  SetValue( str, staticMem );
1247  }
1248 
1249  virtual XMLElement* ToElement() {
1250  return this;
1251  }
1252  virtual const XMLElement* ToElement() const {
1253  return this;
1254  }
1255  virtual bool Accept( XMLVisitor* visitor ) const;
1256 
1280  const char* Attribute( const char* name, const char* value=0 ) const;
1281 
1288  int IntAttribute(const char* name, int defaultValue = 0) const;
1290  unsigned UnsignedAttribute(const char* name, unsigned defaultValue = 0) const;
1292  int64_t Int64Attribute(const char* name, int64_t defaultValue = 0) const;
1294  bool BoolAttribute(const char* name, bool defaultValue = false) const;
1296  double DoubleAttribute(const char* name, double defaultValue = 0) const;
1298  float FloatAttribute(const char* name, float defaultValue = 0) const;
1299 
1313  XMLError QueryIntAttribute( const char* name, int* value ) const {
1314  const XMLAttribute* a = FindAttribute( name );
1315  if ( !a ) {
1316  return XML_NO_ATTRIBUTE;
1317  }
1318  return a->QueryIntValue( value );
1319  }
1320 
1322  XMLError QueryUnsignedAttribute( const char* name, unsigned int* value ) const {
1323  const XMLAttribute* a = FindAttribute( name );
1324  if ( !a ) {
1325  return XML_NO_ATTRIBUTE;
1326  }
1327  return a->QueryUnsignedValue( value );
1328  }
1329 
1331  XMLError QueryInt64Attribute(const char* name, int64_t* value) const {
1332  const XMLAttribute* a = FindAttribute(name);
1333  if (!a) {
1334  return XML_NO_ATTRIBUTE;
1335  }
1336  return a->QueryInt64Value(value);
1337  }
1338 
1340  XMLError QueryBoolAttribute( const char* name, bool* value ) const {
1341  const XMLAttribute* a = FindAttribute( name );
1342  if ( !a ) {
1343  return XML_NO_ATTRIBUTE;
1344  }
1345  return a->QueryBoolValue( value );
1346  }
1348  XMLError QueryDoubleAttribute( const char* name, double* value ) const {
1349  const XMLAttribute* a = FindAttribute( name );
1350  if ( !a ) {
1351  return XML_NO_ATTRIBUTE;
1352  }
1353  return a->QueryDoubleValue( value );
1354  }
1356  XMLError QueryFloatAttribute( const char* name, float* value ) const {
1357  const XMLAttribute* a = FindAttribute( name );
1358  if ( !a ) {
1359  return XML_NO_ATTRIBUTE;
1360  }
1361  return a->QueryFloatValue( value );
1362  }
1363 
1364 
1382  int QueryAttribute( const char* name, int* value ) const {
1383  return QueryIntAttribute( name, value );
1384  }
1385 
1386  int QueryAttribute( const char* name, unsigned int* value ) const {
1387  return QueryUnsignedAttribute( name, value );
1388  }
1389 
1390  int QueryAttribute(const char* name, int64_t* value) const {
1391  return QueryInt64Attribute(name, value);
1392  }
1393 
1394  int QueryAttribute( const char* name, bool* value ) const {
1395  return QueryBoolAttribute( name, value );
1396  }
1397 
1398  int QueryAttribute( const char* name, double* value ) const {
1399  return QueryDoubleAttribute( name, value );
1400  }
1401 
1402  int QueryAttribute( const char* name, float* value ) const {
1403  return QueryFloatAttribute( name, value );
1404  }
1405 
1407  void SetAttribute( const char* name, const char* value ) {
1408  XMLAttribute* a = FindOrCreateAttribute( name );
1409  a->SetAttribute( value );
1410  }
1412  void SetAttribute( const char* name, int value ) {
1413  XMLAttribute* a = FindOrCreateAttribute( name );
1414  a->SetAttribute( value );
1415  }
1417  void SetAttribute( const char* name, unsigned value ) {
1418  XMLAttribute* a = FindOrCreateAttribute( name );
1419  a->SetAttribute( value );
1420  }
1421 
1423  void SetAttribute(const char* name, int64_t value) {
1424  XMLAttribute* a = FindOrCreateAttribute(name);
1425  a->SetAttribute(value);
1426  }
1427 
1429  void SetAttribute( const char* name, bool value ) {
1430  XMLAttribute* a = FindOrCreateAttribute( name );
1431  a->SetAttribute( value );
1432  }
1434  void SetAttribute( const char* name, double value ) {
1435  XMLAttribute* a = FindOrCreateAttribute( name );
1436  a->SetAttribute( value );
1437  }
1439  void SetAttribute( const char* name, float value ) {
1440  XMLAttribute* a = FindOrCreateAttribute( name );
1441  a->SetAttribute( value );
1442  }
1443 
1447  void DeleteAttribute( const char* name );
1448 
1450  const XMLAttribute* FirstAttribute() const {
1451  return _rootAttribute;
1452  }
1454  const XMLAttribute* FindAttribute( const char* name ) const;
1455 
1484  const char* GetText() const;
1485 
1520  void SetText( const char* inText );
1522  void SetText( int value );
1524  void SetText( unsigned value );
1526  void SetText(int64_t value);
1528  void SetText( bool value );
1530  void SetText( double value );
1532  void SetText( float value );
1533 
1560  XMLError QueryIntText( int* ival ) const;
1562  XMLError QueryUnsignedText( unsigned* uval ) const;
1564  XMLError QueryInt64Text(int64_t* uval) const;
1566  XMLError QueryBoolText( bool* bval ) const;
1568  XMLError QueryDoubleText( double* dval ) const;
1570  XMLError QueryFloatText( float* fval ) const;
1571 
1572  int IntText(int defaultValue = 0) const;
1573 
1575  unsigned UnsignedText(unsigned defaultValue = 0) const;
1577  int64_t Int64Text(int64_t defaultValue = 0) const;
1579  bool BoolText(bool defaultValue = false) const;
1581  double DoubleText(double defaultValue = 0) const;
1583  float FloatText(float defaultValue = 0) const;
1584 
1585  // internal:
1586  enum ElementClosingType {
1587  OPEN, // <foo>
1588  CLOSED, // <foo/>
1589  CLOSING // </foo>
1590  };
1591  ElementClosingType ClosingType() const {
1592  return _closingType;
1593  }
1594  virtual XMLNode* ShallowClone( XMLDocument* document ) const;
1595  virtual bool ShallowEqual( const XMLNode* compare ) const;
1596 
1597 protected:
1598  char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
1599 
1600 private:
1601  XMLElement( XMLDocument* doc );
1602  virtual ~XMLElement();
1603  XMLElement( const XMLElement& ); // not supported
1604  void operator=( const XMLElement& ); // not supported
1605 
1606  XMLAttribute* FindAttribute( const char* name ) {
1607  return const_cast<XMLAttribute*>(const_cast<const XMLElement*>(this)->FindAttribute( name ));
1608  }
1609  XMLAttribute* FindOrCreateAttribute( const char* name );
1610  //void LinkAttribute( XMLAttribute* attrib );
1611  char* ParseAttributes( char* p, int* curLineNumPtr );
1612  static void DeleteAttribute( XMLAttribute* attribute );
1613  XMLAttribute* CreateAttribute();
1614 
1615  enum { BUF_SIZE = 200 };
1616  ElementClosingType _closingType;
1617  // The attribute list is ordered; there is no 'lastAttribute'
1618  // because the list needs to be scanned for dupes before adding
1619  // a new attribute.
1620  XMLAttribute* _rootAttribute;
1621 };
1622 
1623 
1624 enum Whitespace {
1625  PRESERVE_WHITESPACE,
1626  COLLAPSE_WHITESPACE
1627 };
1628 
1629 
1635 class TINYXML2_LIB XMLDocument : public XMLNode
1636 {
1637  friend class XMLElement;
1638  // Gives access to SetError, but over-access for everything else.
1639  // Wishing C++ had "internal" scope.
1640  friend class XMLNode;
1641  friend class XMLText;
1642  friend class XMLComment;
1643  friend class XMLDeclaration;
1644  friend class XMLUnknown;
1645 public:
1647  XMLDocument( bool processEntities = true, Whitespace whitespaceMode = PRESERVE_WHITESPACE );
1648  ~XMLDocument();
1649 
1651  TIXMLASSERT( this == _document );
1652  return this;
1653  }
1654  virtual const XMLDocument* ToDocument() const {
1655  TIXMLASSERT( this == _document );
1656  return this;
1657  }
1658 
1669  XMLError Parse( const char* xml, size_t nBytes=(size_t)(-1) );
1670 
1676  XMLError LoadFile( const char* filename );
1677 
1689  XMLError LoadFile( FILE* );
1690 
1696  XMLError SaveFile( const char* filename, bool compact = false );
1697 
1705  XMLError SaveFile( FILE* fp, bool compact = false );
1706 
1707  bool ProcessEntities() const {
1708  return _processEntities;
1709  }
1710  Whitespace WhitespaceMode() const {
1711  return _whitespaceMode;
1712  }
1713 
1717  bool HasBOM() const {
1718  return _writeBOM;
1719  }
1722  void SetBOM( bool useBOM ) {
1723  _writeBOM = useBOM;
1724  }
1725 
1730  return FirstChildElement();
1731  }
1732  const XMLElement* RootElement() const {
1733  return FirstChildElement();
1734  }
1735 
1750  void Print( XMLPrinter* streamer=0 ) const;
1751  virtual bool Accept( XMLVisitor* visitor ) const;
1752 
1758  XMLElement* NewElement( const char* name );
1764  XMLComment* NewComment( const char* comment );
1770  XMLText* NewText( const char* text );
1782  XMLDeclaration* NewDeclaration( const char* text=0 );
1788  XMLUnknown* NewUnknown( const char* text );
1789 
1794  void DeleteNode( XMLNode* node );
1795 
1796  void ClearError() {
1797  SetError(XML_SUCCESS, 0, 0);
1798  }
1799 
1801  bool Error() const {
1802  return _errorID != XML_SUCCESS;
1803  }
1805  XMLError ErrorID() const {
1806  return _errorID;
1807  }
1808  const char* ErrorName() const;
1809  static const char* ErrorIDToName(XMLError errorID);
1810 
1814  const char* ErrorStr() const;
1815 
1817  void PrintError() const;
1818 
1820  int ErrorLineNum() const
1821  {
1822  return _errorLineNum;
1823  }
1824 
1826  void Clear();
1827 
1835  void DeepCopy(XMLDocument* target) const;
1836 
1837  // internal
1838  char* Identify( char* p, XMLNode** node );
1839 
1840  // internal
1841  void MarkInUse(XMLNode*);
1842 
1843  virtual XMLNode* ShallowClone( XMLDocument* /*document*/ ) const {
1844  return 0;
1845  }
1846  virtual bool ShallowEqual( const XMLNode* /*compare*/ ) const {
1847  return false;
1848  }
1849 
1850 private:
1851  XMLDocument( const XMLDocument& ); // not supported
1852  void operator=( const XMLDocument& ); // not supported
1853 
1854  bool _writeBOM;
1855  bool _processEntities;
1856  XMLError _errorID;
1857  Whitespace _whitespaceMode;
1858  mutable StrPair _errorStr;
1859  int _errorLineNum;
1860  char* _charBuffer;
1861  int _parseCurLineNum;
1862  // Memory tracking does add some overhead.
1863  // However, the code assumes that you don't
1864  // have a bunch of unlinked nodes around.
1865  // Therefore it takes less memory to track
1866  // in the document vs. a linked list in the XMLNode,
1867  // and the performance is the same.
1868  DynArray<XMLNode*, 10> _unlinked;
1869 
1870  MemPoolT< sizeof(XMLElement) > _elementPool;
1871  MemPoolT< sizeof(XMLAttribute) > _attributePool;
1872  MemPoolT< sizeof(XMLText) > _textPool;
1873  MemPoolT< sizeof(XMLComment) > _commentPool;
1874 
1875  static const char* _errorNames[XML_ERROR_COUNT];
1876 
1877  void Parse();
1878 
1879  void SetError( XMLError error, int lineNum, const char* format, ... );
1880 
1881  template<class NodeType, int PoolElementSize>
1882  NodeType* CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool );
1883 };
1884 
1885 template<class NodeType, int PoolElementSize>
1886 inline NodeType* XMLDocument::CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool )
1887 {
1888  TIXMLASSERT( sizeof( NodeType ) == PoolElementSize );
1889  TIXMLASSERT( sizeof( NodeType ) == pool.ItemSize() );
1890  NodeType* returnNode = new (pool.Alloc()) NodeType( this );
1891  TIXMLASSERT( returnNode );
1892  returnNode->_memPool = &pool;
1893 
1894  _unlinked.Push(returnNode);
1895  return returnNode;
1896 }
1897 
1953 class TINYXML2_LIB XMLHandle
1954 {
1955 public:
1957  XMLHandle( XMLNode* node ) : _node( node ) {
1958  }
1960  XMLHandle( XMLNode& node ) : _node( &node ) {
1961  }
1963  XMLHandle( const XMLHandle& ref ) : _node( ref._node ) {
1964  }
1966  XMLHandle& operator=( const XMLHandle& ref ) {
1967  _node = ref._node;
1968  return *this;
1969  }
1970 
1973  return XMLHandle( _node ? _node->FirstChild() : 0 );
1974  }
1976  XMLHandle FirstChildElement( const char* name = 0 ) {
1977  return XMLHandle( _node ? _node->FirstChildElement( name ) : 0 );
1978  }
1981  return XMLHandle( _node ? _node->LastChild() : 0 );
1982  }
1984  XMLHandle LastChildElement( const char* name = 0 ) {
1985  return XMLHandle( _node ? _node->LastChildElement( name ) : 0 );
1986  }
1989  return XMLHandle( _node ? _node->PreviousSibling() : 0 );
1990  }
1992  XMLHandle PreviousSiblingElement( const char* name = 0 ) {
1993  return XMLHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
1994  }
1997  return XMLHandle( _node ? _node->NextSibling() : 0 );
1998  }
2000  XMLHandle NextSiblingElement( const char* name = 0 ) {
2001  return XMLHandle( _node ? _node->NextSiblingElement( name ) : 0 );
2002  }
2003 
2006  return _node;
2007  }
2010  return ( _node ? _node->ToElement() : 0 );
2011  }
2014  return ( _node ? _node->ToText() : 0 );
2015  }
2018  return ( _node ? _node->ToUnknown() : 0 );
2019  }
2022  return ( _node ? _node->ToDeclaration() : 0 );
2023  }
2024 
2025 private:
2026  XMLNode* _node;
2027 };
2028 
2029 
2034 class TINYXML2_LIB XMLConstHandle
2035 {
2036 public:
2037  XMLConstHandle( const XMLNode* node ) : _node( node ) {
2038  }
2039  XMLConstHandle( const XMLNode& node ) : _node( &node ) {
2040  }
2041  XMLConstHandle( const XMLConstHandle& ref ) : _node( ref._node ) {
2042  }
2043 
2044  XMLConstHandle& operator=( const XMLConstHandle& ref ) {
2045  _node = ref._node;
2046  return *this;
2047  }
2048 
2049  const XMLConstHandle FirstChild() const {
2050  return XMLConstHandle( _node ? _node->FirstChild() : 0 );
2051  }
2052  const XMLConstHandle FirstChildElement( const char* name = 0 ) const {
2053  return XMLConstHandle( _node ? _node->FirstChildElement( name ) : 0 );
2054  }
2055  const XMLConstHandle LastChild() const {
2056  return XMLConstHandle( _node ? _node->LastChild() : 0 );
2057  }
2058  const XMLConstHandle LastChildElement( const char* name = 0 ) const {
2059  return XMLConstHandle( _node ? _node->LastChildElement( name ) : 0 );
2060  }
2061  const XMLConstHandle PreviousSibling() const {
2062  return XMLConstHandle( _node ? _node->PreviousSibling() : 0 );
2063  }
2064  const XMLConstHandle PreviousSiblingElement( const char* name = 0 ) const {
2065  return XMLConstHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
2066  }
2067  const XMLConstHandle NextSibling() const {
2068  return XMLConstHandle( _node ? _node->NextSibling() : 0 );
2069  }
2070  const XMLConstHandle NextSiblingElement( const char* name = 0 ) const {
2071  return XMLConstHandle( _node ? _node->NextSiblingElement( name ) : 0 );
2072  }
2073 
2074 
2075  const XMLNode* ToNode() const {
2076  return _node;
2077  }
2078  const XMLElement* ToElement() const {
2079  return ( _node ? _node->ToElement() : 0 );
2080  }
2081  const XMLText* ToText() const {
2082  return ( _node ? _node->ToText() : 0 );
2083  }
2084  const XMLUnknown* ToUnknown() const {
2085  return ( _node ? _node->ToUnknown() : 0 );
2086  }
2087  const XMLDeclaration* ToDeclaration() const {
2088  return ( _node ? _node->ToDeclaration() : 0 );
2089  }
2090 
2091 private:
2092  const XMLNode* _node;
2093 };
2094 
2095 
2138 class TINYXML2_LIB XMLPrinter : public XMLVisitor
2139 {
2140 public:
2147  XMLPrinter( FILE* file=0, bool compact = false, int depth = 0 );
2148  virtual ~XMLPrinter() {}
2149 
2151  void PushHeader( bool writeBOM, bool writeDeclaration );
2155  void OpenElement( const char* name, bool compactMode=false );
2157  void PushAttribute( const char* name, const char* value );
2158  void PushAttribute( const char* name, int value );
2159  void PushAttribute( const char* name, unsigned value );
2160  void PushAttribute(const char* name, int64_t value);
2161  void PushAttribute( const char* name, bool value );
2162  void PushAttribute( const char* name, double value );
2164  virtual void CloseElement( bool compactMode=false );
2165 
2167  void PushText( const char* text, bool cdata=false );
2169  void PushText( int value );
2171  void PushText( unsigned value );
2173  void PushText(int64_t value);
2175  void PushText( bool value );
2177  void PushText( float value );
2179  void PushText( double value );
2180 
2182  void PushComment( const char* comment );
2183 
2184  void PushDeclaration( const char* value );
2185  void PushUnknown( const char* value );
2186 
2187  virtual bool VisitEnter( const XMLDocument& /*doc*/ );
2188  virtual bool VisitExit( const XMLDocument& /*doc*/ ) {
2189  return true;
2190  }
2191 
2192  virtual bool VisitEnter( const XMLElement& element, const XMLAttribute* attribute );
2193  virtual bool VisitExit( const XMLElement& element );
2194 
2195  virtual bool Visit( const XMLText& text );
2196  virtual bool Visit( const XMLComment& comment );
2197  virtual bool Visit( const XMLDeclaration& declaration );
2198  virtual bool Visit( const XMLUnknown& unknown );
2199 
2204  const char* CStr() const {
2205  return _buffer.Mem();
2206  }
2212  int CStrSize() const {
2213  return _buffer.Size();
2214  }
2219  void ClearBuffer() {
2220  _buffer.Clear();
2221  _buffer.Push(0);
2222  _firstElement = true;
2223  }
2224 
2225 protected:
2226  virtual bool CompactMode( const XMLElement& ) { return _compactMode; }
2227 
2231  virtual void PrintSpace( int depth );
2232  void Print( const char* format, ... );
2233  void Write( const char* data, size_t size );
2234  inline void Write( const char* data ) { Write( data, strlen( data ) ); }
2235  void Putc( char ch );
2236 
2237  void SealElementIfJustOpened();
2238  bool _elementJustOpened;
2239  DynArray< const char*, 10 > _stack;
2240 
2241 private:
2242  void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities.
2243 
2244  bool _firstElement;
2245  FILE* _fp;
2246  int _depth;
2247  int _textDepth;
2248  bool _processEntities;
2249  bool _compactMode;
2250 
2251  enum {
2252  ENTITY_RANGE = 64,
2253  BUF_SIZE = 200
2254  };
2255  bool _entityFlag[ENTITY_RANGE];
2256  bool _restrictedEntityFlag[ENTITY_RANGE];
2257 
2258  DynArray< char, 20 > _buffer;
2259 
2260  // Prohibit cloning, intentionally not implemented
2261  XMLPrinter( const XMLPrinter& );
2262  XMLPrinter& operator=( const XMLPrinter& );
2263 };
2264 
2265 
2266 } // tinyxml2
2267 
2268 #if defined(_MSC_VER)
2269 # pragma warning(pop)
2270 #endif
2271 
2272 #endif // TINYXML2_INCLUDED
XMLError QueryInt64Attribute(const char *name, int64_t *value) const
See QueryIntAttribute()
Definition: tinyxml2.h:1331
+
XMLError QueryIntValue(int *value) const
+
XMLError QueryBoolAttribute(const char *name, bool *value) const
See QueryIntAttribute()
Definition: tinyxml2.h:1340
+
virtual bool VisitExit(const XMLDocument &)
Visit a document.
Definition: tinyxml2.h:478
+
virtual XMLNode * ShallowClone(XMLDocument *) const
Definition: tinyxml2.h:1843
+
virtual bool ShallowEqual(const XMLNode *) const
Definition: tinyxml2.h:1846
+
XMLHandle FirstChildElement(const char *name=0)
Get the first child element of this handle.
Definition: tinyxml2.h:1976
+
XMLText * ToText()
Safe cast to XMLText. This can return null.
Definition: tinyxml2.h:2013
+
XMLError QueryFloatValue(float *value) const
See QueryIntValue.
+
const char * CStr() const
Definition: tinyxml2.h:2204
+
XMLError ErrorID() const
Return the errorID.
Definition: tinyxml2.h:1805
+
XMLElement * ToElement()
Safe cast to XMLElement. This can return null.
Definition: tinyxml2.h:2009
+
virtual XMLElement * ToElement()
Safely cast to an Element, or null.
Definition: tinyxml2.h:674
+
virtual XMLText * ToText()
Safely cast to Text, or null.
Definition: tinyxml2.h:678
+
XMLError QueryUnsignedAttribute(const char *name, unsigned int *value) const
See QueryIntAttribute()
Definition: tinyxml2.h:1322
+
int CStrSize() const
Definition: tinyxml2.h:2212
+
float FloatValue() const
Query as a float. See IntValue()
Definition: tinyxml2.h:1175
+
virtual XMLDocument * ToDocument()
Safely cast to a Document, or null.
Definition: tinyxml2.h:1650
+
XMLUnknown * ToUnknown()
Safe cast to XMLUnknown. This can return null.
Definition: tinyxml2.h:2017
+
const char * Name() const
Get the name of an element (which is the Value() of the node.)
Definition: tinyxml2.h:1241
+
XMLHandle(const XMLHandle &ref)
Copy constructor.
Definition: tinyxml2.h:1963
+
XMLHandle FirstChild()
Get the first child of this handle.
Definition: tinyxml2.h:1972
+
void SetCData(bool isCData)
Declare whether this should be CDATA or standard text.
Definition: tinyxml2.h:987
+
void SetUserData(void *userData)
Definition: tinyxml2.h:921
+
const XMLNode * NextSibling() const
Get the next (right) sibling node of this node.
Definition: tinyxml2.h:803
+
unsigned UnsignedValue() const
Query as an unsigned integer. See IntValue()
Definition: tinyxml2.h:1157
+
XMLHandle LastChildElement(const char *name=0)
Get the last child element of this handle.
Definition: tinyxml2.h:1984
+
XMLHandle LastChild()
Get the last child of this handle.
Definition: tinyxml2.h:1980
+
Definition: tinyxml2.h:1953
+
Definition: tinyxml2.h:1052
+
XMLElement * RootElement()
Definition: tinyxml2.h:1729
+
int QueryAttribute(const char *name, int *value) const
Definition: tinyxml2.h:1382
+
virtual XMLText * ToText()
Safely cast to Text, or null.
Definition: tinyxml2.h:979
+
XMLHandle(XMLNode &node)
Create a handle from a node.
Definition: tinyxml2.h:1960
+
void SetName(const char *str, bool staticMem=false)
Set the name of the element.
Definition: tinyxml2.h:1245
+
void SetBOM(bool useBOM)
Definition: tinyxml2.h:1722
+
XMLHandle(XMLNode *node)
Create a handle from any node (at any depth of the tree.) This can be a null pointer.
Definition: tinyxml2.h:1957
+
void ClearBuffer()
Definition: tinyxml2.h:2219
+
virtual XMLComment * ToComment()
Safely cast to a Comment, or null.
Definition: tinyxml2.h:1017
+
virtual XMLElement * ToElement()
Safely cast to an Element, or null.
Definition: tinyxml2.h:1249
+
bool HasBOM() const
Definition: tinyxml2.h:1717
+
Definition: tinyxml2.h:105
+
XMLError QueryFloatAttribute(const char *name, float *value) const
See QueryIntAttribute()
Definition: tinyxml2.h:1356
+
XMLError QueryUnsignedValue(unsigned int *value) const
See QueryIntValue.
+
XMLNode * ToNode()
Safe cast to XMLNode. This can return null.
Definition: tinyxml2.h:2005
+
bool BoolValue() const
Query as a boolean. See IntValue()
Definition: tinyxml2.h:1163
+
const XMLNode * FirstChild() const
Get the first child node, or null if none exists.
Definition: tinyxml2.h:751
+
Definition: tinyxml2.h:1013
+
virtual XMLDeclaration * ToDeclaration()
Safely cast to a Declaration, or null.
Definition: tinyxml2.h:1056
+
virtual bool Visit(const XMLDeclaration &)
Visit a declaration.
Definition: tinyxml2.h:492
+
virtual bool Visit(const XMLUnknown &)
Visit an unknown node.
Definition: tinyxml2.h:504
+
void SetAttribute(const char *name, unsigned value)
Sets the named attribute to value.
Definition: tinyxml2.h:1417
+
XMLError QueryDoubleAttribute(const char *name, double *value) const
See QueryIntAttribute()
Definition: tinyxml2.h:1348
+
Definition: tinyxml2.h:1236
+
XMLError QueryInt64Value(int64_t *value) const
See QueryIntValue.
+
XMLHandle NextSibling()
Get the next sibling of this handle.
Definition: tinyxml2.h:1996
+
int GetLineNum() const
Gets the line number the attribute is in, if the document was parsed from a file. ...
Definition: tinyxml2.h:1133
+
int IntValue() const
Definition: tinyxml2.h:1144
+
virtual XMLUnknown * ToUnknown()
Safely cast to an Unknown, or null.
Definition: tinyxml2.h:1091
+
bool CData() const
Returns true if this is a CDATA text element.
Definition: tinyxml2.h:991
+
XMLHandle PreviousSibling()
Get the previous sibling of this handle.
Definition: tinyxml2.h:1988
+
Definition: tinyxml2.h:2034
+
XMLHandle & operator=(const XMLHandle &ref)
Assignment.
Definition: tinyxml2.h:1966
+
virtual bool VisitExit(const XMLDocument &)
Visit a document.
Definition: tinyxml2.h:2188
+
virtual bool VisitEnter(const XMLElement &, const XMLAttribute *)
Visit an element.
Definition: tinyxml2.h:483
+
bool Error() const
Return true if there was an error parsing the document.
Definition: tinyxml2.h:1801
+
virtual bool VisitEnter(const XMLDocument &)
Visit a document.
Definition: tinyxml2.h:474
+
Definition: tinyxml2.h:1087
+
virtual XMLDocument * ToDocument()
Safely cast to a Document, or null.
Definition: tinyxml2.h:686
+
const XMLNode * LastChild() const
Get the last child node, or null if none exists.
Definition: tinyxml2.h:769
+
Definition: tinyxml2.h:1122
+
void SetAttribute(const char *name, bool value)
Sets the named attribute to value.
Definition: tinyxml2.h:1429
+
XMLDeclaration * ToDeclaration()
Safe cast to XMLDeclaration. This can return null.
Definition: tinyxml2.h:2021
+
void SetAttribute(const char *value)
Set the attribute to a string value.
+
void SetAttribute(const char *name, const char *value)
Sets the named attribute to value.
Definition: tinyxml2.h:1407
+
virtual bool VisitExit(const XMLElement &)
Visit an element.
Definition: tinyxml2.h:487
+
Definition: tinyxml2.h:2138
+
Definition: tinyxml2.h:1635
+
void * GetUserData() const
Definition: tinyxml2.h:928
+
void SetAttribute(const char *name, int64_t value)
Sets the named attribute to value.
Definition: tinyxml2.h:1423
+
void SetAttribute(const char *name, double value)
Sets the named attribute to value.
Definition: tinyxml2.h:1434
+
XMLError QueryDoubleValue(double *value) const
See QueryIntValue.
+
const XMLNode * Parent() const
Get the parent of this node on the DOM.
Definition: tinyxml2.h:737
+
virtual bool Visit(const XMLComment &)
Visit a comment node.
Definition: tinyxml2.h:500
+
XMLError QueryBoolValue(bool *value) const
See QueryIntValue.
+
const XMLNode * PreviousSibling() const
Get the previous (left) sibling node of this node.
Definition: tinyxml2.h:787
+
XMLHandle NextSiblingElement(const char *name=0)
Get the next sibling element of this handle.
Definition: tinyxml2.h:2000
+
Definition: tinyxml2.h:656
+
XMLError QueryIntAttribute(const char *name, int *value) const
Definition: tinyxml2.h:1313
+
int GetLineNum() const
Gets the line number the node is in, if the document was parsed from a file.
Definition: tinyxml2.h:734
+
virtual bool Visit(const XMLText &)
Visit a text node.
Definition: tinyxml2.h:496
+
Definition: tinyxml2.h:973
+
Definition: tinyxml2.h:468
+
int ErrorLineNum() const
Return the line where the error occured, or zero if unknown.
Definition: tinyxml2.h:1820
+
XMLDocument * GetDocument()
Get the XMLDocument that owns this XMLNode.
Definition: tinyxml2.h:668
+
virtual XMLUnknown * ToUnknown()
Safely cast to an Unknown, or null.
Definition: tinyxml2.h:694
+
void SetAttribute(const char *name, float value)
Sets the named attribute to value.
Definition: tinyxml2.h:1439
+
const XMLAttribute * Next() const
The next attribute in the list.
Definition: tinyxml2.h:1136
+
bool NoChildren() const
Returns true if this node has no children.
Definition: tinyxml2.h:746
+
double DoubleValue() const
Query as a double. See IntValue()
Definition: tinyxml2.h:1169
+
virtual XMLDeclaration * ToDeclaration()
Safely cast to a Declaration, or null.
Definition: tinyxml2.h:690
+
const XMLDocument * GetDocument() const
Get the XMLDocument that owns this XMLNode.
Definition: tinyxml2.h:663
+
XMLHandle PreviousSiblingElement(const char *name=0)
Get the previous sibling element of this handle.
Definition: tinyxml2.h:1992
+
void SetAttribute(const char *name, int value)
Sets the named attribute to value.
Definition: tinyxml2.h:1412
+
const XMLAttribute * FirstAttribute() const
Return the first attribute in the list.
Definition: tinyxml2.h:1450
+
virtual XMLComment * ToComment()
Safely cast to a Comment, or null.
Definition: tinyxml2.h:682
+
+ + + + diff --git a/vendor/github.com/leethomason/tinyxml2/dox b/vendor/github.com/leethomason/tinyxml2/dox index 601feed..4f8dbb3 100644 --- a/vendor/github.com/leethomason/tinyxml2/dox +++ b/vendor/github.com/leethomason/tinyxml2/dox @@ -1,4 +1,4 @@ -# Doxyfile 1.8.6 +# Doxyfile 1.8.13 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -38,7 +38,11 @@ PROJECT_NAME = "TinyXML-2" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 5.0.1 +<<<<<<< HEAD +PROJECT_NUMBER = 6.2.0 +======= +PROJECT_NUMBER = 6.2.0 +>>>>>>> master # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -46,10 +50,10 @@ PROJECT_NUMBER = 5.0.1 PROJECT_BRIEF = -# With the PROJECT_LOGO tag one can specify an logo or icon that is included in -# the documentation. The maximum height of the logo should not exceed 55 pixels -# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo -# to the output directory. +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. PROJECT_LOGO = @@ -60,7 +64,7 @@ PROJECT_LOGO = OUTPUT_DIRECTORY = . -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where @@ -70,6 +74,14 @@ OUTPUT_DIRECTORY = . CREATE_SUBDIRS = NO +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. @@ -85,14 +97,14 @@ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English -# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES -# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the @@ -127,7 +139,7 @@ ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO -# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. @@ -197,9 +209,9 @@ MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a -# new page for each member. If set to NO, the documentation of a member will be -# part of the file/class/namespace that contains it. +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO @@ -261,11 +273,14 @@ OPTIMIZE_OUTPUT_VHDL = NO # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. # -# Note For files without extension you can use no_extension as a placeholder. +# Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. @@ -282,10 +297,19 @@ EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES @@ -325,13 +349,20 @@ SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first +# tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent @@ -390,7 +421,7 @@ LOOKUP_CACHE_SIZE = 0 # Build related configuration options #--------------------------------------------------------------------------- -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. @@ -400,35 +431,35 @@ LOOKUP_CACHE_SIZE = 0 EXTRACT_ALL = NO -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO -# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = NO -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES -# This flag is only useful for Objective-C code. When set to YES local methods, +# This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO only methods in the interface are +# included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. @@ -453,21 +484,21 @@ HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set -# to NO these classes will be included in the various overviews. This option has -# no effect if EXTRACT_ALL is enabled. +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO these declarations will be +# (class|struct|union) declarations. If set to NO, these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO these +# documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. @@ -481,7 +512,7 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES upper-case letters are also +# names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. @@ -490,12 +521,19 @@ INTERNAL_DOCS = NO CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES the +# their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -523,14 +561,14 @@ INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. +# name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. Note that +# name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. @@ -575,27 +613,25 @@ SORT_BY_SCOPE_NAME = NO STRICT_PROTO_MATCHING = NO -# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the -# todo list. This list is created by putting \todo commands in the -# documentation. +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = NO -# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the -# test list. This list is created by putting \test commands in the -# documentation. +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = NO -# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = NO -# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. @@ -620,8 +656,8 @@ ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES the list -# will mention the files that were used to generate the documentation. +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES @@ -669,8 +705,7 @@ LAYOUT_FILE = # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. Do not use file names with spaces, bibtex cannot handle them. See -# also \cite for info how to create references. +# search path. See also \cite for info how to create references. CITE_BIB_FILES = @@ -686,7 +721,7 @@ CITE_BIB_FILES = QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. @@ -694,7 +729,7 @@ QUIET = NO WARNINGS = YES -# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. @@ -711,12 +746,18 @@ WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO doxygen will only warn about wrong or incomplete parameter -# documentation, but not about the absence of documentation. +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = NO +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated @@ -740,7 +781,7 @@ WARN_LOGFILE = # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with -# spaces. +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = tinyxml2.h \ @@ -758,12 +799,17 @@ INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank the -# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, -# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. FILE_PATTERNS = @@ -849,6 +895,10 @@ IMAGE_PATH = # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. INPUT_FILTER = @@ -858,11 +908,15 @@ INPUT_FILTER = # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER ) will also be used to filter the input files that are used for +# INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. @@ -922,7 +976,7 @@ REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. @@ -969,13 +1023,13 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES -# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more acurate parsing at the +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the # cost of reduced performance. This can be particularly helpful with template # rich C++ code for which doxygen's built-in parser lacks the necessary type # information. # Note: The availability of this option depends on whether or not doxygen was -# compiled with the --with-libclang option. +# generated with the -Duse-libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO @@ -1018,7 +1072,7 @@ IGNORE_PREFIX = # Configuration options related to the HTML output #--------------------------------------------------------------------------- -# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES @@ -1080,13 +1134,15 @@ HTML_FOOTER = HTML_STYLESHEET = -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- -# defined cascading style sheet that is included after the standard style sheets +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefor more robust against future updates. -# Doxygen will copy the style sheet file to the output directory. For an example -# see the documentation. +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1102,7 +1158,7 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the stylesheet and background images according to +# will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # http://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 @@ -1133,8 +1189,9 @@ HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: YES. +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES @@ -1230,28 +1287,29 @@ GENERATE_HTMLHELP = NO CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = -# The GENERATE_CHI flag controls if a separate .chi index file is generated ( -# YES) or that it should be included in the master .chm file ( NO). +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = -# The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1364,7 +1422,7 @@ DISABLE_INDEX = NO # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has @@ -1392,7 +1450,7 @@ ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1421,7 +1479,7 @@ FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. @@ -1491,11 +1549,11 @@ SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using Javascript. There -# are two flavours of web server based searching depending on the -# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for -# searching and an index file used by the script. When EXTERNAL_SEARCH is -# enabled the indexing and searching needs to be provided by external tools. See -# the section "External Indexing and Searching" for details. +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. @@ -1507,7 +1565,7 @@ SERVER_BASED_SEARCH = NO # external search engine pointed to by the SEARCHENGINE_URL option to obtain the # search results. # -# Doxygen ships with an example indexer ( doxyindexer) and search engine +# Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: http://xapian.org/). # @@ -1520,7 +1578,7 @@ EXTERNAL_SEARCH = NO # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will return the search results when EXTERNAL_SEARCH is enabled. # -# Doxygen ships with an example indexer ( doxyindexer) and search engine +# Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: http://xapian.org/). See the section "External Indexing and # Searching" for details. @@ -1558,7 +1616,7 @@ EXTRA_SEARCH_MAPPINGS = # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- -# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output. +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. GENERATE_LATEX = NO @@ -1589,7 +1647,7 @@ LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex -# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1607,9 +1665,12 @@ COMPACT_LATEX = NO PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names -# that should be included in the LaTeX output. To get the times font for -# instance you can specify -# EXTRA_PACKAGES=times +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1623,23 +1684,36 @@ EXTRA_PACKAGES = # # Note: Only use a user-defined header if you know what you are doing! The # following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will -# replace them by respectively the title of the page, the current date and time, -# only the current date, the version number of doxygen, the project name (see -# PROJECT_NAME), or the project number (see PROJECT_NUMBER). +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. # # Note: Only use a user-defined footer if you know what you are doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_STYLESHEET = + # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the LATEX_OUTPUT output # directory. Note that the files will be copied as-is; there are no commands or @@ -1657,8 +1731,8 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES to get a +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# the PDF file directly from the LaTeX files. Set this option to YES, to get a # higher quality PDF documentation. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1699,11 +1773,19 @@ LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_TIMESTAMP = NO + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- -# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The # RTF output is optimized for Word 97 and may not look too pretty with other RTF # readers/editors. # The default value is: NO. @@ -1718,7 +1800,7 @@ GENERATE_RTF = NO RTF_OUTPUT = rtf -# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1755,11 +1837,21 @@ RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_SOURCE_CODE = NO + #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- -# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for # classes and files. # The default value is: NO. @@ -1783,6 +1875,13 @@ MAN_OUTPUT = man MAN_EXTENSION = .3 +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = + # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it # will generate one additional man file for each entity documented in the real # man page(s). These additional files only source the real man page, but without @@ -1796,7 +1895,7 @@ MAN_LINKS = NO # Configuration options related to the XML output #--------------------------------------------------------------------------- -# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that # captures the structure of the code including all documentation. # The default value is: NO. @@ -1810,19 +1909,7 @@ GENERATE_XML = NO XML_OUTPUT = xml -# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a -# validating XML parser to check the syntax of the XML files. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify a XML DTD, which can be used by a -# validating XML parser to check the syntax of the XML files. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to # the XML output. Note that enabling this will significantly increase the size # of the XML output. @@ -1835,7 +1922,7 @@ XML_PROGRAMLISTING = YES # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- -# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files # that can be used to generate PDF. # The default value is: NO. @@ -1849,14 +1936,23 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = NO + #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- -# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen -# Definitions (see http://autogen.sf.net) file that captures the structure of -# the code including all documentation. Note that this feature is still -# experimental and incomplete at the moment. +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://autogen.sf.net) file that captures the +# structure of the code including all documentation. Note that this feature is +# still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO @@ -1865,7 +1961,7 @@ GENERATE_AUTOGEN_DEF = NO # Configuration options related to the Perl module output #--------------------------------------------------------------------------- -# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module # file that captures the structure of the code including all documentation. # # Note that this feature is still experimental and incomplete at the moment. @@ -1873,7 +1969,7 @@ GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO -# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI # output from the Perl module output. # The default value is: NO. @@ -1881,9 +1977,9 @@ GENERATE_PERLMOD = NO PERLMOD_LATEX = NO -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely # formatted so it can be parsed by a human reader. This is useful if you want to -# understand what is going on. On the other hand, if this tag is set to NO the +# understand what is going on. On the other hand, if this tag is set to NO, the # size of the Perl module output will be much smaller and Perl will parse it # just the same. # The default value is: YES. @@ -1903,14 +1999,14 @@ PERLMOD_MAKEVAR_PREFIX = # Configuration options related to the preprocessor #--------------------------------------------------------------------------- -# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all # C-preprocessor directives found in the sources and include files. # The default value is: YES. ENABLE_PREPROCESSING = YES -# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names -# in the source code. If set to NO only conditional compilation will be +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be # performed. Macro expansion can be done in a controlled way by setting # EXPAND_ONLY_PREDEF to YES. # The default value is: NO. @@ -1926,7 +2022,7 @@ MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO -# If the SEARCH_INCLUDES tag is set to YES the includes files in the +# If the SEARCH_INCLUDES tag is set to YES, the include files in the # INCLUDE_PATH will be searched if a #include is found. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. @@ -1968,9 +2064,9 @@ PREDEFINED = EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will -# remove all refrences to function-like macros that are alone on a line, have an -# all uppercase name, and do not end with a semicolon. Such function macros are -# typically used for boiler-plate code, and will confuse the parser if not +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not # removed. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. @@ -1990,7 +2086,7 @@ SKIP_FUNCTION_MACROS = YES # where loc1 and loc2 can be relative or absolute paths or URLs. See the # section "Linking to external documentation" for more information about the use # of tag files. -# Note: Each tag file must have an unique name (where the name does NOT include +# Note: Each tag file must have a unique name (where the name does NOT include # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. @@ -2002,20 +2098,21 @@ TAGFILES = GENERATE_TAGFILE = -# If the ALLEXTERNALS tag is set to YES all external class will be listed in the -# class index. If set to NO only the inherited external classes will be listed. +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. # The default value is: NO. ALLEXTERNALS = NO -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in -# the modules index. If set to NO, only the current project's groups will be +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. EXTERNAL_GROUPS = YES -# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in # the related pages index. If set to NO, only the current project's pages will # be listed. # The default value is: YES. @@ -2032,7 +2129,7 @@ PERL_PATH = /usr/bin/perl # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to # NO turns the diagrams off. Note that this option also works with HAVE_DOT # disabled, but it is recommended to install and use dot, since it yields more @@ -2057,7 +2154,7 @@ MSCGEN_PATH = DIA_PATH = -# If set to YES, the inheritance and collaboration graphs will hide inheritance +# If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2082,7 +2179,7 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font n the dot files that doxygen +# When you want a differently looking font in the dot files that doxygen # generates you can specify the font name using DOT_FONTNAME. You need to make # sure dot is able to find the font, which can be done by putting it in a # standard location or by setting the DOTFONTPATH environment variable or by @@ -2130,7 +2227,7 @@ COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. # The default value is: NO. @@ -2182,7 +2279,8 @@ INCLUDED_BY_GRAPH = YES # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2193,7 +2291,8 @@ CALL_GRAPH = NO # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2216,11 +2315,15 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). -# Possible values are: png, jpg, gif and svg. +# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. # The default value is: png. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2263,6 +2366,24 @@ MSCFILE_DIRS = DIAFILE_DIRS = +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = + +# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a +# configuration file for plantuml. + +PLANTUML_CFG_FILE = + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +PLANTUML_INCLUDE_PATH = + # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes # larger than this value, doxygen will truncate the graph, which is visualized @@ -2299,7 +2420,7 @@ MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support # this, this feature is disabled by default. @@ -2316,7 +2437,7 @@ DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot # files that are used to generate the various graphs. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. diff --git a/vendor/github.com/leethomason/tinyxml2/premake5.lua b/vendor/github.com/leethomason/tinyxml2/premake5.lua new file mode 100644 index 0000000..33f019c --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/premake5.lua @@ -0,0 +1,95 @@ +-- +-- Requires: Premake 5 (https://premake.github.io/) +-- Usage: premake5 --file=premake5.lua [project / makefile format, refer to premake5 --help] --target=[target from below] +-- + +-- target option +tbl_target_values = +{ + { "windows", "VS2015 projects targeting Windows 32/64 bits" }, + { "macosx", "Xcode4 projects targeting OS X" }, +} + +newoption +{ + trigger = "target", + description = "Build environment and target to generate projects for.", + allowed = tbl_target_values +} + +-- validation +target_env = _OPTIONS["target"] +if not target_env then + print "Command-line option --target is required with one of the following values:" + for _, v in ipairs(tbl_target_values) do + print(v[1]) + end + os.exit(1) +end + +-- solution +workspace "tinyxml2" + + tbl_platforms = {} + if target_env == "windows" then + tbl_platforms = { + "x86", + "x64", + } + elseif target_env == "macosx" then + tbl_platforms = { + "Universal64" + } + end + platforms(tbl_platforms) + + tbl_configurations = { + "Debug", + "Release", + } + configurations(tbl_configurations) + + sln_location = ".projects/"..target_env + location(sln_location) + + bin_location = ".artifacts/"..target_env + obj_location = ".intermediate/"..target_env + + for _, p in ipairs(tbl_platforms) do + for _, c in ipairs(tbl_configurations) do + local pc = p.."-"..c + filter{ "platforms:"..p, c } + targetdir(bin_location.."/"..pc) + libdirs(bin_location.."/"..pc) + objdir(obj_location.."/"..pc) + end + end + + filter("not Release") + optimize "Debug" + symbols "On" + filter{ "Release" } + optimize "Full" + filter{} + + -- projects + project "tinyxml2" + + kind "staticlib" + + files { + "tinyxml2.h", + "tinyxml2.cpp" + } + + project "xmltest" + + kind "consoleapp" + + links { + "tinyxml2" + } + + files { + "xmltest.cpp" + } diff --git a/vendor/github.com/leethomason/tinyxml2/readme.md b/vendor/github.com/leethomason/tinyxml2/readme.md index 54f752a..c5bc5a4 100644 --- a/vendor/github.com/leethomason/tinyxml2/readme.md +++ b/vendor/github.com/leethomason/tinyxml2/readme.md @@ -1,5 +1,8 @@ -TinyXML-2 [![TravisCI Status](https://travis-ci.org/leethomason/tinyxml2.svg?branch=master)](https://travis-ci.org/leethomason/tinyxml2) [![AppVeyor Status](https://ci.appveyor.com/api/projects/status/github/leethomason/tinyxml2?branch=master&svg=true)](https://ci.appveyor.com/project/leethomason/tinyxml2) +TinyXML-2 ========= + +[![TravisCI Status](https://travis-ci.org/leethomason/tinyxml2.svg?branch=master)](https://travis-ci.org/leethomason/tinyxml2) [![AppVeyor Status](https://ci.appveyor.com/api/projects/status/github/leethomason/tinyxml2?branch=master&svg=true)](https://ci.appveyor.com/project/leethomason/tinyxml2) + ![TinyXML-2 Logo](http://www.grinninglizard.com/tinyxml2/TinyXML2_small.png) TinyXML-2 is a simple, small, efficient, C++ XML parser that can be @@ -9,7 +12,7 @@ The master is hosted on github: https://github.com/leethomason/tinyxml2 The online HTML version of these docs: -http://grinninglizard.com/tinyxml2docs/index.html +http://leethomason.github.io/tinyxml2/ Examples are in the "related pages" tab of the HTML docs. diff --git a/vendor/github.com/leethomason/tinyxml2/resources/out/readme.txt b/vendor/github.com/leethomason/tinyxml2/resources/out/readme.txt new file mode 100644 index 0000000..5c8861a --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/resources/out/readme.txt @@ -0,0 +1 @@ +This file is here to create this output directory when the source is pulled from git. \ No newline at end of file diff --git a/vendor/github.com/leethomason/tinyxml2/resources/xmltest-4636783552757760.xml b/vendor/github.com/leethomason/tinyxml2/resources/xmltest-4636783552757760.xml new file mode 100644 index 0000000..b3f4df7 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/resources/xmltest-4636783552757760.xml @@ -0,0 +1 @@ +:schema<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> xml:space="1"><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> \ No newline at end of file diff --git a/vendor/github.com/leethomason/tinyxml2/resources/xmltest-5330.xml b/vendor/github.com/leethomason/tinyxml2/resources/xmltest-5330.xml new file mode 100644 index 0000000..8a6c426 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/resources/xmltest-5330.xml @@ -0,0 +1 @@ +>:><:><:><:><:><:><:><:><:><:><:>2:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>;<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-<:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-<:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF-:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>&#&#&#~>>GF- \ No newline at end of file diff --git a/vendor/github.com/leethomason/tinyxml2/resources/xmltest-5720541257269248.xml b/vendor/github.com/leethomason/tinyxml2/resources/xmltest-5720541257269248.xml new file mode 100644 index 0000000..c3ac8e0 --- /dev/null +++ b/vendor/github.com/leethomason/tinyxml2/resources/xmltest-5720541257269248.xml @@ -0,0 +1 @@ +:768ff1502f14aef-5cd1a32768a2ee67967bd0c1><:><:><:>=:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>󠁷<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>|:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:--:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>!<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>!<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><::><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>!<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:<:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:><:>|:><:>><:><:><<:><:><:><:><:><:><:><::> \ No newline at end of file diff --git a/vendor/github.com/leethomason/tinyxml2/setversion.py b/vendor/github.com/leethomason/tinyxml2/setversion.py index 85523d7..0bf5ad4 100755 --- a/vendor/github.com/leethomason/tinyxml2/setversion.py +++ b/vendor/github.com/leethomason/tinyxml2/setversion.py @@ -67,6 +67,28 @@ def engineRule( line ): fileProcess( "tinyxml2.h", engineRule ) +def macroVersionRule( line ): + + matchMajor = "#define TINYXML2_MAJOR_VERSION" + matchMinor = "#define TINYXML2_MINOR_VERSION" + matchBuild = "#define TINYXML2_PATCH_VERSION" + + if line[0:len(matchMajor)] == matchMajor: + print( "1)macro Major found" ) + return matchMajor + " " + major + "\n" + + elif line[0:len(matchMinor)] == matchMinor: + print( "2)macro Minor found" ) + return matchMinor + " " + minor + "\n" + + elif line[0:len(matchBuild)] == matchBuild: + print( "3)macro Build found" ) + return matchBuild + " " + build + "\n" + + else: + return line; + +fileProcess("tinyxml2.h", macroVersionRule) #### Write the dox #### @@ -113,7 +135,7 @@ def cmakeRule2( line ): fileProcess( "CMakeLists.txt", cmakeRule2 ) print( "Release note:" ) -print( '1. Build. g++ -Wall -DDEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe' ) +print( '1. Build. g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe' ) print( '2. Commit. git commit -am"setting the version to ' + versionStr + '"' ) print( '3. Tag. git tag ' + versionStr ) print( ' OR git tag -a ' + versionStr + ' -m [tag message]' ) diff --git a/vendor/github.com/leethomason/tinyxml2/tinyxml2.cpp b/vendor/github.com/leethomason/tinyxml2/tinyxml2.cpp index 3043ab3..89b7913 100755 --- a/vendor/github.com/leethomason/tinyxml2/tinyxml2.cpp +++ b/vendor/github.com/leethomason/tinyxml2/tinyxml2.cpp @@ -165,6 +165,7 @@ void StrPair::TransferTo( StrPair* other ) _end = 0; } + void StrPair::Reset() { if ( _flags & NEEDS_DELETE ) { @@ -424,20 +425,24 @@ void XMLUtil::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length output += *length; - // Scary scary fall throughs. + // Scary scary fall throughs are annotated with carefully designed comments + // to suppress compiler warnings such as -Wimplicit-fallthrough in gcc switch (*length) { case 4: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; + //fall through case 3: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; + //fall through case 2: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; + //fall through case 1: --output; *output = (char)(input | FIRST_BYTE_MARK[*length]); @@ -737,6 +742,7 @@ bool XMLDocument::Accept( XMLVisitor* visitor ) const XMLNode::XMLNode( XMLDocument* doc ) : _document( doc ), _parent( 0 ), + _value(), _parseLineNum( 0 ), _firstChild( 0 ), _lastChild( 0 ), _prev( 0 ), _next( 0 ), @@ -754,7 +760,7 @@ XMLNode::~XMLNode() } } -const char* XMLNode::Value() const +const char* XMLNode::Value() const { // Edge case: XMLDocuments don't have a Value. Return null. if ( this->ToDocument() ) @@ -907,6 +913,13 @@ XMLNode* XMLNode::InsertAfterChild( XMLNode* afterThis, XMLNode* addThis ) TIXMLASSERT( false ); return 0; } + if ( afterThis == addThis ) { + // Current state: BeforeThis -> AddThis -> OneAfterAddThis + // Now AddThis must disappear from it's location and then + // reappear between BeforeThis and OneAfterAddThis. + // So just leave it where it is. + return addThis; + } if ( afterThis->_next == 0 ) { // The last node or the only node. @@ -991,7 +1004,11 @@ char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) // 'endTag' is the end tag for this node, it is returned by a call to a child. // 'parentEnd' is the end tag for the parent, which is filled in and returned. - while( p && *p ) { + XMLDocument::DepthTracker tracker(_document); + if (_document->Error()) + return 0; + + while( p && *p ) { XMLNode* node = 0; p = _document->Identify( p, &node ); @@ -1007,7 +1024,7 @@ char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) if ( !p ) { DeleteNode( node ); if ( !_document->Error() ) { - _document->SetError( XML_ERROR_PARSING, 0, 0, initialLineNum); + _document->SetError( XML_ERROR_PARSING, initialLineNum, 0); } break; } @@ -1027,7 +1044,7 @@ char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) } } if ( !wellLocated ) { - _document->SetError( XML_ERROR_PARSING_DECLARATION, decl->Value(), 0, initialLineNum); + _document->SetError( XML_ERROR_PARSING_DECLARATION, initialLineNum, "XMLDeclaration value=%s", decl->Value()); DeleteNode( node ); break; } @@ -1062,7 +1079,7 @@ char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) } } if ( mismatch ) { - _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, ele->Name(), 0, initialLineNum); + _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, initialLineNum, "XMLElement name=%s", ele->Name()); DeleteNode( node ); break; } @@ -1119,11 +1136,10 @@ const XMLElement* XMLNode::ToElementWithName( const char* name ) const // --------- XMLText ---------- // char* XMLText::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) { - const char* start = p; if ( this->CData() ) { p = _value.ParseText( p, "]]>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); if ( !p ) { - _document->SetError( XML_ERROR_PARSING_CDATA, start, 0, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_CDATA, _parseLineNum, 0 ); } return p; } @@ -1138,7 +1154,7 @@ char* XMLText::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) return p-1; } if ( !p ) { - _document->SetError( XML_ERROR_PARSING_TEXT, start, 0, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_TEXT, _parseLineNum, 0 ); } } return 0; @@ -1186,10 +1202,9 @@ XMLComment::~XMLComment() char* XMLComment::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) { // Comment parses as text. - const char* start = p; p = _value.ParseText( p, "-->", StrPair::COMMENT, curLineNumPtr ); if ( p == 0 ) { - _document->SetError( XML_ERROR_PARSING_COMMENT, start, 0, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_COMMENT, _parseLineNum, 0 ); } return p; } @@ -1236,10 +1251,9 @@ XMLDeclaration::~XMLDeclaration() char* XMLDeclaration::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) { // Declaration parses as text. - const char* start = p; p = _value.ParseText( p, "?>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); if ( p == 0 ) { - _document->SetError( XML_ERROR_PARSING_DECLARATION, start, 0, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_DECLARATION, _parseLineNum, 0 ); } return p; } @@ -1285,11 +1299,9 @@ XMLUnknown::~XMLUnknown() char* XMLUnknown::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) { // Unknown parses as text. - const char* start = p; - p = _value.ParseText( p, ">", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); if ( !p ) { - _document->SetError( XML_ERROR_PARSING_UNKNOWN, start, 0, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_UNKNOWN, _parseLineNum, 0 ); } return p; } @@ -1321,12 +1333,12 @@ bool XMLUnknown::Accept( XMLVisitor* visitor ) const // --------- XMLAttribute ---------- // -const char* XMLAttribute::Name() const +const char* XMLAttribute::Name() const { return _name.GetStr(); } -const char* XMLAttribute::Value() const +const char* XMLAttribute::Value() const { return _value.GetStr(); } @@ -1513,42 +1525,42 @@ const char* XMLElement::Attribute( const char* name, const char* value ) const return 0; } -int XMLElement::IntAttribute(const char* name, int defaultValue) const +int XMLElement::IntAttribute(const char* name, int defaultValue) const { int i = defaultValue; QueryIntAttribute(name, &i); return i; } -unsigned XMLElement::UnsignedAttribute(const char* name, unsigned defaultValue) const +unsigned XMLElement::UnsignedAttribute(const char* name, unsigned defaultValue) const { unsigned i = defaultValue; QueryUnsignedAttribute(name, &i); return i; } -int64_t XMLElement::Int64Attribute(const char* name, int64_t defaultValue) const +int64_t XMLElement::Int64Attribute(const char* name, int64_t defaultValue) const { int64_t i = defaultValue; QueryInt64Attribute(name, &i); return i; } -bool XMLElement::BoolAttribute(const char* name, bool defaultValue) const +bool XMLElement::BoolAttribute(const char* name, bool defaultValue) const { bool b = defaultValue; QueryBoolAttribute(name, &b); return b; } -double XMLElement::DoubleAttribute(const char* name, double defaultValue) const +double XMLElement::DoubleAttribute(const char* name, double defaultValue) const { double d = defaultValue; QueryDoubleAttribute(name, &d); return d; } -float XMLElement::FloatAttribute(const char* name, float defaultValue) const +float XMLElement::FloatAttribute(const char* name, float defaultValue) const { float f = defaultValue; QueryFloatAttribute(name, &f); @@ -1575,7 +1587,7 @@ void XMLElement::SetText( const char* inText ) } -void XMLElement::SetText( int v ) +void XMLElement::SetText( int v ) { char buf[BUF_SIZE]; XMLUtil::ToStr( v, buf, BUF_SIZE ); @@ -1583,7 +1595,7 @@ void XMLElement::SetText( int v ) } -void XMLElement::SetText( unsigned v ) +void XMLElement::SetText( unsigned v ) { char buf[BUF_SIZE]; XMLUtil::ToStr( v, buf, BUF_SIZE ); @@ -1607,7 +1619,7 @@ void XMLElement::SetText( bool v ) } -void XMLElement::SetText( float v ) +void XMLElement::SetText( float v ) { char buf[BUF_SIZE]; XMLUtil::ToStr( v, buf, BUF_SIZE ); @@ -1615,7 +1627,7 @@ void XMLElement::SetText( float v ) } -void XMLElement::SetText( double v ) +void XMLElement::SetText( double v ) { char buf[BUF_SIZE]; XMLUtil::ToStr( v, buf, BUF_SIZE ); @@ -1792,14 +1804,13 @@ void XMLElement::DeleteAttribute( const char* name ) char* XMLElement::ParseAttributes( char* p, int* curLineNumPtr ) { - const char* start = p; XMLAttribute* prevAttribute = 0; // Read the attributes. while( p ) { p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); if ( !(*p) ) { - _document->SetError( XML_ERROR_PARSING_ELEMENT, start, Name(), _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, "XMLElement name=%s", Name() ); return 0; } @@ -1814,7 +1825,7 @@ char* XMLElement::ParseAttributes( char* p, int* curLineNumPtr ) p = attrib->ParseDeep( p, _document->ProcessEntities(), curLineNumPtr ); if ( !p || Attribute( attrib->Name() ) ) { DeleteAttribute( attrib ); - _document->SetError( XML_ERROR_PARSING_ATTRIBUTE, start, p, attrLineNum ); + _document->SetError( XML_ERROR_PARSING_ATTRIBUTE, attrLineNum, "XMLElement name=%s", Name() ); return 0; } // There is a minor bug here: if the attribute in the source xml @@ -1843,7 +1854,7 @@ char* XMLElement::ParseAttributes( char* p, int* curLineNumPtr ) return p+2; // done; sealed element. } else { - _document->SetError( XML_ERROR_PARSING_ELEMENT, start, p, _parseLineNum ); + _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, 0 ); return 0; } } @@ -1979,7 +1990,8 @@ const char* XMLDocument::_errorNames[XML_ERROR_COUNT] = { "XML_ERROR_MISMATCHED_ELEMENT", "XML_ERROR_PARSING", "XML_CAN_NOT_CONVERT_TEXT", - "XML_NO_TEXT_NODE" + "XML_NO_TEXT_NODE", + "XML_ELEMENT_DEPTH_EXCEEDED" }; @@ -1989,9 +2001,16 @@ XMLDocument::XMLDocument( bool processEntities, Whitespace whitespaceMode ) : _processEntities( processEntities ), _errorID(XML_SUCCESS), _whitespaceMode( whitespaceMode ), + _errorStr(), _errorLineNum( 0 ), _charBuffer( 0 ), - _parseCurLineNum( 0 ) + _parseCurLineNum( 0 ), + _parsingDepth(0), + _unlinked(), + _elementPool(), + _attributePool(), + _textPool(), + _commentPool() { // avoid VC++ C4355 warning about 'this' in initializer list (C4355 is off by default in VS2012+) _document = this; @@ -2024,13 +2043,14 @@ void XMLDocument::Clear() DeleteNode(_unlinked[0]); // Will remove from _unlinked as part of delete. } -#ifdef DEBUG +#ifdef TINYXML2_DEBUG const bool hadError = Error(); #endif ClearError(); delete [] _charBuffer; _charBuffer = 0; + _parsingDepth = 0; #if 0 _textPool.Trace( "text" ); @@ -2038,8 +2058,8 @@ void XMLDocument::Clear() _commentPool.Trace( "comment" ); _attributePool.Trace( "attribute" ); #endif - -#ifdef DEBUG + +#ifdef TINYXML2_DEBUG if ( !hadError ) { TIXMLASSERT( _elementPool.CurrentAllocs() == _elementPool.Untracked() ); TIXMLASSERT( _attributePool.CurrentAllocs() == _attributePool.Untracked() ); @@ -2050,7 +2070,7 @@ void XMLDocument::Clear() } -void XMLDocument::DeepCopy(XMLDocument* target) +void XMLDocument::DeepCopy(XMLDocument* target) const { TIXMLASSERT(target); if (target == this) { @@ -2117,7 +2137,7 @@ static FILE* callfopen( const char* filepath, const char* mode ) #endif return fp; } - + void XMLDocument::DeleteNode( XMLNode* node ) { TIXMLASSERT( node ); TIXMLASSERT(node->_document == this ); @@ -2138,10 +2158,16 @@ void XMLDocument::DeleteNode( XMLNode* node ) { XMLError XMLDocument::LoadFile( const char* filename ) { + if ( !filename ) { + TIXMLASSERT( false ); + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=" ); + return _errorID; + } + Clear(); FILE* fp = callfopen( filename, "rb" ); if ( !fp ) { - SetError( XML_ERROR_FILE_NOT_FOUND, filename, 0, 0 ); + SetError( XML_ERROR_FILE_NOT_FOUND, 0, "filename=%s", filename ); return _errorID; } LoadFile( fp ); @@ -2178,7 +2204,7 @@ XMLError XMLDocument::LoadFile( FILE* fp ) fseek( fp, 0, SEEK_SET ); if ( fgetc( fp ) == EOF && ferror( fp ) != 0 ) { - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0, 0 ); + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); return _errorID; } @@ -2186,19 +2212,19 @@ XMLError XMLDocument::LoadFile( FILE* fp ) const long filelength = ftell( fp ); fseek( fp, 0, SEEK_SET ); if ( filelength == -1L ) { - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0, 0 ); + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); return _errorID; } TIXMLASSERT( filelength >= 0 ); if ( !LongFitsIntoSizeTMinusOne<>::Fits( filelength ) ) { // Cannot handle files which won't fit in buffer together with null terminator - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0, 0 ); + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); return _errorID; } if ( filelength == 0 ) { - SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0, 0 ); + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); return _errorID; } @@ -2207,7 +2233,7 @@ XMLError XMLDocument::LoadFile( FILE* fp ) _charBuffer = new char[size+1]; size_t read = fread( _charBuffer, 1, size, fp ); if ( read != size ) { - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0, 0 ); + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); return _errorID; } @@ -2220,9 +2246,15 @@ XMLError XMLDocument::LoadFile( FILE* fp ) XMLError XMLDocument::SaveFile( const char* filename, bool compact ) { + if ( !filename ) { + TIXMLASSERT( false ); + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=" ); + return _errorID; + } + FILE* fp = callfopen( filename, "w" ); if ( !fp ) { - SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, filename, 0, 0 ); + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=%s", filename ); return _errorID; } SaveFile(fp, compact); @@ -2247,7 +2279,7 @@ XMLError XMLDocument::Parse( const char* p, size_t len ) Clear(); if ( len == 0 || !p || !*p ) { - SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0, 0 ); + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); return _errorID; } if ( len == (size_t)(-1) ) { @@ -2285,21 +2317,33 @@ void XMLDocument::Print( XMLPrinter* streamer ) const } -void XMLDocument::SetError( XMLError error, const char* str1, const char* str2, int lineNum ) +void XMLDocument::SetError( XMLError error, int lineNum, const char* format, ... ) { TIXMLASSERT( error >= 0 && error < XML_ERROR_COUNT ); _errorID = error; - - _errorStr1.Reset(); - _errorStr2.Reset(); _errorLineNum = lineNum; + _errorStr.Reset(); - if (str1) - _errorStr1.SetStr(str1); - if (str2) - _errorStr2.SetStr(str2); + size_t BUFFER_SIZE = 1000; + char* buffer = new char[BUFFER_SIZE]; + + TIXML_SNPRINTF(buffer, BUFFER_SIZE, "Error=%s ErrorID=%d (0x%x) Line number=%d", ErrorIDToName(error), int(error), int(error), lineNum); + + if (format) { + size_t len = strlen(buffer); + TIXML_SNPRINTF(buffer + len, BUFFER_SIZE - len, ": "); + len = strlen(buffer); + + va_list va; + va_start(va, format); + TIXML_VSNPRINTF(buffer + len, BUFFER_SIZE - len, format, va); + va_end(va); + } + _errorStr.SetStr(buffer); + delete[] buffer; } + /*static*/ const char* XMLDocument::ErrorIDToName(XMLError errorID) { TIXMLASSERT( errorID >= 0 && errorID < XML_ERROR_COUNT ); @@ -2308,14 +2352,15 @@ void XMLDocument::SetError( XMLError error, const char* str1, const char* str2, return errorName; } -const char* XMLDocument::GetErrorStr1() const +const char* XMLDocument::ErrorStr() const { - return _errorStr1.GetStr(); + return _errorStr.Empty() ? "" : _errorStr.GetStr(); } -const char* XMLDocument::GetErrorStr2() const + +void XMLDocument::PrintError() const { - return _errorStr2.GetStr(); + printf("%s\n", ErrorStr()); } const char* XMLDocument::ErrorName() const @@ -2323,28 +2368,6 @@ const char* XMLDocument::ErrorName() const return ErrorIDToName(_errorID); } -void XMLDocument::PrintError() const -{ - if ( Error() ) { - static const int LEN = 20; - char buf1[LEN] = { 0 }; - char buf2[LEN] = { 0 }; - - if ( !_errorStr1.Empty() ) { - TIXML_SNPRINTF( buf1, LEN, "%s", _errorStr1.GetStr() ); - } - if ( !_errorStr2.Empty() ) { - TIXML_SNPRINTF( buf2, LEN, "%s", _errorStr2.GetStr() ); - } - - // Should check INT_MIN <= _errorID && _errorId <= INT_MAX, but that - // causes a clang "always true" -Wtautological-constant-out-of-range-compare warning - TIXMLASSERT( 0 <= _errorID && XML_ERROR_COUNT - 1 <= INT_MAX ); - printf( "XMLDocument error id=%d '%s' str1=%s str2=%s line=%d\n", - static_cast( _errorID ), ErrorName(), buf1, buf2, _errorLineNum ); - } -} - void XMLDocument::Parse() { TIXMLASSERT( NoChildren() ); // Clear() must have been called previously @@ -2355,20 +2378,36 @@ void XMLDocument::Parse() p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum ); p = const_cast( XMLUtil::ReadBOM( p, &_writeBOM ) ); if ( !*p ) { - SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0, 0 ); + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); return; } ParseDeep(p, 0, &_parseCurLineNum ); } +void XMLDocument::PushDepth() +{ + _parsingDepth++; + if (_parsingDepth == TINYXML2_MAX_ELEMENT_DEPTH) { + SetError(XML_ELEMENT_DEPTH_EXCEEDED, _parseCurLineNum, "Element nesting is too deep." ); + } +} + +void XMLDocument::PopDepth() +{ + TIXMLASSERT(_parsingDepth > 0); + --_parsingDepth; +} + XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) : _elementJustOpened( false ), + _stack(), _firstElement( true ), _fp( file ), _depth( depth ), _textDepth( -1 ), _processEntities( true ), - _compactMode( compact ) + _compactMode( compact ), + _buffer() { for( int i=0; i(size) ) - 1; // back up over the null terminator. + memcpy( p, data, size ); + p[size] = 0; + } +} + + +void XMLPrinter::Putc( char ch ) +{ + if ( _fp ) { + fputc ( ch, _fp); + } + else { + char* p = _buffer.PushArr( sizeof(char) ) - 1; // back up over the null terminator. + p[0] = ch; + p[1] = 0; + } +} + + void XMLPrinter::PrintSpace( int depth ) { for( int i=0; i( bom ) ); } if ( writeDec ) { PushDeclaration( "xml version=\"1.0\"" ); @@ -2484,13 +2553,15 @@ void XMLPrinter::OpenElement( const char* name, bool compactMode ) _stack.Push( name ); if ( _textDepth < 0 && !_firstElement && !compactMode ) { - Print( "\n" ); + Putc( '\n' ); } if ( !compactMode ) { PrintSpace( _depth ); } - Print( "<%s", name ); + Write ( "<" ); + Write ( name ); + _elementJustOpened = true; _firstElement = false; ++_depth; @@ -2500,9 +2571,11 @@ void XMLPrinter::OpenElement( const char* name, bool compactMode ) void XMLPrinter::PushAttribute( const char* name, const char* value ) { TIXMLASSERT( _elementJustOpened ); - Print( " %s=\"", name ); + Putc ( ' ' ); + Write( name ); + Write( "=\"" ); PrintString( value, false ); - Print( "\"" ); + Putc ( '\"' ); } @@ -2552,21 +2625,23 @@ void XMLPrinter::CloseElement( bool compactMode ) const char* name = _stack.Pop(); if ( _elementJustOpened ) { - Print( "/>" ); + Write( "/>" ); } else { if ( _textDepth < 0 && !compactMode) { - Print( "\n" ); + Putc( '\n' ); PrintSpace( _depth ); } - Print( "", name ); + Write ( "" ); } if ( _textDepth == _depth ) { _textDepth = -1; } if ( _depth == 0 && !compactMode) { - Print( "\n" ); + Putc( '\n' ); } _elementJustOpened = false; } @@ -2578,7 +2653,7 @@ void XMLPrinter::SealElementIfJustOpened() return; } _elementJustOpened = false; - Print( ">" ); + Putc( '>' ); } @@ -2588,7 +2663,9 @@ void XMLPrinter::PushText( const char* text, bool cdata ) SealElementIfJustOpened(); if ( cdata ) { - Print( "", text ); + Write( "" ); } else { PrintString( text, true ); @@ -2646,11 +2723,14 @@ void XMLPrinter::PushComment( const char* comment ) { SealElementIfJustOpened(); if ( _textDepth < 0 && !_firstElement && !_compactMode) { - Print( "\n" ); + Putc( '\n' ); PrintSpace( _depth ); } _firstElement = false; - Print( "", comment ); + + Write( "" ); } @@ -2658,11 +2738,14 @@ void XMLPrinter::PushDeclaration( const char* value ) { SealElementIfJustOpened(); if ( _textDepth < 0 && !_firstElement && !_compactMode) { - Print( "\n" ); + Putc( '\n' ); PrintSpace( _depth ); } _firstElement = false; - Print( "", value ); + + Write( "" ); } @@ -2670,11 +2753,14 @@ void XMLPrinter::PushUnknown( const char* value ) { SealElementIfJustOpened(); if ( _textDepth < 0 && !_firstElement && !_compactMode) { - Print( "\n" ); + Putc( '\n' ); PrintSpace( _depth ); } _firstElement = false; - Print( "", value ); + + Write( "' ); } @@ -2738,4 +2824,3 @@ bool XMLPrinter::Visit( const XMLUnknown& unknown ) } } // namespace tinyxml2 - diff --git a/vendor/github.com/leethomason/tinyxml2/tinyxml2.h b/vendor/github.com/leethomason/tinyxml2/tinyxml2.h index e6a0ced..66d7b7e 100755 --- a/vendor/github.com/leethomason/tinyxml2/tinyxml2.h +++ b/vendor/github.com/leethomason/tinyxml2/tinyxml2.h @@ -47,15 +47,15 @@ distribution. */ /* gcc: - g++ -Wall -DDEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe + g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe Formatting, Artistic Style: AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h */ #if defined( _DEBUG ) || defined (__DEBUG__) -# ifndef DEBUG -# define DEBUG +# ifndef TINYXML2_DEBUG +# define TINYXML2_DEBUG # endif #endif @@ -79,7 +79,7 @@ distribution. #endif -#if defined(DEBUG) +#if defined(TINYXML2_DEBUG) # if defined(_MSC_VER) # // "(void)0," is for suppressing C4127 warning in "assert(false)", "assert(true)" and the like # define TIXMLASSERT( x ) if ( !((void)0,(x))) { __debugbreak(); } @@ -98,9 +98,20 @@ distribution. /* Versioning, past 1.0.14: http://semver.org/ */ -static const int TIXML2_MAJOR_VERSION = 5; -static const int TIXML2_MINOR_VERSION = 0; -static const int TIXML2_PATCH_VERSION = 1; +static const int TIXML2_MAJOR_VERSION = 6; +static const int TIXML2_MINOR_VERSION = 2; +static const int TIXML2_PATCH_VERSION = 0; + +#define TINYXML2_MAJOR_VERSION 6 +#define TINYXML2_MINOR_VERSION 2 +#define TINYXML2_PATCH_VERSION 0 + +// A fixed element depth limit is problematic. There needs to be a +// limit to avoid a stack overflow. However, that limit varies per +// system, and the capacity of the stack. On the other hand, it's a trivial +// attack that can result from ill, malicious, or even correctly formed XML, +// so there needs to be a limit in place. +static const int TINYXML2_MAX_ELEMENT_DEPTH = 100; namespace tinyxml2 { @@ -192,10 +203,11 @@ template class DynArray { public: - DynArray() { - _mem = _pool; - _allocated = INITIAL_SIZE; - _size = 0; + DynArray() : + _mem( _pool ), + _allocated( INITIAL_SIZE ), + _size( 0 ) + { } ~DynArray() { @@ -333,7 +345,7 @@ template< int ITEM_SIZE > class MemPoolT : public MemPool { public: - MemPoolT() : _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {} + MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {} ~MemPoolT() { Clear(); } @@ -341,8 +353,8 @@ public: void Clear() { // Delete the blocks. while( !_blockPtrs.Empty()) { - Block* b = _blockPtrs.Pop(); - delete b; + Block* lastBlock = _blockPtrs.Pop(); + delete lastBlock; } _root = 0; _currentAllocs = 0; @@ -390,7 +402,7 @@ public: } --_currentAllocs; Item* item = static_cast( mem ); -#ifdef DEBUG +#ifdef TINYXML2_DEBUG memset( item, 0xfe, sizeof( *item ) ); #endif item->next = _root; @@ -527,6 +539,7 @@ enum XMLError { XML_ERROR_PARSING, XML_CAN_NOT_CONVERT_TEXT, XML_NO_TEXT_NODE, + XML_ELEMENT_DEPTH_EXCEEDED, XML_ERROR_COUNT }; @@ -1211,7 +1224,7 @@ public: private: enum { BUF_SIZE = 200 }; - XMLAttribute() : _parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {} + XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {} virtual ~XMLAttribute() {} XMLAttribute( const XMLAttribute& ); // not supported @@ -1360,6 +1373,17 @@ public: return a->QueryFloatValue( value ); } + /// See QueryIntAttribute() + XMLError QueryStringAttribute(const char* name, const char** value) const { + const XMLAttribute* a = FindAttribute(name); + if (!a) { + return XML_NO_ATTRIBUTE; + } + *value = a->Value(); + return XML_SUCCESS; + } + + /** Given an attribute name, QueryAttribute() returns XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion @@ -1634,6 +1658,13 @@ enum Whitespace { class TINYXML2_LIB XMLDocument : public XMLNode { friend class XMLElement; + // Gives access to SetError and Push/PopDepth, but over-access for everything else. + // Wishing C++ had "internal" scope. + friend class XMLNode; + friend class XMLText; + friend class XMLComment; + friend class XMLDeclaration; + friend class XMLUnknown; public: /// constructor XMLDocument( bool processEntities = true, Whitespace whitespaceMode = PRESERVE_WHITESPACE ); @@ -1785,10 +1816,8 @@ public: */ void DeleteNode( XMLNode* node ); - void SetError( XMLError error, const char* str1, const char* str2, int lineNum ); - void ClearError() { - SetError(XML_SUCCESS, 0, 0, 0); + SetError(XML_SUCCESS, 0, 0); } /// Return true if there was an error parsing the document. @@ -1802,19 +1831,19 @@ public: const char* ErrorName() const; static const char* ErrorIDToName(XMLError errorID); - /// Return a possibly helpful diagnostic location or string. - const char* GetErrorStr1() const; + /** Returns a "long form" error description. A hopefully helpful + diagnostic with location, line number, and/or additional info. + */ + const char* ErrorStr() const; - /// Return a possibly helpful secondary diagnostic location or string. - const char* GetErrorStr2() const; + /// A (trivial) utility function that prints the ErrorStr() to stdout. + void PrintError() const; /// Return the line where the error occured, or zero if unknown. - int GetErrorLineNum() const + int ErrorLineNum() const { return _errorLineNum; } - /// If there is an error, print it to stdout. - void PrintError() const; /// Clear the document, resetting it to the initial state. void Clear(); @@ -1826,7 +1855,7 @@ public: NOTE: that the 'target' must be non-null. */ - void DeepCopy(XMLDocument* target); + void DeepCopy(XMLDocument* target) const; // internal char* Identify( char* p, XMLNode** node ); @@ -1849,11 +1878,11 @@ private: bool _processEntities; XMLError _errorID; Whitespace _whitespaceMode; - mutable StrPair _errorStr1; - mutable StrPair _errorStr2; + mutable StrPair _errorStr; int _errorLineNum; char* _charBuffer; int _parseCurLineNum; + int _parsingDepth; // Memory tracking does add some overhead. // However, the code assumes that you don't // have a bunch of unlinked nodes around. @@ -1871,6 +1900,26 @@ private: void Parse(); + void SetError( XMLError error, int lineNum, const char* format, ... ); + + // Something of an obvious security hole, once it was discovered. + // Either an ill-formed XML or an excessively deep one can overflow + // the stack. Track stack depth, and error out if needed. + class DepthTracker { + public: + DepthTracker(XMLDocument * document) { + this->_document = document; + document->PushDepth(); + } + ~DepthTracker() { + _document->PopDepth(); + } + private: + XMLDocument * _document; + }; + void PushDepth(); + void PopDepth(); + template NodeType* CreateUnlinkedNode( MemPoolT& pool ); }; @@ -1947,16 +1996,13 @@ class TINYXML2_LIB XMLHandle { public: /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. - XMLHandle( XMLNode* node ) { - _node = node; + XMLHandle( XMLNode* node ) : _node( node ) { } /// Create a handle from a node. - XMLHandle( XMLNode& node ) { - _node = &node; + XMLHandle( XMLNode& node ) : _node( &node ) { } /// Copy constructor - XMLHandle( const XMLHandle& ref ) { - _node = ref._node; + XMLHandle( const XMLHandle& ref ) : _node( ref._node ) { } /// Assignment XMLHandle& operator=( const XMLHandle& ref ) { @@ -2030,14 +2076,11 @@ private: class TINYXML2_LIB XMLConstHandle { public: - XMLConstHandle( const XMLNode* node ) { - _node = node; + XMLConstHandle( const XMLNode* node ) : _node( node ) { } - XMLConstHandle( const XMLNode& node ) { - _node = &node; + XMLConstHandle( const XMLNode& node ) : _node( &node ) { } - XMLConstHandle( const XMLConstHandle& ref ) { - _node = ref._node; + XMLConstHandle( const XMLConstHandle& ref ) : _node( ref._node ) { } XMLConstHandle& operator=( const XMLConstHandle& ref ) { @@ -2229,6 +2272,9 @@ protected: */ virtual void PrintSpace( int depth ); void Print( const char* format, ... ); + void Write( const char* data, size_t size ); + inline void Write( const char* data ) { Write( data, strlen( data ) ); } + void Putc( char ch ); void SealElementIfJustOpened(); bool _elementJustOpened; @@ -2252,6 +2298,10 @@ private: bool _restrictedEntityFlag[ENTITY_RANGE]; DynArray< char, 20 > _buffer; + + // Prohibit cloning, intentionally not implemented + XMLPrinter( const XMLPrinter& ); + XMLPrinter& operator=( const XMLPrinter& ); }; diff --git a/vendor/github.com/leethomason/tinyxml2/tinyxml2/test.vcxproj b/vendor/github.com/leethomason/tinyxml2/tinyxml2/test.vcxproj index 9929f75..02bec85 100644 --- a/vendor/github.com/leethomason/tinyxml2/tinyxml2/test.vcxproj +++ b/vendor/github.com/leethomason/tinyxml2/tinyxml2/test.vcxproj @@ -1,5 +1,5 @@  - + Debug-Dll @@ -37,60 +37,60 @@ {E8FB2712-8666-4662-A5B8-2B5B0FB1A260} test - 8.1 + 10.0.16299.0 Application true Unicode - v140 + v141 Application true Unicode - v140 + v141 Application true Unicode - v140 + v141 Application true Unicode - v140 + v141 Application false true Unicode - v140 + v141 Application false true Unicode - v140 + v141 Application false true Unicode - v140 + v141 Application false true Unicode - v140 + v141 Unicode diff --git a/vendor/github.com/leethomason/tinyxml2/tinyxml2/tinyxml2.vcxproj b/vendor/github.com/leethomason/tinyxml2/tinyxml2/tinyxml2.vcxproj index a91d72d..5a7b7ee 100755 --- a/vendor/github.com/leethomason/tinyxml2/tinyxml2/tinyxml2.vcxproj +++ b/vendor/github.com/leethomason/tinyxml2/tinyxml2/tinyxml2.vcxproj @@ -1,5 +1,5 @@  - + Debug-Dll @@ -38,60 +38,60 @@ {D1C528B6-AA02-4D29-9D61-DC08E317A70D} Win32Proj tinyxml2 - 8.1 + 10.0.16299.0 StaticLibrary true Unicode - v140 + v141 DynamicLibrary true Unicode - v140 + v141 StaticLibrary true Unicode - v140 + v141 DynamicLibrary true Unicode - v140 + v141 StaticLibrary false true Unicode - v140 + v141 DynamicLibrary false true Unicode - v140 + v141 StaticLibrary false true Unicode - v140 + v141 DynamicLibrary false true Unicode - v140 + v141 StaticLibrary diff --git a/vendor/github.com/leethomason/tinyxml2/tinyxml2/tinyxml2.xcodeproj/project.pbxproj b/vendor/github.com/leethomason/tinyxml2/tinyxml2/tinyxml2.xcodeproj/project.pbxproj index 58c4fcc..c8393bb 100644 --- a/vendor/github.com/leethomason/tinyxml2/tinyxml2/tinyxml2.xcodeproj/project.pbxproj +++ b/vendor/github.com/leethomason/tinyxml2/tinyxml2/tinyxml2.xcodeproj/project.pbxproj @@ -137,7 +137,7 @@ buildSettings = { CONFIGURATION_BUILD_DIR = "$(SYMROOT)/Debug"; COPY_PHASE_STRIP = NO; - "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = DEBUG; + "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = TINYXML2_DEBUG; ONLY_ACTIVE_ARCH = YES; SYMROOT = build; }; diff --git a/vendor/github.com/leethomason/tinyxml2/xmltest.cpp b/vendor/github.com/leethomason/tinyxml2/xmltest.cpp index 276c61b..7160fe9 100644 --- a/vendor/github.com/leethomason/tinyxml2/xmltest.cpp +++ b/vendor/github.com/leethomason/tinyxml2/xmltest.cpp @@ -5,16 +5,20 @@ #endif #include "tinyxml2.h" +#include #include #include #include -#if defined( _MSC_VER ) +#if defined( _MSC_VER ) || defined (WIN32) #include #define WIN32_LEAN_AND_MEAN #include _CrtMemState startMemState; _CrtMemState endMemState; +#else + #include + #include #endif using namespace tinyxml2; @@ -108,7 +112,7 @@ int example_1() return doc.ErrorID(); } -/** @page Example-1 Load an XML File +/** @page Example_1 Load an XML File * @dontinclude ./xmltest.cpp * Basic XML file loading. * The basic syntax to load an XML file from @@ -127,7 +131,7 @@ int example_2() return doc.ErrorID(); } -/** @page Example-2 Parse an XML from char buffer +/** @page Example_2 Parse an XML from char buffer * @dontinclude ./xmltest.cpp * Basic XML string parsing. * The basic syntax to parse an XML for @@ -160,7 +164,7 @@ int example_3() return doc.ErrorID(); } -/** @page Example-3 Get information out of XML +/** @page Example_3 Get information out of XML @dontinclude ./xmltest.cpp In this example, we navigate a simple XML file, and read some interesting text. Note @@ -251,7 +255,7 @@ bool example_4() return !doc.Error() && ( v0 == v1 ); } -/** @page Example-4 Read attributes and text information. +/** @page Example_4 Read attributes and text information. @dontinclude ./xmltest.cpp There are fundamentally 2 ways of writing a key-value @@ -288,7 +292,7 @@ bool example_4() int main( int argc, const char ** argv ) { - #if defined( _MSC_VER ) && defined( DEBUG ) + #if defined( _MSC_VER ) && defined( TINYXML2_DEBUG ) _CrtMemCheckpoint( &startMemState ); // Enable MS Visual C++ debug heap memory leaks dump on exit _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF); @@ -334,10 +338,10 @@ int main( int argc, const char ** argv ) } fclose( fp ); - XMLTest( "Example-1", 0, example_1() ); - XMLTest( "Example-2", 0, example_2() ); - XMLTest( "Example-3", 0, example_3() ); - XMLTest( "Example-4", true, example_4() ); + XMLTest( "Example_1", 0, example_1() ); + XMLTest( "Example_2", 0, example_2() ); + XMLTest( "Example_3", 0, example_3() ); + XMLTest( "Example_4", true, example_4() ); /* ------ Example 2: Lookup information. ---- */ @@ -362,6 +366,7 @@ int main( int argc, const char ** argv ) for( int i=0; test[i]; ++i ) { XMLDocument doc; doc.Parse( test[i] ); + XMLTest( "Element test", false, doc.Error() ); doc.Print(); printf( "----------------------------------------------\n" ); } @@ -376,13 +381,43 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( test ); + XMLTest( "Hello world declaration", false, doc.Error() ); doc.Print(); } + { + // This test is pre-test for the next one + // (where Element1 is inserted "after itself". + // This code didn't use to crash. + XMLDocument doc; + XMLElement* element1 = doc.NewElement("Element1"); + XMLElement* element2 = doc.NewElement("Element2"); + doc.InsertEndChild(element1); + doc.InsertEndChild(element2); + doc.InsertAfterChild(element2, element2); + doc.InsertAfterChild(element2, element2); + } + + { + XMLDocument doc; + XMLElement* element1 = doc.NewElement("Element1"); + XMLElement* element2 = doc.NewElement("Element2"); + doc.InsertEndChild(element1); + doc.InsertEndChild(element2); + + // This insertion "after itself" + // used to cause invalid memory access and crash + doc.InsertAfterChild(element1, element1); + doc.InsertAfterChild(element1, element1); + doc.InsertAfterChild(element2, element2); + doc.InsertAfterChild(element2, element2); + } + { static const char* test = "Text before."; XMLDocument doc; doc.Parse( test ); + XMLTest( "Element text before", false, doc.Error() ); XMLElement* root = doc.FirstChildElement(); XMLElement* newElement = doc.NewElement( "Subelement" ); root->InsertEndChild( newElement ); @@ -392,8 +427,28 @@ int main( int argc, const char ** argv ) XMLDocument* doc = new XMLDocument(); static const char* test = ""; doc->Parse( test ); + XMLTest( "Element with sub element", false, doc->Error() ); delete doc; } + { + // Test: Programmatic DOM nodes insertion return values + XMLDocument doc; + + XMLNode* first = doc.NewElement( "firstElement" ); + XMLTest( "New element", true, first != 0 ); + XMLNode* firstAfterInsertion = doc.InsertFirstChild( first ); + XMLTest( "New element inserted first", true, firstAfterInsertion == first ); + + XMLNode* last = doc.NewElement( "lastElement" ); + XMLTest( "New element", true, last != 0 ); + XMLNode* lastAfterInsertion = doc.InsertEndChild( last ); + XMLTest( "New element inserted last", true, lastAfterInsertion == last ); + + XMLNode* middle = doc.NewElement( "middleElement" ); + XMLTest( "New element", true, middle != 0 ); + XMLNode* middleAfterInsertion = doc.InsertAfterChild( first, middle ); + XMLTest( "New element inserted middle", true, middleAfterInsertion == middle ); + } { // Test: Programmatic DOM // Build: @@ -412,8 +467,12 @@ int main( int argc, const char ** argv ) sub[i]->SetAttribute( "attrib", i ); } element->InsertEndChild( sub[2] ); + + const int dummyInitialValue = 1000; + int dummyValue = dummyInitialValue; + XMLNode* comment = element->InsertFirstChild( doc->NewComment( "comment" ) ); - comment->SetUserData((void*)2); + comment->SetUserData(&dummyValue); element->InsertAfterChild( comment, sub[0] ); element->InsertAfterChild( sub[0], sub[1] ); sub[2]->InsertFirstChild( doc->NewText( "& Text!" )); @@ -423,7 +482,8 @@ int main( int argc, const char ** argv ) XMLTest( "Programmatic DOM", 2, doc->FirstChildElement()->LastChildElement( "sub" )->IntAttribute( "attrib" ) ); XMLTest( "Programmatic DOM", "& Text!", doc->FirstChildElement()->LastChildElement( "sub" )->FirstChild()->ToText()->Value() ); - XMLTest("User data", (void*)2 == comment->GetUserData(), true, false); + XMLTest("User data - pointer", true, &dummyValue == comment->GetUserData(), false); + XMLTest("User data - value behind pointer", dummyInitialValue, dummyValue, false); // And now deletion: element->DeleteChild( sub[2] ); @@ -433,12 +493,14 @@ int main( int argc, const char ** argv ) element->LastChildElement()->DeleteAttribute( "attrib" ); XMLTest( "Programmatic DOM", true, doc->FirstChildElement()->FirstChildElement()->BoolAttribute( "attrib" ) ); - int value1 = 10; - int value2 = doc->FirstChildElement()->LastChildElement()->IntAttribute( "attrib", 10 ); + const int defaultIntValue = 10; + const int replacementIntValue = 20; + int value1 = defaultIntValue; + int value2 = doc->FirstChildElement()->LastChildElement()->IntAttribute( "attrib", replacementIntValue ); XMLError result = doc->FirstChildElement()->LastChildElement()->QueryIntAttribute( "attrib", &value1 ); XMLTest( "Programmatic DOM", XML_NO_ATTRIBUTE, result ); - XMLTest( "Programmatic DOM", 10, value1 ); - XMLTest( "Programmatic DOM", 10, value2 ); + XMLTest( "Programmatic DOM", defaultIntValue, value1 ); + XMLTest( "Programmatic DOM", replacementIntValue, value2 ); doc->Print(); @@ -453,7 +515,9 @@ int main( int argc, const char ** argv ) XMLTest( "Compact mode", "", streamer.CStr(), false ); } doc->SaveFile( "./resources/out/pretty.xml" ); + XMLTest( "Save pretty.xml", false, doc->Error() ); doc->SaveFile( "./resources/out/compact.xml", true ); + XMLTest( "Save compact.xml", false, doc->Error() ); delete doc; } { @@ -463,13 +527,15 @@ int main( int argc, const char ** argv ) //int newStart = gNew; XMLDocument doc; doc.LoadFile( "resources/dream.xml" ); + XMLTest( "Load dream.xml", false, doc.Error() ); doc.SaveFile( "resources/out/dreamout.xml" ); + XMLTest( "Save dreamout.xml", false, doc.Error() ); doc.PrintError(); XMLTest( "Dream", "xml version=\"1.0\"", doc.FirstChild()->ToDeclaration()->Value() ); - XMLTest( "Dream", true, doc.FirstChild()->NextSibling()->ToUnknown() ? true : false ); + XMLTest( "Dream", true, doc.FirstChild()->NextSibling()->ToUnknown() != 0 ); XMLTest( "Dream", "DOCTYPE PLAY SYSTEM \"play.dtd\"", doc.FirstChild()->NextSibling()->ToUnknown()->Value() ); XMLTest( "Dream", "And Robin shall restore amends.", @@ -479,9 +545,10 @@ int main( int argc, const char ** argv ) XMLDocument doc2; doc2.LoadFile( "resources/out/dreamout.xml" ); + XMLTest( "Load dreamout.xml", false, doc2.Error() ); XMLTest( "Dream-out", "xml version=\"1.0\"", doc2.FirstChild()->ToDeclaration()->Value() ); - XMLTest( "Dream-out", true, doc2.FirstChild()->NextSibling()->ToUnknown() ? true : false ); + XMLTest( "Dream-out", true, doc2.FirstChild()->NextSibling()->ToUnknown() != 0 ); XMLTest( "Dream-out", "DOCTYPE PLAY SYSTEM \"play.dtd\"", doc2.FirstChild()->NextSibling()->ToUnknown()->Value() ); XMLTest( "Dream-out", "And Robin shall restore amends.", @@ -500,6 +567,10 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( error ); XMLTest( "Bad XML", XML_ERROR_PARSING_ATTRIBUTE, doc.ErrorID() ); + const char* errorStr = doc.ErrorStr(); + XMLTest("Formatted error string", + "Error=XML_ERROR_PARSING_ATTRIBUTE ErrorID=8 (0x8) Line number=3: XMLElement name=wrong", + errorStr); } { @@ -507,6 +578,7 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( str ); + XMLTest( "Top level attributes", false, doc.Error() ); XMLElement* ele = doc.FirstChildElement(); @@ -542,6 +614,7 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( str ); + XMLTest( "Empty top element", false, doc.Error() ); XMLElement* ele = doc.FirstChildElement(); @@ -553,11 +626,23 @@ int main( int argc, const char ** argv ) ele->SetAttribute( "double", -1.0 ); const char* cStr = ele->Attribute( "str" ); - ele->QueryIntAttribute( "int", &iVal ); - ele->QueryDoubleAttribute( "double", &dVal ); + { + XMLError queryResult = ele->QueryIntAttribute( "int", &iVal ); + XMLTest( "Query int attribute", XML_SUCCESS, queryResult); + } + { + XMLError queryResult = ele->QueryDoubleAttribute( "double", &dVal ); + XMLTest( "Query double attribute", XML_SUCCESS, queryResult); + } - ele->QueryAttribute( "int", &iVal2 ); - ele->QueryAttribute( "double", &dVal2 ); + { + int queryResult = ele->QueryAttribute( "int", &iVal2 ); + XMLTest( "Query int attribute generic", (int)XML_SUCCESS, queryResult); + } + { + int queryResult = ele->QueryAttribute( "double", &dVal2 ); + XMLTest( "Query double attribute generic", (int)XML_SUCCESS, queryResult); + } XMLTest( "Attribute match test", "strValue", ele->Attribute( "str", "strValue" ) ); XMLTest( "Attribute round trip. c-string.", "strValue", cStr ); @@ -572,6 +657,7 @@ int main( int argc, const char ** argv ) { XMLDocument doc; doc.LoadFile( "resources/utf8test.xml" ); + XMLTest( "Load utf8test.xml", false, doc.Error() ); // Get the attribute "value" from the "Russian" element and check it. XMLElement* element = doc.FirstChildElement( "document" )->FirstChildElement( "Russian" ); @@ -593,16 +679,20 @@ int main( int argc, const char ** argv ) // Now try for a round trip. doc.SaveFile( "resources/out/utf8testout.xml" ); + XMLTest( "UTF-8: Save testout.xml", false, doc.Error() ); // Check the round trip. - int okay = 0; + bool roundTripOkay = false; FILE* saved = fopen( "resources/out/utf8testout.xml", "r" ); + XMLTest( "UTF-8: Open utf8testout.xml", true, saved != 0 ); + FILE* verify = fopen( "resources/utf8testverify.xml", "r" ); + XMLTest( "UTF-8: Open utf8testverify.xml", true, verify != 0 ); if ( saved && verify ) { - okay = 1; + roundTripOkay = true; char verifyBuf[256]; while ( fgets( verifyBuf, 256, verify ) ) { @@ -615,7 +705,7 @@ int main( int argc, const char ** argv ) { printf( "verify:%s<\n", verifyBuf ); printf( "saved :%s<\n", savedBuf ); - okay = 0; + roundTripOkay = false; break; } } @@ -624,7 +714,7 @@ int main( int argc, const char ** argv ) fclose( saved ); if ( verify ) fclose( verify ); - XMLTest( "UTF-8: Verified multi-language round trip.", 1, okay ); + XMLTest( "UTF-8: Verified multi-language round trip.", true, roundTripOkay ); } // --------GetText()----------- @@ -632,12 +722,14 @@ int main( int argc, const char ** argv ) const char* str = "This is text"; XMLDocument doc; doc.Parse( str ); + XMLTest( "Double whitespace", false, doc.Error() ); const XMLElement* element = doc.RootElement(); XMLTest( "GetText() normal use.", "This is text", element->GetText() ); str = "This is text"; doc.Parse( str ); + XMLTest( "Bold text simulation", false, doc.Error() ); element = doc.RootElement(); XMLTest( "GetText() contained element.", element->GetText() == 0, true ); @@ -649,6 +741,7 @@ int main( int argc, const char ** argv ) const char* str = ""; XMLDocument doc; doc.Parse( str ); + XMLTest( "Empty closed element", false, doc.Error() ); XMLElement* element = doc.RootElement(); element->SetText("darkness."); @@ -659,6 +752,7 @@ int main( int argc, const char ** argv ) str = ""; doc.Parse( str ); + XMLTest( "Empty self-closed element", false, doc.Error() ); element = doc.RootElement(); element->SetText("The driver"); @@ -670,6 +764,7 @@ int main( int argc, const char ** argv ) str = "Text in nested element"; doc.Parse( str ); + XMLTest( "Text in nested element", false, doc.Error() ); element = doc.RootElement(); element->SetText("wolves"); @@ -677,6 +772,7 @@ int main( int argc, const char ** argv ) str = ""; doc.Parse( str ); + XMLTest( "Empty self-closed element round 2", false, doc.Error() ); element = doc.RootElement(); element->SetText( "str" ); @@ -707,38 +803,74 @@ int main( int argc, const char ** argv ) { element->SetAttribute("attrib", int(-100)); - int v = 0; - element->QueryIntAttribute("attrib", &v); - XMLTest("Attribute: int", -100, v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: int", -100, v, true); + { + int v = 0; + XMLError queryResult = element->QueryIntAttribute("attrib", &v); + XMLTest("Attribute: int", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: int", -100, v, true); + } + { + int v = 0; + int queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: int", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: int", -100, v, true); + } XMLTest("Attribute: int", -100, element->IntAttribute("attrib"), true); } { element->SetAttribute("attrib", unsigned(100)); - unsigned v = 0; - element->QueryUnsignedAttribute("attrib", &v); - XMLTest("Attribute: unsigned", unsigned(100), v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: unsigned", unsigned(100), v, true); + { + unsigned v = 0; + XMLError queryResult = element->QueryUnsignedAttribute("attrib", &v); + XMLTest("Attribute: unsigned", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: unsigned", unsigned(100), v, true); + } + { + unsigned v = 0; + int queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: unsigned", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: unsigned", unsigned(100), v, true); + } + { + const char* v = "failed"; + XMLError queryResult = element->QueryStringAttribute("not-attrib", &v); + XMLTest("Attribute: string default", false, queryResult == XML_SUCCESS); + queryResult = element->QueryStringAttribute("attrib", &v); + XMLTest("Attribute: string", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: string", "100", v); + } XMLTest("Attribute: unsigned", unsigned(100), element->UnsignedAttribute("attrib"), true); } { element->SetAttribute("attrib", BIG); - int64_t v = 0; - element->QueryInt64Attribute("attrib", &v); - XMLTest("Attribute: int64_t", BIG, v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: int64_t", BIG, v, true); + { + int64_t v = 0; + XMLError queryResult = element->QueryInt64Attribute("attrib", &v); + XMLTest("Attribute: int64_t", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: int64_t", BIG, v, true); + } + { + int64_t v = 0; + int queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: int64_t", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: int64_t", BIG, v, true); + } XMLTest("Attribute: int64_t", BIG, element->Int64Attribute("attrib"), true); } { element->SetAttribute("attrib", true); - bool v = false; - element->QueryBoolAttribute("attrib", &v); - XMLTest("Attribute: bool", true, v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: bool", true, v, true); + { + bool v = false; + XMLError queryResult = element->QueryBoolAttribute("attrib", &v); + XMLTest("Attribute: bool", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: bool", true, v, true); + } + { + bool v = false; + int queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: bool", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: bool", true, v, true); + } XMLTest("Attribute: bool", true, element->BoolAttribute("attrib"), true); } { @@ -755,26 +887,41 @@ int main( int argc, const char ** argv ) } { element->SetAttribute("attrib", 100.0); - double v = 0; - element->QueryDoubleAttribute("attrib", &v); - XMLTest("Attribute: double", 100.0, v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: double", 100.0, v, true); + { + double v = 0; + XMLError queryResult = element->QueryDoubleAttribute("attrib", &v); + XMLTest("Attribute: double", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: double", 100.0, v, true); + } + { + double v = 0; + int queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: bool", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: double", 100.0, v, true); + } XMLTest("Attribute: double", 100.0, element->DoubleAttribute("attrib"), true); } { element->SetAttribute("attrib", 100.0f); - float v = 0; - element->QueryFloatAttribute("attrib", &v); - XMLTest("Attribute: float", 100.0f, v, true); - element->QueryAttribute("attrib", &v); - XMLTest("Attribute: float", 100.0f, v, true); + { + float v = 0; + XMLError queryResult = element->QueryFloatAttribute("attrib", &v); + XMLTest("Attribute: float", XML_SUCCESS, queryResult, true); + XMLTest("Attribute: float", 100.0f, v, true); + } + { + float v = 0; + int queryResult = element->QueryAttribute("attrib", &v); + XMLTest("Attribute: float", (int)XML_SUCCESS, queryResult, true); + XMLTest("Attribute: float", 100.0f, v, true); + } XMLTest("Attribute: float", 100.0f, element->FloatAttribute("attrib"), true); } { element->SetText(BIG); int64_t v = 0; - element->QueryInt64Text(&v); + XMLError queryResult = element->QueryInt64Text(&v); + XMLTest("Element: int64_t", XML_SUCCESS, queryResult, true); XMLTest("Element: int64_t", BIG, v, true); } } @@ -782,7 +929,8 @@ int main( int argc, const char ** argv ) // ---------- XMLPrinter stream mode ------ { { - FILE* printerfp = fopen("resources/printer.xml", "w"); + FILE* printerfp = fopen("resources/out/printer.xml", "w"); + XMLTest("Open printer.xml", true, printerfp != 0); XMLPrinter printer(printerfp); printer.OpenElement("foo"); printer.PushAttribute("attrib-text", "text"); @@ -796,7 +944,7 @@ int main( int argc, const char ** argv ) } { XMLDocument doc; - doc.LoadFile("resources/printer.xml"); + doc.LoadFile("resources/out/printer.xml"); XMLTest("XMLPrinter Stream mode: load", XML_SUCCESS, doc.ErrorID(), true); const XMLDocument& cdoc = doc; @@ -828,6 +976,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse( str ); + XMLTest( "CDATA symbolic puns round 1", false, doc.Error() ); doc.Print(); XMLTest( "CDATA parse.", "I am > the rules!\n...since I make symbolic puns", @@ -845,6 +994,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse( str ); + XMLTest( "CDATA symbolic puns round 2", false, doc.Error() ); doc.Print(); XMLTest( "CDATA parse. [ tixml1:1480107 ]", @@ -864,7 +1014,9 @@ int main( int argc, const char ** argv ) XMLElement* childText1 = doc.NewElement( "childText1" ); XMLNode* childNode0 = parent->InsertEndChild( childText0 ); + XMLTest( "InsertEndChild() return", true, childNode0 == childText0 ); XMLNode* childNode1 = parent->InsertAfterChild( childNode0, childText1 ); + XMLTest( "InsertAfterChild() return", true, childNode1 == childText1 ); XMLTest( "Test InsertAfterChild on empty node. ", true, ( childNode1 == parent->LastChild() ) ); } @@ -882,22 +1034,26 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( passages ); + XMLTest( "Entity transformation parse round 1", false, doc.Error() ); XMLElement* psg = doc.RootElement()->FirstChildElement(); const char* context = psg->Attribute( "context" ); const char* expected = "Line 5 has \"quotation marks\" and 'apostrophe marks'. It also has <, >, and &, as well as a fake copyright \xC2\xA9."; XMLTest( "Entity transformation: read. ", expected, context, true ); - FILE* textfile = fopen( "resources/out/textfile.txt", "w" ); + const char* textFilePath = "resources/out/textfile.txt"; + FILE* textfile = fopen( textFilePath, "w" ); + XMLTest( "Entity transformation: open text file for writing", true, textfile != 0, true ); if ( textfile ) { XMLPrinter streamer( textfile ); - psg->Accept( &streamer ); + bool acceptResult = psg->Accept( &streamer ); fclose( textfile ); + XMLTest( "Entity transformation: Accept", true, acceptResult ); } - textfile = fopen( "resources/out/textfile.txt", "r" ); - TIXMLASSERT( textfile ); + textfile = fopen( textFilePath, "r" ); + XMLTest( "Entity transformation: open text file for reading", true, textfile != 0, true ); if ( textfile ) { char buf[ 1024 ]; @@ -920,6 +1076,7 @@ int main( int argc, const char ** argv ) XMLDocument doc( false ); doc.Parse( passages ); + XMLTest( "Entity transformation parse round 2", false, doc.Error() ); XMLTest( "No entity parsing.", "Line 5 has "quotation marks" and 'apostrophe marks'.", @@ -944,6 +1101,7 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( test ); + XMLTest( "fin thickness", false, doc.Error() ); XMLText* text = doc.FirstChildElement()->FirstChildElement()->FirstChild()->ToText(); XMLTest( "Entity with one digit.", @@ -963,9 +1121,12 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( doctype ); + XMLTest( "PLAY SYSTEM parse", false, doc.Error() ); doc.SaveFile( "resources/out/test7.xml" ); + XMLTest( "PLAY SYSTEM save", false, doc.Error() ); doc.DeleteChild( doc.RootElement() ); doc.LoadFile( "resources/out/test7.xml" ); + XMLTest( "PLAY SYSTEM load", false, doc.Error() ); doc.Print(); const XMLUnknown* decl = doc.FirstChild()->NextSibling()->ToUnknown(); @@ -979,6 +1140,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse( doctype ); + XMLTest( "Comment somewhat evil", false, doc.Error() ); XMLComment* comment = doc.FirstChild()->ToComment(); @@ -1010,6 +1172,12 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( str ); XMLTest( "Empty document error", XML_ERROR_EMPTY_DOCUMENT, doc.ErrorID() ); + + // But be sure there is an error string! + const char* errorStr = doc.ErrorStr(); + XMLTest("Error string should be set", + "Error=XML_ERROR_EMPTY_DOCUMENT ErrorID=15 (0xf) Line number=0", + errorStr); } { @@ -1024,6 +1192,7 @@ int main( int argc, const char ** argv ) // Low entities XMLDocument doc; doc.Parse( "" ); + XMLTest( "Hex values", false, doc.Error() ); const char result[] = { 0x0e, 0 }; XMLTest( "Low entities.", result, doc.FirstChildElement()->GetText() ); doc.Print(); @@ -1053,6 +1222,7 @@ int main( int argc, const char ** argv ) XMLDocument xml; xml.Parse("" "" ); + XMLTest( "Declarations for head and body", false, xml.Error() ); XMLNode* e0 = xml.FirstChild(); XMLNode* e1 = e0->NextSibling(); @@ -1070,6 +1240,7 @@ int main( int argc, const char ** argv ) "" "" "" ); + XMLTest( "Comments iteration", false, xml.Error() ); xml.Print(); int count = 0; @@ -1092,6 +1263,7 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse( (const char*)buf); + XMLTest( "Broken CDATA", true, doc.Error() ); } @@ -1107,6 +1279,7 @@ int main( int argc, const char ** argv ) // This one must not result in an infinite loop XMLDocument xml; xml.Parse( "loop" ); + XMLTest( "No closing element", true, xml.Error() ); XMLTest( "Infinite loop test.", true, true ); } #endif @@ -1114,6 +1287,7 @@ int main( int argc, const char ** argv ) const char* pub = " "; XMLDocument doc; doc.Parse( pub ); + XMLTest( "Trailing DOCTYPE", false, doc.Error() ); XMLDocument clone; for( const XMLNode* node=doc.FirstChild(); node; node=node->NextSibling() ) { @@ -1147,6 +1321,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse(xml); + XMLTest( "Parse before deep cloning root element", false, doc.Error() ); doc.Print(&printer1); XMLNode* root = doc.RootElement()->DeepClone(&doc2); @@ -1173,9 +1348,11 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse(xml); + XMLTest( "Parse before deep cloning sub element", false, doc.Error() ); const XMLElement* subElement = doc.FirstChildElement("root")->FirstChildElement("child2"); - subElement->Accept(&printer1); + bool acceptResult = subElement->Accept(&printer1); + XMLTest( "Accept before deep cloning", true, acceptResult ); XMLNode* clonedSubElement = subElement->DeepClone(&doc2); doc2.InsertFirstChild(clonedSubElement); @@ -1202,6 +1379,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse(xml); + XMLTest( "Parse before deep cloning document", false, doc.Error() ); doc.Print(&printer1); doc.DeepCopy(&doc2); @@ -1228,6 +1406,7 @@ int main( int argc, const char ** argv ) static const char* xml = ""; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse for attribute ordering", false, doc.Error() ); XMLElement* ele = doc.FirstChildElement(); const XMLAttribute* a = ele->FirstAttribute(); @@ -1246,7 +1425,7 @@ int main( int argc, const char ** argv ) ele->DeleteAttribute( "attrib1" ); ele->DeleteAttribute( "attrib3" ); - XMLTest( "Attribute order (empty)", false, ele->FirstAttribute() ? true : false ); + XMLTest( "Attribute order (empty)", true, ele->FirstAttribute() == 0 ); } { @@ -1256,10 +1435,13 @@ int main( int argc, const char ** argv ) static const char* xml2 = ""; XMLDocument doc0; doc0.Parse( xml0 ); + XMLTest( "Parse attribute with space 1", false, doc0.Error() ); XMLDocument doc1; doc1.Parse( xml1 ); + XMLTest( "Parse attribute with space 2", false, doc1.Error() ); XMLDocument doc2; doc2.Parse( xml2 ); + XMLTest( "Parse attribute with space 3", false, doc2.Error() ); XMLElement* ele = 0; ele = doc0.FirstChildElement(); @@ -1275,6 +1457,7 @@ int main( int argc, const char ** argv ) static const char* xml = ""; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse two elements with attribute", false, doc.Error() ); XMLElement* ele0 = doc.FirstChildElement()->FirstChildElement(); XMLElement* ele1 = ele0->NextSiblingElement(); bool equal = ele0->ShallowEqual( ele1 ); @@ -1287,26 +1470,31 @@ int main( int argc, const char ** argv ) static const char* xml = "Text"; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Handle, parse element with attribute and nested element", false, doc.Error() ); - XMLElement* ele = XMLHandle( doc ).FirstChildElement( "element" ).FirstChild().ToElement(); - XMLTest( "Handle, success, mutable", "sub", ele->Value() ); + { + XMLElement* ele = XMLHandle( doc ).FirstChildElement( "element" ).FirstChild().ToElement(); + XMLTest( "Handle, non-const, element is found", true, ele != 0 ); + XMLTest( "Handle, non-const, element name matches", "sub", ele->Value() ); + } - XMLHandle docH( doc ); - ele = docH.FirstChildElement( "none" ).FirstChildElement( "element" ).ToElement(); - XMLTest( "Handle, dne, mutable", false, ele != 0 ); - } + { + XMLHandle docH( doc ); + XMLElement* ele = docH.FirstChildElement( "noSuchElement" ).FirstChildElement( "element" ).ToElement(); + XMLTest( "Handle, non-const, element not found", true, ele == 0 ); + } - { - static const char* xml = "Text"; - XMLDocument doc; - doc.Parse( xml ); - XMLConstHandle docH( doc ); + { + const XMLElement* ele = XMLConstHandle( doc ).FirstChildElement( "element" ).FirstChild().ToElement(); + XMLTest( "Handle, const, element is found", true, ele != 0 ); + XMLTest( "Handle, const, element name matches", "sub", ele->Value() ); + } - const XMLElement* ele = docH.FirstChildElement( "element" ).FirstChild().ToElement(); - XMLTest( "Handle, success, const", ele->Value(), "sub" ); - - ele = docH.FirstChildElement( "none" ).FirstChildElement( "element" ).ToElement(); - XMLTest( "Handle, dne, const", false, ele != 0 ); + { + XMLConstHandle docH( doc ); + const XMLElement* ele = docH.FirstChildElement( "noSuchElement" ).FirstChildElement( "element" ).ToElement(); + XMLTest( "Handle, const, element not found", true, ele == 0 ); + } } { // Default Declaration & BOM @@ -1333,27 +1521,44 @@ int main( int argc, const char ** argv ) const char* xml = " 1.2 1 38 true "; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse points", false, doc.Error() ); const XMLElement* pointElement = doc.RootElement(); - int intValue = 0; - unsigned unsignedValue = 0; - float floatValue = 0; - double doubleValue = 0; - bool boolValue = false; + { + int intValue = 0; + XMLError queryResult = pointElement->FirstChildElement( "y" )->QueryIntText( &intValue ); + XMLTest( "QueryIntText result", XML_SUCCESS, queryResult, false ); + XMLTest( "QueryIntText", 1, intValue, false ); + } - pointElement->FirstChildElement( "y" )->QueryIntText( &intValue ); - pointElement->FirstChildElement( "y" )->QueryUnsignedText( &unsignedValue ); - pointElement->FirstChildElement( "x" )->QueryFloatText( &floatValue ); - pointElement->FirstChildElement( "x" )->QueryDoubleText( &doubleValue ); - pointElement->FirstChildElement( "valid" )->QueryBoolText( &boolValue ); + { + unsigned unsignedValue = 0; + XMLError queryResult = pointElement->FirstChildElement( "y" )->QueryUnsignedText( &unsignedValue ); + XMLTest( "QueryUnsignedText result", XML_SUCCESS, queryResult, false ); + XMLTest( "QueryUnsignedText", (unsigned)1, unsignedValue, false ); + } + { + float floatValue = 0; + XMLError queryResult = pointElement->FirstChildElement( "x" )->QueryFloatText( &floatValue ); + XMLTest( "QueryFloatText result", XML_SUCCESS, queryResult, false ); + XMLTest( "QueryFloatText", 1.2f, floatValue, false ); + } - XMLTest( "QueryIntText", 1, intValue, false ); - XMLTest( "QueryUnsignedText", (unsigned)1, unsignedValue, false ); - XMLTest( "QueryFloatText", 1.2f, floatValue, false ); - XMLTest( "QueryDoubleText", 1.2, doubleValue, false ); - XMLTest( "QueryBoolText", true, boolValue, false ); + { + double doubleValue = 0; + XMLError queryResult = pointElement->FirstChildElement( "x" )->QueryDoubleText( &doubleValue ); + XMLTest( "QueryDoubleText result", XML_SUCCESS, queryResult, false ); + XMLTest( "QueryDoubleText", 1.2, doubleValue, false ); + } + + { + bool boolValue = false; + XMLError queryResult = pointElement->FirstChildElement( "valid" )->QueryBoolText( &boolValue ); + XMLTest( "QueryBoolText result", XML_SUCCESS, queryResult, false ); + XMLTest( "QueryBoolText", true, boolValue, false ); + } } { @@ -1390,10 +1595,21 @@ int main( int argc, const char ** argv ) doc.Clear(); XMLTest( "Empty is empty after Clear()", true, doc.NoChildren() ); doc.LoadFile( "resources/dream.xml" ); + XMLTest( "Load dream.xml", false, doc.Error() ); XMLTest( "Document has something to Clear()", false, doc.NoChildren() ); doc.Clear(); XMLTest( "Document Clear()'s", true, doc.NoChildren() ); } + + { + XMLDocument doc; + XMLTest( "No error initially", false, doc.Error() ); + XMLError error = doc.Parse( "This is not XML" ); + XMLTest( "Error after invalid XML", true, doc.Error() ); + XMLTest( "Error after invalid XML", error, doc.ErrorID() ); + doc.Clear(); + XMLTest( "No error after Clear()", false, doc.Error() ); + } // ----------- Whitespace ------------ { @@ -1404,6 +1620,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc( true, COLLAPSE_WHITESPACE ); doc.Parse( xml ); + XMLTest( "Parse with whitespace collapsing and &apos", false, doc.Error() ); const XMLElement* element = doc.FirstChildElement(); for( const XMLElement* parent = element->FirstChildElement(); @@ -1431,6 +1648,7 @@ int main( int argc, const char ** argv ) const char* xml = " "; XMLDocument doc( true, COLLAPSE_WHITESPACE ); doc.Parse( xml ); + XMLTest( "Parse with all whitespaces", false, doc.Error() ); XMLTest( "Whitespace all space", true, 0 == doc.FirstChildElement()->FirstChild() ); } @@ -1439,6 +1657,7 @@ int main( int argc, const char ** argv ) const char* xml = ""; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse with self-closed element", false, doc.Error() ); XMLElement* ele = doc.NewElement( "unused" ); // This will get cleaned up with the 'doc' going out of scope. XMLTest( "Tracking unused elements", true, ele != 0, false ); } @@ -1448,10 +1667,12 @@ int main( int argc, const char ** argv ) const char* xml = "abc"; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse for printing of sub-element", false, doc.Error() ); XMLElement* ele = doc.FirstChildElement( "parent")->FirstChildElement( "child"); XMLPrinter printer; - ele->Accept( &printer ); + bool acceptResult = ele->Accept( &printer ); + XMLTest( "Accept of sub-element", true, acceptResult ); XMLTest( "Printing of sub-element", "abc\n", printer.CStr(), false ); } @@ -1475,10 +1696,12 @@ int main( int argc, const char ** argv ) XMLTest( "BOM preservation (compare)", xml_bom_preservation, printer.CStr(), false, true ); doc.SaveFile( "resources/bomtest.xml" ); + XMLTest( "Save bomtest.xml", false, doc.Error() ); } { XMLDocument doc; doc.LoadFile( "resources/bomtest.xml" ); + XMLTest( "Load bomtest.xml", false, doc.Error() ); XMLTest( "BOM preservation (load)", true, doc.HasBOM(), false ); XMLPrinter printer; @@ -1526,35 +1749,43 @@ int main( int argc, const char ** argv ) XMLDocument doc; doc.Parse(xml); + XMLTest( "Insertion with removal parse round 1", false, doc.Error() ); XMLElement* subtree = doc.RootElement()->FirstChildElement("one")->FirstChildElement("subtree"); XMLElement* two = doc.RootElement()->FirstChildElement("two"); two->InsertFirstChild(subtree); XMLPrinter printer1(0, true); - doc.Accept(&printer1); + bool acceptResult = doc.Accept(&printer1); + XMLTest("Move node from within to - Accept()", true, acceptResult); XMLTest("Move node from within to ", xmlInsideTwo, printer1.CStr()); doc.Parse(xml); + XMLTest( "Insertion with removal parse round 2", false, doc.Error() ); subtree = doc.RootElement()->FirstChildElement("one")->FirstChildElement("subtree"); two = doc.RootElement()->FirstChildElement("two"); doc.RootElement()->InsertAfterChild(two, subtree); XMLPrinter printer2(0, true); - doc.Accept(&printer2); + acceptResult = doc.Accept(&printer2); + XMLTest("Move node from within after - Accept()", true, acceptResult); XMLTest("Move node from within after ", xmlAfterTwo, printer2.CStr(), false); doc.Parse(xml); + XMLTest( "Insertion with removal parse round 3", false, doc.Error() ); XMLNode* one = doc.RootElement()->FirstChildElement("one"); subtree = one->FirstChildElement("subtree"); doc.RootElement()->InsertAfterChild(one, subtree); XMLPrinter printer3(0, true); - doc.Accept(&printer3); + acceptResult = doc.Accept(&printer3); + XMLTest("Move node from within after - Accept()", true, acceptResult); XMLTest("Move node from within after ", xmlAfterOne, printer3.CStr(), false); doc.Parse(xml); + XMLTest( "Insertion with removal parse round 4", false, doc.Error() ); subtree = doc.RootElement()->FirstChildElement("one")->FirstChildElement("subtree"); two = doc.RootElement()->FirstChildElement("two"); doc.RootElement()->InsertEndChild(subtree); XMLPrinter printer4(0, true); - doc.Accept(&printer4); + acceptResult = doc.Accept(&printer4); + XMLTest("Move node from within after - Accept()", true, acceptResult); XMLTest("Move node from within after ", xmlAfterTwo, printer4.CStr(), false); } @@ -1564,6 +1795,7 @@ int main( int argc, const char ** argv ) ""; XMLDocument doc; doc.Parse(xml); + XMLTest( "Parse svg with text", false, doc.Error() ); doc.Print(); } @@ -1572,6 +1804,7 @@ int main( int argc, const char ** argv ) const char* xml = "<12"; XMLDocument doc; doc.Parse(xml); + XMLTest( "Parse root-sample-field0", true, doc.Error() ); doc.PrintError(); } @@ -1583,6 +1816,7 @@ int main( int argc, const char ** argv ) const char* xml = ""; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse self-closed empty element", false, doc.Error() ); doc.FirstChildElement()->SetAttribute( "attrA-f64", 123456789.123456789 ); doc.FirstChildElement()->SetAttribute( "attrB-f64", 1.001e9 ); doc.FirstChildElement()->SetAttribute( "attrC-f64", 1.0e9 ); @@ -1615,26 +1849,47 @@ int main( int argc, const char ** argv ) // If it doesn't assert, it passes. Caused by objects // getting created during parsing which are then // inaccessible in the memory pools. + const char* xmlText = ""; { XMLDocument doc; - doc.Parse(""); + doc.Parse(xmlText); + XMLTest( "Parse hex no closing tag round 1", true, doc.Error() ); } { XMLDocument doc; - doc.Parse(""); + doc.Parse(xmlText); + XMLTest( "Parse hex no closing tag round 2", true, doc.Error() ); doc.Clear(); } } { - // If this doesn't assert in DEBUG, all is well. + // If this doesn't assert in TINYXML2_DEBUG, all is well. tinyxml2::XMLDocument doc; tinyxml2::XMLElement *pRoot = doc.NewElement("Root"); doc.DeleteNode(pRoot); } + { + XMLDocument doc; + XMLElement* root = doc.NewElement( "Root" ); + XMLTest( "Node document before insertion", true, &doc == root->GetDocument() ); + doc.InsertEndChild( root ); + XMLTest( "Node document after insertion", true, &doc == root->GetDocument() ); + } + + { + // If this doesn't assert in TINYXML2_DEBUG, all is well. + XMLDocument doc; + XMLElement* unlinkedRoot = doc.NewElement( "Root" ); + XMLElement* linkedRoot = doc.NewElement( "Root" ); + doc.InsertFirstChild( linkedRoot ); + unlinkedRoot->GetDocument()->DeleteNode( linkedRoot ); + unlinkedRoot->GetDocument()->DeleteNode( unlinkedRoot ); + } + { - // Should not assert in DEBUG + // Should not assert in TINYXML2_DEBUG XMLPrinter printer; } @@ -1643,6 +1898,7 @@ int main( int argc, const char ** argv ) const char* xml = "�"; XMLDocument doc; doc.Parse( xml ); + XMLTest( "Parse hex with closing tag", false, doc.Error() ); XMLPrinter printer; doc.Print( &printer ); @@ -1653,7 +1909,8 @@ int main( int argc, const char ** argv ) XMLDocument doc; XMLElement* newElement = doc.NewElement( "printme" ); XMLPrinter printer; - newElement->Accept( &printer ); + bool acceptResult = newElement->Accept( &printer ); + XMLTest( "printme - Accept()", true, acceptResult ); // Delete the node to avoid possible memory leak report in debug output doc.DeleteNode( newElement ); } @@ -1700,7 +1957,7 @@ int main( int argc, const char ** argv ) doc.Parse(xml1); XMLTest("Test that the second declaration is allowed", false, doc.Error() ); doc.Parse(xml2); - XMLTest("Test that declaration after a child is not allowed", XML_ERROR_PARSING_DECLARATION, doc.ErrorID() ); + XMLTest("Test that declaration after self-closed child is not allowed", XML_ERROR_PARSING_DECLARATION, doc.ErrorID() ); doc.Parse(xml3); XMLTest("Test that declaration after a child is not allowed", XML_ERROR_PARSING_DECLARATION, doc.ErrorID() ); doc.Parse(xml4); @@ -1709,13 +1966,15 @@ int main( int argc, const char ** argv ) { // No matter - before or after successfully parsing a text - - // calling XMLDocument::Value() causes an assert in debug. + // calling XMLDocument::Value() used to cause an assert in debug. + // Null must be retured. const char* validXml = "" "" ""; XMLDocument* doc = new XMLDocument(); XMLTest( "XMLDocument::Value() returns null?", NULL, doc->Value() ); doc->Parse( validXml ); + XMLTest( "Parse to test XMLDocument::Value()", false, doc->Error()); XMLTest( "XMLDocument::Value() returns null?", NULL, doc->Value() ); delete doc; } @@ -1723,8 +1982,16 @@ int main( int argc, const char ** argv ) { XMLDocument doc; for( int i = 0; i < XML_ERROR_COUNT; i++ ) { - doc.SetError( (XMLError)i, 0, 0, 0 ); - doc.ErrorName(); + const XMLError error = static_cast(i); + const char* name = XMLDocument::ErrorIDToName(error); + XMLTest( "ErrorName() not null after ClearError()", true, name != 0 ); + if( name == 0 ) { + // passing null pointer into strlen() is undefined behavior, so + // compiler is allowed to optimise away the null test above if it's + // as reachable as the strlen() call + continue; + } + XMLTest( "ErrorName() not empty after ClearError()", true, strlen(name) > 0 ); } } @@ -1735,17 +2002,18 @@ int main( int argc, const char ** argv ) // // Previously (buggy): // The memory would be free'd when the XMLDocument is - // destructed. But the destructor wasn't called, so that - // memory allocated by the XMLElement would not be free'd. - // In practice this meant strings allocated by the XMLElement - // would leak. An edge case, but annoying. + // destructed. But the XMLElement destructor wasn't called, so + // memory allocated for the XMLElement text would not be free'd. + // In practice this meant strings allocated for the XMLElement + // text would be leaked. An edge case, but annoying. // Now: - // The destructor is called. But the list of unlinked nodes - // has to be tracked. This has a minor performance impact - // that can become significant if you have a lot. (But why - // would you do that?) - // The only way to see this bug is in a leak tracker. This - // is compiled in by default on Windows Debug. + // The XMLElement destructor is called. But the unlinked nodes + // have to be tracked using a list. This has a minor performance + // impact that can become significant if you have a lot of + // unlinked nodes. (But why would you do that?) + // The only way to see this bug was in a Visual C++ runtime debug heap + // leak tracker. This is compiled in by default on Windows Debug and + // enabled with _CRTDBG_LEAK_CHECK_DF parameter passed to _CrtSetDbgFlag(). { XMLDocument doc; doc.NewElement("LEAK 1"); @@ -1757,6 +2025,20 @@ int main( int argc, const char ** argv ) } } + { + // Bad bad crash. Parsing error results in stack overflow, if uncaught. + const char* TESTS[] = { + "./resources/xmltest-5330.xml", + "./resources/xmltest-4636783552757760.xml", + "./resources/xmltest-5720541257269248.xml", + 0 + }; + for (int i=0; TESTS[i]; ++i) { + XMLDocument doc; + doc.LoadFile(TESTS[i]); + XMLTest("Stack overflow prevented.", XML_ELEMENT_DEPTH_EXCEEDED, doc.ErrorID()); + } + } { // Crashing reported via email. const char* xml = @@ -1782,22 +2064,33 @@ int main( int argc, const char ** argv ) XMLElement* playlist = doc.FirstChildElement("playlist"); XMLTest("Crash bug parsing", true, playlist != 0); - tinyxml2::XMLElement* entry = playlist->FirstChildElement("entry"); - XMLTest("Crash bug parsing", true, entry != 0); - while (entry) { - tinyxml2::XMLElement* todelete = entry; - entry = entry->NextSiblingElement("entry"); - playlist->DeleteChild(todelete); - }; - tinyxml2::XMLElement* blank = playlist->FirstChildElement("blank"); - while (blank) { - tinyxml2::XMLElement* todelete = blank; - blank = blank->NextSiblingElement("blank"); - playlist->DeleteChild(todelete); - }; + { + const char* elementName = "entry"; + XMLElement* entry = playlist->FirstChildElement(elementName); + XMLTest("Crash bug parsing", true, entry != 0); + while (entry) { + XMLElement* todelete = entry; + entry = entry->NextSiblingElement(elementName); + playlist->DeleteChild(todelete); + } + entry = playlist->FirstChildElement(elementName); + XMLTest("Crash bug parsing", true, entry == 0); + } + { + const char* elementName = "blank"; + XMLElement* blank = playlist->FirstChildElement(elementName); + XMLTest("Crash bug parsing", true, blank != 0); + while (blank) { + XMLElement* todelete = blank; + blank = blank->NextSiblingElement(elementName); + playlist->DeleteChild(todelete); + } + XMLTest("Crash bug parsing", true, blank == 0); + } tinyxml2::XMLPrinter printer; - playlist->Accept(&printer); + const bool acceptResult = playlist->Accept(&printer); + XMLTest("Crash bug parsing - Accept()", true, acceptResult); printf("%s\n", printer.CStr()); // No test; it only need to not crash. @@ -1813,14 +2106,17 @@ int main( int argc, const char ** argv ) { struct TestUtil: XMLVisitor { + TestUtil() : str() {} + void TestParseError(const char *testString, const char *docStr, XMLError expected_error, int expectedLine) { XMLDocument doc; - XMLError err = doc.Parse(docStr); + const XMLError parseError = doc.Parse(docStr); + XMLTest(testString, parseError, doc.ErrorID()); XMLTest(testString, true, doc.Error()); - XMLTest(testString, expected_error, err); - XMLTest(testString, expectedLine, doc.GetErrorLineNum()); + XMLTest(testString, expected_error, parseError); + XMLTest(testString, expectedLine, doc.ErrorLineNum()); }; void TestStringLines(const char *testString, const char *docStr, const char *expectedLines) @@ -1885,7 +2181,8 @@ int main( int argc, const char ** argv ) void TestDocLines(const char *testString, XMLDocument &doc, const char *expectedLines) { str.Clear(); - doc.Accept(this); + const bool acceptResult = doc.Accept(this); + XMLTest(testString, true, acceptResult); str.Push(0); XMLTest(testString, expectedLines, str.Mem()); } @@ -1938,6 +2235,18 @@ int main( int argc, const char ** argv ) "D01L01E02E03A03A03T03E04A04A04T04E05A05A05T05E06A06A06T06E07A07A07T07E08A08A08T08E09T09E10T10"); } + { + const char* xml = "Text"; + XMLDocument doc; + doc.Parse(xml); + XMLTest("Test mismatched elements.", true, doc.Error()); + XMLTest("Test mismatched elements.", XML_ERROR_MISMATCHED_ELEMENT, doc.ErrorID()); + // For now just make sure calls work & doesn't crash. + // May solidify the error output in the future. + printf("%s\n", doc.ErrorStr()); + doc.PrintError(); + } + // ----------- Performance tracking -------------- { #if defined( _MSC_VER ) @@ -1946,12 +2255,15 @@ int main( int argc, const char ** argv ) #endif FILE* perfFP = fopen("resources/dream.xml", "r"); + XMLTest("Open dream.xml", true, perfFP != 0); fseek(perfFP, 0, SEEK_END); long size = ftell(perfFP); fseek(perfFP, 0, SEEK_SET); char* mem = new char[size + 1]; - fread(mem, size, 1, perfFP); + memset(mem, 0xfe, size); + size_t bytesRead = fread(mem, 1, size, perfFP); + XMLTest("Read dream.xml", true, uint32_t(size) >= uint32_t(bytesRead)); fclose(perfFP); mem[size] = 0; @@ -1960,34 +2272,39 @@ int main( int argc, const char ** argv ) #else clock_t cstart = clock(); #endif + bool parseDreamXmlFailed = false; static const int COUNT = 10; for (int i = 0; i < COUNT; ++i) { XMLDocument doc; doc.Parse(mem); + parseDreamXmlFailed = parseDreamXmlFailed || doc.Error(); } #if defined( _MSC_VER ) QueryPerformanceCounter((LARGE_INTEGER*)&end); #else clock_t cend = clock(); #endif + XMLTest( "Parse dream.xml", false, parseDreamXmlFailed ); delete[] mem; static const char* note = -#ifdef DEBUG +#ifdef TINYXML2_DEBUG "DEBUG"; #else "Release"; #endif #if defined( _MSC_VER ) - printf("\nParsing %s of dream.xml: %.3f milli-seconds\n", note, 1000.0 * (double)(end - start) / ((double)freq * (double)COUNT)); + const double duration = 1000.0 * (double)(end - start) / ((double)freq * (double)COUNT); #else - printf("\nParsing %s of dream.xml: %.3f milli-seconds\n", note, (double)(cend - cstart) / (double)COUNT); + const double duration = (double)(cend - cstart) / (double)COUNT; #endif + printf("\nParsing dream.xml (%s): %.3f milli-seconds\n", note, duration); } - #if defined( _MSC_VER ) && defined( DEBUG ) +#if defined( _MSC_VER ) && defined( TINYXML2_DEBUG ) + { _CrtMemCheckpoint( &endMemState ); _CrtMemState diffMemState; @@ -1998,7 +2315,8 @@ int main( int argc, const char ** argv ) int leaksBeforeExit = _CrtDumpMemoryLeaks(); XMLTest( "No leaks before exit?", FALSE, leaksBeforeExit ); } - #endif + } +#endif printf ("\nPass %d, Fail %d\n", gPass, gFail);